mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-02 09:46:52 -05:00
Merge #20921: validation: don't try to invalidate genesis block in CChainState::InvalidateBlock
787df19b09
validation: don't try to invalidate genesis block (Sebastian Falbesoner) Pull request description: In the block invalidation method (`CChainState::InvalidateBlock`), the code for creating the candidate block map assumes that the passed block's previous block (`pindex->pprev`) is available and otherwise segfaults due to null-pointer deference in `CBlockIndexWorkComparator()` (see analysis by practicalswift in #20914), i.e. it doesn't work with the genesis block. Rather than analyzing all possible code paths and implications for this corner case, simply fail early if the genesis block is passed. Fixes #20914. ACKs for top commit: sipa: ACK787df19b09
. Tested invalidation of generic on regtest. practicalswift: Tested ACK787df19b09
Tree-SHA512: 978be7cf2bd1c1faebfe945d191ac77dea72791bea826459abd308f77c74c5991efee495a38817c306e488ecd5208b5c888df7d9d044132dd9a06bbbdb256b6c
This commit is contained in:
commit
63952f73b3
1 changed files with 4 additions and 0 deletions
|
@ -2974,6 +2974,10 @@ bool CChainState::PreciousBlock(BlockValidationState& state, const CChainParams&
|
|||
|
||||
bool CChainState::InvalidateBlock(BlockValidationState& state, const CChainParams& chainparams, CBlockIndex *pindex)
|
||||
{
|
||||
// Genesis block can't be invalidated
|
||||
assert(pindex);
|
||||
if (pindex->nHeight == 0) return false;
|
||||
|
||||
CBlockIndex* to_mark_failed = pindex;
|
||||
bool pindex_was_in_chain = false;
|
||||
int disconnected = 0;
|
||||
|
|
Loading…
Add table
Reference in a new issue