]> granicus.if.org Git - libevent/commitdiff
fix a potential problem in multiple handling of va_list; use va_copy instead;
authorNiels Provos <provos@gmail.com>
Fri, 10 Nov 2006 02:16:16 +0000 (02:16 +0000)
committerNiels Provos <provos@gmail.com>
Fri, 10 Nov 2006 02:16:16 +0000 (02:16 +0000)
from Alejo.

svn:r251

buffer.c

index e09cc3d3fd3b46eaee7e3b91ebdee450a1b6516c..992a2218dd787e3344e00e8710cbdf19210616e5 100644 (file)
--- 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) {