diff options
author | Andrew Chow <github@achow101.com> | 2022-11-28 18:27:27 -0500 |
---|---|---|
committer | fanquake <fanquake@gmail.com> | 2022-12-01 10:21:00 +0000 |
commit | 7a97a56ffb22fbf8ccb143a8a7da77e8c7e77069 (patch) | |
tree | f13ea9e7b1eb1f9c0d02c11c0273952eac799956 | |
parent | f668a3a85933512e7efc369b5b2922d44b4bad82 (diff) | |
download | bitcoin-7a97a56ffb22fbf8ccb143a8a7da77e8c7e77069.tar.xz |
wallet: Avoid null pointer deref when cleaning up migratewallet
If migratewallet fails, we do a cleanup which removes the watchonly and
solvables wallets if they were created. However, if they were not, their
pointers are nullptr and we don't check for that, which causes a
segfault during the cleanup. So check that they aren't nullptr before
cleaning them up.
Github-Pull: #26594
Rebased-From: 86ef7b3c7be84e4183098f448c77ecc9ea7367ab
-rw-r--r-- | src/wallet/wallet.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index ac7bf46a14..36fe32e54d 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -4102,8 +4102,8 @@ util::Result<MigrationResult> MigrateLegacyToDescriptor(std::shared_ptr<CWallet> // Make list of wallets to cleanup std::vector<std::shared_ptr<CWallet>> created_wallets; - created_wallets.push_back(std::move(res.watchonly_wallet)); - created_wallets.push_back(std::move(res.solvables_wallet)); + if (res.watchonly_wallet) created_wallets.push_back(std::move(res.watchonly_wallet)); + if (res.solvables_wallet) created_wallets.push_back(std::move(res.solvables_wallet)); // Get the directories to remove after unloading for (std::shared_ptr<CWallet>& w : created_wallets) { |