fix a potential problem in multiple handling of va_list; use va_copy instead;

from Alejo.


svn:r251
This commit is contained in:
Niels Provos 2006-11-10 02:16:16 +00:00
parent 025b009bb6
commit 79d2ca8cac

View File

@ -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) {