1 // Copyright (c) 2020 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 10 #include <cstdint> 11 #include <optional> 12 #include <string> 13 #include <vector> 14 test_one_input(const std::vector<uint8_t> & buffer)15void test_one_input(const std::vector<uint8_t>& buffer) 16 { 17 FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); 18 const std::optional<BlockFilter> block_filter = ConsumeDeserializable<BlockFilter>(fuzzed_data_provider); 19 if (!block_filter) { 20 return; 21 } 22 { 23 (void)block_filter->ComputeHeader(ConsumeUInt256(fuzzed_data_provider)); 24 (void)block_filter->GetBlockHash(); 25 (void)block_filter->GetEncodedFilter(); 26 (void)block_filter->GetHash(); 27 } 28 { 29 const BlockFilterType block_filter_type = block_filter->GetFilterType(); 30 (void)BlockFilterTypeName(block_filter_type); 31 } 32 { 33 const GCSFilter gcs_filter = block_filter->GetFilter(); 34 (void)gcs_filter.GetN(); 35 (void)gcs_filter.GetParams(); 36 (void)gcs_filter.GetEncoded(); 37 (void)gcs_filter.Match(ConsumeRandomLengthByteVector(fuzzed_data_provider)); 38 GCSFilter::ElementSet element_set; 39 while (fuzzed_data_provider.ConsumeBool()) { 40 element_set.insert(ConsumeRandomLengthByteVector(fuzzed_data_provider)); 41 gcs_filter.MatchAny(element_set); 42 } 43 } 44 } 45