diff --git a/core/mapping/unmarshaler.go b/core/mapping/unmarshaler.go index 7df118e9e1bb..b06385b443a5 100644 --- a/core/mapping/unmarshaler.go +++ b/core/mapping/unmarshaler.go @@ -249,6 +249,9 @@ func (u *Unmarshaler) fillSliceFromString(fieldType reflect.Type, value reflect. func (u *Unmarshaler) fillSliceValue(slice reflect.Value, index int, baseKind reflect.Kind, value any, fullName string) error { + if value == nil { + return errUnsupportedType + } ithVal := slice.Index(index) switch v := value.(type) { case fmt.Stringer: diff --git a/core/mapping/unmarshaler_test.go b/core/mapping/unmarshaler_test.go index e0bd07d36588..181045378378 100644 --- a/core/mapping/unmarshaler_test.go +++ b/core/mapping/unmarshaler_test.go @@ -1329,6 +1329,20 @@ func TestUnmarshalInt64Slice(t *testing.T) { } } +func TestUnmarshalNullableSlice(t *testing.T) { + var v struct { + Ages []int64 `key:"ages"` + Slice []int8 `key:"slice"` + } + m := map[string]any{ + "ages": []int64{1, 2}, + "slice": `[null,2]`, + } + + ast := assert.New(t) + ast.Equal(UnmarshalKey(m, &v), errUnsupportedType) +} + func TestUnmarshalIntSlice(t *testing.T) { var v struct { Ages []int `key:"ages"`