58 lines
1.6 KiB
Diff
58 lines
1.6 KiB
Diff
# http://www.fetchmail.info/fetchmail-SA-2008-01.txt
|
|
|
|
diff --git a/report.c b/report.c
|
|
index 31d4e48..320e60b 100644
|
|
- --- a/report.c
|
|
+++ b/report.c
|
|
@@ -238,11 +238,17 @@ report_build (FILE *errfp, message, va_alist)
|
|
rep_ensuresize();
|
|
|
|
#if defined(VA_START)
|
|
- - VA_START (args, message);
|
|
for ( ; ; )
|
|
{
|
|
+ /*
|
|
+ * args has to be initialized before every call of vsnprintf(),
|
|
+ * because vsnprintf() invokes va_arg macro and thus args is
|
|
+ * undefined after the call.
|
|
+ */
|
|
+ VA_START(args, message);
|
|
n = vsnprintf (partial_message + partial_message_size_used, partial_message_size - partial_message_size_used,
|
|
message, args);
|
|
+ va_end (args);
|
|
|
|
if (n >= 0
|
|
&& (unsigned)n < partial_message_size - partial_message_size_used)
|
|
@@ -254,7 +260,6 @@ report_build (FILE *errfp, message, va_alist)
|
|
partial_message_size += 2048;
|
|
partial_message = REALLOC (partial_message, partial_message_size);
|
|
}
|
|
- - va_end (args);
|
|
#else
|
|
for ( ; ; )
|
|
{
|
|
@@ -304,12 +309,13 @@ report_complete (FILE *errfp, message, va_alist)
|
|
rep_ensuresize();
|
|
|
|
#if defined(VA_START)
|
|
- - VA_START (args, message);
|
|
for ( ; ; )
|
|
{
|
|
+ VA_START(args, message);
|
|
n = vsnprintf (partial_message + partial_message_size_used,
|
|
partial_message_size - partial_message_size_used,
|
|
message, args);
|
|
+ va_end(args);
|
|
|
|
/* old glibc versions return -1 for truncation */
|
|
if (n >= 0
|
|
@@ -322,7 +328,6 @@ report_complete (FILE *errfp, message, va_alist)
|
|
partial_message_size += 2048;
|
|
partial_message = REALLOC (partial_message, partial_message_size);
|
|
}
|
|
- - va_end (args);
|
|
#else
|
|
for ( ; ; )
|
|
{
|
|
|