mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-10 13:04:23 -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 space;
|
||||||
size_t oldoff = buf->off;
|
size_t oldoff = buf->off;
|
||||||
int sz;
|
int sz;
|
||||||
|
va_list aq;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
buffer = buf->buffer + buf->off;
|
buffer = (char *)buf->buffer + buf->off;
|
||||||
space = buf->totallen - buf->misalign - buf->off;
|
space = buf->totallen - buf->misalign - buf->off;
|
||||||
|
|
||||||
|
va_copy(aq, ap);
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
sz = vsnprintf(buffer, space - 1, fmt, ap);
|
sz = vsnprintf(buffer, space - 1, fmt, aq);
|
||||||
buffer[space - 1] = '\0';
|
buffer[space - 1] = '\0';
|
||||||
#else
|
#else
|
||||||
sz = vsnprintf(buffer, space, fmt, ap);
|
sz = vsnprintf(buffer, space, fmt, aq);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
va_end(aq);
|
||||||
|
|
||||||
if (sz == -1)
|
if (sz == -1)
|
||||||
return (-1);
|
return (-1);
|
||||||
if (sz < space) {
|
if (sz < space) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user