aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDidier Spezia <didier.06@gmail.com>2015-05-01 18:20:31 +0000
committerRob Pike <r@golang.org>2015-05-01 21:27:27 +0000
commit80cedf3e8f912d7d7defd8e0495c6fd67d229555 (patch)
tree690edaec69371300f2b12adf8f53e3ff556c8e5a /src
parent8a072ada84d552a5d1511271f36d91f4fb236908 (diff)
downloadgo-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')
-rw-r--r--src/text/template/parse/parse.go7
-rw-r--r--src/text/template/parse/parse_test.go3
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, ""},