Please try the attached patch to slang.

Thanks,
-- 
Steve Langasek
postmodern programmer
diff -uNr slang-1.4.9/src/slsmg.c ../build-tree.new/slang-1.4.9-utf8/src/slsmg.c
--- slang-1.4.9/src/slsmg.c     2004-09-20 00:45:46.000000000 -0700
+++ ../build-tree.new/slang-1.4.9-utf8/src/slsmg.c      2004-09-20 00:41:14.000000000 
-0700
@@ -304,12 +304,13 @@
    char blank = ' ';
    mbstate_t mbstate;
    wchar_t *wptr;
+   int cellsleft = n;
 
    /* Avoid a problem if a user accidently passes a negative value */
    if ((int) n < 0)
      return;
 
-   wptr = (wchar_t *)malloc(sizeof(wchar_t)*(n+1));
+   wptr = (wchar_t *)malloc(sizeof(wchar_t)*n);
 
    if (str != NULL && wptr != NULL)
    {
@@ -323,15 +324,18 @@
               k != (size_t)(-2))
        {
             w = wcwidth(wptr[i]);
-            if (w < 0 || w > n)
+            if (w < 0 || w > cellsleft)
               break;
             str += k;
-            n -= w;
+            cellsleft -= w;
             i++;
+            if (i >= n) {
+              wptr = realloc(wptr,sizeof(wchar_t)*(i+1));
+            }
        }
        SLsmg_write_nwchars (wptr, i);
    }
-   while (n-- > 0) SLsmg_write_nchars (&blank, 1);
+   while (cellsleft-- > 0) SLsmg_write_nchars (&blank, 1);
    if (wptr) free(wptr);
 }
 #else

Attachment: signature.asc
Description: Digital signature



Reply via email to