From fb6da9a76788a3d79a10f3aee08f19866d27d84c Mon Sep 17 00:00:00 2001 From: zoereco <158379334+zoereco@users.noreply.github.com> Date: Mon, 5 Feb 2024 10:49:05 +0100 Subject: [PATCH] test: add overflow test for coin Add (#19344) --- types/coin_test.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/types/coin_test.go b/types/coin_test.go index 36cc32c8cf..734af669e1 100644 --- a/types/coin_test.go +++ b/types/coin_test.go @@ -2,6 +2,7 @@ package types_test import ( "fmt" + "math/big" "strings" "testing" @@ -156,6 +157,9 @@ func (s *coinTestSuite) TestCoinsDenoms() { } func (s *coinTestSuite) TestAddCoin() { + // 2**256 - 1 value to check for overflows + maxUint256 := math.NewIntFromBigInt(new(big.Int).Sub(new(big.Int).Lsh(big.NewInt(1), 256), big.NewInt(1))) + cases := []struct { inputOne sdk.Coin inputTwo sdk.Coin @@ -165,6 +169,10 @@ func (s *coinTestSuite) TestAddCoin() { {sdk.NewInt64Coin(testDenom1, 1), sdk.NewInt64Coin(testDenom1, 1), sdk.NewInt64Coin(testDenom1, 2), false}, {sdk.NewInt64Coin(testDenom1, 1), sdk.NewInt64Coin(testDenom1, 0), sdk.NewInt64Coin(testDenom1, 1), false}, {sdk.NewInt64Coin(testDenom1, 1), sdk.NewInt64Coin(testDenom2, 1), sdk.NewInt64Coin(testDenom1, 1), true}, + + // addition cannot lead to a number with more than 256 bits + {sdk.NewCoin(testDenom1, maxUint256), sdk.NewCoin(testDenom1, math.NewInt(0)), sdk.NewCoin(testDenom1, maxUint256), false}, + {sdk.NewCoin(testDenom1, maxUint256), sdk.NewCoin(testDenom1, math.NewInt(1)), sdk.NewInt64Coin(testDenom1, 1), true}, } for tcIndex, tc := range cases {