main: fix segfault
authorDaniel Stenberg <daniel@haxx.se>
Sun, 21 Aug 2011 10:59:06 +0000 (12:59 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Sun, 21 Aug 2011 10:59:06 +0000 (12:59 +0200)
Follow-up to commit 5eb2396cd as that wasn't complete.

At times HEADERFUNCTION+HEADERDATA was set only to have only HEADERDATA
set in the subsequent loop which could cause a NULL to get sent as
userdata to 'header_callback' which wasn't made to handle that.

Now HEADERFUNCTION is explicitly set to NULL if it isn't set to the
callback.

src/main.c

index 276718b..56cd133 100644 (file)
@@ -5415,8 +5415,6 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
         my_setopt(curl, CURLOPT_QUOTE, config->quote);
         my_setopt(curl, CURLOPT_POSTQUOTE, config->postquote);
         my_setopt(curl, CURLOPT_PREQUOTE, config->prequote);
-        my_setopt(curl, CURLOPT_HEADERDATA,
-                  config->headerfile?&heads:NULL);
         my_setopt_str(curl, CURLOPT_COOKIEFILE, config->cookiefile);
         /* cookie jar was added in 7.9 */
         if(config->cookiejar)
@@ -5621,6 +5619,12 @@ operate(struct Configurable *config, int argc, argv_item_t argv[])
           my_setopt(curl, CURLOPT_HEADERFUNCTION, header_callback);
           my_setopt(curl, CURLOPT_HEADERDATA, &outs);
         }
+        else {
+          /* if HEADERFUNCTION was set to something in the previous loop, it
+             is important that we set it (back) to NULL now */
+          my_setopt(curl, CURLOPT_HEADERFUNCTION, NULL);
+          my_setopt(curl, CURLOPT_HEADERDATA, config->headerfile?&heads:NULL);
+        }
 
         if(config->resolve)
           /* new in 7.21.3 */