From aac5488909f72f8c5a91ca7f12398069b7cd9ce4 Mon Sep 17 00:00:00 2001 From: stratospher <44024636+stratospher@users.noreply.github.com> Date: Fri, 7 Feb 2025 10:22:39 +0530 Subject: [PATCH] validation: correctly update BlockStatus for invalid block descendants invalid_block ----------> block_index - before this commit, only if block_index is not invalid, it will mark block_index as BLOCK_FAILED_CHILD - it's possible that block_index encountered is invalid and was marked as BLOCK_FAILED_VALID previously - in this case, correctly update BlockStatus of block_index by clearing BLOCK_FAILED_VALID and then setting it to BLOCK_FAILED_CHILD --- src/validation.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/validation.cpp b/src/validation.cpp index 673c9272fe6..0714fb7f437 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -3826,8 +3826,9 @@ void Chainstate::SetBlockFailureFlags(CBlockIndex* invalid_block) AssertLockHeld(cs_main); for (auto& [_, block_index] : m_blockman.m_block_index) { - if (block_index.GetAncestor(invalid_block->nHeight) == invalid_block && !(block_index.nStatus & BLOCK_FAILED_MASK)) { - block_index.nStatus |= BLOCK_FAILED_CHILD; + if (invalid_block != &block_index && block_index.GetAncestor(invalid_block->nHeight) == invalid_block) { + block_index.nStatus = (block_index.nStatus & ~BLOCK_FAILED_VALID) | BLOCK_FAILED_CHILD; + m_blockman.m_dirty_blockindex.insert(&block_index); } } }