mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-12 15:09:59 +01:00
walletdb: Consistently clear key and value streams before writing
Before writing data to the output key and value streams, make sure they are cleared.
This commit is contained in:
@@ -777,6 +777,7 @@ bool BerkeleyBatch::ReadKey(DataStream&& key, DataStream& value)
|
|||||||
SafeDbt datValue;
|
SafeDbt datValue;
|
||||||
int ret = pdb->get(activeTxn, datKey, datValue, 0);
|
int ret = pdb->get(activeTxn, datKey, datValue, 0);
|
||||||
if (ret == 0 && datValue.get_data() != nullptr) {
|
if (ret == 0 && datValue.get_data() != nullptr) {
|
||||||
|
value.clear();
|
||||||
value.write({AsBytePtr(datValue.get_data()), datValue.get_size()});
|
value.write({AsBytePtr(datValue.get_data()), datValue.get_size()});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -409,6 +409,7 @@ bool SQLiteBatch::ReadKey(DataStream&& key, DataStream& value)
|
|||||||
// Leftmost column in result is index 0
|
// Leftmost column in result is index 0
|
||||||
const std::byte* data{AsBytePtr(sqlite3_column_blob(m_read_stmt, 0))};
|
const std::byte* data{AsBytePtr(sqlite3_column_blob(m_read_stmt, 0))};
|
||||||
size_t data_size(sqlite3_column_bytes(m_read_stmt, 0));
|
size_t data_size(sqlite3_column_bytes(m_read_stmt, 0));
|
||||||
|
value.clear();
|
||||||
value.write({data, data_size});
|
value.write({data, data_size});
|
||||||
|
|
||||||
sqlite3_clear_bindings(m_read_stmt);
|
sqlite3_clear_bindings(m_read_stmt);
|
||||||
@@ -495,6 +496,9 @@ DatabaseCursor::Status SQLiteCursor::Next(DataStream& key, DataStream& value)
|
|||||||
return Status::FAIL;
|
return Status::FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
key.clear();
|
||||||
|
value.clear();
|
||||||
|
|
||||||
// Leftmost column in result is index 0
|
// Leftmost column in result is index 0
|
||||||
const std::byte* key_data{AsBytePtr(sqlite3_column_blob(m_cursor_stmt, 0))};
|
const std::byte* key_data{AsBytePtr(sqlite3_column_blob(m_cursor_stmt, 0))};
|
||||||
size_t key_data_size(sqlite3_column_bytes(m_cursor_stmt, 0));
|
size_t key_data_size(sqlite3_column_bytes(m_cursor_stmt, 0));
|
||||||
|
|||||||
@@ -100,6 +100,8 @@ DatabaseCursor::Status MockableCursor::Next(DataStream& key, DataStream& value)
|
|||||||
if (m_cursor == m_cursor_end) {
|
if (m_cursor == m_cursor_end) {
|
||||||
return Status::DONE;
|
return Status::DONE;
|
||||||
}
|
}
|
||||||
|
key.clear();
|
||||||
|
value.clear();
|
||||||
const auto& [key_data, value_data] = *m_cursor;
|
const auto& [key_data, value_data] = *m_cursor;
|
||||||
key.write(key_data);
|
key.write(key_data);
|
||||||
value.write(value_data);
|
value.write(value_data);
|
||||||
@@ -117,6 +119,7 @@ bool MockableBatch::ReadKey(DataStream&& key, DataStream& value)
|
|||||||
if (it == m_records.end()) {
|
if (it == m_records.end()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
value.clear();
|
||||||
value.write(it->second);
|
value.write(it->second);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user