mirror of
https://github.com/golang/go
synced 2024-11-12 08:40:21 -07:00
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/18855 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
980364b7a2
commit
038b813943
@ -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])
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user