On Sun, Apr 03, 2011 at 11:21:35PM +0100, Nicholas Marriott wrote: > > - if (x + len - 1 <= win->_maxx) { > > + if (len >= 0 && x + len - 1 <= win->_maxx) { > > Not sure this is required, astr is a cchar_t * which will come from > setcchar. Right. That already makes sure the string cannot contain non-printable characters.
> > @@ -91,9 +92,12 @@ slk_set(int i, const char *astr, int for > > mbrtowc(&wc, p, need, &state); > > if (!iswprint((wint_t) wc)) > > break; > > - if (wcwidth(wc) + numcols > limit) > > + w = wcwidth(wc); > > + if (w >= 0) { > > + if (w + numcols > limit) > > break; > > - numcols += wcwidth(wc); > > + numcols += w; > > + } > > Doesn't iswprint() make this unnecessary? Doh! :) > > for (i = 1; i < len; ++i) { > > - if (wcwidth(wch[i]) != 0) { > > + if (wcwidth(wch[i]) >= 1) { > > This seems sane although the comment at the top of the function says "we > assume" this cannot happen. Then let's shelve this diff until we find a serious problem. Thanks for the review!