@0x/contracts-utils: LibMath._safeDiv() now throws a rich revert when dividing by zero.
				
					
				
			This commit is contained in:
		@@ -10,7 +10,8 @@ library LibSafeMathRichErrors {
 | 
			
		||||
    enum SafeMathErrorCodes {
 | 
			
		||||
        UINT256_ADDITION_OVERFLOW,
 | 
			
		||||
        UINT256_MULTIPLICATION_OVERFLOW,
 | 
			
		||||
        UINT256_SUBTRACTION_UNDERFLOW
 | 
			
		||||
        UINT256_SUBTRACTION_UNDERFLOW,
 | 
			
		||||
        UINT256_DIVISION_BY_ZERO
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // solhint-disable func-name-mixedcase
 | 
			
		||||
 
 | 
			
		||||
@@ -30,6 +30,13 @@ contract SafeMath {
 | 
			
		||||
        pure
 | 
			
		||||
        returns (uint256)
 | 
			
		||||
    {
 | 
			
		||||
        if (b == 0) {
 | 
			
		||||
            LibRichErrors._rrevert(LibSafeMathRichErrors.SafeMathError(
 | 
			
		||||
                LibSafeMathRichErrors.SafeMathErrorCodes.UINT256_DIVISION_BY_ZERO,
 | 
			
		||||
                a,
 | 
			
		||||
                b
 | 
			
		||||
            ));
 | 
			
		||||
        }
 | 
			
		||||
        uint256 c = a / b;
 | 
			
		||||
        return c;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
import { AnyRevertError, BigNumber, SafeMathRevertErrors } from '@0x/utils';
 | 
			
		||||
import { BigNumber, SafeMathRevertErrors } from '@0x/utils';
 | 
			
		||||
 | 
			
		||||
const MAX_UINT256 = new BigNumber(2).pow(256).minus(1);
 | 
			
		||||
 | 
			
		||||
@@ -29,16 +29,22 @@ export function safeSub(a: BigNumber, b: BigNumber): BigNumber {
 | 
			
		||||
export function safeMul(a: BigNumber, b: BigNumber): BigNumber {
 | 
			
		||||
    const r = a.times(b);
 | 
			
		||||
    if (r.isGreaterThan(MAX_UINT256)) {
 | 
			
		||||
        // Solidity implementation does not throw a reason.
 | 
			
		||||
        throw new AnyRevertError();
 | 
			
		||||
        throw new SafeMathRevertErrors.SafeMathError(
 | 
			
		||||
            SafeMathRevertErrors.SafeMathErrorCodes.Uint256MultiplicationOverflow,
 | 
			
		||||
            a,
 | 
			
		||||
            b,
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
    return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function safeDiv(a: BigNumber, b: BigNumber): BigNumber {
 | 
			
		||||
    if (b.isEqualTo(0)) {
 | 
			
		||||
        // Solidity implementation does not throw a reason.
 | 
			
		||||
        throw new AnyRevertError();
 | 
			
		||||
        throw new SafeMathRevertErrors.SafeMathError(
 | 
			
		||||
            SafeMathRevertErrors.SafeMathErrorCodes.Uint256DivisionByZero,
 | 
			
		||||
            a,
 | 
			
		||||
            b,
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
    return a.dividedToIntegerBy(b);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user