aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRyan Ofsky <ryan@ofsky.org>2023-05-31 15:22:50 -0400
committerAndrew Chow <github@achow101.com>2023-05-31 15:24:06 -0400
commit1d858b055daeea363e0450f327672658548be4c6 (patch)
tree549e34a4833228c50d39deb7abca9bb8e3243fec /src
parent84b2f353bbefb9264284e7430863b2fa1d796d38 (diff)
downloadbitcoin-1d858b055daeea363e0450f327672658548be4c6.tar.xz
walletdb: Handle when database keys are empty
Diffstat (limited to 'src')
-rw-r--r--src/wallet/bdb.cpp2
-rw-r--r--src/wallet/sqlite.cpp6
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);