corrected memory leaks when re-using connections
authorDaniel Stenberg <daniel@haxx.se>
Tue, 20 Feb 2001 17:46:35 +0000 (17:46 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 20 Feb 2001 17:46:35 +0000 (17:46 +0000)
lib/http.c
lib/url.c

index 836a166..897e0a1 100644 (file)
@@ -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
index 0dbf4ed..7905039 100644 (file)
--- 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);
     }