X-Git-Url: https://git.ozlabs.org/?p=ppp.git;a=blobdiff_plain;f=pppd%2Futils.c;fp=pppd%2Futils.c;h=3602aa61674ab23c538d6e3cebdea511cde42a6e;hp=2cc0e9110f9383105e9b9c85333a269c1cb20d44;hb=5d034034a61c37dc5d590753cb7a601d2ee2b871;hpb=a1e950a04bcd9b19be22c19aa3bdaa66d9538701 diff --git a/pppd/utils.c b/pppd/utils.c index 2cc0e91..3602aa6 100644 --- a/pppd/utils.c +++ b/pppd/utils.c @@ -166,6 +166,7 @@ vslprintf(buf, buflen, fmt, args) u_int32_t ip; static char hexchars[] = "0123456789abcdef"; struct buffer_info bufinfo; + int termch; buf0 = buf; --buflen; @@ -299,14 +300,17 @@ vslprintf(buf, buflen, fmt, args) p = (unsigned char *)""; if (fillch == '0' && prec >= 0) { n = prec; + termch = -1; /* matches no unsigned char value */ } else { - if (prec == -1) - n = strlen((char *)p); - else - n = strnlen((char *)p, prec); + n = buflen; + if (prec != -1 && n > prec) + n = prec; + termch = 0; /* stop on null byte */ } while (n > 0 && buflen > 0) { c = *p++; + if (c == termch) + break; --n; if (!quoted && c >= 0x80) { OUTCHAR('M'); @@ -386,10 +390,9 @@ vslprintf(buf, buflen, fmt, args) } len = num + sizeof(num) - 1 - str; } else { - if (prec == -1) - len = strlen(str); - else - len = strnlen(str, prec); + for (len = 0; len < buflen && (prec == -1 || len < prec); ++len) + if (str[len] == 0) + break; } if (width > 0) { if (width > buflen)