From c8d688f41ccb218f301adde4120f2094d13b739a Mon Sep 17 00:00:00 2001 From: Eugene Siegel Date: Wed, 4 Feb 2026 10:10:00 -0500 Subject: [PATCH] fuzz: send blocktxn messages in cmpctblock harness Sometimes, blindly take an existing block and choose random transactions to request in a blocktxn message. --- src/test/fuzz/cmpctblock.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/test/fuzz/cmpctblock.cpp b/src/test/fuzz/cmpctblock.cpp index e14930a048b..3e4268cb658 100644 --- a/src/test/fuzz/cmpctblock.cpp +++ b/src/test/fuzz/cmpctblock.cpp @@ -379,6 +379,29 @@ FUZZ_TARGET(cmpctblock, .init = initialize_cmpctblock) CBlockHeaderAndShortTxIDs base_cmpctblock = cmpctblock; net_msg = NetMsg::Make(NetMsgType::CMPCTBLOCK, base_cmpctblock); }, + [&]() { + // Send a blocktxn message for an existing block (if one exists). + size_t num_blocks = info.size(); + if (num_blocks == 0) { + sent_net_msg = false; + return; + } + + // Fetch an existing block and randomly choose transactions to send over. + size_t index = fuzzed_data_provider.ConsumeIntegralInRange(0, num_blocks - 1); + const BlockInfo& block_info = info[index]; + BlockTransactions block_txn; + block_txn.blockhash = block_info.hash; + std::shared_ptr cblock = block_info.block; + + for (size_t i = 0; i < cblock->vtx.size(); i++) { + if (fuzzed_data_provider.ConsumeBool()) continue; + + block_txn.txn.push_back(cblock->vtx[i]); + } + + net_msg = NetMsg::Make(NetMsgType::BLOCKTXN, block_txn); + }, [&]() { // Send a headers message for an existing block (if one exists). size_t num_blocks = info.size();