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