diff options
author | Alberto Donizetti <alb.donizetti@gmail.com> | 2016-06-01 19:16:56 +0200 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2016-06-01 19:20:52 +0000 |
commit | 5db44c17a2391bbdfbc3c04e83e66025ca5dea3d (patch) | |
tree | 12c62de50e8b3352ae142c734d62f16e7190277d | |
parent | 77026ef902d3fa21597400d230701979bc1f0efc (diff) | |
download | go-5db44c17a2391bbdfbc3c04e83e66025ca5dea3d.tar.gz go-5db44c17a2391bbdfbc3c04e83e66025ca5dea3d.zip |
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 <gri@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
-rw-r--r-- | src/math/big/floatconv_test.go | 5 | ||||
-rw-r--r-- | 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). |