git / moonbite-core / src/test/fuzz/chain.cpp · raw

// Copyright (c) 2020 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 <chain.h>#include <test/fuzz/FuzzedDataProvider.h>#include <test/fuzz/fuzz.h>#include <test/fuzz/util.h>#include <cstdint>#include <optional>#include <vector>void test_one_input(const std::vector<uint8_t>& buffer){    FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());    std::optional<CDiskBlockIndex> disk_block_index = ConsumeDeserializable<CDiskBlockIndex>(fuzzed_data_provider);    if (!disk_block_index) {        return;    }    const uint256 zero{};    disk_block_index->phashBlock = &zero;    (void)disk_block_index->GetBlockHash();    (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();    (void)disk_block_index->ToString();    const CBlockHeader block_header = disk_block_index->GetBlockHeader();    (void)CDiskBlockIndex{*disk_block_index};    (void)disk_block_index->BuildSkip();    while (fuzzed_data_provider.ConsumeBool()) {        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;        }        (void)disk_block_index->RaiseValidity(block_status);    }    CBlockIndex block_index{block_header};    block_index.phashBlock = &zero;    (void)block_index.GetBlockHash();    (void)block_index.ToString();}