Commit 038b8139 authored by Russ Cox's avatar Russ Cox

net/url: allow spaces in IPv6 zone identifier for Windows

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/18855Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
parent 980364b7
...@@ -193,8 +193,9 @@ func unescape(s string, mode encoding) (string, error) { ...@@ -193,8 +193,9 @@ func unescape(s string, mode encoding) (string, error) {
// that are valid host name bytes in their unescaped form. // that are valid host name bytes in their unescaped form.
// That is, you can use escaping in the zone identifier but not // That is, you can use escaping in the zone identifier but not
// to introduce bytes you couldn't just write directly. // 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]) 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]) return "", EscapeError(s[i : i+3])
} }
} }
......
...@@ -531,6 +531,17 @@ var urltests = []URLTest{ ...@@ -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 // more useful string for debugging than fmt's struct printer
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment