mirror of
https://github.com/moparisthebest/curl
synced 2024-12-22 08:08:50 -05:00
Fixed a couple of problems in the IPv6 scope code. First, a host name in
an URL in a Location: header didn't have the scope ID removed, so an invalid host name was used. Second, when the scope ID was removed, it also removed any port number that may have existed in the URL.
This commit is contained in:
parent
0de08d418f
commit
fe1d024351
@ -3089,16 +3089,19 @@ static CURLcode ParseURLAndFillConnection(struct SessionHandle *data,
|
|||||||
path[0] = '/';
|
path[0] = '/';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (conn->host.name[0] == '[' && !data->state.this_is_a_follow) {
|
if (conn->host.name[0] == '[') {
|
||||||
/* This looks like an IPv6 address literal. See if there is an address
|
/* This looks like an IPv6 address literal. See if there is an address
|
||||||
scope. */
|
scope. */
|
||||||
char *percent = strstr (conn->host.name, "%25");
|
char *percent = strstr (conn->host.name, "%25");
|
||||||
if (percent) {
|
if (percent) {
|
||||||
char *endp;
|
char *endp;
|
||||||
conn->scope = strtoul (percent + 3, &endp, 10);
|
unsigned int scope = strtoul (percent + 3, &endp, 10);
|
||||||
if (*endp == ']') {
|
if (*endp == ']') {
|
||||||
/* The address scope was well formed. Knock it out of the hostname. */
|
/* The address scope was well formed. Knock it out of the hostname. */
|
||||||
strcpy (percent, "]");
|
memmove(percent, endp, strlen(endp)+1);
|
||||||
|
if (!data->state.this_is_a_follow)
|
||||||
|
/* Don't honour a scope given in a Location: header */
|
||||||
|
conn->scope = scope;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user