aboutsummaryrefslogtreecommitdiff
path: root/lib/http.c
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2004-05-10 14:22:20 +0000
committerDaniel Stenberg <daniel@haxx.se>2004-05-10 14:22:20 +0000
commit63f97b38eb3a86615e7cb92e70f91cf14d69945a (patch)
treef48552f471709a1fd7913cacec64d7524dbda8f0 /lib/http.c
parentb8541929c8d9afc29f70289a1cdc209046808b10 (diff)
Moved the fetching of the list of matching cookies to make it easier to free
that list in case something goes wrong in the function and we must bail out. Courtesy of the torture testing.
Diffstat (limited to 'lib/http.c')
-rw-r--r--lib/http.c69
1 files changed, 35 insertions, 34 deletions
diff --git a/lib/http.c b/lib/http.c
index 3084d3211..388f7debf 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -1230,7 +1230,6 @@ CURLcode Curl_http(struct connectdata *conn)
char *buf = data->state.buffer; /* this is a short cut to the buffer */
CURLcode result=CURLE_OK;
struct HTTP *http;
- struct Cookie *co=NULL; /* no cookies from start */
char *ppath = conn->path;
char *host = conn->host.name;
const char *te = ""; /* tranfer-encoding */
@@ -1399,15 +1398,6 @@ CURLcode Curl_http(struct connectdata *conn)
return CURLE_OUT_OF_MEMORY;
}
- if(data->cookies) {
- Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
- co = Curl_cookie_getlist(data->cookies,
- conn->allocptr.cookiehost?
- conn->allocptr.cookiehost:host, ppath,
- (bool)(conn->protocol&PROT_HTTPS?TRUE:FALSE));
- Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
- }
-
if (conn->bits.httpproxy &&
!data->set.tunnel_thru_httpproxy &&
!(conn->protocol&PROT_HTTPS)) {
@@ -1611,40 +1601,51 @@ CURLcode Curl_http(struct connectdata *conn)
http->p_pragma?http->p_pragma:"",
http->p_accept?http->p_accept:"",
(data->set.encoding && *data->set.encoding && conn->allocptr.accept_encoding)?
- conn->allocptr.accept_encoding:"", /* 08/28/02 jhrg */
- (data->change.referer && conn->allocptr.ref)?conn->allocptr.ref:"" /* Referer: <data> <CRLF> */,
+ conn->allocptr.accept_encoding:"",
+ (data->change.referer && conn->allocptr.ref)?conn->allocptr.ref:"" /* Referer: <data> */,
te
);
if(result)
return result;
- if(co) {
- int count=0;
- struct Cookie *store=co;
- /* now loop through all cookies that matched */
- while(co) {
- if(co->value) {
- if(0 == count) {
- result = add_bufferf(req_buffer, "Cookie: ");
+ if(data->cookies) {
+ struct Cookie *co; /* no cookies from start */
+
+ Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
+ co = Curl_cookie_getlist(data->cookies,
+ conn->allocptr.cookiehost?
+ conn->allocptr.cookiehost:host, ppath,
+ (bool)(conn->protocol&PROT_HTTPS?TRUE:FALSE));
+ Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
+
+ if(co) {
+ int count=0;
+ struct Cookie *store=co;
+ /* now loop through all cookies that matched */
+ while(co) {
+ if(co->value) {
+ if(0 == count) {
+ result = add_bufferf(req_buffer, "Cookie: ");
+ if(result)
+ break;
+ }
+ result = add_bufferf(req_buffer,
+ "%s%s=%s", count?"; ":"",
+ co->name, co->value);
if(result)
- return result;
+ break;
+ count++;
}
- result = add_bufferf(req_buffer,
- "%s%s=%s", count?"; ":"", co->name, co->value);
- if(result)
- return result;
- count++;
+ co = co->next; /* next cookie please */
}
- co = co->next; /* next cookie please */
- }
- if(count) {
- result = add_buffer(req_buffer, "\r\n", 2);
- if(result)
- return result;
+ if(count && (CURLE_OK == result))
+ result = add_buffer(req_buffer, "\r\n", 2);
+
+ Curl_cookie_freelist(store); /* free the cookie list */
}
- Curl_cookie_freelist(store); /* free the cookie list */
- co=NULL;
+ if(result)
+ return result;
}
if(data->set.timecondition) {