]> granicus.if.org Git - gc/commitdiff
Fix vsprintf_args cleanup in CORD_vsprintf
authorIvan Maidanski <ivmai@mail.ru>
Wed, 17 Oct 2012 18:07:54 +0000 (22:07 +0400)
committerIvan Maidanski <ivmai@mail.ru>
Wed, 17 Oct 2012 18:07:54 +0000 (22:07 +0400)
* cord/cordprnt.c (CORD_vsprintf): Invoke va_end (before return) for
vsprintf_args initialized by [__]va_copy (only if __va_copy defined
or GCC but not DJGPP).

cord/cordprnt.c

index b23ea7f2e60e7758962cf71dfc01910b46fb8a7e..94c49be87d506456cb21396e6ae308f809697e5f 100644 (file)
@@ -313,9 +313,17 @@ int CORD_vsprintf(CORD * out, CORD format, va_list args)
                             (void) va_arg(args, double);
                             break;
                         default:
+#                           if defined(__va_copy) \
+                               || (defined(__GNUC__) && !defined(__DJGPP__))
+                              va_end(vsprintf_args);
+#                           endif
                             return(-1);
                     }
                     res = vsprintf(buf, conv_spec, vsprintf_args);
+#                   if defined(__va_copy) \
+                       || (defined(__GNUC__) && !defined(__DJGPP__))
+                      va_end(vsprintf_args);
+#                   endif
                     len = (size_t)res;
                     if ((char *)(GC_word)res == buf) {
                         /* old style vsprintf */