Skip to content

Commit 1284d7d

Browse files
bradfitzrsc
authored andcommitted
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 <[email protected]> Reviewed-by: Russ Cox <[email protected]>
1 parent 379d832 commit 1284d7d

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-0
lines changed

src/net/http/request_test.go

+26
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,32 @@ func TestRequestWriteBufferedWriter(t *testing.T) {
513513
}
514514
}
515515

516+
func TestStarRequest(t *testing.T) {
517+
req, err := ReadRequest(bufio.NewReader(strings.NewReader("M-SEARCH * HTTP/1.1\r\n\r\n")))
518+
if err != nil {
519+
return
520+
}
521+
var out bytes.Buffer
522+
if err := req.Write(&out); err != nil {
523+
t.Fatal(err)
524+
}
525+
back, err := ReadRequest(bufio.NewReader(&out))
526+
if err != nil {
527+
t.Fatal(err)
528+
}
529+
// Ignore the Headers (the User-Agent breaks the deep equal,
530+
// but we don't care about it)
531+
req.Header = nil
532+
back.Header = nil
533+
if !reflect.DeepEqual(req, back) {
534+
t.Errorf("Original request doesn't match Request read back.")
535+
t.Logf("Original: %#v", req)
536+
t.Logf("Original.URL: %#v", req.URL)
537+
t.Logf("Wrote: %s", out.Bytes())
538+
t.Logf("Read back (doesn't match Original): %#v", back)
539+
}
540+
}
541+
516542
func testMissingFile(t *testing.T, req *Request) {
517543
f, fh, err := req.FormFile("missing")
518544
if f != nil {

src/net/url/url.go

+3
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,9 @@ func (u *URL) EscapedPath() string {
537537
return u.RawPath
538538
}
539539
}
540+
if u.Path == "*" {
541+
return "*" // don't escape (Issue 11202)
542+
}
540543
return escape(u.Path, encodePath)
541544
}
542545

src/net/url/url_test.go

+11
Original file line numberDiff line numberDiff line change
@@ -1107,6 +1107,17 @@ func TestParseAuthority(t *testing.T) {
11071107
}
11081108
}
11091109

1110+
// Issue 11202
1111+
func TestStarRequest(t *testing.T) {
1112+
u, err := Parse("*")
1113+
if err != nil {
1114+
t.Fatal(err)
1115+
}
1116+
if got, want := u.RequestURI(), "*"; got != want {
1117+
t.Errorf("RequestURI = %q; want %q", got, want)
1118+
}
1119+
}
1120+
11101121
type shouldEscapeTest struct {
11111122
in byte
11121123
mode encoding

0 commit comments

Comments
 (0)