aboutsummaryrefslogtreecommitdiff
path: root/src/text/template/parse
diff options
context:
space:
mode:
Diffstat (limited to 'src/text/template/parse')
-rw-r--r--src/text/template/parse/node.go5
-rw-r--r--src/text/template/parse/parse_test.go1
2 files changed, 6 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.
diff --git a/src/text/template/parse/parse_test.go b/src/text/template/parse/parse_test.go
index a2ca98b0b1..808f9a0b5e 100644
--- a/src/text/template/parse/parse_test.go
+++ b/src/text/template/parse/parse_test.go
@@ -69,6 +69,7 @@ var numberTests = []numberTest{
{text: "1+2."},
{text: "'x"},
{text: "'xx'"},
+ {text: "'433937734937734969526500969526500'"}, // Integer too large - issue 10634.
// Issue 8622 - 0xe parsed as floating point. Very embarrassing.
{"0xef", true, true, true, false, 0xef, 0xef, 0xef, 0},
}