aboutsummaryrefslogtreecommitdiff
path: root/src/walletdb.cpp
diff options
context:
space:
mode:
authorPhilip Kaufmann <phil.kaufmann@t-online.de>2014-09-28 16:09:19 +0200
committerPhilip Kaufmann <phil.kaufmann@t-online.de>2014-10-01 08:48:22 +0200
commitf606bb9bafafb12bcf9bc0834125c884da97f9e1 (patch)
treeb1152359cd226b215eacbec8575f624648c8b66f /src/walletdb.cpp
parente5836eb6923b8142003915fc02f2f0b4dc7731c1 (diff)
downloadbitcoin-f606bb9bafafb12bcf9bc0834125c884da97f9e1.tar.xz
fix a possible memory leak in CWalletDB::Recover
- convert pdbCopy into a boost::scoped_ptr to ensure memory gets freed in all cases (e.g. after "ret > 0")
Diffstat (limited to 'src/walletdb.cpp')
-rw-r--r--src/walletdb.cpp7
1 files changed, 3 insertions, 4 deletions
diff --git a/src/walletdb.cpp b/src/walletdb.cpp
index a84f44db01..e13830a8f4 100644
--- a/src/walletdb.cpp
+++ b/src/walletdb.cpp
@@ -15,11 +15,11 @@
#include <boost/filesystem.hpp>
#include <boost/foreach.hpp>
+#include <boost/scoped_ptr.hpp>
#include <boost/thread.hpp>
-using namespace std;
using namespace boost;
-
+using namespace std;
static uint64_t nAccountingEntryNumber = 0;
@@ -926,7 +926,7 @@ bool CWalletDB::Recover(CDBEnv& dbenv, std::string filename, bool fOnlyKeys)
LogPrintf("Salvage(aggressive) found %u records\n", salvagedData.size());
bool fSuccess = allOK;
- Db* pdbCopy = new Db(&dbenv.dbenv, 0);
+ boost::scoped_ptr<Db> pdbCopy(new Db(&dbenv.dbenv, 0));
int ret = pdbCopy->open(NULL, // Txn pointer
filename.c_str(), // Filename
"main", // Logical db name
@@ -967,7 +967,6 @@ bool CWalletDB::Recover(CDBEnv& dbenv, std::string filename, bool fOnlyKeys)
}
ptxn->commit(0);
pdbCopy->close(0);
- delete pdbCopy;
return fSuccess;
}