From: Niels Provos Date: Fri, 10 Nov 2006 02:16:16 +0000 (+0000) Subject: fix a potential problem in multiple handling of va_list; use va_copy instead; X-Git-Tag: release-2.0.1-alpha~707 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=79d2ca8cac2ebb3f8be06d93376b036d5e73ef50;p=libevent fix a potential problem in multiple handling of va_list; use va_copy instead; from Alejo. svn:r251 --- diff --git a/buffer.c b/buffer.c index e09cc3d3..992a2218 100644 --- a/buffer.c +++ b/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) {