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/transaction.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 : :
15 [ + - ]: 865 : FUZZ_TARGET(primitives_transaction)
16 : : {
17 : 453 : FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
18 : 453 : const CScript script = ConsumeScript(fuzzed_data_provider);
19 : 453 : const std::optional<COutPoint> out_point = ConsumeDeserializable<COutPoint>(fuzzed_data_provider);
20 [ + + ]: 453 : if (out_point) {
21 [ + - ]: 100 : const CTxIn tx_in{*out_point, script, fuzzed_data_provider.ConsumeIntegral<uint32_t>()};
22 : 100 : (void)tx_in;
23 : 100 : }
24 [ + - ]: 453 : const CTxOut tx_out_1{ConsumeMoney(fuzzed_data_provider), script};
25 [ + - ]: 453 : const CTxOut tx_out_2{ConsumeMoney(fuzzed_data_provider), ConsumeScript(fuzzed_data_provider)};
26 : 453 : assert((tx_out_1 == tx_out_2) != (tx_out_1 != tx_out_2));
27 : 453 : const std::optional<CMutableTransaction> mutable_tx_1 = ConsumeDeserializable<CMutableTransaction>(fuzzed_data_provider, TX_WITH_WITNESS);
28 : 453 : const std::optional<CMutableTransaction> mutable_tx_2 = ConsumeDeserializable<CMutableTransaction>(fuzzed_data_provider, TX_WITH_WITNESS);
29 [ + + + + ]: 453 : if (mutable_tx_1 && mutable_tx_2) {
30 [ + - ]: 212 : const CTransaction tx_1{*mutable_tx_1};
31 [ + - ]: 212 : const CTransaction tx_2{*mutable_tx_2};
32 [ - + ]: 212 : assert((tx_1 == tx_2) != (tx_1 != tx_2));
33 : 424 : }
34 [ + + ]: 906 : }
|