aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2012-04-13 09:28:37 +1000
committerRob Pike <r@golang.org>2012-04-13 09:28:37 +1000
commit18a71beb07d845176fcab6711b766eeee4d35d46 (patch)
tree8440bd0e00ff569c845b47645c8c5c2fe92fa50e
parentbde649ca89ede3caf4c11e61b3b7471381f35f8a (diff)
downloadgo-18a71beb07d845176fcab6711b766eeee4d35d46.tar.gz
go-18a71beb07d845176fcab6711b766eeee4d35d46.zip
[release-branch.go1] fmt: fix crash of %b on huge negative int64
««« backport 344d5c33331a fmt: fix crash of %b on huge negative int64 The buffer had 64 bytes but needs one more for the sign. Fixes #3510. R=golang-dev, dave, dsymonds CC=golang-dev https://golang.org/cl/6011057 »»»
-rw-r--r--src/pkg/fmt/fmt_test.go3
-rw-r--r--src/pkg/fmt/format.go2
2 files changed, 4 insertions, 1 deletions
diff --git a/src/pkg/fmt/fmt_test.go b/src/pkg/fmt/fmt_test.go
index 758fc50d08..de0342967c 100644
--- a/src/pkg/fmt/fmt_test.go
+++ b/src/pkg/fmt/fmt_test.go
@@ -461,6 +461,9 @@ var fmttests = []struct {
// zero reflect.Value, which formats as <nil>.
// This test is just to check that it shows the two NaNs at all.
{"%v", map[float64]int{math.NaN(): 1, math.NaN(): 2}, "map[NaN:<nil> NaN:<nil>]"},
+
+ // Used to crash because nByte didn't allow for a sign.
+ {"%b", int64(-1 << 63), "-1000000000000000000000000000000000000000000000000000000000000000"},
}
func TestSprintf(t *testing.T) {
diff --git a/src/pkg/fmt/format.go b/src/pkg/fmt/format.go
index 2186f334b9..caf900d5c3 100644
--- a/src/pkg/fmt/format.go
+++ b/src/pkg/fmt/format.go
@@ -10,7 +10,7 @@ import (
)
const (
- nByte = 64
+ nByte = 65 // %b of an int64, plus a sign.
ldigits = "0123456789abcdef"
udigits = "0123456789ABCDEF"