summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2013-09-12 13:22:56 +1000
committerRob Pike <r@golang.org>2013-09-12 13:22:56 +1000
commitb8a5e7f1862c23912e514ff965269930c9757702 (patch)
tree3e34d13eb8235480dfd8fdb9f3d14e5bb3cd0250 /src
parent01c9f63acde3023f5d3b0f50637d4bd30728d709 (diff)
downloadgo-b8a5e7f1862c23912e514ff965269930c9757702.tar.gz
text/template: catch unmatched right delimiter
It was simply a missing error case: when scanning plain text outside of an action, a right delimiter should be an error. R=golang-dev, dsymonds CC=golang-dev https://codereview.appspot.com/13468045
Diffstat (limited to 'src')
-rw-r--r--src/pkg/text/template/parse/lex.go4
-rw-r--r--src/pkg/text/template/parse/lex_test.go3
-rw-r--r--src/pkg/text/template/parse/parse_test.go2
3 files changed, 8 insertions, 1 deletions
diff --git a/src/pkg/text/template/parse/lex.go b/src/pkg/text/template/parse/lex.go
index 1674aaf9c..690497d64 100644
--- a/src/pkg/text/template/parse/lex.go
+++ b/src/pkg/text/template/parse/lex.go
@@ -217,6 +217,10 @@ func lexText(l *lexer) stateFn {
}
return lexLeftDelim
}
+ // Check for right after left in case they're the same.
+ if strings.HasPrefix(l.input[l.pos:], l.rightDelim) {
+ return l.errorf("unmatched right delimiter")
+ }
if l.next() == eof {
break
}
diff --git a/src/pkg/text/template/parse/lex_test.go b/src/pkg/text/template/parse/lex_test.go
index ae90ae407..e72e07f26 100644
--- a/src/pkg/text/template/parse/lex_test.go
+++ b/src/pkg/text/template/parse/lex_test.go
@@ -340,6 +340,9 @@ var lexTests = []lexTest{
{itemText, 0, "hello-"},
{itemError, 0, `comment ends before closing delimiter`},
}},
+ {"unmatched right delimiter", "hello-{.}}-world", []item{
+ {itemError, 0, `unmatched right delimiter`},
+ }},
}
// collect gathers the emitted items into a slice.
diff --git a/src/pkg/text/template/parse/parse_test.go b/src/pkg/text/template/parse/parse_test.go
index c35f4ac5d..049e65c7d 100644
--- a/src/pkg/text/template/parse/parse_test.go
+++ b/src/pkg/text/template/parse/parse_test.go
@@ -312,7 +312,7 @@ var isEmptyTests = []isEmptyTest{
{"spaces only", " \t\n \t\n", true},
{"definition", `{{define "x"}}something{{end}}`, true},
{"definitions and space", "{{define `x`}}something{{end}}\n\n{{define `y`}}something{{end}}\n\n", true},
- {"definitions and text", "{{define `x`}}something{{end}}\nx\n{{define `y`}}something{{end}}\ny\n}}", false},
+ {"definitions and text", "{{define `x`}}something{{end}}\nx\n{{define `y`}}something{{end}}\ny\n", false},
{"definition and action", "{{define `x`}}something{{end}}{{if 3}}foo{{end}}", false},
}