]> Cypherpunks repositories - gostls13.git/commit
text/template/parse: error on bad range variables
authorDaniel Martí <mvdan@mvdan.cc>
Sun, 28 Oct 2018 16:23:00 +0000 (16:23 +0000)
committerDaniel Martí <mvdan@mvdan.cc>
Sun, 28 Oct 2018 20:20:00 +0000 (20:20 +0000)
commit1399b52dc4a3cf5347603bf7011984cf28a34031
tree8f9b397c37ba1f2e5102d136b0e529ccd7a7e4dc
parent81475ca256df3fdd281c0e656b4e743caacbc4e0
text/template/parse: error on bad range variables

The package used to accept invalid range pipelines, such as:

{{range $k, .}}
{{range $k, 123 := .}}

This is because the logic that allowed a range pipeline to declare
multiple variables was broken. When encountering a single comma inside a
range pipeline, it would happily continue parsing a second variable,
even if we didn't have a variable token at all.

Then, the loop would immediately break, and we'd parse the pipeline we'd
be ranging over. That is, we'd parse {{range $k, .}} as if it were
{{range $k = .}}.

To fix this, only allow the loop to continue if we know we're going to
parse another variable or a token that would end the pipeline. Also add
a few test cases for these error edge cases.

While at it, make use of T.Run, which was useful in debugging
Tree.pipeline via print statements.

Fixes #28437.

Change-Id: Idc9966bf643f0f3bc1b052620357e5b0aa2022ea
Reviewed-on: https://go-review.googlesource.com/c/145282
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Reviewed-by: Rob Pike <r@golang.org>
src/text/template/parse/parse.go
src/text/template/parse/parse_test.go