From: Brad Fitzpatrick Date: Wed, 2 Mar 2016 00:46:36 +0000 (+0000) Subject: net/url: fix parsing of URLs ending in question mark X-Git-Tag: go1.7beta1~1614 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=3afbb690d5dd87949c87a8dd8d88cb4f3489f644;p=gostls13.git net/url: fix parsing of URLs ending in question mark Fixes parsing regression from https://golang.org/cl/19931 which added the URL.ForceQuery field. Fixes #14573 Change-Id: I89575cab3f778b1bf78b2389623c866450b26943 Reviewed-on: https://go-review.googlesource.com/20116 Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot Reviewed-by: Andrew Gerrand --- diff --git a/src/net/url/url.go b/src/net/url/url.go index d2ec333310..d9c8c49e94 100644 --- a/src/net/url/url.go +++ b/src/net/url/url.go @@ -461,7 +461,7 @@ func parse(rawurl string, viaRequest bool) (url *URL, err error) { } url.Scheme = strings.ToLower(url.Scheme) - if strings.HasSuffix(rest, "?") { + if strings.HasSuffix(rest, "?") && strings.Count(rest, "?") == 1 { url.ForceQuery = true rest = rest[:len(rest)-1] } else { diff --git a/src/net/url/url_test.go b/src/net/url/url_test.go index a3088ec0a3..896a5da341 100644 --- a/src/net/url/url_test.go +++ b/src/net/url/url_test.go @@ -83,6 +83,17 @@ var urltests = []URLTest{ }, "", }, + // query ending in question mark (Issue 14573) + { + "http://www.google.com/?foo=bar?", + &URL{ + Scheme: "http", + Host: "www.google.com", + Path: "/", + RawQuery: "foo=bar?", + }, + "", + }, // query { "http://www.google.com/?q=go+language", @@ -564,8 +575,8 @@ func ufmt(u *URL) string { pass = p } } - return fmt.Sprintf("opaque=%q, scheme=%q, user=%#v, pass=%#v, host=%q, path=%q, rawpath=%q, rawq=%q, frag=%q", - u.Opaque, u.Scheme, user, pass, u.Host, u.Path, u.RawPath, u.RawQuery, u.Fragment) + return fmt.Sprintf("opaque=%q, scheme=%q, user=%#v, pass=%#v, host=%q, path=%q, rawpath=%q, rawq=%q, frag=%q, forcequery=%v", + u.Opaque, u.Scheme, user, pass, u.Host, u.Path, u.RawPath, u.RawQuery, u.Fragment, u.ForceQuery) } func DoTest(t *testing.T, parse func(string) (*URL, error), name string, tests []URLTest) {