diff options
author | Daniel Stenberg <daniel@haxx.se> | 2009-03-09 12:21:46 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2009-03-09 12:21:46 +0000 |
commit | bdec6f2b20440b53859e472d185a21f1951341d5 (patch) | |
tree | e4b28569a8cd1bbc59686932e3e8c9810bb98d29 /lib/easy.c | |
parent | c86c294f554b901754e8ec97ae5399b7f217b9ba (diff) | |
download | curl-bdec6f2b20440b53859e472d185a21f1951341d5.tar.gz |
- Frank Hempel found out a bug and provided the fix:
curl_easy_duphandle did not necessarily duplicate the CURLOPT_COOKIEFILE
option. It only enabled the cookie engine in the destination handle if
data->cookies is not NULL (where data is the source handle). In case of a
newly initialized handle which just had the cookie support enabled by a
curl_easy_setopt(handle, CURL_COOKIEFILE, "")-call, handle->cookies was
still NULL because the setopt-call only appends the value to
data->change.cookielist, hence duplicating this handle would not have the
cookie engine switched on.
We also concluded that the slist-functionality would be suitable for being
put in its own module rather than simply hanging out in lib/sendf.c so I
created lib/slist.[ch] for them.
Diffstat (limited to 'lib/easy.c')
-rw-r--r-- | lib/easy.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/easy.c b/lib/easy.c index c0670d519..dc6c59366 100644 --- a/lib/easy.c +++ b/lib/easy.c @@ -84,6 +84,7 @@ #include "sendf.h" /* for failf function prototype */ #include "http_ntlm.h" #include "connect.h" /* for Curl_getconnectinfo */ +#include "slist.h" #define _MPRINTF_REPLACE /* use our functions only */ #include <curl/mprintf.h> @@ -648,6 +649,16 @@ CURL *curl_easy_duphandle(CURL *incurl) /* duplicate all values in 'change' */ +#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES) + if(data->change.cookielist) { + outcurl->change.cookielist = + Curl_slist_duplicate(data->change.cookielist); + + if (!outcurl->change.cookielist) + break; + } +#endif /* CURL_DISABLE_HTTP */ + if(data->change.url) { outcurl->change.url = strdup(data->change.url); if(!outcurl->change.url) @@ -692,6 +703,10 @@ CURL *curl_easy_duphandle(CURL *incurl) Curl_rm_connc(outcurl->state.connc); if(outcurl->state.headerbuff) free(outcurl->state.headerbuff); +#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES) + if(outcurl->change.cookielist) + curl_slist_free_all(outcurl->change.cookielist); +#endif if(outcurl->change.url) free(outcurl->change.url); if(outcurl->change.referer) |