diff --git a/src/actions/ethereum/SendFormValidationActions.js b/src/actions/ethereum/SendFormValidationActions.js index f8ddecea..66d787d4 100644 --- a/src/actions/ethereum/SendFormValidationActions.js +++ b/src/actions/ethereum/SendFormValidationActions.js @@ -347,7 +347,12 @@ export const calculateFee = (gasPrice: string, gasLimit: string): string => { export const calculateTotal = (amount: string, gasPrice: string, gasLimit: string): string => { try { - return new BigNumber(amount).plus(calculateFee(gasPrice, gasLimit)).toFixed(); + const bAmount = new BigNumber(amount); + // BigNumber() returns NaN on non-numeric string + if (bAmount.isNaN()) { + throw new Error('Amount is not a number'); + } + return bAmount.plus(calculateFee(gasPrice, gasLimit)).toFixed(); } catch (error) { return '0'; } diff --git a/src/actions/ripple/SendFormValidationActions.js b/src/actions/ripple/SendFormValidationActions.js index d4f4c765..6ef5bbca 100644 --- a/src/actions/ripple/SendFormValidationActions.js +++ b/src/actions/ripple/SendFormValidationActions.js @@ -300,7 +300,12 @@ export const destinationTagValidation = ($state: State): PayloadAction => const calculateTotal = (amount: string, fee: string): string => { try { - return new BigNumber(amount).plus(fee).toFixed(); + const bAmount = new BigNumber(amount); + // BigNumber() returns NaN on non-numeric string + if (bAmount.isNaN()) { + throw new Error('Amount is not a number'); + } + return bAmount.plus(fee).toFixed(); } catch (error) { return '0'; } diff --git a/src/flowtype/npm/bignumber.js b/src/flowtype/npm/bignumber.js index fd1a31ef..d7bca1a4 100644 --- a/src/flowtype/npm/bignumber.js +++ b/src/flowtype/npm/bignumber.js @@ -37,6 +37,7 @@ declare module 'bignumber.js' { isLessThan(n: $npm$big$number$object): boolean; lte(n: $npm$big$number$object): boolean; isLessThanOrEqualTo(n: $npm$big$number$object): boolean; + isNaN(): boolean; minus(n: $npm$big$number$object): T_BigNumber; mod(n: $npm$big$number$object): T_BigNumber; plus(n: $npm$big$number$object): T_BigNumber; diff --git a/src/utils/formatUtils.js b/src/utils/formatUtils.js index a273959c..37231d7c 100644 --- a/src/utils/formatUtils.js +++ b/src/utils/formatUtils.js @@ -56,7 +56,12 @@ export const hexToString = (hex: string): string => { export const toDecimalAmount = (amount: string | number, decimals: number): string => { try { - return new BigNumber(amount).div(10 ** decimals).toString(10); + const bAmount = new BigNumber(amount); + // BigNumber() returns NaN on non-numeric string + if (bAmount.isNaN()) { + throw new Error('Amount is not a number'); + } + return bAmount.div(10 ** decimals).toString(10); } catch (error) { return '0'; } @@ -64,7 +69,12 @@ export const toDecimalAmount = (amount: string | number, decimals: number): stri export const fromDecimalAmount = (amount: string | number, decimals: number): string => { try { - return new BigNumber(amount).times(10 ** decimals).toString(10); + const bAmount = new BigNumber(amount); + // BigNumber() returns NaN on non-numeric string + if (bAmount.isNaN()) { + throw new Error('Amount is not a number'); + } + return bAmount.times(10 ** decimals).toString(10); } catch (error) { return '0'; }