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 test_one_input(const std::vector<uint8_t> & buffer)15void test_one_input(const std::vector<uint8_t>& buffer) 16 { 17 FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); 18 const CScript script = ConsumeScript(fuzzed_data_provider); 19 const std::optional<COutPoint> out_point = ConsumeDeserializable<COutPoint>(fuzzed_data_provider); 20 if (out_point) { 21 const CTxIn tx_in{*out_point, script, fuzzed_data_provider.ConsumeIntegral<uint32_t>()}; 22 (void)tx_in; 23 } 24 const CTxOut tx_out_1{ConsumeMoney(fuzzed_data_provider), script}; 25 const CTxOut tx_out_2{ConsumeMoney(fuzzed_data_provider), ConsumeScript(fuzzed_data_provider)}; 26 assert((tx_out_1 == tx_out_2) != (tx_out_1 != tx_out_2)); 27 const std::optional<CMutableTransaction> mutable_tx_1 = ConsumeDeserializable<CMutableTransaction>(fuzzed_data_provider); 28 const std::optional<CMutableTransaction> mutable_tx_2 = ConsumeDeserializable<CMutableTransaction>(fuzzed_data_provider); 29 if (mutable_tx_1 && mutable_tx_2) { 30 const CTransaction tx_1{*mutable_tx_1}; 31 const CTransaction tx_2{*mutable_tx_2}; 32 assert((tx_1 == tx_2) != (tx_1 != tx_2)); 33 } 34 } 35