aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2001-02-20 17:46:35 +0000
committerDaniel Stenberg <daniel@haxx.se>2001-02-20 17:46:35 +0000
commit46e0937263df22f091cb7367182ff6095f73b82e (patch)
tree20967195d7b4ce821dd72ac8d530af75eda40f5a /lib
parenta1d6ad26100bc493c7b04f1301b1634b7f5aa8b4 (diff)
corrected memory leaks when re-using connections
Diffstat (limited to 'lib')
-rw-r--r--lib/http.c12
-rw-r--r--lib/url.c4
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
diff --git a/lib/url.c b/lib/url.c
index 0dbf4ed16..7905039b8 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -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);
}