]> Cypherpunks repositories - gostls13.git/commitdiff
net/url: use EscapedPath for url.JoinPath
authorSean Liao <sean@liao.dev>
Sat, 9 Jul 2022 17:38:45 +0000 (18:38 +0100)
committerDamien Neil <dneil@google.com>
Mon, 11 Jul 2022 18:09:14 +0000 (18:09 +0000)
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>

src/net/url/url.go
src/net/url/url_test.go

index db4d6385e334792257c78f8ad080ad73898eaea4..e82ae6aeefd552d78efdee4f270ef37afc167357 100644 (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.
index 478cc34872700419ac3607a5cf53f6e2426e5aee..263eddffcf35d821bd3df4758f466bf17945faf6 100644 (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,