diff --git a/tpl/template_funcs.go b/tpl/template_funcs.go index b92c2c955..f704f0a4f 100644 --- a/tpl/template_funcs.go +++ b/tpl/template_funcs.go @@ -330,6 +330,10 @@ func In(l interface{}, v interface{}) bool { case reflect.Array, reflect.Slice: for i := 0; i < lv.Len(); i++ { lvv := lv.Index(i) + lvv, isNil := indirect(lvv) + if isNil { + continue + } switch lvv.Kind() { case reflect.String: if vv.Type() == lvv.Type() && vv.String() == lvv.String() { diff --git a/tpl/template_funcs_test.go b/tpl/template_funcs_test.go index 6afb5eee4..67e23c030 100644 --- a/tpl/template_funcs_test.go +++ b/tpl/template_funcs_test.go @@ -354,9 +354,14 @@ func TestIn(t *testing.T) { expect bool }{ {[]string{"a", "b", "c"}, "b", true}, + {[]interface{}{"a", "b", "c"}, "b", true}, + {[]interface{}{"a", "b", "c"}, "d", false}, {[]string{"a", "b", "c"}, "d", false}, {[]string{"a", "12", "c"}, 12, false}, {[]int{1, 2, 4}, 2, true}, + {[]interface{}{1, 2, 4}, 2, true}, + {[]interface{}{1, 2, 4}, nil, false}, + {[]interface{}{nil}, nil, false}, {[]int{1, 2, 4}, 3, false}, {[]float64{1.23, 2.45, 4.67}, 1.23, true}, {[]float64{1.234567, 2.45, 4.67}, 1.234568, false},