tags 294905 patch
thanks

Hi,

Attached is a patch which fixes 2 va_list misuses in a2ps, leading
(lib/printlen.c) to the reported bug, and while I was at it, it still
printed garbage on amd64, so lib/title.c got its fix, too.

Tested on powerpc and amd64.

JB.

-- 
Julien BLACHE                                   <http://www.jblache.org> 
<[EMAIL PROTECTED]>                                  GPG KeyID 0xF5D65169

--- orig/a2ps-4.13b/lib/printlen.c	1999-08-31 19:42:42.000000000 +0200
+++ a2ps-4.13b/lib/printlen.c	2005-02-12 19:17:06.649319648 +0100
@@ -28,14 +28,11 @@
 unsigned long strtoul ();
 
 static int
-int_printflen (const char *format, va_list *args)
+int_printflen (const char *format, va_list ap)
 {
   const char *cp;
   int total_width = 0;
   int width = 0;
-  va_list ap;
-
-  memcpy (&ap, args, sizeof (va_list));
 
   for (cp = format ; *cp ; cp++)
     {
@@ -99,7 +96,16 @@
 int
 vprintflen (const char *format,  va_list args)
 {
-  return int_printflen (format, &args);
+  va_list ap;
+  int ret;
+
+  va_copy (ap, args);
+
+  ret = int_printflen (format, ap);
+
+  va_end(ap);
+
+  return ret;
 }
 
 int
--- orig/a2ps-4.13b/lib/title.c	1999-08-28 18:54:19.000000000 +0200
+++ a2ps-4.13b/lib/title.c	2005-02-12 19:42:07.635135120 +0100
@@ -83,11 +83,17 @@
   VA_START (args, format);
 
   len = vprintflen (format, args);
+
+  va_end (args);
+
   if (format [strlen (format) - 1] == '\n')
     len --;
   if (center_p)
     for (padding = 0 ; padding < 79 - len ; padding += 2)
       putc (' ', stream);
+
+  VA_START (args, format);
+
 # if HAVE_VPRINTF || _LIBC
   vfprintf (stream, format, args);
 # else

Reply via email to