From be15927819fab6a78d9faea904ee8037ce577984 Mon Sep 17 00:00:00 2001 From: bep Date: Fri, 1 May 2015 17:00:22 +0200 Subject: [PATCH] tpl: check that types in args match the target func's type Fixes #1095 --- tpl/template_funcs.go | 6 ++++++ tpl/template_test.go | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) 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{