From 5db44c17a2391bbdfbc3c04e83e66025ca5dea3d Mon Sep 17 00:00:00 2001 From: Alberto Donizetti Date: Wed, 1 Jun 2016 19:16:56 +0200 Subject: [PATCH] math/big: avoid panic in float.Text with negative prec Fixes #15918 Change-Id: I4b434aed262960a2e6c659d4c2296fbf662c3a52 Reviewed-on: https://go-review.googlesource.com/23633 Run-TryBot: Robert Griesemer Reviewed-by: Robert Griesemer TryBot-Result: Gobot Gobot --- src/math/big/floatconv_test.go | 5 +++++ src/math/big/ftoa.go | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/math/big/floatconv_test.go b/src/math/big/floatconv_test.go index b6f9993608..b2a1ab05fc 100644 --- a/src/math/big/floatconv_test.go +++ b/src/math/big/floatconv_test.go @@ -290,6 +290,11 @@ func TestFloat64Text(t *testing.T) { // Issue 2625. {383260575764816448, 'f', 0, "383260575764816448"}, {383260575764816448, 'g', -1, "3.8326057576481645e+17"}, + + // Issue 15918. + {1, 'f', -10, "1"}, + {1, 'f', -11, "1"}, + {1, 'f', -12, "1"}, } { // The test cases are from the strconv package which tests float64 values. // When formatting values with prec = -1 (shortest representation), diff --git a/src/math/big/ftoa.go b/src/math/big/ftoa.go index 624ea5e073..57b16e1ad1 100644 --- a/src/math/big/ftoa.go +++ b/src/math/big/ftoa.go @@ -41,8 +41,11 @@ import ( // x.Prec() mantissa bits. // The prec value is ignored for the 'b' or 'p' format. func (x *Float) Text(format byte, prec int) string { - const extra = 10 // TODO(gri) determine a good/better value here - return string(x.Append(make([]byte, 0, prec+extra), format, prec)) + cap := 10 // TODO(gri) determine a good/better value here + if prec > 0 { + cap += prec + } + return string(x.Append(make([]byte, 0, cap), format, prec)) } // String formats x like x.Text('g', 10). -- 2.50.0