Re: Crash after retrieving digg.com

Rob <[email protected]>
Newsgroups gmane.comp.web.polipo.user
Message-ID <[email protected]>
This patch gets things working again for me on Linux.

------------------------------------------------------------------------------
Stay on top of everything new and different, both inside and 
around Java (TM) technology - register by April 22, and save
$200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco.
300 plus technical and hands-on sessions. Register today. 
Use priority code J9JMT32. http://p.sf.net/sfu/p

_______________________________________________
Polipo-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/polipo-users
polipo-1.0.4-varargs.patch.txt (text/plain, 2.1 KB)
diff -ubr polipo-1.0.4/log.c polipo-new/log.c
--- polipo-1.0.4/log.c	2008-01-08 04:56:45.000000000 -0800
+++ polipo-new/log.c	2009-04-22 19:26:38.000000000 -0700
@@ -279,11 +279,14 @@
 accumulateSyslogV(int type, const char *f, va_list args)
 {
     int rc;
+    va_list args_copy;
 
  again:
+    va_copy(args_copy, args);
     rc = vsnprintf(syslogBuf + syslogBufLength,
                    syslogBufSize - syslogBufLength,
-                   f, args);
+                   f, args_copy);
+    va_end(args);
 
     if(rc < 0 || rc >= syslogBufSize - syslogBufLength) {
         rc = expandSyslog(rc);
@@ -372,7 +375,12 @@
 {
     if(type & LOGGING_MAX & logLevel) {
         if(logF)
-            vfprintf(logF, f, args);
+        {
+            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);
@@ -399,8 +407,11 @@
             es = "Unknown error";
 
         if(logF) {
-            vfprintf(logF, f, args);
+            va_list args_copy;
+            va_copy(args_copy, args);
+            vfprintf(logF, f, args_copy);
             fprintf(logF, ": %s\n", es);
+            va_end(args_copy);
         }
 #ifdef HAVE_SYSLOG
         if(logSyslog) {
diff -ubr polipo-1.0.4/util.c polipo-new/util.c
--- polipo-1.0.4/util.c	2008-01-08 04:56:45.000000000 -0800
+++ polipo-new/util.c	2009-04-22 19:30:04.000000000 -0700
@@ -281,8 +281,11 @@
     int n, size;
     char buf[64];
     char *string;
+    va_list args_copy;
 
-    n = vsnprintf(buf, 64, f, 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);
     }
@@ -295,7 +298,9 @@
         string = malloc(size);
         if(!string)
             return NULL;
-        n = vsnprintf(string, size, f, args);
+        va_copy(args_copy, args);
+        n = vsnprintf(string, size, f, args_copy);
+        va_end(args_copy);
         if(n >= 0 && n < size)
             return string;
         else if(n >= size)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.