From 4a86a0acd9ac3ca392f0584a5fd079a856e5e4ba Mon Sep 17 00:00:00 2001 From: Ben Woosley Date: Sat, 24 Nov 2018 20:49:08 -0600 Subject: [PATCH] Make SafeDbt DB_DBT_MALLOC on default initialization If we're constructing the SafeDbt without provided data, it is always malloced, so that is the case we expose. Also run clang-format. --- src/wallet/db.cpp | 6 +++--- src/wallet/db.h | 16 +++++++++------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/wallet/db.cpp b/src/wallet/db.cpp index 9bac3c49c..b3ae3b92a 100644 --- a/src/wallet/db.cpp +++ b/src/wallet/db.cpp @@ -247,12 +247,12 @@ BerkeleyEnvironment::VerifyResult BerkeleyEnvironment::Verify(const std::string& return (fRecovered ? VerifyResult::RECOVER_OK : VerifyResult::RECOVER_FAIL); } -BerkeleyBatch::SafeDbt::SafeDbt(u_int32_t flags) +BerkeleyBatch::SafeDbt::SafeDbt() { - m_dbt.set_flags(flags); + m_dbt.set_flags(DB_DBT_MALLOC); } -BerkeleyBatch::SafeDbt::SafeDbt(void *data, size_t size) +BerkeleyBatch::SafeDbt::SafeDbt(void* data, size_t size) : m_dbt(data, size) { } diff --git a/src/wallet/db.h b/src/wallet/db.h index 73cbff98f..25e1cdafa 100644 --- a/src/wallet/db.h +++ b/src/wallet/db.h @@ -170,13 +170,15 @@ private: class BerkeleyBatch { /** RAII class that automatically cleanses its data on destruction */ - class SafeDbt final { + class SafeDbt final + { Dbt m_dbt; public: - // construct Dbt with data or flags - SafeDbt(u_int32_t flags = 0); - SafeDbt(void *data, size_t size); + // construct Dbt with internally-managed data + SafeDbt(); + // construct Dbt with provided data + SafeDbt(void* data, size_t size); ~SafeDbt(); // delegate to Dbt @@ -227,7 +229,7 @@ public: SafeDbt datKey(ssKey.data(), ssKey.size()); // Read - SafeDbt datValue(DB_DBT_MALLOC); + SafeDbt datValue; int ret = pdb->get(activeTxn, datKey, datValue, 0); bool success = false; if (datValue.get_data() != nullptr) { @@ -318,8 +320,8 @@ public: int ReadAtCursor(Dbc* pcursor, CDataStream& ssKey, CDataStream& ssValue) { // Read at cursor - SafeDbt datKey(DB_DBT_MALLOC); - SafeDbt datValue(DB_DBT_MALLOC); + SafeDbt datKey; + SafeDbt datValue; int ret = pcursor->get(datKey, datValue, DB_NEXT); if (ret != 0) return ret;