summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tpl/template.go5
-rw-r--r--tpl/template_test.go3
2 files changed, 8 insertions, 0 deletions
diff --git a/tpl/template.go b/tpl/template.go
index dedb94f8e..c61a91dc7 100644
--- a/tpl/template.go
+++ b/tpl/template.go
@@ -289,6 +289,11 @@ func indirect(v reflect.Value) (rv reflect.Value, isNil bool) {
// First is exposed to templates, to iterate over the first N items in a
// rangeable list.
func First(limit interface{}, seq interface{}) (interface{}, error) {
+
+ if limit == nil || seq == nil {
+ return nil, errors.New("both limit and seq must be provided")
+ }
+
limitv, err := cast.ToIntE(limit)
if err != nil {
diff --git a/tpl/template_test.go b/tpl/template_test.go
index 1197fa9bf..0c9a1ac91 100644
--- a/tpl/template_test.go
+++ b/tpl/template_test.go
@@ -231,6 +231,9 @@ func TestFirst(t *testing.T) {
{"1", []int{100, 200, 300}, []int{100}},
{int64(-1), []int{100, 200, 300}, false},
{"noint", []int{100, 200, 300}, false},
+ {1, nil, false},
+ {nil, []int{100}, false},
+ {1, t, false},
} {
results, err := First(this.count, this.sequence)
if b, ok := this.expect.(bool); ok && !b {