]> granicus.if.org Git - curl/commitdiff
CONNECT: send correct Host: with IPv6 numerical address
authorDaniel Stenberg <daniel@haxx.se>
Tue, 31 Jan 2012 21:52:10 +0000 (22:52 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 31 Jan 2012 21:52:10 +0000 (22:52 +0100)
When the target host was given as a IPv6 numerical address, it was not
properly put within square brackets for the Host: header in the CONNECT
request. The "normal" request did fine.

Reported by: "zooloo"
Bug: http://curl.haxx.se/bug/view.cgi?id=3482093

lib/http_proxy.c

index b2003478146649d323387859f53122eb644ee731..1c2aa59c817778a8919b7a78f296423de2f184bb 100644 (file)
@@ -116,6 +116,8 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
       /* Setup the proxy-authorization header, if any */
       result = Curl_http_output_auth(conn, "CONNECT", host_port, TRUE);
 
+      free(host_port);
+
       if(CURLE_OK == result) {
         char *host=(char *)"";
         const char *proxyconn="";
@@ -124,10 +126,11 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
           "1.0" : "1.1";
 
         if(!Curl_checkheaders(data, "Host:")) {
-          host = aprintf("Host: %s\r\n", host_port);
+          host = aprintf("Host: %s%s%s:%hu\r\n", conn->bits.ipv6_ip?"[":"",
+                         hostname, conn->bits.ipv6_ip?"]":"",
+                         remote_port);
           if(!host) {
             free(req_buffer);
-            free(host_port);
             return CURLE_OUT_OF_MEMORY;
           }
         }
@@ -174,7 +177,7 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
         if(result)
           failf(data, "Failed sending CONNECT to proxy");
       }
-      free(host_port);
+
       Curl_safefree(req_buffer);
       if(result)
         return result;