net/http: roll back "clean the path of the stripped URL by StripPrefix"

Roll back CL 161738. That fix changed StripPrefix behavior in the
general case, not just in the situation where where stripping the
prefix from path resulted in the empty string, causing issue #31622.

That kind of change to StripPrefix behavior is not backwards compatible,
and there can be a smaller, more targeted fix for the original issue.

Fixes #31622
Updates #30165

Change-Id: Ie2fcfe6787a32e44f71d564d8f9c9d580fc6f704
Reviewed-on: https://go-review.googlesource.com/c/go/+/180498
Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
Dmitri Shuralyov 2019-06-04 21:21:33 +00:00
parent 27eaffc053
commit 003dbc4cda
2 changed files with 1 additions and 10 deletions

View File

@ -2900,15 +2900,6 @@ 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.

View File

@ -2042,7 +2042,7 @@ func StripPrefix(prefix string, h Handler) Handler {
*r2 = *r
r2.URL = new(url.URL)
*r2.URL = *r.URL
r2.URL.Path = cleanPath(p)
r2.URL.Path = p
h.ServeHTTP(w, r2)
} else {
NotFound(w, r)