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:
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
|
as well as IPv4 addresses in IPv6 format. Also, better handle the case
|
||||||
of a malformatted IPv6 address (avoid empty and NULL strings).
|
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)
|
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
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ This release includes the following bugfixes:
|
|||||||
o CURL_READFUNC_PAUSE problems fixed
|
o CURL_READFUNC_PAUSE problems fixed
|
||||||
o --use-ascii now works on Symbian OS, MS-DOS and OS/2
|
o --use-ascii now works on Symbian OS, MS-DOS and OS/2
|
||||||
o CURLINFO_SSL_VERIFYRESULT is fixed
|
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:
|
This release includes the following known bugs:
|
||||||
|
|
||||||
@@ -60,7 +61,7 @@ advice from friends like these:
|
|||||||
Rob Crittenden, Dengminwen, Christopher Palow, Hans-Jurgen May,
|
Rob Crittenden, Dengminwen, Christopher Palow, Hans-Jurgen May,
|
||||||
Phil Pellouchoud, Eduard Bloch, John Lightsey, Stephen Collyer, Tor Arntsen,
|
Phil Pellouchoud, Eduard Bloch, John Lightsey, Stephen Collyer, Tor Arntsen,
|
||||||
Rolland Dudemaine, Phil Blundell, Scott Barrett, Andreas Schuldei,
|
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)
|
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
|
* The conn->host.name is currently [user:passwd@]host[:port] where host
|
||||||
* could be a hostname, IPv4 address or IPv6 address.
|
* 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)) {
|
(']' == endbracket)) {
|
||||||
/* this is a RFC2732-style specified IP-address */
|
/* this is a RFC2732-style specified IP-address */
|
||||||
conn->bits.ipv6_ip = TRUE;
|
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 = strchr(conn->host.name, ']');
|
||||||
*tmp = 0; /* zero terminate */
|
*tmp++ = 0; /* zero terminate, killing the bracket */
|
||||||
tmp++; /* pass the ending bracket */
|
|
||||||
if(':' != *tmp)
|
if(':' != *tmp)
|
||||||
tmp = NULL; /* no port number available */
|
tmp = NULL; /* no port number available */
|
||||||
}
|
}
|
||||||
@@ -3887,9 +3886,18 @@ static CURLcode create_conn(struct SessionHandle *data,
|
|||||||
if(conn->bits.httpproxy) {
|
if(conn->bits.httpproxy) {
|
||||||
/* we need to create new URL with the new port number */
|
/* we need to create new URL with the new port number */
|
||||||
char *url;
|
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)
|
if(!url)
|
||||||
return CURLE_OUT_OF_MEMORY;
|
return CURLE_OUT_OF_MEMORY;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user