mirror of
https://github.com/haproxy/haproxy.git
synced 2026-03-27 04:43:37 -04:00
BUG/MINOR: chunk: fix chunk_appendf() to not write a zero if buffer is full
If the buffer is completely full, the function chunk_appendf() would write a zero past it, which can result in unexpected behavior. Now we make a check before calling vsnprintf() and return the current chunk size if no room is available. This should be backported as far as 2.0.
This commit is contained in:
parent
c156c5bda6
commit
f7596209ee
1 changed files with 7 additions and 3 deletions
10
src/chunk.c
10
src/chunk.c
|
|
@ -130,15 +130,19 @@ int chunk_printf(struct buffer *chk, const char *fmt, ...)
|
|||
int chunk_appendf(struct buffer *chk, const char *fmt, ...)
|
||||
{
|
||||
va_list argp;
|
||||
size_t room;
|
||||
int ret;
|
||||
|
||||
if (!chk->area || !chk->size)
|
||||
return 0;
|
||||
|
||||
room = chk->size - chk->data;
|
||||
if (!room)
|
||||
return chk->data;
|
||||
|
||||
va_start(argp, fmt);
|
||||
ret = vsnprintf(chk->area + chk->data, chk->size - chk->data, fmt,
|
||||
argp);
|
||||
if (ret >= chk->size - chk->data)
|
||||
ret = vsnprintf(chk->area + chk->data, room, fmt, argp);
|
||||
if (ret >= room)
|
||||
/* do not copy anything in case of truncation */
|
||||
chk->area[chk->data] = 0;
|
||||
else
|
||||
|
|
|
|||
Loading…
Reference in a new issue