diff --git a/pkg/runtime/helper.go b/pkg/runtime/helper.go index b087d79464..8681912a86 100644 --- a/pkg/runtime/helper.go +++ b/pkg/runtime/helper.go @@ -43,6 +43,10 @@ func GetItemsPtr(list Object) (interface{}, error) { } switch items.Kind() { case reflect.Interface, reflect.Ptr: + target := reflect.TypeOf(items.Interface()).Elem() + if target.Kind() != reflect.Slice { + return nil, fmt.Errorf("items: Expected slice, got %s", target.Kind()) + } return items.Interface(), nil case reflect.Slice: return items.Addr().Interface(), nil diff --git a/pkg/runtime/helper_test.go b/pkg/runtime/helper_test.go index f194b133af..62984c3413 100644 --- a/pkg/runtime/helper_test.go +++ b/pkg/runtime/helper_test.go @@ -86,14 +86,14 @@ func TestExtractListGeneric(t *testing.T) { } type fakePtrInterfaceList struct { - Items []*runtime.Object + Items *[]runtime.Object } func (f fakePtrInterfaceList) IsAnAPIObject() {} func TestExtractListOfInterfacePtrs(t *testing.T) { pl := &fakePtrInterfaceList{ - Items: []*runtime.Object{}, + Items: &[]runtime.Object{}, } list, err := runtime.ExtractList(pl) if err != nil {