mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-09 12:28:19 -04:00
fix a potential problem in multiple handling of va_list; use va_copy instead;
from Alejo. svn:r251
This commit is contained in:
parent
025b009bb6
commit
79d2ca8cac
12
buffer.c
12
buffer.c
@ -132,17 +132,23 @@ evbuffer_add_vprintf(struct evbuffer *buf, const char *fmt, va_list ap)
|
||||
size_t space;
|
||||
size_t oldoff = buf->off;
|
||||
int sz;
|
||||
va_list aq;
|
||||
|
||||
for (;;) {
|
||||
buffer = buf->buffer + buf->off;
|
||||
buffer = (char *)buf->buffer + buf->off;
|
||||
space = buf->totallen - buf->misalign - buf->off;
|
||||
|
||||
va_copy(aq, ap);
|
||||
|
||||
#ifdef WIN32
|
||||
sz = vsnprintf(buffer, space - 1, fmt, ap);
|
||||
sz = vsnprintf(buffer, space - 1, fmt, aq);
|
||||
buffer[space - 1] = '\0';
|
||||
#else
|
||||
sz = vsnprintf(buffer, space, fmt, ap);
|
||||
sz = vsnprintf(buffer, space, fmt, aq);
|
||||
#endif
|
||||
|
||||
va_end(aq);
|
||||
|
||||
if (sz == -1)
|
||||
return (-1);
|
||||
if (sz < space) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user