mirror of
https://github.com/curl/curl.git
synced 2026-08-25 21:03:34 +03:00
CURLOPT_CONNECT_TO: Skip non-matching "connect-to" entries properly
If a port number in a "connect-to" entry does not match, skip this entry instead of connecting to port 0. If a port number in a "connect-to" entry matches, use this entry and look no further. Reported-by: Jay Satiro Assisted-by: Jay Satiro, Daniel Stenberg Closes #1148
This commit is contained in:
parent
12d6794b10
commit
b34ea05d9d
4 changed files with 128 additions and 4 deletions
10
lib/url.c
10
lib/url.c
|
|
@ -5677,6 +5677,9 @@ static CURLcode parse_connect_to_string(struct Curl_easy *data,
|
|||
int host_match = FALSE;
|
||||
int port_match = FALSE;
|
||||
|
||||
*host_result = NULL;
|
||||
*port_result = -1;
|
||||
|
||||
if(*ptr == ':') {
|
||||
/* an empty hostname always matches */
|
||||
host_match = TRUE;
|
||||
|
|
@ -5739,9 +5742,9 @@ static CURLcode parse_connect_to_slist(struct Curl_easy *data,
|
|||
{
|
||||
CURLcode result = CURLE_OK;
|
||||
char *host = NULL;
|
||||
int port = 0;
|
||||
int port = -1;
|
||||
|
||||
while(conn_to_host && !host) {
|
||||
while(conn_to_host && !host && port == -1) {
|
||||
result = parse_connect_to_string(data, conn, conn_to_host->data,
|
||||
&host, &port);
|
||||
if(result)
|
||||
|
|
@ -5760,7 +5763,7 @@ static CURLcode parse_connect_to_slist(struct Curl_easy *data,
|
|||
else {
|
||||
/* no "connect to host" */
|
||||
conn->bits.conn_to_host = FALSE;
|
||||
free(host);
|
||||
Curl_safefree(host);
|
||||
}
|
||||
|
||||
if(port >= 0) {
|
||||
|
|
@ -5771,6 +5774,7 @@ static CURLcode parse_connect_to_slist(struct Curl_easy *data,
|
|||
else {
|
||||
/* no "connect to port" */
|
||||
conn->bits.conn_to_port = FALSE;
|
||||
port = -1;
|
||||
}
|
||||
|
||||
conn_to_host = conn_to_host->next;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue