mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-21 07:39:08 +01:00
Merge pull request #4996
d0c4197change exit(1) to an assert in CWallet::EncryptWallet (Philip Kaufmann)870da77fix possible memory leaks in CWallet::EncryptWallet (Philip Kaufmann)f606bb9fix a possible memory leak in CWalletDB::Recover (Philip Kaufmann)
This commit is contained in:
@@ -15,6 +15,8 @@
|
||||
#include "util.h"
|
||||
#include "utilmoneystr.h"
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include <boost/algorithm/string/replace.hpp>
|
||||
#include <boost/thread.hpp>
|
||||
|
||||
@@ -426,17 +428,25 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
|
||||
mapMasterKeys[++nMasterKeyMaxID] = kMasterKey;
|
||||
if (fFileBacked)
|
||||
{
|
||||
assert(!pwalletdbEncryption);
|
||||
pwalletdbEncryption = new CWalletDB(strWalletFile);
|
||||
if (!pwalletdbEncryption->TxnBegin())
|
||||
if (!pwalletdbEncryption->TxnBegin()) {
|
||||
delete pwalletdbEncryption;
|
||||
pwalletdbEncryption = NULL;
|
||||
return false;
|
||||
}
|
||||
pwalletdbEncryption->WriteMasterKey(nMasterKeyMaxID, kMasterKey);
|
||||
}
|
||||
|
||||
if (!EncryptKeys(vMasterKey))
|
||||
{
|
||||
if (fFileBacked)
|
||||
if (fFileBacked) {
|
||||
pwalletdbEncryption->TxnAbort();
|
||||
exit(1); //We now probably have half of our keys encrypted in memory, and half not...die and let the user reload their unencrypted wallet.
|
||||
delete pwalletdbEncryption;
|
||||
}
|
||||
// We now probably have half of our keys encrypted in memory, and half not...
|
||||
// die and let the user reload their unencrypted wallet.
|
||||
assert(false);
|
||||
}
|
||||
|
||||
// Encryption was introduced in version 0.4.0
|
||||
@@ -444,8 +454,12 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
|
||||
|
||||
if (fFileBacked)
|
||||
{
|
||||
if (!pwalletdbEncryption->TxnCommit())
|
||||
exit(1); //We now have keys encrypted in memory, but no on disk...die to avoid confusion and let the user reload their unencrypted wallet.
|
||||
if (!pwalletdbEncryption->TxnCommit()) {
|
||||
delete pwalletdbEncryption;
|
||||
// We now have keys encrypted in memory, but no on disk...
|
||||
// die to avoid confusion and let the user reload their unencrypted wallet.
|
||||
assert(false);
|
||||
}
|
||||
|
||||
delete pwalletdbEncryption;
|
||||
pwalletdbEncryption = NULL;
|
||||
@@ -1068,7 +1082,7 @@ CAmount CWallet::GetWatchOnlyBalance() const
|
||||
nTotal += pcoin->GetAvailableWatchOnlyCredit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return nTotal;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user