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.
This commit is contained in:
Ben Woosley 2018-11-24 20:49:08 -06:00
parent 1a9f9f7e5e
commit 4a86a0acd9
No known key found for this signature in database
GPG key ID: 6EE5F3785F78B345
2 changed files with 12 additions and 10 deletions

View file

@ -247,12 +247,12 @@ BerkeleyEnvironment::VerifyResult BerkeleyEnvironment::Verify(const std::string&
return (fRecovered ? VerifyResult::RECOVER_OK : VerifyResult::RECOVER_FAIL); 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) : m_dbt(data, size)
{ {
} }

View file

@ -170,13 +170,15 @@ private:
class BerkeleyBatch class BerkeleyBatch
{ {
/** RAII class that automatically cleanses its data on destruction */ /** RAII class that automatically cleanses its data on destruction */
class SafeDbt final { class SafeDbt final
{
Dbt m_dbt; Dbt m_dbt;
public: public:
// construct Dbt with data or flags // construct Dbt with internally-managed data
SafeDbt(u_int32_t flags = 0); SafeDbt();
SafeDbt(void *data, size_t size); // construct Dbt with provided data
SafeDbt(void* data, size_t size);
~SafeDbt(); ~SafeDbt();
// delegate to Dbt // delegate to Dbt
@ -227,7 +229,7 @@ public:
SafeDbt datKey(ssKey.data(), ssKey.size()); SafeDbt datKey(ssKey.data(), ssKey.size());
// Read // Read
SafeDbt datValue(DB_DBT_MALLOC); SafeDbt datValue;
int ret = pdb->get(activeTxn, datKey, datValue, 0); int ret = pdb->get(activeTxn, datKey, datValue, 0);
bool success = false; bool success = false;
if (datValue.get_data() != nullptr) { if (datValue.get_data() != nullptr) {
@ -318,8 +320,8 @@ public:
int ReadAtCursor(Dbc* pcursor, CDataStream& ssKey, CDataStream& ssValue) int ReadAtCursor(Dbc* pcursor, CDataStream& ssKey, CDataStream& ssValue)
{ {
// Read at cursor // Read at cursor
SafeDbt datKey(DB_DBT_MALLOC); SafeDbt datKey;
SafeDbt datValue(DB_DBT_MALLOC); SafeDbt datValue;
int ret = pcursor->get(datKey, datValue, DB_NEXT); int ret = pcursor->get(datKey, datValue, DB_NEXT);
if (ret != 0) if (ret != 0)
return ret; return ret;