[MEDIUM] ensure we never overflow in chunk_printf()

The result of the vsnprintf() called in chunk_printf() must be checked,
and should be added only if lower than the requested size. We simply
return zero if we cannot write the chunk.
This commit is contained in:
Willy Tarreau 2007-07-25 14:38:45 +02:00
parent ca769dc631
commit dceaa0894b

View File

@ -193,9 +193,15 @@ int buffer_insert_line2(struct buffer *b, char *pos, const char *str, int len)
int chunk_printf(struct chunk *chk, int size, const char *fmt, ...)
{
va_list argp;
int ret;
va_start(argp, fmt);
chk->len += vsnprintf(chk->str + chk->len, size - chk->len, fmt, argp);
ret = vsnprintf(chk->str + chk->len, size - chk->len, fmt, argp);
if (ret >= size - chk->len)
/* do not copy anything in case of truncation */
chk->str[chk->len] = 0;
else
chk->len += ret;
va_end(argp);
return chk->len;
}