net/url: use EscapedPath for url.JoinPath

Fixes #53763

Change-Id: I08b53f159ebdce7907e8cc17316fd0c982363239
Reviewed-on: https://go-review.googlesource.com/c/go/+/416774
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
Sean Liao 2022-07-09 18:38:45 +01:00 committed by Damien Neil
parent 398dcd1cf0
commit bf5898ef53
2 changed files with 11 additions and 1 deletions

View file

@ -1193,7 +1193,7 @@ func (u *URL) UnmarshalBinary(text []byte) error {
func (u *URL) JoinPath(elem ...string) *URL {
url := *u
if len(elem) > 0 {
elem = append([]string{u.Path}, elem...)
elem = append([]string{u.EscapedPath()}, elem...)
p := path.Join(elem...)
// path.Join will remove any trailing slashes.
// Preserve at least one.

View file

@ -2119,6 +2119,16 @@ func TestJoinPath(t *testing.T) {
elem: nil,
out: "https://go.googlesource.com/",
},
{
base: "https://go.googlesource.com/a%2fb",
elem: []string{"c"},
out: "https://go.googlesource.com/a%2fb/c",
},
{
base: "https://go.googlesource.com/a%2fb",
elem: []string{"c%2fd"},
out: "https://go.googlesource.com/a%2fb/c%2fd",
},
{
base: "/",
elem: nil,