aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2008-01-23 22:22:12 +0000
committerDaniel Stenberg <daniel@haxx.se>2008-01-23 22:22:12 +0000
commitc914e6ea5dad4dc6281b189a9b1f20bc77c223c8 (patch)
treebd7ffea19fa9d6cc6ac7cd3769acdbcc6428b93d /lib
parent79cb74f03a4fa5512812cc8c8e35d735a099b35c (diff)
"Igor" pointed out that CURLOPT_COOKIELIST set to "ALL" leaked memory, and so
did "SESS". Fixed now.
Diffstat (limited to 'lib')
-rw-r--r--lib/cookie.c18
-rw-r--r--lib/cookie.h4
-rw-r--r--lib/http.c2
3 files changed, 15 insertions, 9 deletions
diff --git a/lib/cookie.c b/lib/cookie.c
index 4fb477cbe..3e6c8a1cd 100644
--- a/lib/cookie.c
+++ b/lib/cookie.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -812,7 +812,7 @@ struct Cookie *Curl_cookie_getlist(struct CookieInfo *c,
void Curl_cookie_clearall(struct CookieInfo *cookies)
{
if(cookies) {
- Curl_cookie_freelist(cookies->cookies);
+ Curl_cookie_freelist(cookies->cookies, TRUE);
cookies->cookies = NULL;
cookies->numcookies = 0;
}
@@ -824,16 +824,22 @@ void Curl_cookie_clearall(struct CookieInfo *cookies)
*
* Free a list of cookies previously returned by Curl_cookie_getlist();
*
+ * The 'cookiestoo' argument tells this function whether to just free the
+ * list or actually also free all cookies within the list as well.
+ *
****************************************************************************/
-void Curl_cookie_freelist(struct Cookie *co)
+void Curl_cookie_freelist(struct Cookie *co, bool cookiestoo)
{
struct Cookie *next;
if(co) {
while(co) {
next = co->next;
- free(co); /* we only free the struct since the "members" are all
- just copied! */
+ if(cookiestoo)
+ freecookie(co);
+ else
+ free(co); /* we only free the struct since the "members" are all just
+ pointed out in the main cookie list! */
co = next;
}
}
@@ -867,7 +873,7 @@ void Curl_cookie_clearsess(struct CookieInfo *cookies)
else
prev->next = next;
- free(curr);
+ freecookie(curr);
cookies->numcookies--;
}
else
diff --git a/lib/cookie.h b/lib/cookie.h
index ea4c83602..7fbc72e8a 100644
--- a/lib/cookie.h
+++ b/lib/cookie.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -91,7 +91,7 @@ struct CookieInfo *Curl_cookie_init(struct SessionHandle *data,
const char *, struct CookieInfo *, bool);
struct Cookie *Curl_cookie_getlist(struct CookieInfo *, const char *,
const char *, bool);
-void Curl_cookie_freelist(struct Cookie *);
+void Curl_cookie_freelist(struct Cookie *cookies, bool cookiestoo);
void Curl_cookie_clearall(struct CookieInfo *cookies);
void Curl_cookie_clearsess(struct CookieInfo *cookies);
void Curl_cookie_cleanup(struct CookieInfo *);
diff --git a/lib/http.c b/lib/http.c
index 1dcdc0f91..89f5c7615 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -2374,7 +2374,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
}
co = co->next; /* next cookie please */
}
- Curl_cookie_freelist(store); /* free the cookie list */
+ Curl_cookie_freelist(store, FALSE); /* free the cookie list */
}
if(addcookies && (CURLE_OK == result)) {
if(!count)