]> granicus.if.org Git - curl/commitdiff
url: default conn->port to the same as conn->remote_port
authorDaniel Stenberg <daniel@haxx.se>
Tue, 28 May 2019 14:17:51 +0000 (16:17 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 28 May 2019 21:00:42 +0000 (23:00 +0200)
... so that it has a sensible value when ConnectionExists() is called which
needs it set to differentiate host "bundles" correctly on port number!

Also, make conncache:hashkey() use correct port for bundles that are proxy vs
host connections.

Probably a regression from 7.62.0

Reported-by: Tom van der Woerdt
Fixes #3956
Closes #3957

lib/conncache.c
lib/url.c

index 2cdfd34d9a04680a37ce12fecc1c7acee22cc5db..88463354bc4f115512bb2c9f0271f064e135e372 100644 (file)
@@ -163,9 +163,12 @@ static void hashkey(struct connectdata *conn, char *buf,
                     const char **hostp)
 {
   const char *hostname;
+  long port = conn->remote_port;
 
-  if(conn->bits.httpproxy && !conn->bits.tunnel_proxy)
+  if(conn->bits.httpproxy && !conn->bits.tunnel_proxy) {
     hostname = conn->http_proxy.host.name;
+    port = conn->port;
+  }
   else if(conn->bits.conn_to_host)
     hostname = conn->conn_to_host.name;
   else
@@ -178,7 +181,7 @@ static void hashkey(struct connectdata *conn, char *buf,
   DEBUGASSERT(len > 32);
 
   /* put the number first so that the hostname gets cut off if too long */
-  msnprintf(buf, len, "%ld%s", conn->port, hostname);
+  msnprintf(buf, len, "%ld%s", port, hostname);
 }
 
 void Curl_conncache_unlock(struct Curl_easy *data)
index 88d72bfeac91c9684cbcd8cbf09415f21817bf2a..51515c924d3784ea274c5e5504aebce0590a5a2e 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -2027,7 +2027,7 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data,
   }
   else {
     unsigned long port = strtoul(data->state.up.port, NULL, 10);
-    conn->remote_port = curlx_ultous(port);
+    conn->port = conn->remote_port = curlx_ultous(port);
   }
 
   (void)curl_url_get(uh, CURLUPART_QUERY, &data->state.up.query, 0);