1
0
mirror of https://github.com/trezor/trezor-wallet synced 2024-11-28 03:08:30 +00:00

fixed address validation

added checksum validation if address contains any uppercase letter
This commit is contained in:
Szymon Lesisz 2018-09-20 08:59:54 +02:00
parent c9b9359e70
commit 93b70c1f0a
2 changed files with 26 additions and 25 deletions

View File

@ -13,6 +13,7 @@ import { initialState } from 'reducers/SendFormReducer';
import { findToken } from 'reducers/TokensReducer'; import { findToken } from 'reducers/TokensReducer';
import { findDevice, getPendingAmount, getPendingNonce } from 'reducers/utils'; import { findDevice, getPendingAmount, getPendingNonce } from 'reducers/utils';
import * as stateUtils from 'reducers/utils'; import * as stateUtils from 'reducers/utils';
import { validateAddress } from 'utils/ethUtils';
import type { import type {
Dispatch, Dispatch,
@ -345,32 +346,19 @@ export const validation = (props: Props): void => {
if (state.untouched) return; if (state.untouched) return;
// valid address // valid address
if (state.touched.address) { if (state.touched.address) {
/* if (state.address.length < 1) { const addressError = validateAddress(state.address);
errors.address = 'Address is not set'; if (addressError) {
} else if (!EthereumjsUtil.isValidAddress(state.address)) { errors.address = addressError;
errors.address = 'Address is not valid'; }
} else {
// address warning or info are set in addressValidation ThunkAction
// do not override this
if (state.warnings.address) {
warnings.address = state.warnings.address;
} else if (state.infos.address) {
infos.address = state.infos.address;
}
} */
/* eslint (no-lonely-if) */ // address warning or info may be set in addressValidation ThunkAction
if (state.address.length < 1) { // do not override them
errors.address = 'Address is not set'; if (state.warnings.address) {
} else if (!EthereumjsUtil.isValidAddress(state.address)) {
errors.address = 'Address is not valid';
} else if (state.warnings.address) {
// address warning or info are set in addressValidation ThunkAction
// do not override this
warnings.address = state.warnings.address; warnings.address = state.warnings.address;
if (state.infos.address) { }
infos.address = state.infos.address;
} if (state.infos.address) {
infos.address = state.infos.address;
} }
} }

View File

@ -1,6 +1,7 @@
/* @flow */ /* @flow */
import BigNumber from 'bignumber.js'; import BigNumber from 'bignumber.js';
import EthereumjsUtil from 'ethereumjs-util';
export const decimalToHex = (dec: number): string => new BigNumber(dec).toString(16); export const decimalToHex = (dec: number): string => new BigNumber(dec).toString(16);
@ -29,3 +30,15 @@ export const strip = (str: string): string => {
}; };
export const calcGasPrice = (price: BigNumber, limit: string): string => price.times(limit).toString(); export const calcGasPrice = (price: BigNumber, limit: string): string => price.times(limit).toString();
export const validateAddress = (address: string): ?string => {
const hasUpperCase = new RegExp('^(.*[A-Z].*)$');
if (address.length < 1) {
return 'Address is not set';
} else if (!EthereumjsUtil.isValidAddress(address)) {
return 'Address is not valid';
} else if (address.match(hasUpperCase) && !EthereumjsUtil.isValidChecksumAddress(address)) {
return 'Address is not a valid checksum';
}
return null;
}