]> granicus.if.org Git - curl/commitdiff
Prevent the accidental passing along NULL for the cases where the --trace
authorDaniel Stenberg <daniel@haxx.se>
Mon, 13 Oct 2008 22:21:01 +0000 (22:21 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 13 Oct 2008 22:21:01 +0000 (22:21 +0000)
options don't succeed in opening the target file etc. Detected by coverity.com

src/main.c

index 7d397362c899cfbd7702d1486695fdab82a69547..b547eb5f1e07ebde3af185297974db7c968954e4 100644 (file)
@@ -3506,6 +3506,11 @@ int my_trace(CURL *handle, curl_infotype type,
   if(config->trace_stream)
     output = config->trace_stream;
 
+  if(!output) {
+    warnf(config, "Failed to create/open output");
+    return 0;
+  }
+
   if(config->tracetype == TRACE_PLAIN) {
     /*
      * This is the trace look that is similar to what libcurl makes on its
@@ -3524,25 +3529,24 @@ int my_trace(CURL *handle, curl_infotype type,
       for(i=0; i<size-1; i++) {
         if(data[i] == '\n') { /* LF */
           if(!newl) {
-            fprintf(config->trace_stream, "%s%s ",
-                    timebuf, s_infotype[type]);
+            fprintf(output, "%s%s ", timebuf, s_infotype[type]);
           }
-          fwrite(data+st, i-st+1, 1, config->trace_stream);
+          fwrite(data+st, i-st+1, 1, output);
           st = i+1;
           newl = FALSE;
         }
       }
       if(!newl)
-        fprintf(config->trace_stream, "%s%s ", timebuf, s_infotype[type]);
-      fwrite(data+st, i-st+1, 1, config->trace_stream);
+        fprintf(output, "%s%s ", timebuf, s_infotype[type]);
+      fwrite(data+st, i-st+1, 1, output);
       newl = (bool)(size && (data[size-1] != '\n'));
       traced_data = FALSE;
       break;
     case CURLINFO_TEXT:
     case CURLINFO_HEADER_IN:
       if(!newl)
-        fprintf(config->trace_stream, "%s%s ", timebuf, s_infotype[type]);
-      fwrite(data, size, 1, config->trace_stream);
+        fprintf(output, "%s%s ", timebuf, s_infotype[type]);
+      fwrite(data, size, 1, output);
       newl = (bool)(size && (data[size-1] != '\n'));
       traced_data = FALSE;
       break;
@@ -3556,11 +3560,10 @@ int my_trace(CURL *handle, curl_infotype type,
            being shown as the data _is_ shown then just not via this
            function */
         if(!config->isatty ||
-           ((config->trace_stream != stderr) &&
-            (config->trace_stream != stdout))) {
+           ((output != stderr) && (output != stdout))) {
           if(!newl)
-            fprintf(config->trace_stream, "%s%s ", timebuf, s_infotype[type]);
-          fprintf(config->trace_stream, "[data not shown]\n");
+            fprintf(output, "%s%s ", timebuf, s_infotype[type]);
+          fprintf(output, "[data not shown]\n");
           newl = FALSE;
           traced_data = TRUE;
         }