| 14 | #include <vector> |
| 15 | |
| 16 | FUZZ_TARGET(merkleblock) |
| 17 | { |
| 18 | FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); |
| 19 | CPartialMerkleTree partial_merkle_tree; |
| 20 | CallOneOf( |
| 21 | fuzzed_data_provider, |
| 22 | [&] { |
| 23 | const std::optional<CPartialMerkleTree> opt_partial_merkle_tree = ConsumeDeserializable<CPartialMerkleTree>(fuzzed_data_provider); |
| 24 | if (opt_partial_merkle_tree) { |
| 25 | partial_merkle_tree = *opt_partial_merkle_tree; |
| 26 | } |
| 27 | }, |
| 28 | [&] { |
| 29 | CMerkleBlock merkle_block; |
| 30 | const std::optional<CBlock> opt_block = ConsumeDeserializable<CBlock>(fuzzed_data_provider); |
| 31 | CBloomFilter bloom_filter; |
| 32 | std::set<uint256> txids; |
| 33 | if (opt_block && !opt_block->vtx.empty()) { |
| 34 | if (fuzzed_data_provider.ConsumeBool()) { |
| 35 | merkle_block = CMerkleBlock{*opt_block, bloom_filter}; |
| 36 | } else if (fuzzed_data_provider.ConsumeBool()) { |
| 37 | LIMITED_WHILE(fuzzed_data_provider.ConsumeBool(), 10000) { |
| 38 | txids.insert(ConsumeUInt256(fuzzed_data_provider)); |
| 39 | } |
| 40 | merkle_block = CMerkleBlock{*opt_block, txids}; |
| 41 | } |
| 42 | } |
| 43 | partial_merkle_tree = merkle_block.txn; |
| 44 | }); |
| 45 | (void)partial_merkle_tree.GetNumTransactions(); |
| 46 | std::vector<uint256> matches; |
| 47 | std::vector<unsigned int> indices; |
| 48 | (void)partial_merkle_tree.ExtractMatches(matches, indices); |
| 49 | } |
nothing calls this directly
no test coverage detected