]> Cypherpunks repositories - gostls13.git/commitdiff
net/url: don't escape star requests when writing requests
authorBrad Fitzpatrick <bradfitz@golang.org>
Thu, 25 Jun 2015 09:48:27 +0000 (11:48 +0200)
committerRuss Cox <rsc@golang.org>
Fri, 26 Jun 2015 17:43:29 +0000 (17:43 +0000)
Includes a new net/http test too.

Fixes #11202

Change-Id: I61edc594f4de8eb6780b8dfa221269dd482e8f35
Reviewed-on: https://go-review.googlesource.com/11492
Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
Reviewed-by: Russ Cox <rsc@golang.org>
src/net/http/request_test.go
src/net/url/url.go
src/net/url/url_test.go

index a518b004496b46f49af83e222ca4ca41af2abf50..0668fff9ce7c60f947dd1fff8f9aa430c34d0ff3 100644 (file)
@@ -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 {
index 7eb5b7f176aeb5ce8965bb8f472df43b6721d7e8..2dc5e3036551b872533eaf5daebd3de9859b29b7 100644 (file)
@@ -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)
 }
 
index 31ef4c27c1ca3fe18caef251d061fbb5013eb77c..a85014690d9dc021007daaad6eed0008d83eb2a1 100644 (file)
@@ -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