X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/253f3a96f00470bfc69ec3c5978bd152b708c255..4e23ddd4d595d50de4b7fa0ab6bf3533bcf42723:/sbr/fmt_scan.c diff --git a/sbr/fmt_scan.c b/sbr/fmt_scan.c index ab5940ab..fe2a0044 100644 --- a/sbr/fmt_scan.c +++ b/sbr/fmt_scan.c @@ -467,29 +467,31 @@ fmt_scan (struct format *format, char *scanl, size_t max, int width, int *dat, scanl + max - 1); break; case FT_STRLIT: - sp = str; - while ((c = *sp++) && cp < ep) - *cp++ = c; + if (str) { + sp = str; + while ((c = *sp++) && cp < ep) + *cp++ = c; + } break; - case FT_STRLITZ: { - size_t len = strlen (str); - - /* Don't want to emit part of an escape sequence. So if - there isn't enough room in the buffer for the entire - string, skip it completely. */ - if (cp - scanl + len + 1 < max) { - for (sp = str; *sp; *cp++ = *sp++) continue; - - /* This string doesn't count against the width. So - increase ep the same amount as cp, only if the - scan buffer will always be large enough. */ - if (ep - scanl + len + 1 < max) { - ep += len; + case FT_STRLITZ: + if (str) { + size_t len = strlen (str); + + /* Don't want to emit part of an escape sequence. So if + there isn't enough room in the buffer for the entire + string, skip it completely. */ + if (cp - scanl + len + 1 < max) { + for (sp = str; *sp; *cp++ = *sp++) continue; + + /* This string doesn't count against the width. + So increase ep the same amount as cp, only if the + scan buffer will always be large enough. */ + if (ep - scanl + len + 1 < max) { + ep += len; + } } } - break; - } case FT_STRFW: adios (NULL, "internal error (FT_STRFW)"); @@ -1077,7 +1079,7 @@ fmt_scan (struct format *format, char *scanl, size_t max, int width, int *dat, 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)