| 24 | } |
| 25 | |
| 26 | FUZZ_TARGET_INIT(block, initialize_block) |
| 27 | { |
| 28 | CDataStream ds(buffer, SER_NETWORK, INIT_PROTO_VERSION); |
| 29 | CBlock block; |
| 30 | try { |
| 31 | int nVersion; |
| 32 | ds >> nVersion; |
| 33 | ds.SetVersion(nVersion); |
| 34 | ds >> block; |
| 35 | } catch (const std::ios_base::failure&) { |
| 36 | return; |
| 37 | } |
| 38 | const Consensus::Params& consensus_params = Params().GetConsensus(); |
| 39 | BlockValidationState validation_state_pow_and_merkle; |
| 40 | const bool valid_incl_pow_and_merkle = CheckBlock(block, validation_state_pow_and_merkle, consensus_params, /* fCheckPOW= */ true, /* fCheckMerkleRoot= */ true); |
| 41 | assert(validation_state_pow_and_merkle.IsValid() || validation_state_pow_and_merkle.IsInvalid() || validation_state_pow_and_merkle.IsError()); |
| 42 | (void)validation_state_pow_and_merkle.Error(""); |
| 43 | BlockValidationState validation_state_pow; |
| 44 | const bool valid_incl_pow = CheckBlock(block, validation_state_pow, consensus_params, /* fCheckPOW= */ true, /* fCheckMerkleRoot= */ false); |
| 45 | assert(validation_state_pow.IsValid() || validation_state_pow.IsInvalid() || validation_state_pow.IsError()); |
| 46 | BlockValidationState validation_state_merkle; |
| 47 | const bool valid_incl_merkle = CheckBlock(block, validation_state_merkle, consensus_params, /* fCheckPOW= */ false, /* fCheckMerkleRoot= */ true); |
| 48 | assert(validation_state_merkle.IsValid() || validation_state_merkle.IsInvalid() || validation_state_merkle.IsError()); |
| 49 | BlockValidationState validation_state_none; |
| 50 | const bool valid_incl_none = CheckBlock(block, validation_state_none, consensus_params, /* fCheckPOW= */ false, /* fCheckMerkleRoot= */ false); |
| 51 | assert(validation_state_none.IsValid() || validation_state_none.IsInvalid() || validation_state_none.IsError()); |
| 52 | if (valid_incl_pow_and_merkle) { |
| 53 | assert(valid_incl_pow && valid_incl_merkle && valid_incl_none); |
| 54 | } else if (valid_incl_merkle || valid_incl_pow) { |
| 55 | assert(valid_incl_none); |
| 56 | } |
| 57 | (void)block.GetHash(); |
| 58 | (void)block.ToString(); |
| 59 | (void)BlockMerkleRoot(block); |
| 60 | if (!block.vtx.empty()) { |
| 61 | (void)BlockWitnessMerkleRoot(block); |
| 62 | } |
| 63 | (void)GetBlockWeight(block); |
| 64 | (void)GetWitnessCommitmentIndex(block); |
| 65 | const size_t raw_memory_size = RecursiveDynamicUsage(block); |
| 66 | const size_t raw_memory_size_as_shared_ptr = RecursiveDynamicUsage(std::make_shared<CBlock>(block)); |
| 67 | assert(raw_memory_size_as_shared_ptr > raw_memory_size); |
| 68 | CBlock block_copy = block; |
| 69 | block_copy.SetNull(); |
| 70 | const bool is_null = block_copy.IsNull(); |
| 71 | assert(is_null); |
| 72 | } |
nothing calls this directly
no test coverage detected