]> Cypherpunks repositories - gostls13.git/commitdiff
net/url: allow spaces in IPv6 zone identifier for Windows
authorRuss Cox <rsc@golang.org>
Sun, 24 Jan 2016 04:31:23 +0000 (23:31 -0500)
committerRuss Cox <rsc@golang.org>
Tue, 26 Jan 2016 16:24:06 +0000 (16:24 +0000)
Windows: putting spaces where they don't belong since Windows NT 3.1.

Fixes #14002.

Change-Id: I48ba8a7bfe3f27f83c8aa8355a8d355933d6c5df
Reviewed-on: https://go-review.googlesource.com/18855
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/net/url/url.go
src/net/url/url_test.go

index 3ea75637ac5bd2bd909d81659a122fa18557c147..1a93e3496edb00446c0c667aff6ea66258c6344f 100644 (file)
@@ -193,8 +193,9 @@ func unescape(s string, mode encoding) (string, error) {
                                // that are valid host name bytes in their unescaped form.
                                // That is, you can use escaping in the zone identifier but not
                                // to introduce bytes you couldn't just write directly.
+                               // But Windows puts spaces here! Yay.
                                v := unhex(s[i+1])<<4 | unhex(s[i+2])
-                               if s[i:i+3] != "%25" && shouldEscape(v, encodeHost) {
+                               if s[i:i+3] != "%25" && v != ' ' && shouldEscape(v, encodeHost) {
                                        return "", EscapeError(s[i : i+3])
                                }
                        }
index c31b18980ed5b18332ee72d66205ab805f0ed74a..d3f8487bd7c0addb96f8e7329f98619308589540 100644 (file)
@@ -531,6 +531,17 @@ var urltests = []URLTest{
                },
                "",
        },
+       // spaces in hosts are disallowed but escaped spaces in IPv6 scope IDs are grudgingly OK.
+       // This happens on Windows.
+       // golang.org/issue/14002
+       {
+               "tcp://[2020::2020:20:2020:2020%25Windows%20Loves%20Spaces]:2020",
+               &URL{
+                       Scheme: "tcp",
+                       Host:   "[2020::2020:20:2020:2020%Windows Loves Spaces]:2020",
+               },
+               "",
+       },
 }
 
 // more useful string for debugging than fmt's struct printer