blockfilter.cpp raw

   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  }
  48