Fixed a problem with any FTP URL or any URLs containing an IPv6 address
being mangled when passed to proxies when CURLOPT_PORT is also set (reported by Pramod Sharma).
This commit is contained in:
parent
660516914e
commit
b4a5ce89c2
4
CHANGES
4
CHANGES
@ -11,6 +11,10 @@ Daniel Fandrich (31 Jul 2008)
|
||||
as well as IPv4 addresses in IPv6 format. Also, better handle the case
|
||||
of a malformatted IPv6 address (avoid empty and NULL strings).
|
||||
|
||||
- Fixed a problem with any FTP URL or any URLs containing an IPv6 address
|
||||
being mangled when passed to proxies when CURLOPT_PORT is also set
|
||||
(reported by Pramod Sharma).
|
||||
|
||||
Daniel Stenberg (30 Jul 2008)
|
||||
- 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
|
||||
|
@ -40,6 +40,7 @@ This release includes the following bugfixes:
|
||||
o CURL_READFUNC_PAUSE problems fixed
|
||||
o --use-ascii now works on Symbian OS, MS-DOS and OS/2
|
||||
o CURLINFO_SSL_VERIFYRESULT is fixed
|
||||
o FTP URLs and IPv6 URLs mangled when sent to proxy with CURLOPT_PORT set
|
||||
|
||||
This release includes the following known bugs:
|
||||
|
||||
@ -60,7 +61,7 @@ advice from friends like these:
|
||||
Rob Crittenden, Dengminwen, Christopher Palow, Hans-Jurgen May,
|
||||
Phil Pellouchoud, Eduard Bloch, John Lightsey, Stephen Collyer, Tor Arntsen,
|
||||
Rolland Dudemaine, Phil Blundell, Scott Barrett, Andreas Schuldei,
|
||||
Peter Lamberg, David Bau
|
||||
Peter Lamberg, David Bau, Pramod Sharma
|
||||
|
||||
|
||||
Thanks! (and sorry if I forgot to mention someone)
|
||||
|
20
lib/url.c
20
lib/url.c
@ -3863,15 +3863,14 @@ static CURLcode create_conn(struct SessionHandle *data,
|
||||
* The conn->host.name is currently [user:passwd@]host[:port] where host
|
||||
* could be a hostname, IPv4 address or IPv6 address.
|
||||
*************************************************************/
|
||||
if((1 == sscanf(conn->host.name, "[%*39[0123456789abcdefABCDEF:.]%c", &endbracket)) &&
|
||||
if((1 == sscanf(conn->host.name, "[%*39[0123456789abcdefABCDEF:.%]%c", &endbracket)) &&
|
||||
(']' == endbracket)) {
|
||||
/* this is a RFC2732-style specified IP-address */
|
||||
conn->bits.ipv6_ip = TRUE;
|
||||
|
||||
conn->host.name++; /* pass the starting bracket */
|
||||
conn->host.name++; /* skip over the starting bracket */
|
||||
tmp = strchr(conn->host.name, ']');
|
||||
*tmp = 0; /* zero terminate */
|
||||
tmp++; /* pass the ending bracket */
|
||||
*tmp++ = 0; /* zero terminate, killing the bracket */
|
||||
if(':' != *tmp)
|
||||
tmp = NULL; /* no port number available */
|
||||
}
|
||||
@ -3887,9 +3886,18 @@ static CURLcode create_conn(struct SessionHandle *data,
|
||||
if(conn->bits.httpproxy) {
|
||||
/* we need to create new URL with the new port number */
|
||||
char *url;
|
||||
bool isftp = strequal("ftp", conn->protostr) ||
|
||||
strequal("ftps", conn->protostr);
|
||||
|
||||
url = aprintf("%s://%s:%d%s", conn->protostr, conn->host.name,
|
||||
conn->remote_port, data->state.path);
|
||||
/*
|
||||
* This synthesized URL isn't always right--suffixes like ;type=A
|
||||
* are stripped off. It would be better to work directly from the
|
||||
* original URL and simply replace the port part of it.
|
||||
*/
|
||||
url = aprintf("%s://%s%s%s:%d%s%s", conn->protostr,
|
||||
conn->bits.ipv6_ip?"[":"", conn->host.name,
|
||||
conn->bits.ipv6_ip?"]":"", conn->remote_port,
|
||||
isftp?"/":"", data->state.path);
|
||||
if(!url)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user