* widths, so use the column width to bump the end pointer when
* appropriate.
*/
- if (char_len > 1 && epmax - *ep >= char_len - w) {
+ if (w >= 0 && char_len > 1 && epmax - *ep >= char_len - w) {
*ep += char_len - w;
}
- if (cp + w > *ep)
+ if (w >= 0 && cp + w > *ep)
break;
end -= char_len;
* by the number of "extra" bytes in this character. That's the
* character length (char_len) minus the column width (w).
*/
- if (char_len > 1 && max - *end >= char_len - w) {
+ if (w >= 0 && char_len > 1 && max - *end >= char_len - w) {
*end += char_len - w;
}
there isn't enough room in the buffer for the entire
string, skip it completely. Need room for null
terminator, and maybe trailing newline (added below). */
- if (cp - scanl + strlen (str) + 1 < max) {
+ if (str && (cp - scanl + strlen (str) + 1 < max)) {
for (sp = str; *sp; *cp++ = *sp++) continue;
}
if (callbacks && callbacks->trace_func)