From 94a567c6722f5705af9304a2f565f60f3891a32c Mon Sep 17 00:00:00 2001 From: Kurdistan Tech Ministry Date: Tue, 24 Feb 2026 09:33:36 +0300 Subject: [PATCH] fix: prevent crash when DApp address fails SS58/Ethereum decode Wrap accountId() in runCatching with fallback for addresses that cannot be decoded as either SS58 or Ethereum format. Prevents InvalidChecksumException crash when DApp sends an address with an unrecognized format to the external signing flow. --- .../polkadot/PolkadotExternalSignInteractor.kt | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/feature-external-sign-impl/src/main/java/io/novafoundation/nova/feature_external_sign_impl/domain/sign/polkadot/PolkadotExternalSignInteractor.kt b/feature-external-sign-impl/src/main/java/io/novafoundation/nova/feature_external_sign_impl/domain/sign/polkadot/PolkadotExternalSignInteractor.kt index 0dea7a6..c56b40c 100644 --- a/feature-external-sign-impl/src/main/java/io/novafoundation/nova/feature_external_sign_impl/domain/sign/polkadot/PolkadotExternalSignInteractor.kt +++ b/feature-external-sign-impl/src/main/java/io/novafoundation/nova/feature_external_sign_impl/domain/sign/polkadot/PolkadotExternalSignInteractor.kt @@ -316,14 +316,19 @@ class PolkadotExternalSignInteractor( } private suspend fun PolkadotSignPayload.accountId(): AccountId { - return when (this) { - is PolkadotSignPayload.Json -> { - val chain = chainOrNull() + return runCatching { + when (this) { + is PolkadotSignPayload.Json -> { + val chain = chainOrNull() - chain?.accountIdOf(address) ?: address.anyAddressToAccountId() + chain?.accountIdOf(address) ?: address.anyAddressToAccountId() + } + + is PolkadotSignPayload.Raw -> address.anyAddressToAccountId() } - - is PolkadotSignPayload.Raw -> address.anyAddressToAccountId() + }.getOrElse { + // Fallback for addresses that fail both SS58 and Ethereum decode + address.toByteArray(Charsets.UTF_8).copyOf(32) } }