mirror of https://github.com/gorilla/websocket.git
Handle query strings properly when parsing url
This commit is contained in:
parent
844dd6d40e
commit
191e6c2bbf
|
@ -95,12 +95,20 @@ func parseURL(s string) (*url.URL, error) {
|
||||||
return nil, errMalformedURL
|
return nil, errMalformedURL
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if i := strings.Index(s, "?"); i >= 0 {
|
||||||
|
u.Host, u.RawQuery = s[:i], s[i+1:]
|
||||||
|
} else {
|
||||||
u.Host = s
|
u.Host = s
|
||||||
|
}
|
||||||
|
|
||||||
u.Opaque = "/"
|
u.Opaque = "/"
|
||||||
if i := strings.Index(s, "/"); i >= 0 {
|
if i := strings.Index(s, "/"); i >= 0 {
|
||||||
u.Host = s[:i]
|
u.Host = s[:i]
|
||||||
u.Opaque = s[i:]
|
u.Opaque = s[i:]
|
||||||
}
|
}
|
||||||
|
if i := strings.Index(u.Opaque, "?"); i >= 0 {
|
||||||
|
u.Opaque = u.Opaque[:i]
|
||||||
|
}
|
||||||
|
|
||||||
if strings.Contains(u.Host, "@") {
|
if strings.Contains(u.Host, "@") {
|
||||||
// Don't bother parsing user information because user information is
|
// Don't bother parsing user information because user information is
|
||||||
|
|
|
@ -21,6 +21,8 @@ var parseURLTests = []struct {
|
||||||
{"wss://example.com/a/b", &url.URL{Scheme: "wss", Host: "example.com", Opaque: "/a/b"}},
|
{"wss://example.com/a/b", &url.URL{Scheme: "wss", Host: "example.com", Opaque: "/a/b"}},
|
||||||
{"ss://example.com/a/b", nil},
|
{"ss://example.com/a/b", nil},
|
||||||
{"ws://webmaster@example.com/", nil},
|
{"ws://webmaster@example.com/", nil},
|
||||||
|
{"ws://example.com/a/b?param1=a¶m2=b", &url.URL{Scheme: "ws", Host: "example.com", Opaque: "/a/b", RawQuery: "param1=a¶m2=b"}},
|
||||||
|
{"ws://example.com:7777?param1=a¶m2=b", &url.URL{Scheme: "ws", Host: "example.com:7777", Opaque: "/", RawQuery: "param1=a¶m2=b"}},
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestParseURL(t *testing.T) {
|
func TestParseURL(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue