From 660a6825eabcf8529826e25052a8546ac8e1f08f Mon Sep 17 00:00:00 2001 From: Rob Pike Date: Mon, 4 May 2015 11:28:51 -0700 Subject: [PATCH] fmt: catch overflow in width and prec calculations Fixes #10674. Change-Id: If3fae3244d87aeaa70815f499105c264394aa7ad Reviewed-on: https://go-review.googlesource.com/9657 Reviewed-by: Ian Lance Taylor --- src/fmt/fmt_test.go | 1 + src/fmt/print.go | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/fmt/fmt_test.go b/src/fmt/fmt_test.go index c06f9a1fcf..5d3357004f 100644 --- a/src/fmt/fmt_test.go +++ b/src/fmt/fmt_test.go @@ -537,6 +537,7 @@ var fmtTests = []struct { {"%s", nil, "%!s()"}, {"%T", nil, ""}, {"%-1", 100, "%!(NOVERB)%!(EXTRA int=100)"}, + {"%017091901790959340919092959340919017929593813360", 0, "%!(NOVERB)%!(EXTRA int=0)"}, // The "" show up because maps are printed by // first obtaining a list of keys and then looking up diff --git a/src/fmt/print.go b/src/fmt/print.go index 8e35a890ec..9c373145dd 100644 --- a/src/fmt/print.go +++ b/src/fmt/print.go @@ -292,6 +292,9 @@ func parsenum(s string, start, end int) (num int, isnum bool, newi int) { } for newi = start; newi < end && '0' <= s[newi] && s[newi] <= '9'; newi++ { num = num*10 + int(s[newi]-'0') + if num < 0 { + return 0, false, end // Overflow; crazy long number most likely. + } isnum = true } return -- 2.48.1