diff --git a/src/test/fuzz/CMakeLists.txt b/src/test/fuzz/CMakeLists.txt --- a/src/test/fuzz/CMakeLists.txt +++ b/src/test/fuzz/CMakeLists.txt @@ -112,6 +112,7 @@ parse_univalue prevector pow + primitives_transaction process_message process_messages protocol diff --git a/src/test/fuzz/block.cpp b/src/test/fuzz/block.cpp --- a/src/test/fuzz/block.cpp +++ b/src/test/fuzz/block.cpp @@ -63,4 +63,9 @@ (void)block.GetHash(); (void)block.ToString(); (void)BlockMerkleRoot(block); + + CBlock block_copy = block; + block_copy.SetNull(); + const bool is_null = block_copy.IsNull(); + assert(is_null); } diff --git a/src/test/fuzz/primitives_transaction.cpp b/src/test/fuzz/primitives_transaction.cpp new file mode 100644 --- /dev/null +++ b/src/test/fuzz/primitives_transaction.cpp @@ -0,0 +1,39 @@ +// Copyright (c) 2020 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include + +#include +#include +#include + +#include +#include +#include +#include + +void test_one_input(const std::vector &buffer) { + FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); + const CScript script = ConsumeScript(fuzzed_data_provider); + const std::optional out_point = + ConsumeDeserializable(fuzzed_data_provider); + if (out_point) { + const CTxIn tx_in{*out_point, script, + fuzzed_data_provider.ConsumeIntegral()}; + (void)tx_in; + } + const CTxOut tx_out_1{ConsumeMoney(fuzzed_data_provider), script}; + const CTxOut tx_out_2{ConsumeMoney(fuzzed_data_provider), + ConsumeScript(fuzzed_data_provider)}; + assert((tx_out_1 == tx_out_2) != (tx_out_1 != tx_out_2)); + const std::optional mutable_tx_1 = + ConsumeDeserializable(fuzzed_data_provider); + const std::optional mutable_tx_2 = + ConsumeDeserializable(fuzzed_data_provider); + if (mutable_tx_1 && mutable_tx_2) { + const CTransaction tx_1{*mutable_tx_1}; + const CTransaction tx_2{*mutable_tx_2}; + assert((tx_1 == tx_2) != (tx_1 != tx_2)); + } +}