From 61ae7e9ce77af86a7290fca8bf73c9798f80845c Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Sun, 21 Aug 2011 12:59:06 +0200 Subject: [PATCH] main: fix segfault 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 | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main.c b/src/main.c index 276718b..56cd133 100644 --- a/src/main.c +++ b/src/main.c @@ -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 */ -- 1.7.6