Could you please check this?

diff --git a/atom.c b/atom.c
index bfb3370..f26ee3f 100644
--- a/atom.c
+++ b/atom.c
@@ -244,9 +244,12 @@ internAtomErrorV(int e, const char *f, va_list args)
     AtomPtr atom;
     char *s1, *s2;
     int n, rc;
+    va_list args_copy;
 
     if(f) {
-        s1 = vsprintf_a(f, args);
+        va_copy(args_copy, args);
+        s1 = vsprintf_a(f, args_copy);
+        va_end(args_copy);
         if(s1 == NULL)
             return NULL;
         n = strlen(s1);
diff --git a/log.c b/log.c
index dbce349..1cf2eca 100644
--- a/log.c
+++ b/log.c
@@ -402,17 +402,21 @@ really_do_log(int type, const char *f, ...)
 void
 really_do_log_v(int type, const char *f, va_list args)
 {
+    va_list args_copy;
+
     if(type & LOGGING_MAX & logLevel) {
         if(logF)
         {
-            va_list args_copy;
             va_copy(args_copy, args);
             vfprintf(logF, f, args_copy);
             va_end(args_copy);
         }
 #ifdef HAVE_SYSLOG
-        if(logSyslog)
-            accumulateSyslogV(type, f, args);
+        if(logSyslog) {
+            va_copy(args_copy, args);
+            accumulateSyslogV(type, f, args_copy);
+            va_end(args_copy);
+        }
 #endif
     }
 }
@@ -430,13 +434,14 @@ really_do_log_error(int type, int e, const char *f, ...)
 void
 really_do_log_error_v(int type, int e, const char *f, va_list args)
 {
+    va_list args_copy;
+
     if((type & LOGGING_MAX & logLevel) != 0) {
         char *es = pstrerror(e);
         if(es == NULL)
             es = "Unknown error";
 
         if(logF) {
-            va_list args_copy;
             va_copy(args_copy, args);
             vfprintf(logF, f, args_copy);
             fprintf(logF, ": %s\n", es);
@@ -447,7 +452,9 @@ really_do_log_error_v(int type, int e, const char *f, 
va_list args)
             char msg[256];
             int n = 0;
 
-            n = snnvprintf(msg, n, 256, f, args);
+            va_copy(args_copy, args);
+            n = snnvprintf(msg, n, 256, f, args_copy);
+            va_end(args_copy);
             n = snnprintf(msg, n, 256, ": ");
             n = snnprint_n(msg, n, 256, es, strlen (es));
             n = snnprintf(msg, n, 256, "\n");
diff --git a/util.c b/util.c
index 2da3550..8fc30e5 100644
--- a/util.c
+++ b/util.c
@@ -50,9 +50,14 @@ int
 snnvprintf(char *restrict buf, int n, int len, const char *format, va_list 
args)
 {
     int rc = -1;
+    va_list args_copy;
+
     if(n < 0) return -2;
-    if(n < len)
-        rc = vsnprintf(buf + n, len - n, format, args);
+    if(n < len) {
+        va_copy(args_copy, args);
+        rc = vsnprintf(buf + n, len - n, format, args_copy);
+        va_end(args_copy);
+    }
     if(rc >= 0 && n + rc <= len)
         return n + rc;
     else
@@ -268,8 +273,11 @@ vsprintf_a(const char *f, va_list args)
 {
     char *r;
     int rc;
+    va_list args_copy;
 
-    rc = vasprintf(&r, f, args);
+    va_copy(args_copy, args);
+    rc = vasprintf(&r, f, args_copy);
+    va_end(args_copy);
     if(rc < 0)
         return NULL;
     return r;
@@ -288,6 +296,7 @@ vsprintf_a(const char *f, va_list args)
 
     va_copy(args_copy, args);
     n = vsnprintf(buf, 64, f, args_copy);
+    va_end(args_copy);
     if(n >= 0 && n < 64) {
         return strdup_n(buf, n);
     }
@@ -302,9 +311,10 @@ vsprintf_a(const char *f, va_list args)
             return NULL;
         va_copy(args_copy, args);
         n = vsnprintf(string, size, f, args_copy);
-        if(n >= 0 && n < size)
+        va_end(args_copy);
+        if(n >= 0 && n < size) {
             return string;
-        else if(n >= size)
+        } else if(n >= size)
             size = n + 1;
         else
             size = size * 3 / 2;

------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today. 
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
Polipo-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/polipo-users

Reply via email to