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
This commit is contained in:
Daniel Stenberg 2019-05-28 16:17:51 +02:00
parent 2f11fbf208
commit a6183ab23a
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
2 changed files with 6 additions and 3 deletions

View 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)

View File

@ -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);