From: David Symonds Date: Mon, 8 Oct 2012 21:10:32 +0000 (+1100) Subject: net/url: report first error from ParseQuery. X-Git-Tag: go1.1rc2~2191 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=c7cc894ef5978746dce145227808287fee627dc0;p=gostls13.git net/url: report first error from ParseQuery. Fixes #4175. R=golang-dev, rsc CC=golang-dev https://golang.org/cl/6610068 --- diff --git a/src/pkg/net/url/url.go b/src/pkg/net/url/url.go index 7b9289468b..d1fff89da7 100644 --- a/src/pkg/net/url/url.go +++ b/src/pkg/net/url/url.go @@ -521,12 +521,16 @@ func parseQuery(m Values, query string) (err error) { } key, err1 := QueryUnescape(key) if err1 != nil { - err = err1 + if err == nil { + err = err1 + } continue } value, err1 = QueryUnescape(value) if err1 != nil { - err = err1 + if err == nil { + err = err1 + } continue } m[key] = append(m[key], value) diff --git a/src/pkg/net/url/url_test.go b/src/pkg/net/url/url_test.go index 9ea8d7ecd1..64f1170027 100644 --- a/src/pkg/net/url/url_test.go +++ b/src/pkg/net/url/url_test.go @@ -7,6 +7,7 @@ package url import ( "fmt" "reflect" + "strings" "testing" ) @@ -779,3 +780,13 @@ func TestRequestURI(t *testing.T) { } } } + +func TestParseFailure(t *testing.T) { + // Test that the first parse error is returned. + const url = "%gh&%ij" + _, err := ParseQuery(url) + errStr := fmt.Sprint(err) + if !strings.Contains(errStr, "%gh") { + t.Errorf(`ParseQuery(%q) returned error %q, want something containing %q"`, url, errStr, "%gh") + } +}