blockfilter.cpp
1 // Copyright (c) 2020-present The Bitcoin Core developers 2 // Distributed under the MIT software license, see the accompanying 3 // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 5 #include <blockfilter.h> 6 #include <test/fuzz/FuzzedDataProvider.h> 7 #include <test/fuzz/fuzz.h> 8 #include <test/fuzz/util.h> 9 #include <test/util/random.h> 10 11 #include <cstdint> 12 #include <optional> 13 #include <string> 14 #include <vector> 15 16 FUZZ_TARGET(blockfilter) 17 { 18 SeedRandomStateForTest(SeedRand::ZEROS); 19 FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); 20 const std::optional<BlockFilter> block_filter = ConsumeDeserializable<BlockFilter>(fuzzed_data_provider); 21 if (!block_filter) { 22 return; 23 } 24 { 25 (void)block_filter->ComputeHeader(ConsumeUInt256(fuzzed_data_provider)); 26 (void)block_filter->GetBlockHash(); 27 (void)block_filter->GetEncodedFilter(); 28 (void)block_filter->GetHash(); 29 } 30 { 31 const BlockFilterType block_filter_type = block_filter->GetFilterType(); 32 (void)BlockFilterTypeName(block_filter_type); 33 } 34 { 35 const GCSFilter gcs_filter = block_filter->GetFilter(); 36 (void)gcs_filter.GetN(); 37 (void)gcs_filter.GetParams(); 38 (void)gcs_filter.GetEncoded(); 39 (void)gcs_filter.Match(ConsumeRandomLengthByteVector(fuzzed_data_provider)); 40 GCSFilter::ElementSet element_set; 41 LIMITED_WHILE(fuzzed_data_provider.ConsumeBool(), 30000) 42 { 43 element_set.insert(ConsumeRandomLengthByteVector(fuzzed_data_provider)); 44 } 45 gcs_filter.MatchAny(element_set); 46 } 47 }