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