Skip to content
Permalink
Browse files
Merge pull request #6299
4f40716 test: Move reindex test to standard tests (Wladimir J. van der Laan)
36c97b4 Bugfix: Don't check the genesis block header before accepting it (Jorge Timón)
  • Loading branch information
laanwj committed Jun 26, 2015
2 parents 41076aa + 4f40716 commit 24f24896d602bef3323c5ff66bbccc92448e89d5
Showing with 22 additions and 21 deletions.
  1. +1 −1 qa/pull-tester/rpc-tests.sh
  2. +21 −20 src/main.cpp
@@ -34,6 +34,7 @@ testScripts=(
'signrawtransactions.py'
'walletbackup.py'
'nodehandling.py'
'reindex.py'
);
testScriptsExt=(
'bipdersig-p2p.py'
@@ -45,7 +46,6 @@ testScriptsExt=(
'invalidateblock.py'
'keypool.py'
'receivedby.py'
'reindex.py'
'rpcbind_test.py'
# 'script_test.py'
'smartfees.py'
@@ -2810,36 +2810,37 @@ bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state, CBloc
uint256 hash = block.GetHash();
BlockMap::iterator miSelf = mapBlockIndex.find(hash);
CBlockIndex *pindex = NULL;
if (miSelf != mapBlockIndex.end()) {
// Block header is already known.
pindex = miSelf->second;
if (ppindex)
*ppindex = pindex;
if (pindex->nStatus & BLOCK_FAILED_MASK)
return state.Invalid(error("%s: block is marked invalid", __func__), 0, "duplicate");
return true;
}
if (hash != chainparams.GetConsensus().hashGenesisBlock) {

if (!CheckBlockHeader(block, state))
return false;
if (miSelf != mapBlockIndex.end()) {
// Block header is already known.
pindex = miSelf->second;
if (ppindex)
*ppindex = pindex;
if (pindex->nStatus & BLOCK_FAILED_MASK)
return state.Invalid(error("%s: block is marked invalid", __func__), 0, "duplicate");
return true;
}

// Get prev block index
CBlockIndex* pindexPrev = NULL;
if (hash != chainparams.GetConsensus().hashGenesisBlock) {
if (!CheckBlockHeader(block, state))
return false;

// Get prev block index
CBlockIndex* pindexPrev = NULL;
BlockMap::iterator mi = mapBlockIndex.find(block.hashPrevBlock);
if (mi == mapBlockIndex.end())
return state.DoS(10, error("%s: prev block not found", __func__), 0, "bad-prevblk");
pindexPrev = (*mi).second;
if (pindexPrev->nStatus & BLOCK_FAILED_MASK)
return state.DoS(100, error("%s: prev block invalid", __func__), REJECT_INVALID, "bad-prevblk");
}
assert(pindexPrev);
if (fCheckpointsEnabled && !CheckIndexAgainstCheckpoint(pindexPrev, state, chainparams, hash))
return error("%s: CheckIndexAgainstCheckpoint(): %s", __func__, state.GetRejectReason().c_str());

if (!ContextualCheckBlockHeader(block, state, pindexPrev))
return false;
assert(pindexPrev);
if (fCheckpointsEnabled && !CheckIndexAgainstCheckpoint(pindexPrev, state, chainparams, hash))
return error("%s: CheckIndexAgainstCheckpoint(): %s", __func__, state.GetRejectReason().c_str());

if (!ContextualCheckBlockHeader(block, state, pindexPrev))
return false;
}
if (pindex == NULL)
pindex = AddToBlockIndex(block);

0 comments on commit 24f2489

Please sign in to comment.