curl-library
[PATCH 09/10] parse_proxy: Support RFC 6874
From: Till Maas <opensource_at_till.name>
Date: Sat, 15 Mar 2014 19:41:33 +0100
Date: Sat, 15 Mar 2014 19:41:33 +0100
Allow IPv6 zone identifiers, i.e. URLs like 'http://[fe80::1%eth0]' for
proxies.
--- lib/url.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/url.c b/lib/url.c index 6738eb0..96e9b64 100644 --- a/lib/url.c +++ b/lib/url.c @@ -4384,12 +4384,22 @@ static CURLcode parse_proxy(struct SessionHandle *data, /* start scanning for port number at this point */ portptr = proxyptr; - /* detect and extract RFC2732-style IPv6-addresses */ + /* detect and extract RFC6874-style IPv6-addresses */ if(*proxyptr == '[') { char *ptr = ++proxyptr; /* advance beyond the initial bracket */ - while(*ptr && (ISXDIGIT(*ptr) || (*ptr == ':') || (*ptr == '%') || - (*ptr == '.'))) + while(*ptr && (ISXDIGIT(*ptr) || (*ptr == ':') || (*ptr == '.'))) ptr++; + if(*ptr == '%') { + /* There might be a zone identifier */ + if (strncmp("%25", ptr, 3) != 0) { + infof(data, "Please URL encode %% as %%25, see RFC 6874.\n"); + } + ptr++; + /* Allow unresered characters as defined in RFC 3986 */ + while(*ptr && (ISALPHA(*ptr) || ISXDIGIT(*ptr) || (*ptr == '-') || + (*ptr == '.') || (*ptr == '_') || (*ptr == '~'))) + ptr++; + } if(*ptr == ']') /* yeps, it ended nicely with a bracket as well */ *ptr++ = 0; -- 1.8.3.1 ------------------------------------------------------------------- List admin: http://cool.haxx.se/list/listinfo/curl-library Etiquette: http://curl.haxx.se/mail/etiquette.htmlReceived on 2014-03-15