From 1284d7d403875d11cff97dfb7c946a7ee11e1569 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Thu, 25 Jun 2015 11:48:27 +0200 Subject: [PATCH] net/url: don't escape star requests when writing requests Includes a new net/http test too. Fixes #11202 Change-Id: I61edc594f4de8eb6780b8dfa221269dd482e8f35 Reviewed-on: https://go-review.googlesource.com/11492 Reviewed-by: Dmitry Vyukov Reviewed-by: Russ Cox --- src/net/http/request_test.go | 26 ++++++++++++++++++++++++++ src/net/url/url.go | 3 +++ src/net/url/url_test.go | 11 +++++++++++ 3 files changed, 40 insertions(+) diff --git a/src/net/http/request_test.go b/src/net/http/request_test.go index a518b00449..0668fff9ce 100644 --- a/src/net/http/request_test.go +++ b/src/net/http/request_test.go @@ -513,6 +513,32 @@ func TestRequestWriteBufferedWriter(t *testing.T) { } } +func TestStarRequest(t *testing.T) { + req, err := ReadRequest(bufio.NewReader(strings.NewReader("M-SEARCH * HTTP/1.1\r\n\r\n"))) + if err != nil { + return + } + var out bytes.Buffer + if err := req.Write(&out); err != nil { + t.Fatal(err) + } + back, err := ReadRequest(bufio.NewReader(&out)) + if err != nil { + t.Fatal(err) + } + // Ignore the Headers (the User-Agent breaks the deep equal, + // but we don't care about it) + req.Header = nil + back.Header = nil + if !reflect.DeepEqual(req, back) { + t.Errorf("Original request doesn't match Request read back.") + t.Logf("Original: %#v", req) + t.Logf("Original.URL: %#v", req.URL) + t.Logf("Wrote: %s", out.Bytes()) + t.Logf("Read back (doesn't match Original): %#v", back) + } +} + func testMissingFile(t *testing.T, req *Request) { f, fh, err := req.FormFile("missing") if f != nil { diff --git a/src/net/url/url.go b/src/net/url/url.go index 7eb5b7f176..2dc5e30365 100644 --- a/src/net/url/url.go +++ b/src/net/url/url.go @@ -537,6 +537,9 @@ func (u *URL) EscapedPath() string { return u.RawPath } } + if u.Path == "*" { + return "*" // don't escape (Issue 11202) + } return escape(u.Path, encodePath) } diff --git a/src/net/url/url_test.go b/src/net/url/url_test.go index 31ef4c27c1..a85014690d 100644 --- a/src/net/url/url_test.go +++ b/src/net/url/url_test.go @@ -1107,6 +1107,17 @@ func TestParseAuthority(t *testing.T) { } } +// Issue 11202 +func TestStarRequest(t *testing.T) { + u, err := Parse("*") + if err != nil { + t.Fatal(err) + } + if got, want := u.RequestURI(), "*"; got != want { + t.Errorf("RequestURI = %q; want %q", got, want) + } +} + type shouldEscapeTest struct { in byte mode encoding -- 2.50.0