diff options
author | Daniel Stenberg <daniel@haxx.se> | 2012-01-31 22:52:10 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2012-01-31 22:52:10 +0100 |
commit | 466150bc64de0caef08f22cc8a88f7922483a639 (patch) | |
tree | 70fa8bb1a6a7dd72f95366d65dcfd9ef94ab02ee | |
parent | f710aa40b326377b6834b59cc937bf50e929aba7 (diff) |
CONNECT: send correct Host: with IPv6 numerical address
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
-rw-r--r-- | lib/http_proxy.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/http_proxy.c b/lib/http_proxy.c index b20034781..1c2aa59c8 100644 --- a/lib/http_proxy.c +++ b/lib/http_proxy.c @@ -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; |