Avoid reference leakage in CKeyHolderStorage::AddKey (#1840)

This commit is contained in:
UdjinM6 2018-01-09 14:11:43 +03:00 committed by GitHub
parent c532be1c06
commit 9965d51bb6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 6 additions and 6 deletions

View File

@ -1096,7 +1096,7 @@ bool CPrivateSendClient::PrepareDenominate(int nMinRounds, int nMaxRounds, std::
vecTxDSIn.erase(it); vecTxDSIn.erase(it);
vCoins.erase(it2); vCoins.erase(it2);
CScript scriptDenom = keyHolderStorage.AddKey(pwalletMain).GetScriptForDestination(); CScript scriptDenom = keyHolderStorage.AddKey(pwalletMain);
// add new output // add new output
CTxOut txout(nValueDenom, scriptDenom); CTxOut txout(nValueDenom, scriptDenom);
@ -1272,7 +1272,7 @@ bool CPrivateSendClient::CreateDenominated(const CompactTallyItem& tallyItem, bo
// ****** Add an output for mixing collaterals ************ / // ****** Add an output for mixing collaterals ************ /
if(fCreateMixingCollaterals) { if(fCreateMixingCollaterals) {
CScript scriptCollateral = keyHolderStorageDenom.AddKey(pwalletMain).GetScriptForDestination(); CScript scriptCollateral = keyHolderStorageDenom.AddKey(pwalletMain);
vecSend.push_back((CRecipient){ scriptCollateral, CPrivateSend::GetMaxCollateralAmount(), false }); vecSend.push_back((CRecipient){ scriptCollateral, CPrivateSend::GetMaxCollateralAmount(), false });
nValueLeft -= CPrivateSend::GetMaxCollateralAmount(); nValueLeft -= CPrivateSend::GetMaxCollateralAmount();
} }
@ -1307,7 +1307,7 @@ bool CPrivateSendClient::CreateDenominated(const CompactTallyItem& tallyItem, bo
// add each output up to 11 times until it can't be added again // add each output up to 11 times until it can't be added again
while(nValueLeft - nDenomValue >= 0 && nOutputs <= 10) { while(nValueLeft - nDenomValue >= 0 && nOutputs <= 10) {
CScript scriptDenom = keyHolderStorageDenom.AddKey(pwalletMain).GetScriptForDestination(); CScript scriptDenom = keyHolderStorageDenom.AddKey(pwalletMain);
vecSend.push_back((CRecipient){ scriptDenom, nDenomValue, false }); vecSend.push_back((CRecipient){ scriptDenom, nDenomValue, false });

View File

@ -25,12 +25,12 @@ CScript CKeyHolder::GetScriptForDestination() const
} }
const CKeyHolder& CKeyHolderStorage::AddKey(CWallet* pwallet) CScript CKeyHolderStorage::AddKey(CWallet* pwallet)
{ {
LOCK(cs_storage); LOCK(cs_storage);
storage.emplace_back(std::unique_ptr<CKeyHolder>(new CKeyHolder(pwallet))); storage.emplace_back(std::unique_ptr<CKeyHolder>(new CKeyHolder(pwallet)));
LogPrintf("CKeyHolderStorage::%s -- storage size %lld\n", __func__, storage.size()); LogPrintf("CKeyHolderStorage::%s -- storage size %lld\n", __func__, storage.size());
return *storage.back(); return storage.back()->GetScriptForDestination();
} }
void CKeyHolderStorage::KeepAll(){ void CKeyHolderStorage::KeepAll(){

View File

@ -30,7 +30,7 @@ private:
mutable CCriticalSection cs_storage; mutable CCriticalSection cs_storage;
public: public:
const CKeyHolder& AddKey(CWallet* pwalletIn); CScript AddKey(CWallet* pwalletIn);
void KeepAll(); void KeepAll();
void ReturnAll(); void ReturnAll();