1
0
mirror of https://github.com/moparisthebest/curl synced 2024-11-12 04:25:08 -05:00

Fixed parsing of an IPv6 proxy address to support a scope identifier,

as well as IPv4 addresses in IPv6 format. Also, better handle the case
of a malformatted IPv6 address (avoid empty and NULL strings).
This commit is contained in:
Dan Fandrich 2008-07-31 20:04:00 +00:00
parent 4c1c479fcf
commit 660516914e
3 changed files with 15 additions and 5 deletions

View File

@ -6,6 +6,11 @@
Changelog Changelog
Daniel Fandrich (31 Jul 2008)
- Fixed parsing of an IPv6 proxy address to support a scope identifier,
as well as IPv4 addresses in IPv6 format. Also, better handle the case
of a malformatted IPv6 address (avoid empty and NULL strings).
Daniel Stenberg (30 Jul 2008) Daniel Stenberg (30 Jul 2008)
- Phil Blundell added the CURLOPT_SCOPE option, as well as adjusted the URL - Phil Blundell added the CURLOPT_SCOPE option, as well as adjusted the URL
parser to allow numerical IPv6-addresses to be specified with the scope parser to allow numerical IPv6-addresses to be specified with the scope

View File

@ -904,6 +904,9 @@ IPv6
sftp://[fe80::1234%251]/ sftp://[fe80::1234%251]/
IPv6 addresses provided other than in URLs (e.g. to the --proxy, --interface
or --ftp-port options) should not be URL encoded.
MAILING LISTS MAILING LISTS

View File

@ -3102,7 +3102,8 @@ static CURLcode ParseURLAndFillConnection(struct SessionHandle *data,
if (!data->state.this_is_a_follow) if (!data->state.this_is_a_follow)
/* Don't honour a scope given in a Location: header */ /* Don't honour a scope given in a Location: header */
conn->scope = scope; conn->scope = scope;
} } else
infof(data, "Invalid IPv6 address format\n");
} }
} }
@ -3406,13 +3407,14 @@ static CURLcode parse_proxy(struct SessionHandle *data,
/* detect and extract RFC2732-style IPv6-addresses */ /* detect and extract RFC2732-style IPv6-addresses */
if(*proxyptr == '[') { if(*proxyptr == '[') {
char *ptr = ++proxyptr; /* advance beyond the initial bracket */ char *ptr = ++proxyptr; /* advance beyond the initial bracket */
while(*ptr && (ISXDIGIT(*ptr) || (*ptr == ':'))) while(*ptr && (ISXDIGIT(*ptr) || (*ptr == ':') || (*ptr == '%') || (*ptr == '.')))
ptr++; ptr++;
if(*ptr == ']') { if(*ptr == ']') {
/* yeps, it ended nicely with a bracket as well */ /* yeps, it ended nicely with a bracket as well */
*ptr = 0; *ptr++ = 0;
portptr = ptr+1; } else
} infof(data, "Invalid IPv6 address format\n");
portptr = ptr;
/* Note that if this didn't end with a bracket, we still advanced the /* Note that if this didn't end with a bracket, we still advanced the
* proxyptr first, but I can't see anything wrong with that as no host * proxyptr first, but I can't see anything wrong with that as no host
* name nor a numeric can legally start with a bracket. * name nor a numeric can legally start with a bracket.