diff --git a/tpl/template_funcs.go b/tpl/template_funcs.go index 9a446d094..4eb06719a 100644 --- a/tpl/template_funcs.go +++ b/tpl/template_funcs.go @@ -672,6 +672,12 @@ func applyFnToThis(fn, this reflect.Value, args ...interface{}) (reflect.Value, return reflect.ValueOf(nil), errors.New("Too many arguments") } + for i := 0; i < num; i++ { + if xt, targ := n[i].Type(), fn.Type().In(i); !xt.AssignableTo(targ) { + return reflect.ValueOf(nil), errors.New("called apply using " + xt.String() + " as type " + targ.String()) + } + } + res := fn.Call(n) if len(res) == 1 || res[1].IsNil() { diff --git a/tpl/template_test.go b/tpl/template_test.go index 0c68516e5..aa501d58a 100644 --- a/tpl/template_test.go +++ b/tpl/template_test.go @@ -23,7 +23,10 @@ func TestTplGoFuzzReports(t *testing.T) { {"{{ slicestr \"000000\" 10}}", 2}, // Issue #1091 {"{{apply .C \"first\" 0 0 0}}", 2}, - {"{{seq 3e80}}", 2}} { + {"{{seq 3e80}}", 2}, + // Issue #1095 + {"{{apply .C \"urlize\" " + + "\".\"}}", 2}} { templ := New() d := &Data{