diff options
author | Daniel Stenberg <daniel@haxx.se> | 2001-02-20 17:46:35 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2001-02-20 17:46:35 +0000 |
commit | 46e0937263df22f091cb7367182ff6095f73b82e (patch) | |
tree | 20967195d7b4ce821dd72ac8d530af75eda40f5a | |
parent | a1d6ad26100bc493c7b04f1301b1634b7f5aa8b4 (diff) |
corrected memory leaks when re-using connections
-rw-r--r-- | lib/http.c | 12 | ||||
-rw-r--r-- | lib/url.c | 4 |
2 files changed, 15 insertions, 1 deletions
diff --git a/lib/http.c b/lib/http.c index 836a16622..897e0a1fb 100644 --- a/lib/http.c +++ b/lib/http.c @@ -421,6 +421,8 @@ CURLcode Curl_http(struct connectdata *conn) sprintf(data->buffer, "%s:%s", data->user, data->passwd); if(Curl_base64_encode(data->buffer, strlen(data->buffer), &authorization) >= 0) { + if(data->ptr_userpwd) + free(data->ptr_userpwd); data->ptr_userpwd = aprintf( "Authorization: Basic %s\015\012", authorization); free(authorization); @@ -428,9 +430,13 @@ CURLcode Curl_http(struct connectdata *conn) } } if((data->bits.http_set_referer) && !checkheaders(data, "Referer:")) { + if(data->ptr_ref) + free(data->ptr_ref); data->ptr_ref = aprintf("Referer: %s\015\012", data->referer); } if(data->cookie && !checkheaders(data, "Cookie:")) { + if(data->ptr_cookie) + free(data->ptr_cookie); data->ptr_cookie = aprintf("Cookie: %s\015\012", data->cookie); } @@ -450,7 +456,11 @@ CURLcode Curl_http(struct connectdata *conn) http->sendit = Curl_getFormData(data->httppost, &http->postsize); } - if(!checkheaders(data, "Host:")) { + if(!checkheaders(data, "Host:") && + !data->ptr_host) { + /* if ptr_host is already set, it is OK since we only re-use connections + to the very same host and port */ + if(((conn->protocol&PROT_HTTPS) && (data->remote_port == PORT_HTTPS)) || (!(conn->protocol&PROT_HTTPS) && (data->remote_port == PORT_HTTP)) ) /* If (HTTPS on port 443) OR (non-HTTPS on port 80) then don't include @@ -1653,6 +1653,8 @@ static CURLcode _connect(CURL *curl, CURLconnect **in_connect) data->proxyuser, data->proxypasswd); if(Curl_base64_encode(data->buffer, strlen(data->buffer), &authorization) >= 0) { + if(data->ptr_proxyuserpwd) + free(data->ptr_proxyuserpwd); data->ptr_proxyuserpwd = aprintf("Proxy-authorization: Basic %s\015\012", authorization); free(authorization); @@ -1665,6 +1667,8 @@ static CURLcode _connect(CURL *curl, CURLconnect **in_connect) *************************************************************/ if((conn->protocol&PROT_HTTP) || data->bits.httpproxy) { if(data->useragent) { + if(data->ptr_uagent) + free(data->ptr_uagent); data->ptr_uagent = aprintf("User-Agent: %s\015\012", data->useragent); } |