diff options
| author | Didier Spezia <didier.06@gmail.com> | 2015-05-01 18:20:31 +0000 |
|---|---|---|
| committer | Rob Pike <r@golang.org> | 2015-05-01 21:27:27 +0000 |
| commit | 80cedf3e8f912d7d7defd8e0495c6fd67d229555 (patch) | |
| tree | 690edaec69371300f2b12adf8f53e3ff556c8e5a /src/text | |
| parent | 8a072ada84d552a5d1511271f36d91f4fb236908 (diff) | |
| download | go-80cedf3e8f912d7d7defd8e0495c6fd67d229555.tar.xz | |
text/template: detect unmatched else at parsing time
An unmatched {{else}} should trigger a parsing error.
The top level parser is able to issue an error in case
of unmatched {{end}}. It does it a posteriori (i.e. after having
parsed the action).
Extend this behavior to also check for unmatched {{else}}
Fixes #10611
Change-Id: I1d4f433cc64e11bea5f4d61419ccc707ac01bb1d
Reviewed-on: https://go-review.googlesource.com/9620
Reviewed-by: Rob Pike <r@golang.org>
Diffstat (limited to 'src/text')
| -rw-r--r-- | src/text/template/parse/parse.go | 7 | ||||
| -rw-r--r-- | src/text/template/parse/parse_test.go | 3 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/text/template/parse/parse.go b/src/text/template/parse/parse.go index af33880c15..d0efcbf609 100644 --- a/src/text/template/parse/parse.go +++ b/src/text/template/parse/parse.go @@ -288,11 +288,12 @@ func (t *Tree) parse(treeSet map[string]*Tree) (next Node) { } t.backup2(delim) } - n := t.textOrAction() - if n.Type() == nodeEnd { + switch n := t.textOrAction(); n.Type() { + case nodeEnd, nodeElse: t.errorf("unexpected %s", n) + default: + t.Root.append(n) } - t.Root.append(n) } return nil } diff --git a/src/text/template/parse/parse_test.go b/src/text/template/parse/parse_test.go index 4a504fa7c8..faac06fe5a 100644 --- a/src/text/template/parse/parse_test.go +++ b/src/text/template/parse/parse_test.go @@ -230,6 +230,9 @@ var parseTests = []parseTest{ // Errors. {"unclosed action", "hello{{range", hasError, ""}, {"unmatched end", "{{end}}", hasError, ""}, + {"unmatched else", "{{else}}", hasError, ""}, + {"unmatched else after if", "{{if .X}}hello{{end}}{{else}}", hasError, ""}, + {"multiple else", "{{if .X}}1{{else}}2{{else}}3{{end}}", hasError, ""}, {"missing end", "hello{{range .x}}", hasError, ""}, {"missing end after else", "hello{{range .x}}{{else}}", hasError, ""}, {"undefined function", "hello{{undefined}}", hasError, ""}, |
