/ src / test / fuzz / blockfilter.cpp
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  }