Branch data Line data Source code
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 <primitives/block.h>
6 : : #include <test/fuzz/FuzzedDataProvider.h>
7 : : #include <test/fuzz/fuzz.h>
8 : : #include <test/fuzz/util.h>
9 : : #include <uint256.h>
10 : :
11 : : #include <cassert>
12 : : #include <cstdint>
13 : : #include <optional>
14 : : #include <string>
15 : : #include <vector>
16 : :
17 [ + - + - ]: 150 : FUZZ_TARGET(block_header)
18 : : {
19 : 147 : FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
20 : 147 : const std::optional<CBlockHeader> block_header = ConsumeDeserializable<CBlockHeader>(fuzzed_data_provider);
21 [ + + ]: 147 : if (!block_header) {
22 : 22 : return;
23 : : }
24 : : {
25 : 125 : const uint256 hash = block_header->GetHash();
26 : 125 : constexpr uint256 u256_max{"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"};
27 [ + - ]: 125 : assert(hash != u256_max);
28 [ + - ]: 125 : assert(block_header->GetBlockTime() == block_header->nTime);
29 [ + - ]: 125 : assert(block_header->IsNull() == (block_header->nBits == 0));
30 : 125 : }
31 : : {
32 : 125 : CBlockHeader mut_block_header = *block_header;
33 : 125 : mut_block_header.SetNull();
34 [ + - ]: 125 : assert(mut_block_header.IsNull());
35 : 125 : CBlock block{*block_header};
36 [ + - + - : 125 : assert(block.GetBlockHeader().GetHash() == block_header->GetHash());
+ - + - +
- ]
37 [ + - ]: 125 : (void)block.ToString();
38 [ + - ]: 125 : block.SetNull();
39 [ + - + - : 125 : assert(block.GetBlockHeader().GetHash() == mut_block_header.GetHash());
+ - + - +
- ]
40 : 125 : }
41 : : {
42 : 125 : std::optional<CBlockLocator> block_locator = ConsumeDeserializable<CBlockLocator>(fuzzed_data_provider);
43 [ + + ]: 125 : if (block_locator) {
44 [ + - ]: 18 : (void)block_locator->IsNull();
45 [ + - ]: 18 : block_locator->SetNull();
46 [ + - + - ]: 18 : assert(block_locator->IsNull());
47 : 18 : }
48 : 125 : }
49 [ - + ]: 147 : }
|