From: Ggicci Date: Mon, 11 Feb 2019 10:00:02 +0000 (+0800) Subject: net/http: clean the path of the stripped URL by StripPrefix X-Git-Tag: go1.13beta1~1379 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=ea65d015b838f2ca75debacacbbb039fe5e96b26;p=gostls13.git net/http: clean the path of the stripped URL by StripPrefix The path of the new stripped URL should also be cleaned. Since an empty path may cause unexpected errors in some HTTP handlers, e.g. http.ServeFile. Fixes #30165 Change-Id: Ib44fdce6388b5d62ffbcab5266925ef8f13f26e2 Reviewed-on: https://go-review.googlesource.com/c/161738 Reviewed-by: Brad Fitzpatrick Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- diff --git a/src/net/http/serve_test.go b/src/net/http/serve_test.go index 6eb0088a96..86cdb34ebb 100644 --- a/src/net/http/serve_test.go +++ b/src/net/http/serve_test.go @@ -2900,6 +2900,15 @@ func TestStripPrefix(t *testing.T) { t.Errorf("test 2: got status %v, want %v", g, e) } res.Body.Close() + + res, err = c.Get(ts.URL + "/foo") + if err != nil { + t.Fatal(err) + } + if g, e := res.Header.Get("X-Path"), "/"; g != e { + t.Errorf("test 3: got %s, want %s", g, e) + } + res.Body.Close() } // https://golang.org/issue/18952. diff --git a/src/net/http/server.go b/src/net/http/server.go index aa9c3f5d2e..e68ec2f01e 100644 --- a/src/net/http/server.go +++ b/src/net/http/server.go @@ -2030,7 +2030,7 @@ func StripPrefix(prefix string, h Handler) Handler { *r2 = *r r2.URL = new(url.URL) *r2.URL = *r.URL - r2.URL.Path = p + r2.URL.Path = cleanPath(p) h.ServeHTTP(w, r2) } else { NotFound(w, r)