From 0fadbac08959ec326c8bb56add1e206d7e4b0e08 Mon Sep 17 00:00:00 2001 From: malik1004x Date: Tue, 19 May 2026 01:58:57 +0200 Subject: [PATCH] safeguards for monero subaddress list (#3242) --- cw_monero/lib/monero_subaddress_list.dart | 3 ++- .../wallet_address_list_view_model.dart | 2 +- .../wallet_address_list/wallet_address_util.dart | 11 +++++++++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/cw_monero/lib/monero_subaddress_list.dart b/cw_monero/lib/monero_subaddress_list.dart index 0c5284d93..fc5181ddb 100644 --- a/cw_monero/lib/monero_subaddress_list.dart +++ b/cw_monero/lib/monero_subaddress_list.dart @@ -34,8 +34,9 @@ abstract class MoneroSubaddressListBase with Store { try { _isUpdating = true; refresh(accountIndex: accountIndex); + final newAddrs = await getAll(); subaddresses.clear(); - subaddresses.addAll(await getAll()); + subaddresses.addAll(newAddrs); _isUpdating = false; } catch (e) { _isUpdating = false; diff --git a/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart b/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart index a2d1a3f27..85293fd5e 100644 --- a/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart +++ b/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart @@ -214,7 +214,7 @@ abstract class WalletAddressListViewModelBase extends WalletChangeListenerViewMo final addressList = ObservableList(); if (wallet.type == WalletType.monero) { - final primaryAddress = monero!.getSubaddressList(wallet).subaddresses.first; + final primaryAddress = monero!.getSubaddressList(wallet).subaddresses.firstOrNull; final addressItems = monero!.getSubaddressList(wallet).subaddresses.map((subaddress) { final isPrimary = subaddress == primaryAddress; diff --git a/lib/view_model/wallet_address_list/wallet_address_util.dart b/lib/view_model/wallet_address_list/wallet_address_util.dart index d4df5249d..21bb14395 100644 --- a/lib/view_model/wallet_address_list/wallet_address_util.dart +++ b/lib/view_model/wallet_address_list/wallet_address_util.dart @@ -25,9 +25,16 @@ Future createNewAddress(WalletBase wallet, String label) async { await monero! .getSubaddressList(wallet) .addSubaddress(wallet, accountIndex: monero!.getCurrentAccount(wallet).id, label: label); - final addr = await monero! + final subaddressList = await monero! .getSubaddressList(wallet) - .subaddresses + .subaddresses; + if(subaddressList.isEmpty) { + // this shouldn't happen, we just added an addr. + // somehow, it happened once in prod regardless. + // we just return instead of crashing, user can press the button again ig + return; + } + final addr = subaddressList .first .address; // first because the order is reversed wallet.walletAddresses.manualAddresses.add(addr);