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