Unverified Commit a6183ab2 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

url: default conn->port to the same as conn->remote_port

... 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
parent 2f11fbf2
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -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)
+1 −1
Original line number Diff line number Diff line
@@ -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);