From 6a984ed75d6a93b1decdebdea8fd0e396b889e22 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 17 Apr 2024 13:33:57 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../DefaultQrScanningEventsRepository.kt | 19 ++++++++++--------- .../DefaultQrScanningEventsRepositoryTest.kt | 10 ++++++++++ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/data/qr-scanning/src/main/java/com/tangem/data/qrscanning/repository/DefaultQrScanningEventsRepository.kt b/data/qr-scanning/src/main/java/com/tangem/data/qrscanning/repository/DefaultQrScanningEventsRepository.kt index 87729e8bc4..994539366b 100644 --- a/data/qr-scanning/src/main/java/com/tangem/data/qrscanning/repository/DefaultQrScanningEventsRepository.kt +++ b/data/qr-scanning/src/main/java/com/tangem/data/qrscanning/repository/DefaultQrScanningEventsRepository.kt @@ -52,16 +52,17 @@ internal class DefaultQrScanningEventsRepository : QrScanningEventsRepository { result.memo = URLDecoder.decode(it.value, "UTF-8") } Parameter.Address -> { + // If 'address' parameter is exists, then currency must be TOKEN. + val tokenCurrency = cryptoCurrency as? CryptoCurrency.Token ?: return QrResult() + // Overrides destination address for token transfers (ERC-681) - if (cryptoCurrency is CryptoCurrency.Token) { - // `address` parameter is used only if the contract address, encoded in the QR, - // matches the contract address of the token. - // Otherwise, the scanned string is likely malformed, and we stop the entire parsing routine - if (cryptoCurrency.contractAddress.equals(address, ignoreCase = true)) { - result.address = it.value - } else { - return QrResult() - } + // `address` parameter is used only if the contract address, encoded in the QR, + // matches the contract address of the token. + // Otherwise, the scanned string is likely malformed, and we stop the entire parsing routin + if (tokenCurrency.contractAddress.equals(address, ignoreCase = true)) { + result.address = it.value + } else { + return QrResult() } } Parameter.Value, diff --git a/data/qr-scanning/src/test/java/com/tangem/data/qrscanning/DefaultQrScanningEventsRepositoryTest.kt b/data/qr-scanning/src/test/java/com/tangem/data/qrscanning/DefaultQrScanningEventsRepositoryTest.kt index ad1f6244a7..13d49ce302 100644 --- a/data/qr-scanning/src/test/java/com/tangem/data/qrscanning/DefaultQrScanningEventsRepositoryTest.kt +++ b/data/qr-scanning/src/test/java/com/tangem/data/qrscanning/DefaultQrScanningEventsRepositoryTest.kt @@ -232,11 +232,21 @@ internal class DefaultQrScanningEventsRepositoryTest { QrResult(address = address2, amount = BigDecimal("2300")), tokenCryptoCurrency, ) + positiveCase( + "$address4?$addressParam=$addressParamValue", + QrResult(address = addressParamValue), + tokenCryptoCurrency, + ) negativeCase( "$address2?$someParam=$someParamValue&$amountParam=$amountParamValue", QrResult(address = address2, amount = BigDecimal("123.123"), memo = memoParamValueUtf8), tokenCryptoCurrency, ) + negativeCase( + "$address4?$addressParam=$addressParamValue", + QrResult(address = addressParamValue), + cryptoCurrency, + ) } private fun positiveCase(input: String, expected: QrResult, cryptoCurrency: CryptoCurrency) {