Skip to content

Commit bcfcb89

Browse files
authored
Path escape fix in UserService.GetPackage() (#3522)
1 parent 8f3c64e commit bcfcb89

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

github/users_packages.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package github
88
import (
99
"context"
1010
"fmt"
11+
"net/url"
1112
)
1213

1314
// ListPackages lists the packages for a user. Passing the empty string for "user" will
@@ -55,9 +56,9 @@ func (s *UsersService) ListPackages(ctx context.Context, user string, opts *Pack
5556
func (s *UsersService) GetPackage(ctx context.Context, user, packageType, packageName string) (*Package, *Response, error) {
5657
var u string
5758
if user != "" {
58-
u = fmt.Sprintf("users/%v/packages/%v/%v", user, packageType, packageName)
59+
u = fmt.Sprintf("users/%v/packages/%v/%v", user, packageType, url.PathEscape(packageName))
5960
} else {
60-
u = fmt.Sprintf("user/packages/%v/%v", packageType, packageName)
61+
u = fmt.Sprintf("user/packages/%v/%v", packageType, url.PathEscape(packageName))
6162
}
6263

6364
req, err := s.client.NewRequest("GET", u, nil)

github/users_packages_test.go

+13-10
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"context"
1010
"encoding/json"
1111
"fmt"
12+
"io"
1213
"net/http"
1314
"testing"
1415

@@ -131,42 +132,44 @@ func TestUsersService_specifiedUser_GetPackage(t *testing.T) {
131132
t.Parallel()
132133
client, mux, _ := setup(t)
133134

134-
mux.HandleFunc("/users/u/packages/container/hello_docker", func(w http.ResponseWriter, r *http.Request) {
135+
mux.HandleFunc("/users/u/packages/container/hello%2fhello_docker", func(w http.ResponseWriter, r *http.Request) {
135136
testMethod(t, r, "GET")
136-
fmt.Fprint(w, `{
137+
_, err := io.WriteString(w, `{
137138
"id": 197,
138-
"name": "hello_docker",
139+
"name": "hello/hello_docker",
139140
"package_type": "container",
140141
"version_count": 1,
141142
"visibility": "private",
142-
"url": "https://api.github.com/orgs/github/packages/container/hello_docker",
143+
"url": "https://api.github.com/orgs/github/packages/container/hello%2Fhello_docker",
143144
"created_at": `+referenceTimeStr+`,
144145
"updated_at": `+referenceTimeStr+`,
145-
"html_url": "https://github.com/orgs/github/packages/container/package/hello_docker"
146+
"html_url": "https://github.com/orgs/github/packages/container/package/hello%2Fhello_docker"
146147
}`)
148+
if err != nil {
149+
t.Fatal("Failed to write test response: ", err)
150+
}
147151
})
148152

149153
ctx := context.Background()
150-
packages, _, err := client.Users.GetPackage(ctx, "u", "container", "hello_docker")
154+
packages, _, err := client.Users.GetPackage(ctx, "u", "container", "hello/hello_docker")
151155
if err != nil {
152156
t.Errorf("Users.GetPackage returned error: %v", err)
153157
}
154158

155159
want := &Package{
156160
ID: Ptr(int64(197)),
157-
Name: Ptr("hello_docker"),
161+
Name: Ptr("hello/hello_docker"),
158162
PackageType: Ptr("container"),
159163
VersionCount: Ptr(int64(1)),
160164
Visibility: Ptr("private"),
161-
URL: Ptr("https://api.github.com/orgs/github/packages/container/hello_docker"),
162-
HTMLURL: Ptr("https://github.com/orgs/github/packages/container/package/hello_docker"),
165+
URL: Ptr("https://api.github.com/orgs/github/packages/container/hello%2Fhello_docker"),
166+
HTMLURL: Ptr("https://github.com/orgs/github/packages/container/package/hello%2Fhello_docker"),
163167
CreatedAt: &Timestamp{referenceTime},
164168
UpdatedAt: &Timestamp{referenceTime},
165169
}
166170
if !cmp.Equal(packages, want) {
167171
t.Errorf("Users.specifiedUser_GetPackage returned %+v, want %+v", packages, want)
168172
}
169-
170173
const methodName = "GetPackage"
171174
testBadOptions(t, methodName, func() (err error) {
172175
_, _, err = client.Users.GetPackage(ctx, "\n", "\n", "\n")

0 commit comments

Comments
 (0)