]> granicus.if.org Git - mutt/commitdiff
Somewhat different sigsegv fix suggested by EGE.
authorThomas Roessler <roessler@does-not-exist.org>
Thu, 25 May 2000 10:46:00 +0000 (10:46 +0000)
committerThomas Roessler <roessler@does-not-exist.org>
Thu, 25 May 2000 10:46:00 +0000 (10:46 +0000)
curs_lib.c
mbyte.c

index ac7dbc6a5d7eba26039a32da87fa42da8f09d7ca..dcf1f06d83bacc519b07ad9fa21880b0d2fc5043 100644 (file)
@@ -492,6 +492,7 @@ void mutt_format_string (char *dest, size_t destlen,
   char *p;
   wchar_t wc;
   int w, k;
+  char scratch[MB_LEN_MAX];
 
   --destlen;
   p = dest;
@@ -506,11 +507,12 @@ void mutt_format_string (char *dest, size_t destlen,
     w = wc < M_TREE_MAX ? 1 : wcwidth (wc); /* hack */
     if (w >= 0)
     {
-      if (w > max_width || wctomb (0, wc) > destlen)
+      if (w > max_width || (k = wctomb (scratch, wc)) > destlen)
        break;
       min_width -= w;
       max_width -= w;
-      p += (k = wctomb (p, wc));
+      strncpy (p, scratch, k);
+      p += k;            
       destlen -= k;
     }
   }
diff --git a/mbyte.c b/mbyte.c
index d2eff2012c98121c6e087d94c410a7412b2de286..ee6eab56dd55b13e079feab74480acff964111b3 100644 (file)
--- a/mbyte.c
+++ b/mbyte.c
@@ -22,11 +22,13 @@ void mutt_set_charset (char *charset)
 
 int wctomb (char *s, wchar_t wc)
 {
+  if (!s)
+    return 0;
   if (Charset_is_utf8)
     return mutt_wctoutf8 (s, wc);
   else if (wc < 0x100)
   {
-    if (s) *s = wc;
+    *s = wc;
     return 1;
   }
   else