ref: be15927819fab6a78d9faea904ee8037ce577984
parent: be049ff96ad5c5af1192316b43a2e9577ef0b065
author: bep <[email protected]>
date: Fri May 1 13:00:22 EDT 2015
tpl: check that types in args match the target func's type Fixes #1095
--- a/tpl/template_funcs.go
+++ b/tpl/template_funcs.go
@@ -672,6 +672,12 @@
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() {
--- a/tpl/template_test.go
+++ b/tpl/template_test.go
@@ -23,7 +23,10 @@
{"{{ 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{