]> granicus.if.org Git - curl/commitdiff
Prevent failf() from using the va_list variable more than once.
authorDaniel Stenberg <daniel@haxx.se>
Tue, 21 Dec 2004 14:22:10 +0000 (14:22 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 21 Dec 2004 14:22:10 +0000 (14:22 +0000)
See bug report #1088962 and  Single Unix Specification:
http://www.opengroup.org/onlinepubs/007908799/xsh/vfprintf.html

lib/sendf.c

index 175323903d35bfb2500d61a88b02c2e580a9fde1..91671b95eaf82b2d777935be60e52a053f522253 100644 (file)
@@ -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);