diff options
author | max <max@tclers.tk> | 2012-07-08 10:55:49 (GMT) |
---|---|---|
committer | max <max@tclers.tk> | 2012-07-08 10:55:49 (GMT) |
commit | abeb1a6a1e7d636379b0071d7a33a4395b6ec707 (patch) | |
tree | 9c9e9eb612da3d4636c26e265416583202c2ab8d /library/http | |
parent | 4b87d73b631c0e6b946c1e7a43b9cbb528674b18 (diff) | |
download | tcl-abeb1a6a1e7d636379b0071d7a33a4395b6ec707.zip tcl-abeb1a6a1e7d636379b0071d7a33a4395b6ec707.tar.gz tcl-abeb1a6a1e7d636379b0071d7a33a4395b6ec707.tar.bz2 |
Add fix and test for URLs that contain literal IPv6 addresses. [Bug 3531209]
Diffstat (limited to 'library/http')
-rw-r--r-- | library/http/http.tcl | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/library/http/http.tcl b/library/http/http.tcl index b5ce82b..2653c3e 100644 --- a/library/http/http.tcl +++ b/library/http/http.tcl @@ -419,7 +419,6 @@ proc http::geturl {url args} { # Note that the RE actually combines the user and password parts, as # recommended in RFC 3986. Indeed, that RFC states that putting passwords # in URLs is a Really Bad Idea, something with which I would agree utterly. - # Also note that we do not currently support IPv6 addresses. # # From a validation perspective, we need to ensure that the parts of the # URL that are going to the server are correctly encoded. This is only @@ -434,7 +433,10 @@ proc http::geturl {url args} { [^@/\#?]+ # <userinfo part of authority> ) @ )? - ( [^/:\#?]+ ) # <host part of authority> + ( # <host part of authority> + [^/:\#?]+ | # host name or IPv4 address + \[ [^/\#?]+ \] # IPv6 address in square brackets + ) (?: : (\d+) )? # <port part of authority> )? ( / [^\#]*)? # <path> (including query) @@ -448,6 +450,7 @@ proc http::geturl {url args} { return -code error "Unsupported URL: $url" } # Phase two: validate + set host [string trim $host {[]}]; # strip square brackets from IPv6 address if {$host eq ""} { # Caller has to provide a host name; we do not have a "default host" # that would enable us to handle relative URLs. |