diff --git a/ChangeLog b/ChangeLog
index 0ad374e40458dfe826c131a11e67de300f393b6b..09e4faae357d7c8562582a5fa0e4804bcea66764 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -75,6 +75,11 @@ CVS code -
   regexec_safe()
 	- Rename to safe_regexec() for consistency. (DLR)
 - winio.c:
+  statusq()
+	- Make sure that the vsnprintf(foo) call and foo's subsequent
+	  null termination both take the proper number of bytes when
+	  using multibyte characters, so that multibyte prompt strings
+	  aren't prematurely cut off. (DLR)
   titlebar()
 	- Make sure that the (mv)?waddnstr() calls take the proper
 	  number of bytes when using multibyte characters, so that
diff --git a/src/winio.c b/src/winio.c
index 11cc87d1a3580ad2557d7952cc80595f7717573c..30e02b4b7a885132ef5fc25fc39496c476e2ec8c 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -2652,7 +2652,7 @@ int statusq(bool allow_tabs, const shortcut *s, const char *def,
 		const char *msg, ...)
 {
     va_list ap;
-    char *foo = charalloc(COLS - 3);
+    char *foo = charalloc(((COLS - 4) * mb_cur_max()) + 1);
     int ret;
 #ifndef DISABLE_TABCOMP
     bool list = FALSE;
@@ -2661,9 +2661,9 @@ int statusq(bool allow_tabs, const shortcut *s, const char *def,
     bottombars(s);
 
     va_start(ap, msg);
-    vsnprintf(foo, COLS - 4, msg, ap);
+    vsnprintf(foo, (COLS - 4) * mb_cur_max(), msg, ap);
     va_end(ap);
-    foo[COLS - 4] = '\0';
+    null_at(&foo, actual_x(foo, COLS - 4));
 
     ret = nanogetstr(allow_tabs, foo, def,
 #ifndef NANO_SMALL