From c1e542f634afd157b36ad83ce603428e652e9e02 Mon Sep 17 00:00:00 2001 From: ht Date: Sun, 6 Sep 2026 18:15:21 +0300 Subject: [PATCH] restrict exchange amount input types --- docs/quality/uygulama-durumu.md | 6 ++++++ src/services/exchangeAmount.js | 1 + tests/exchange-amount.test.mjs | 3 ++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/quality/uygulama-durumu.md b/docs/quality/uygulama-durumu.md index 1717b43..9b6799c 100644 --- a/docs/quality/uygulama-durumu.md +++ b/docs/quality/uygulama-durumu.md @@ -2012,3 +2012,9 @@ Doğrulama: 287 test geçti, üretim derlemesi başarılı. Kur hesaplayıcısının tutar sınırı bileşen içinden çıkarılıp saf doğrulama servisine taşındı; boş, negatif, sonlu olmayan ve sınır dışı değerler için bağımsız regresyon testi eklendi. Doğrulama: 288 test geçti, üretim derlemesi başarılı. + +### 2026-09-06 · Kur tutarı tip kısıtlaması + +Kur doğrulaması artık boolean, hexadecimal ve virgüllü belirsiz biçimleri kabul etmiyor; yalnızca açık ondalık sayı biçimi veya sayısal değer işleniyor. + +Doğrulama: 288 test geçti, üretim derlemesi başarılı. diff --git a/src/services/exchangeAmount.js b/src/services/exchangeAmount.js index 741a11a..57f50a9 100644 --- a/src/services/exchangeAmount.js +++ b/src/services/exchangeAmount.js @@ -2,6 +2,7 @@ const MAX_EXCHANGE_AMOUNT = 1e12; export function validateExchangeAmount(value) { if (value === null || value === undefined || (typeof value === 'string' && !value.trim())) return false; + if (typeof value !== 'number' && (typeof value !== 'string' || !/^\d+(?:\.\d+)?$/.test(value.trim()))) return false; const amount = Number(value); return Number.isFinite(amount) && amount >= 0 && amount <= MAX_EXCHANGE_AMOUNT; } diff --git a/tests/exchange-amount.test.mjs b/tests/exchange-amount.test.mjs index 38e6fc3..76cac45 100644 --- a/tests/exchange-amount.test.mjs +++ b/tests/exchange-amount.test.mjs @@ -7,5 +7,6 @@ test('exchange amount validator accepts finite non-negative amounts within limit assert.equal(validateExchangeAmount('125,50'), false); assert.equal(validateExchangeAmount(125.5), true); assert.equal(validateExchangeAmount(MAX_EXCHANGE_AMOUNT), true); - for (const value of [-1, Infinity, NaN, MAX_EXCHANGE_AMOUNT + 1, null, '']) assert.equal(validateExchangeAmount(value), false); + for (const value of [-1, Infinity, NaN, MAX_EXCHANGE_AMOUNT + 1, null, '', true, false, '0x10', '1,25']) assert.equal(validateExchangeAmount(value), false); + assert.equal(validateExchangeAmount('125.50'), true); });