refactor: wrap CCoinsViewCursor in unique_ptr

Specifically with CCoinsViewDB, if a raw cursor is allocated and
not freed, a cryptic leveldb assertion failure occurs on
CCoinsViewDB destruction.

See: https://github.com/google/leveldb/issues/142#issuecomment-414418135
This commit is contained in:
James O'Beirne
2021-06-16 16:27:20 -04:00
parent 6bc1eca01b
commit 615c1adfb0
6 changed files with 15 additions and 14 deletions

View File

@@ -183,8 +183,8 @@ FUZZ_TARGET_INIT(coins_view, initialize_coins_view)
}
{
const CCoinsViewCursor* coins_view_cursor = backend_coins_view.Cursor();
assert(coins_view_cursor == nullptr);
std::unique_ptr<CCoinsViewCursor> coins_view_cursor = backend_coins_view.Cursor();
assert(!coins_view_cursor);
(void)backend_coins_view.EstimateSize();
(void)backend_coins_view.GetBestBlock();
(void)backend_coins_view.GetHeadBlocks();