aboutsummaryrefslogtreecommitdiff
path: root/src/qt/walletmodel.cpp
diff options
context:
space:
mode:
authorHennadii Stepanov <32963518+hebasto@users.noreply.github.com>2024-02-12 18:15:19 +0000
committerHennadii Stepanov <32963518+hebasto@users.noreply.github.com>2024-02-12 18:18:21 +0000
commitc6398c609b45706971a226a8f049703258ee14a9 (patch)
treeed06708126d3bdb54295ef02b97a761e735da95f /src/qt/walletmodel.cpp
parente3c17112ddfe740e5ab4c652d80ed1a19c13da5a (diff)
parent517c7f9cba306292e12e166b9dbc6c0838f05b27 (diff)
downloadbitcoin-c6398c609b45706971a226a8f049703258ee14a9.tar.xz
Merge bitcoin-core/gui#773: Check for private keys disabled before attempting unlock
517c7f9cba306292e12e166b9dbc6c0838f05b27 gui: Check for private keys disabled before attempting unlock (Andrew Chow) Pull request description: Before trying to unlock a wallet, first check if it has private keys disabled. If so, there is no need to unlock. Note that such wallets are not expected to occur in typical usage. However bugs in previous versions allowed such wallets to be created, and so we need to handle them. Fixes #772 For some additional context, see #631 ACKs for top commit: hebasto: ACK 517c7f9cba306292e12e166b9dbc6c0838f05b27, I have reviewed the code and it looks OK. BrandonOdiwuor: ACK 517c7f9cba306292e12e166b9dbc6c0838f05b27 Tree-SHA512: c92aa34344d04667b70b059d2aa0a1da999cb7239cd1413f3009781aa82379f309ff9808d7dc91d385e2c8afe2abda3564568e2091ef833b1536ebfcf80f7c3c
Diffstat (limited to 'src/qt/walletmodel.cpp')
-rw-r--r--src/qt/walletmodel.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp
index 9821f8504a..c2da76fc15 100644
--- a/src/qt/walletmodel.cpp
+++ b/src/qt/walletmodel.cpp
@@ -448,6 +448,13 @@ void WalletModel::unsubscribeFromCoreSignals()
// WalletModel::UnlockContext implementation
WalletModel::UnlockContext WalletModel::requestUnlock()
{
+ // Bugs in earlier versions may have resulted in wallets with private keys disabled to become "encrypted"
+ // (encryption keys are present, but not actually doing anything).
+ // To avoid issues with such wallets, check if the wallet has private keys disabled, and if so, return a context
+ // that indicates the wallet is not encrypted.
+ if (m_wallet->privateKeysDisabled()) {
+ return UnlockContext(this, /*valid=*/true, /*relock=*/false);
+ }
bool was_locked = getEncryptionStatus() == Locked;
if(was_locked)
{