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
 }