diff --git a/common/math/exp.go b/common/math/exp.go index 6f6c040e0764facf5b126d4e50b2384cd69557f4..113b76b39bdfc0b8ff83e977d6f6e336c450b9cd 100644 --- a/common/math/exp.go +++ b/common/math/exp.go @@ -27,6 +27,9 @@ const wordSize = 32 << (uint64(^big.Word(0)) >> 63) // Exp implement exponentiation by squaring algorithm. // +// Exp return a new variable; base and exponent must +// not be changed under any circumstance. +// // Courtesy @karalabe and @chfast func Exp(base, exponent *big.Int) *big.Int { result := big.NewInt(1) diff --git a/common/math/integer.go b/common/math/integer.go index 8162b19854dc1f4a370bd10be32175c7c3e2b91a..1689b65864ff77f325e215b6a6959a8fdea3462e 100644 --- a/common/math/integer.go +++ b/common/math/integer.go @@ -18,8 +18,8 @@ func SafeAdd(x, y uint64) (uint64, bool) { // SafeMul returns multiplication result and whether overflow occurred. func SafeMul(x, y uint64) (uint64, bool) { - if x == 0 { + if x == 0 || y == 0 { return 0, false } - return x * y, x != 0 && y != 0 && y > gmath.MaxUint64/x + return x * y, y > gmath.MaxUint64/x }