[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#272136: More progress about the "Arabic crash" in Debian Installer



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 to: