0
0
Fork 0
mirror of https://github.com/bitcoin/bitcoin.git synced 2025-03-05 14:06:27 -05:00

walletdb: Handle when database keys are empty

This commit is contained in:
Ryan Ofsky 2023-05-31 15:22:50 -04:00 committed by Andrew Chow
parent 84b2f353bb
commit 1d858b055d
2 changed files with 6 additions and 2 deletions

View file

@ -691,7 +691,7 @@ DatabaseCursor::Status BerkeleyCursor::Next(DataStream& ssKey, DataStream& ssVal
if (ret == DB_NOTFOUND) {
return Status::DONE;
}
if (ret != 0 || datKey.get_data() == nullptr || datValue.get_data() == nullptr) {
if (ret != 0) {
return Status::FAIL;
}

View file

@ -39,7 +39,11 @@ static bool BindBlobToStatement(sqlite3_stmt* stmt,
Span<const std::byte> blob,
const std::string& description)
{
int res = sqlite3_bind_blob(stmt, index, blob.data(), blob.size(), SQLITE_STATIC);
// Pass a pointer to the empty string "" below instead of passing the
// blob.data() pointer if the blob.data() pointer is null. Passing a null
// data pointer to bind_blob would cause sqlite to bind the SQL NULL value
// instead of the empty blob value X'', which would mess up SQL comparisons.
int res = sqlite3_bind_blob(stmt, index, blob.data() ? static_cast<const void*>(blob.data()) : "", blob.size(), SQLITE_STATIC);
if (res != SQLITE_OK) {
LogPrintf("Unable to bind %s to statement: %s\n", description, sqlite3_errstr(res));
sqlite3_clear_bindings(stmt);