// Copyright (c) 2020-2021 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include #include #include #include #include #include #include FUZZ_TARGET(chain) { FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); std::optional disk_block_index = ConsumeDeserializable(fuzzed_data_provider); if (!disk_block_index) { return; } const uint256 zero{}; disk_block_index->phashBlock = &zero; { LOCK(::cs_main); (void)disk_block_index->ConstructBlockHash(); (void)disk_block_index->GetBlockPos(); (void)disk_block_index->GetBlockTime(); (void)disk_block_index->GetBlockTimeMax(); (void)disk_block_index->GetMedianTimePast(); (void)disk_block_index->GetUndoPos(); (void)disk_block_index->HaveTxsDownloaded(); (void)disk_block_index->IsValid(); } const CBlockHeader block_header = disk_block_index->GetBlockHeader(); (void)CDiskBlockIndex{*disk_block_index}; (void)disk_block_index->BuildSkip(); LIMITED_WHILE(fuzzed_data_provider.ConsumeBool(), 10000) { const BlockStatus block_status = fuzzed_data_provider.PickValueInArray({ BlockStatus::BLOCK_VALID_UNKNOWN, BlockStatus::BLOCK_VALID_RESERVED, BlockStatus::BLOCK_VALID_TREE, BlockStatus::BLOCK_VALID_TRANSACTIONS, BlockStatus::BLOCK_VALID_CHAIN, BlockStatus::BLOCK_VALID_SCRIPTS, BlockStatus::BLOCK_VALID_MASK, BlockStatus::BLOCK_HAVE_DATA, BlockStatus::BLOCK_HAVE_UNDO, BlockStatus::BLOCK_HAVE_MASK, BlockStatus::BLOCK_FAILED_VALID, BlockStatus::BLOCK_FAILED_CHILD, BlockStatus::BLOCK_FAILED_MASK, BlockStatus::BLOCK_OPT_WITNESS, }); if (block_status & ~BLOCK_VALID_MASK) { continue; } WITH_LOCK(::cs_main, (void)disk_block_index->RaiseValidity(block_status)); } CBlockIndex block_index{block_header}; block_index.phashBlock = &zero; (void)block_index.GetBlockHash(); (void)block_index.ToString(); }