From 6b733699cfc79253ffae1527106baa428dd62f39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc?= Date: Thu, 31 Oct 2024 13:33:36 +0100 Subject: [PATCH] coins, refactor: Assume state after SetClean in AddFlags to prevent dangling pointers Co-authored-by: Ryan Ofsky --- src/coins.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/coins.h b/src/coins.h index ffeaae3ede2..1ae99f409a6 100644 --- a/src/coins.h +++ b/src/coins.h @@ -166,11 +166,13 @@ public: { Assume(flags & (DIRTY | FRESH)); if (!pair.second.m_flags) { + Assume(!pair.second.m_prev && !pair.second.m_next); pair.second.m_prev = sentinel.second.m_prev; pair.second.m_next = &sentinel; sentinel.second.m_prev = &pair; pair.second.m_prev->second.m_next = &pair; } + Assume(pair.second.m_prev && pair.second.m_next); pair.second.m_flags |= flags; } static void SetDirty(CoinsCachePair& pair, CoinsCachePair& sentinel) noexcept { AddFlags(DIRTY, pair, sentinel); } @@ -182,6 +184,7 @@ public: m_next->second.m_prev = m_prev; m_prev->second.m_next = m_next; m_flags = 0; + m_prev = m_next = nullptr; } uint8_t GetFlags() const noexcept { return m_flags; } bool IsDirty() const noexcept { return m_flags & DIRTY; }