diff options
author | Ryan Ofsky <ryan@ofsky.org> | 2023-05-31 15:22:50 -0400 |
---|---|---|
committer | Andrew Chow <github@achow101.com> | 2023-05-31 15:24:06 -0400 |
commit | 1d858b055daeea363e0450f327672658548be4c6 (patch) | |
tree | 549e34a4833228c50d39deb7abca9bb8e3243fec /src | |
parent | 84b2f353bbefb9264284e7430863b2fa1d796d38 (diff) |
walletdb: Handle when database keys are empty
Diffstat (limited to 'src')
-rw-r--r-- | src/wallet/bdb.cpp | 2 | ||||
-rw-r--r-- | src/wallet/sqlite.cpp | 6 |
2 files changed, 6 insertions, 2 deletions
diff --git a/src/wallet/bdb.cpp b/src/wallet/bdb.cpp index dbd80718f6..7a1916ddc3 100644 --- a/src/wallet/bdb.cpp +++ b/src/wallet/bdb.cpp @@ -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; } diff --git a/src/wallet/sqlite.cpp b/src/wallet/sqlite.cpp index 7621f2476b..55245707ed 100644 --- a/src/wallet/sqlite.cpp +++ b/src/wallet/sqlite.cpp @@ -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); |