aboutsummaryrefslogtreecommitdiff
path: root/src/text/template/parse/node.go
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2015-05-01 15:33:08 -0700
committerRob Pike <r@golang.org>2015-05-03 00:45:13 +0000
commit409420c08893dad4c112fc1a7fa2568cc0f8a98c (patch)
tree1103476ce49a634c4b4af843a273a4011844010f /src/text/template/parse/node.go
parentd5ff441d9a27ea9173c0334f74591f2184931eee (diff)
downloadgo-409420c08893dad4c112fc1a7fa2568cc0f8a98c.tar.xz
text/template/parse: huge integers are not floats
Ideal constants in the template package are a little different from Go. This is a case that slipped through the cracks: A huge integer number was accepted as a floating-point number, but this loses precision and is confusing. Also, the code in the template package (as opposed to the parse package) wasn't expecting it. Root this out at the source: If an integer doesn't fit an int64 or uint64, complain right away. Change-Id: I375621e6f5333c4d53f053a3c84a9af051711b7a Reviewed-on: https://go-review.googlesource.com/9651 Reviewed-by: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/text/template/parse/node.go')
-rw-r--r--src/text/template/parse/node.go5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/text/template/parse/node.go b/src/text/template/parse/node.go
index 55c37f6dba..728181baae 100644
--- a/src/text/template/parse/node.go
+++ b/src/text/template/parse/node.go
@@ -592,6 +592,11 @@ func (t *Tree) newNumber(pos Pos, text string, typ itemType) (*NumberNode, error
} else {
f, err := strconv.ParseFloat(text, 64)
if err == nil {
+ // If we parsed it as a float but it looks like an integer,
+ // it's a huge number too large to fit in an int. Reject it.
+ if !strings.ContainsAny(text, ".eE") {
+ return nil, fmt.Errorf("integer overflow: %q", text)
+ }
n.IsFloat = true
n.Float64 = f
// If a floating-point extraction succeeded, extract the int if needed.