From 26a882965f00ad6a2e4f09f5f28c21d473e33c27 Mon Sep 17 00:00:00 2001 From: Lee *!* Clagett Date: Thu, 13 Nov 2025 11:12:18 -0500 Subject: [PATCH] Hopefully fix issue with db corruption (bad data size) (#199) --- src/db/storage.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/db/storage.cpp b/src/db/storage.cpp index 6d08ebc..b8187d5 100644 --- a/src/db/storage.cpp +++ b/src/db/storage.cpp @@ -2975,6 +2975,7 @@ namespace db auto old_dict = subaddress_ranges.get_value(value); if (!old_dict) return old_dict.error(); + mdb_cursor_del(ranges_cur.get(), 0); // updated at end auto& old_range = old_dict->second.get_container(); const auto& new_range = major_entry.second.get_container(); @@ -3043,7 +3044,9 @@ namespace db value = lmdb::to_val(new_value); - MONERO_LMDB_CHECK(mdb_cursor_put(indexes_cur.get(), &key, &value, 0)); + const int err = mdb_cursor_put(indexes_cur.get(), &key, &value, MDB_NODUPDATA); + if (err && err != MDB_KEYEXIST) + return {lmdb::error(err)}; } } @@ -3052,7 +3055,7 @@ namespace db if (!value_bytes) return value_bytes.error(); value = MDB_val{value_bytes->size(), const_cast(static_cast(value_bytes->data()))}; - MONERO_LMDB_CHECK(mdb_cursor_put(ranges_cur.get(), &key, &value, 0)); + MONERO_LMDB_CHECK(mdb_cursor_put(ranges_cur.get(), &key, &value, MDB_NODUPDATA)); } return {std::move(out)};