mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 19:56:01 +00:00
Merge pull request #128940 from jpbetz/automated-cherry-pick-of-#128737-upstream-release-1.31
Automated cherry pick of #128737: Fix potential nil pointer dereference in selectable fields check
This commit is contained in:
commit
1c1db14595
@ -623,7 +623,7 @@ func buildSelectableFields(crd *apiextensionsv1.CustomResourceDefinition, versio
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if specVersion == nil && len(specVersion.SelectableFields) == 0 {
|
if specVersion == nil || len(specVersion.SelectableFields) == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
selectableFields := make([]any, len(specVersion.SelectableFields))
|
selectableFields := make([]any, len(specVersion.SelectableFields))
|
||||||
|
@ -45,31 +45,41 @@ func TestNewBuilder(t *testing.T) {
|
|||||||
wantedSchema string
|
wantedSchema string
|
||||||
wantedItemsSchema string
|
wantedItemsSchema string
|
||||||
|
|
||||||
v2 bool // produce OpenAPIv2
|
v2 bool // produce OpenAPIv2
|
||||||
|
includeSelectable bool // include selectable fields
|
||||||
|
version string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
"nil",
|
"nil",
|
||||||
"",
|
"",
|
||||||
`{"type":"object","x-kubernetes-group-version-kind":[{"group":"bar.k8s.io","kind":"Foo","version":"v1"}]}`, `{"$ref":"#/definitions/io.k8s.bar.v1.Foo"}`,
|
`{"type":"object","x-kubernetes-group-version-kind":[{"group":"bar.k8s.io","kind":"Foo","version":"v1"}]}`, `{"$ref":"#/definitions/io.k8s.bar.v1.Foo"}`,
|
||||||
true,
|
true,
|
||||||
|
false,
|
||||||
|
"v1",
|
||||||
},
|
},
|
||||||
{"with properties",
|
{"with properties",
|
||||||
`{"type":"object","properties":{"spec":{"type":"object"},"status":{"type":"object"}}}`,
|
`{"type":"object","properties":{"spec":{"type":"object"},"status":{"type":"object"}}}`,
|
||||||
`{"type":"object","properties":{"apiVersion":{"type":"string"},"kind":{"type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"type":"object"},"status":{"type":"object"}},"x-kubernetes-group-version-kind":[{"group":"bar.k8s.io","kind":"Foo","version":"v1"}]}`,
|
`{"type":"object","properties":{"apiVersion":{"type":"string"},"kind":{"type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"type":"object"},"status":{"type":"object"}},"x-kubernetes-group-version-kind":[{"group":"bar.k8s.io","kind":"Foo","version":"v1"}]}`,
|
||||||
`{"$ref":"#/definitions/io.k8s.bar.v1.Foo"}`,
|
`{"$ref":"#/definitions/io.k8s.bar.v1.Foo"}`,
|
||||||
true,
|
true,
|
||||||
|
false,
|
||||||
|
"v1",
|
||||||
},
|
},
|
||||||
{"type only",
|
{"type only",
|
||||||
`{"type":"object"}`,
|
`{"type":"object"}`,
|
||||||
`{"type":"object","properties":{"apiVersion":{"type":"string"},"kind":{"type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}},"x-kubernetes-group-version-kind":[{"group":"bar.k8s.io","kind":"Foo","version":"v1"}]}`,
|
`{"type":"object","properties":{"apiVersion":{"type":"string"},"kind":{"type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"}},"x-kubernetes-group-version-kind":[{"group":"bar.k8s.io","kind":"Foo","version":"v1"}]}`,
|
||||||
`{"$ref":"#/definitions/io.k8s.bar.v1.Foo"}`,
|
`{"$ref":"#/definitions/io.k8s.bar.v1.Foo"}`,
|
||||||
true,
|
true,
|
||||||
|
false,
|
||||||
|
"v1",
|
||||||
},
|
},
|
||||||
{"preserve unknown at root v2",
|
{"preserve unknown at root v2",
|
||||||
`{"type":"object","x-kubernetes-preserve-unknown-fields":true}`,
|
`{"type":"object","x-kubernetes-preserve-unknown-fields":true}`,
|
||||||
`{"type":"object","x-kubernetes-group-version-kind":[{"group":"bar.k8s.io","kind":"Foo","version":"v1"}]}`,
|
`{"type":"object","x-kubernetes-group-version-kind":[{"group":"bar.k8s.io","kind":"Foo","version":"v1"}]}`,
|
||||||
`{"$ref":"#/definitions/io.k8s.bar.v1.Foo"}`,
|
`{"$ref":"#/definitions/io.k8s.bar.v1.Foo"}`,
|
||||||
true,
|
true,
|
||||||
|
false,
|
||||||
|
"v1",
|
||||||
},
|
},
|
||||||
{"with extensions",
|
{"with extensions",
|
||||||
`
|
`
|
||||||
@ -173,6 +183,17 @@ func TestNewBuilder(t *testing.T) {
|
|||||||
}`,
|
}`,
|
||||||
`{"$ref":"#/definitions/io.k8s.bar.v1.Foo"}`,
|
`{"$ref":"#/definitions/io.k8s.bar.v1.Foo"}`,
|
||||||
true,
|
true,
|
||||||
|
false,
|
||||||
|
"v1",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"include selectable fields with different version",
|
||||||
|
`{"type":"object","properties":{"spec":{"type":"object"},"status":{"type":"object"}}}`,
|
||||||
|
`{"type":"object","properties":{"apiVersion":{"type":"string"},"kind":{"type":"string"},"metadata":{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta"},"spec":{"type":"object"},"status":{"type":"object"}},"x-kubernetes-group-version-kind":[{"group":"bar.k8s.io","kind":"Foo","version":"v2"}]}`,
|
||||||
|
`{"$ref":"#/definitions/io.k8s.bar.v2.Foo"}`,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
"v2",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
@ -212,7 +233,7 @@ func TestNewBuilder(t *testing.T) {
|
|||||||
},
|
},
|
||||||
Scope: apiextensionsv1.NamespaceScoped,
|
Scope: apiextensionsv1.NamespaceScoped,
|
||||||
},
|
},
|
||||||
}, "v1", schema, Options{V2: tt.v2})
|
}, tt.version, schema, Options{V2: tt.v2, IncludeSelectableFields: tt.includeSelectable})
|
||||||
|
|
||||||
var wantedSchema, wantedItemsSchema spec.Schema
|
var wantedSchema, wantedItemsSchema spec.Schema
|
||||||
if err := json.Unmarshal([]byte(tt.wantedSchema), &wantedSchema); err != nil {
|
if err := json.Unmarshal([]byte(tt.wantedSchema), &wantedSchema); err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user