Hi,

Looking at the backtrace, this bug seems to be a (fairly) well-known
segfault pattern of PPC architecture: "missing va_end call and/or abuse
of va_list type" (only the first part is relevant).  I believe the patch
attached might fix the issue, but since I don't have an access to a PPC
box, I couldn't test it.  Could someone please apply the patch and check
the result?

Regards,

-- 
roktas
diff -ruN clara-20031214.orig/clara.c clara-20031214/clara.c
--- clara-20031214.orig/clara.c	2003-12-15 03:59:59.000000000 +0200
+++ clara-20031214/clara.c	2005-05-31 02:05:11.000000000 +0300
@@ -751,11 +751,12 @@
     s[128] = 0;
     logmsg(s);
 
-    if (!trace)
-        return;
-    va_start(args,m);
-    vfprintf(stderr,m,args);
-    fprintf(stderr,"\n");
+    if (trace) {
+        vfprintf(stderr,m,args);
+        fprintf(stderr,"\n");
+    }
+
+    va_end(args);
 }
 
 /*
@@ -775,10 +776,12 @@
     logmsg(s);
 
     /* send to stderr if requested */
-    if (!debug)
-        return;
-    vfprintf(stderr,m,args);
-    fprintf(stderr,"\n");
+    if (debug) {
+        vfprintf(stderr,m,args);
+        fprintf(stderr,"\n");
+    }
+
+    va_end(args);
 }
 
 /*
@@ -797,9 +800,10 @@
     s[128] = 0;
     logmsg(s);
 
-    va_start(args,m);
     vfprintf(stderr,m,args);
     fprintf(stderr,"\n");
+
+    va_end(args);
 }
 
 /* (devel)
diff -ruN clara-20031214.orig/event.c clara-20031214/event.c
--- clara-20031214.orig/event.c	2003-02-26 14:37:04.000000000 +0200
+++ clara-20031214/event.c	2005-05-31 01:56:21.000000000 +0300
@@ -638,6 +638,8 @@
         }
     }
 
+    va_end(args);
+
 /*
     printf("request (priority %d, mclip=%d, redraw=%d) to draw the message \"%s\"\n",f,mclip,redraw_stline,s);
 */
diff -ruN clara-20031214.orig/html.c clara-20031214/html.c
--- clara-20031214.orig/html.c	2003-03-25 20:13:02.000000000 +0200
+++ clara-20031214/html.c	2005-05-31 01:57:26.000000000 +0300
@@ -1548,11 +1548,12 @@
     va_list args;
     int n=0,f;
 
-    va_start(args, fmt);
     for (f=0; f==0; ) {
 
         /* try to write */
+        va_start(args, fmt);
         n = vsnprintf(*t+*top+1,*sz-*top-1,fmt,args);
+        va_end(args);
 
         /*
             Some implementations of vsnprintf return -1 when
@@ -1589,11 +1590,12 @@
     va_list args;
     int n=0,f;
 
-    va_start(args, fmt);
     for (f=0; f==0; ) {
 
         /* try to write */
+        va_start(args, fmt);
         n = vsnprintf(text+topt+1,textsz-topt-1,fmt,args);
+        va_end(args);
 
         /*
             Some implementations of vsnprintf return -1 when

Attachment: signature.asc
Description: Digital signature

Reply via email to