[wallet] Fix potential memory leak in CreateWalletFromFile
Fix proposed by ryanofsky in https://github.com/bitcoin/bitcoin/pull/12647#discussion_r174875670
This commit is contained in:
parent
13da2899ae
commit
59b87a27ef
1 changed files with 8 additions and 2 deletions
|
@ -4012,7 +4012,10 @@ CWallet* CWallet::CreateWalletFromFile(const std::string& name, const fs::path&
|
|||
|
||||
int64_t nStart = GetTimeMillis();
|
||||
bool fFirstRun = true;
|
||||
CWallet *walletInstance = new CWallet(name, WalletDatabase::Create(path));
|
||||
// Make a temporary wallet unique pointer so memory doesn't get leaked if
|
||||
// wallet creation fails.
|
||||
auto temp_wallet = MakeUnique<CWallet>(name, WalletDatabase::Create(path));
|
||||
CWallet* walletInstance = temp_wallet.get();
|
||||
DBErrors nLoadWalletRet = walletInstance->LoadWallet(fFirstRun);
|
||||
if (nLoadWalletRet != DBErrors::LOAD_OK)
|
||||
{
|
||||
|
@ -4224,7 +4227,6 @@ CWallet* CWallet::CreateWalletFromFile(const std::string& name, const fs::path&
|
|||
}
|
||||
|
||||
walletInstance->m_last_block_processed = chainActive.Tip();
|
||||
RegisterValidationInterface(walletInstance);
|
||||
|
||||
if (chainActive.Tip() && chainActive.Tip() != pindexRescan)
|
||||
{
|
||||
|
@ -4290,6 +4292,10 @@ CWallet* CWallet::CreateWalletFromFile(const std::string& name, const fs::path&
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Register with the validation interface. It's ok to do this after rescan since we're still holding cs_main.
|
||||
RegisterValidationInterface(temp_wallet.release());
|
||||
|
||||
walletInstance->SetBroadcastTransactions(gArgs.GetBoolArg("-walletbroadcast", DEFAULT_WALLETBROADCAST));
|
||||
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue