Skip to content

Commit c0f9225

Browse files
committed
merge bitcoin#26747: fix confusing error / GUI crash on cross-chain legacy wallet restore
1 parent d63ca8a commit c0f9225

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

src/wallet/wallet.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -428,8 +428,7 @@ std::shared_ptr<CWallet> RestoreWallet(WalletContext& context, const fs::path& b
428428
error += strprintf(Untranslated("Unexpected exception: %s"), e.what());
429429
}
430430
if (!wallet) {
431-
fs::remove(wallet_file);
432-
fs::remove(wallet_path);
431+
fs::remove_all(wallet_path);
433432
}
434433

435434
return wallet;

test/functional/wallet_crosschain.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,20 +33,28 @@ def run_test(self):
3333
self.log.info("Creating wallets")
3434

3535
node0_wallet = os.path.join(self.nodes[0].datadir, 'node0_wallet')
36+
node0_wallet_backup = os.path.join(self.nodes[0].datadir, 'node0_wallet.bak')
3637
self.nodes[0].createwallet(node0_wallet)
38+
self.nodes[0].backupwallet(node0_wallet_backup)
3739
self.nodes[0].unloadwallet(node0_wallet)
3840
node1_wallet = os.path.join(self.nodes[1].datadir, 'node1_wallet')
41+
node1_wallet_backup = os.path.join(self.nodes[0].datadir, 'node1_wallet.bak')
3942
self.nodes[1].createwallet(node1_wallet)
43+
self.nodes[1].backupwallet(node1_wallet_backup)
4044
self.nodes[1].unloadwallet(node1_wallet)
4145

42-
self.log.info("Loading wallets into nodes with a different genesis blocks")
46+
self.log.info("Loading/restoring wallets into nodes with a different genesis block")
4347

4448
if self.options.descriptors:
4549
assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[0].loadwallet, node1_wallet)
4650
assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[1].loadwallet, node0_wallet)
51+
assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[0].restorewallet, 'w', node1_wallet_backup)
52+
assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[1].restorewallet, 'w', node0_wallet_backup)
4753
else:
4854
assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[0].loadwallet, node1_wallet)
4955
assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[1].loadwallet, node0_wallet)
56+
assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[0].restorewallet, 'w', node1_wallet_backup)
57+
assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[1].restorewallet, 'w', node0_wallet_backup)
5058

5159
if not self.options.descriptors:
5260
self.log.info("Override cross-chain wallet load protection")

0 commit comments

Comments
 (0)