diff --git a/staging/src/k8s.io/apiserver/pkg/registry/rest/validate.go b/staging/src/k8s.io/apiserver/pkg/registry/rest/validate.go index 09993eb4563..7f02f1fa4e4 100644 --- a/staging/src/k8s.io/apiserver/pkg/registry/rest/validate.go +++ b/staging/src/k8s.io/apiserver/pkg/registry/rest/validate.go @@ -102,10 +102,12 @@ func parseSubresourcePath(subresourcePath string) ([]string, error) { if len(subresourcePath) == 0 { return nil, nil } - if subresourcePath[0] != '/' { - return nil, fmt.Errorf("invalid subresource path: %s", subresourcePath) + parts := strings.Split(subresourcePath, "/") + for _, part := range parts { + if len(part) == 0 { + return nil, fmt.Errorf("invalid subresource path: %s", subresourcePath) + } } - parts := strings.Split(subresourcePath[1:], "/") return parts, nil } diff --git a/staging/src/k8s.io/apiserver/pkg/registry/rest/validate_test.go b/staging/src/k8s.io/apiserver/pkg/registry/rest/validate_test.go index 2e419d46125..15f40d51414 100644 --- a/staging/src/k8s.io/apiserver/pkg/registry/rest/validate_test.go +++ b/staging/src/k8s.io/apiserver/pkg/registry/rest/validate_test.go @@ -85,15 +85,22 @@ func TestValidateDeclaratively(t *testing.T) { expected: field.ErrorList{invalidRestartPolicyErr, mutatedRestartPolicyErr}, }, { - name: "update subresource", - subresource: "/status", + name: "update subresource with declarative validation", + subresource: "status", object: valid, oldObject: valid, expected: field.ErrorList{invalidStatusErr}, }, + { + name: "update subresource without declarative validation", + subresource: "scale", + object: valid, + oldObject: valid, + expected: field.ErrorList{}, // Expect no errors if there is no registered validation + }, { name: "invalid subresource", - subresource: "invalid/status", + subresource: "/invalid/status", object: valid, oldObject: valid, expected: field.ErrorList{invalidSubresourceErr},