mirror of
https://github.com/golang/go
synced 2024-11-05 11:56:12 -07:00
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>
This commit is contained in:
parent
8a072ada84
commit
80cedf3e8f
@ -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
|
||||
}
|
||||
|
@ -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, ""},
|
||||
|
Loading…
Reference in New Issue
Block a user