]> Cypherpunks repositories - gostls13.git/commitdiff
text/template: catch unmatched right delimiter
authorRob Pike <r@golang.org>
Thu, 12 Sep 2013 03:22:56 +0000 (13:22 +1000)
committerRob Pike <r@golang.org>
Thu, 12 Sep 2013 03:22:56 +0000 (13:22 +1000)
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://golang.org/cl/13468045

src/pkg/text/template/parse/lex.go
src/pkg/text/template/parse/lex_test.go
src/pkg/text/template/parse/parse_test.go

index 1674aaf9cd4bb63a42c0bee5aa833875bc5ec81a..690497d645a683127febfeeb09b3d65fc73b842e 100644 (file)
@@ -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
                }
index ae90ae407b1e99fd5612cdb7b7f46b2f05fddfda..e72e07f26963855b8c0515d04e57d43c433dd67c 100644 (file)
@@ -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.
index c35f4ac5dfc4a3067f5c9e0c37e125b9f3054dad..049e65c7d34c55528af5ca002b463c45affa7599 100644 (file)
@@ -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},
 }