aboutsummaryrefslogtreecommitdiff
path: root/src/wallet.cpp
diff options
context:
space:
mode:
authorLuke Dashjr <luke-jr+git@utopios.org>2012-09-01 22:07:47 +0000
committerLuke Dashjr <luke-jr+git@utopios.org>2012-09-02 08:02:46 +0000
commitddb709e9de1490afcfa1af045517d2228d5b864c (patch)
tree46a8f68d95e38d527729e2b7da7976dad8654921 /src/wallet.cpp
parentc3f95ef13f48d21db53992984976eac93e7a08fc (diff)
downloadbitcoin-ddb709e9de1490afcfa1af045517d2228d5b864c.tar.xz
Bugfix: Require OrderedTxItems to provide properly scoped accounting entry list
OrderedTxItems returns a multimap of pointers, but needs a place to store the actual CAccountingEntries it points to. It had been using a stack item, which was clobbered as soon as it returned, resulting in undefined behaviour. This fixes at least bug #1768.
Diffstat (limited to 'src/wallet.cpp')
-rw-r--r--src/wallet.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/wallet.cpp b/src/wallet.cpp
index 07a5047cef..3af9fdaeae 100644
--- a/src/wallet.cpp
+++ b/src/wallet.cpp
@@ -291,8 +291,7 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
return true;
}
-CWallet::TxItems
-CWallet::OrderedTxItems(std::string strAccount)
+CWallet::TxItems CWallet::OrderedTxItems(std::list<CAccountingEntry>& acentries, std::string strAccount)
{
CWalletDB walletdb(strWalletFile);
@@ -306,7 +305,7 @@ CWallet::OrderedTxItems(std::string strAccount)
CWalletTx* wtx = &((*it).second);
txOrdered.insert(make_pair(wtx->nOrderPos, TxPair(wtx, (CAccountingEntry*)0)));
}
- list<CAccountingEntry> acentries;
+ acentries.clear();
walletdb.ListAccountCreditDebit(strAccount, acentries);
BOOST_FOREACH(CAccountingEntry& entry, acentries)
{
@@ -375,7 +374,8 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn)
{
// Tolerate times up to the last timestamp in the wallet not more than 5 minutes into the future
int64 latestTolerated = latestNow + 300;
- TxItems txOrdered = OrderedTxItems();
+ std::list<CAccountingEntry> acentries;
+ TxItems txOrdered = OrderedTxItems(acentries);
for (TxItems::reverse_iterator it = txOrdered.rbegin(); it != txOrdered.rend(); ++it)
{
CWalletTx *const pwtx = (*it).second.first;