From a173e07eec19b49af0f3f32f636768eee653ebbf Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Tue, 21 Dec 2004 14:22:10 +0000 Subject: [PATCH] Prevent failf() from using the va_list variable more than once. See bug report #1088962 and Single Unix Specification: http://www.opengroup.org/onlinepubs/007908799/xsh/vfprintf.html --- lib/sendf.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/sendf.c b/lib/sendf.c index 175323903..91671b95e 100644 --- a/lib/sendf.c +++ b/lib/sendf.c @@ -155,21 +155,21 @@ void Curl_failf(struct SessionHandle *data, const char *fmt, ...) { va_list ap; va_start(ap, fmt); + size_t len; + + vsnprintf(data->state.buffer, BUFSIZE, fmt, ap); + if(data->set.errorbuffer && !data->state.errorbuf) { - vsnprintf(data->set.errorbuffer, CURL_ERROR_SIZE, fmt, ap); + snprintf(data->set.errorbuffer, CURL_ERROR_SIZE, "%s", data->state.buffer); data->state.errorbuf = TRUE; /* wrote error string */ } if(data->set.verbose) { - size_t len; - - vsnprintf(data->state.buffer, BUFSIZE, fmt, ap); - len = strlen(data->state.buffer); - - if(len < BUFSIZE - 1) { - data->state.buffer[len] = '\n'; - data->state.buffer[++len] = '\0'; - } - Curl_debug(data, CURLINFO_TEXT, data->state.buffer, len, NULL); + len = strlen(data->state.buffer); + if(len < BUFSIZE - 1) { + data->state.buffer[len] = '\n'; + data->state.buffer[++len] = '\0'; + } + Curl_debug(data, CURLINFO_TEXT, data->state.buffer, len, NULL); } va_end(ap);