aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Fandrich <dan@coneharvesters.com>2008-07-31 20:04:00 +0000
committerDan Fandrich <dan@coneharvesters.com>2008-07-31 20:04:00 +0000
commit660516914e35631714c73a2002ccfa4d854a0290 (patch)
treeab82ce8a61ad7a6ec8af16b0c92e720ad5844cbc
parent4c1c479fcf27cdc9090434474aa01ebcd36d1f08 (diff)
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).
-rw-r--r--CHANGES5
-rw-r--r--docs/MANUAL3
-rw-r--r--lib/url.c12
3 files changed, 15 insertions, 5 deletions
diff --git a/CHANGES b/CHANGES
index 2f3e8c515..1970b56c1 100644
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,11 @@
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)
- 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
diff --git a/docs/MANUAL b/docs/MANUAL
index 30a932272..3b1195c0b 100644
--- a/docs/MANUAL
+++ b/docs/MANUAL
@@ -904,6 +904,9 @@ IPv6
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
diff --git a/lib/url.c b/lib/url.c
index e39a3d2a0..2aec5656d 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -3102,7 +3102,8 @@ static CURLcode ParseURLAndFillConnection(struct SessionHandle *data,
if (!data->state.this_is_a_follow)
/* Don't honour a scope given in a Location: header */
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 */
if(*proxyptr == '[') {
char *ptr = ++proxyptr; /* advance beyond the initial bracket */
- while(*ptr && (ISXDIGIT(*ptr) || (*ptr == ':')))
+ while(*ptr && (ISXDIGIT(*ptr) || (*ptr == ':') || (*ptr == '%') || (*ptr == '.')))
ptr++;
if(*ptr == ']') {
/* yeps, it ended nicely with a bracket as well */
- *ptr = 0;
- portptr = ptr+1;
- }
+ *ptr++ = 0;
+ } else
+ infof(data, "Invalid IPv6 address format\n");
+ portptr = ptr;
/* 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
* name nor a numeric can legally start with a bracket.