commit 09ca4434469a7356e67d74e1d19b7eb2849b2412 Author: peterh peterh@giantrabbit.com Date: Mon Jun 24 11:22:34 2019 -0700
Don't allow 0x... numbers in currency amount field
Some people are putting I think their wallet ID or something in the currency amount field and parseFloat treats that as a hex number. So I've switched to a regexp to make it stricter.
I've also added i18n for the error message. --- src/js/amount_field.jsx | 7 ++++--- src/js/number.js | 4 ++++ 2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/src/js/amount_field.jsx b/src/js/amount_field.jsx index 353ee8d8..cfbda302 100644 --- a/src/js/amount_field.jsx +++ b/src/js/amount_field.jsx @@ -1,5 +1,7 @@ import React from 'react'; import {useState} from 'react'; +import {isFloat} from './number'; +import {t} from './i18n';
export function AmountField(props) { const [errorMessage, setErrorMessage] = useState(null); @@ -7,12 +9,11 @@ export function AmountField(props) { const onCurrencyAmountBlur = (event) => { const currencyAmount = event.target.value; const {name, onFieldValidate} = props; - const isNumber = !isNaN(parseFloat(currencyAmount)) && isFinite(currencyAmount); - if (isNumber) { + if (isFloat(currencyAmount)) { setErrorMessage(null); onFieldValidate(name, true); } else { - setErrorMessage('Currency Amount must be a number.'); + setErrorMessage(t('t-currency-amount-must-be-number')); onFieldValidate(name, false); } }; diff --git a/src/js/number.js b/src/js/number.js new file mode 100644 index 00000000..03011b88 --- /dev/null +++ b/src/js/number.js @@ -0,0 +1,4 @@ +export function isFloat(value) { + const matcher = /^\d*.?\d*$/ + return matcher.test(value); +}
tor-commits@lists.torproject.org