From 3d3cf25546bb851e38c49857ad2ae2db96ac69d0 Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Tue, 8 Mar 2022 22:56:44 +0100 Subject: [PATCH] Use correct bit length constant for sdk.Dec (#11332) Co-authored-by: Marko --- go.sum | 1 - types/decimal.go | 8 ++++---- types/decimal_test.go | 32 +++++++++++++++++++++++++++++--- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/go.sum b/go.sum index 385bcf69f..ddc7423ac 100644 --- a/go.sum +++ b/go.sum @@ -1337,7 +1337,6 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -github.com/zondax/hid v0.9.0 h1:eiT3P6vNxAEVxXMw66eZUAAnU2zD33JBkfG/EnfAKl8= github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= github.com/zondax/hid v0.9.1-0.20220302062450-5552068d2266 h1:O9XLFXGkVswDFmH9LaYpqu+r/AAFWqr0DL6V00KEVFg= github.com/zondax/hid v0.9.1-0.20220302062450-5552068d2266/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= diff --git a/types/decimal.go b/types/decimal.go index 9b80e865f..f7d7ad9ff 100644 --- a/types/decimal.go +++ b/types/decimal.go @@ -179,8 +179,8 @@ func NewDecFromStr(str string) (Dec, error) { if !ok { return Dec{}, fmt.Errorf("failed to set decimal string: %s", combinedStr) } - if combined.BitLen() > maxBitLen { - return Dec{}, fmt.Errorf("decimal out of range; bitLen: got %d, max %d", combined.BitLen(), maxBitLen) + if combined.BitLen() > maxDecBitLen { + return Dec{}, fmt.Errorf("decimal out of range; bitLen: got %d, max %d", combined.BitLen(), maxDecBitLen) } if neg { combined = new(big.Int).Neg(combined) @@ -831,8 +831,8 @@ func (d *Dec) Unmarshal(data []byte) error { return err } - if d.i.BitLen() > maxBitLen { - return fmt.Errorf("decimal out of range; got: %d, max: %d", d.i.BitLen(), maxBitLen) + if d.i.BitLen() > maxDecBitLen { + return fmt.Errorf("decimal out of range; got: %d, max: %d", d.i.BitLen(), maxDecBitLen) } return nil diff --git a/types/decimal_test.go b/types/decimal_test.go index 0ae63b5fc..742edb60c 100644 --- a/types/decimal_test.go +++ b/types/decimal_test.go @@ -54,8 +54,14 @@ func (s *decimalTestSuite) mustNewDecFromStr(str string) (d sdk.Dec) { } func (s *decimalTestSuite) TestNewDecFromStr() { - largeBigInt, success := new(big.Int).SetString("3144605511029693144278234343371835", 10) - s.Require().True(success) + largeBigInt, ok := new(big.Int).SetString("3144605511029693144278234343371835", 10) + s.Require().True(ok) + + largerBigInt, ok := new(big.Int).SetString("88888888888888888888888888888888888888888888888888888888888888888888844444440", 10) + s.Require().True(ok) + + largestBigInt, ok := new(big.Int).SetString("133499189745056880149688856635597007162669032647290798121690100488888732861290034376435130433535", 10) + s.Require().True(ok) tests := []struct { decimalStr string @@ -81,7 +87,9 @@ func (s *decimalTestSuite) TestNewDecFromStr() { {"foobar", true, sdk.Dec{}}, {"0.foobar", true, sdk.Dec{}}, {"0.foobar.", true, sdk.Dec{}}, - {"88888888888888888888888888888888888888888888888888888888888888888888844444440", true, sdk.Dec{}}, + {"88888888888888888888888888888888888888888888888888888888888888888888844444440", false, sdk.NewDecFromBigInt(largerBigInt)}, + {"133499189745056880149688856635597007162669032647290798121690100488888732861290.034376435130433535", false, sdk.NewDecFromBigIntWithPrec(largestBigInt, 18)}, + {"133499189745056880149688856635597007162669032647290798121690100488888732861291", true, sdk.Dec{}}, } for tcIndex, tc := range tests { @@ -472,6 +480,12 @@ func (s *decimalTestSuite) TestDecSortableBytes() { } func (s *decimalTestSuite) TestDecEncoding() { + largestBigInt, ok := new(big.Int).SetString("133499189745056880149688856635597007162669032647290798121690100488888732861290034376435130433535", 10) + s.Require().True(ok) + + smallestBigInt, ok := new(big.Int).SetString("-133499189745056880149688856635597007162669032647290798121690100488888732861290034376435130433535", 10) + s.Require().True(ok) + testCases := []struct { input sdk.Dec rawBz string @@ -507,6 +521,18 @@ func (s *decimalTestSuite) TestDecEncoding() { "\"-1.414213562373095049\"", "\"-1.414213562373095049\"\n", }, + { + sdk.NewDecFromBigIntWithPrec(largestBigInt, 18), + "313333343939313839373435303536383830313439363838383536363335353937303037313632363639303332363437323930373938313231363930313030343838383838373332383631323930303334333736343335313330343333353335", + "\"133499189745056880149688856635597007162669032647290798121690100488888732861290.034376435130433535\"", + "\"133499189745056880149688856635597007162669032647290798121690100488888732861290.034376435130433535\"\n", + }, + { + sdk.NewDecFromBigIntWithPrec(smallestBigInt, 18), + "2D313333343939313839373435303536383830313439363838383536363335353937303037313632363639303332363437323930373938313231363930313030343838383838373332383631323930303334333736343335313330343333353335", + "\"-133499189745056880149688856635597007162669032647290798121690100488888732861290.034376435130433535\"", + "\"-133499189745056880149688856635597007162669032647290798121690100488888732861290.034376435130433535\"\n", + }, } for _, tc := range testCases {