@@ -91,8 +91,10 @@ FUZZ_TARGET(package_rbf, .init = initialize_package_rbf)
9191 FuzzedDataProvider fuzzed_data_provider (buffer.data (), buffer.size ());
9292 SetMockTime (ConsumeTime (fuzzed_data_provider));
9393
94- std::optional<CMutableTransaction> child = ConsumeDeserializable<CMutableTransaction>(fuzzed_data_provider, TX_WITH_WITNESS);
95- if (!child) return ;
94+ // "Real" virtual size is not important for this test since ConsumeTxMemPoolEntry generates its own virtual size values
95+ // so we construct small transactions for performance reasons. Child simply needs an input for later to perhaps connect to parent.
96+ CMutableTransaction child;
97+ child.vin .resize (1 );
9698
9799 bilingual_str error;
98100 CTxMemPool pool{MemPoolOptionsForTest (g_setup->m_node ), error};
@@ -113,15 +115,13 @@ FUZZ_TARGET(package_rbf, .init = initialize_package_rbf)
113115 LIMITED_WHILE (fuzzed_data_provider.ConsumeBool (), NUM_ITERS)
114116 {
115117 // Make sure txns only have one input, and that a unique input is given to avoid circular references
116- std::optional<CMutableTransaction> parent = ConsumeDeserializable<CMutableTransaction>(fuzzed_data_provider, TX_WITH_WITNESS);
117- if (!parent) {
118- return ;
119- }
118+ CMutableTransaction parent;
120119 assert (iter <= g_outpoints.size ());
121- parent->vin .resize (1 );
122- parent->vin [0 ].prevout = g_outpoints[iter++];
120+ parent.vin .resize (1 );
121+ parent.vin [0 ].prevout = g_outpoints[iter++];
122+ parent.vout .emplace_back (0 , CScript ());
123123
124- mempool_txs.emplace_back (* parent);
124+ mempool_txs.emplace_back (parent);
125125 const auto parent_entry = ConsumeTxMemPoolEntry (fuzzed_data_provider, mempool_txs.back ());
126126 running_vsize_total += parent_entry.GetTxSize ();
127127 if (running_vsize_total > std::numeric_limits<int32_t >::max ()) {
@@ -130,10 +130,10 @@ FUZZ_TARGET(package_rbf, .init = initialize_package_rbf)
130130 break ;
131131 }
132132 pool.addUnchecked (parent_entry);
133- if (fuzzed_data_provider.ConsumeBool () && !child-> vin . empty () ) {
134- child-> vin [0 ].prevout = COutPoint{mempool_txs.back ().GetHash (), 0 };
133+ if (fuzzed_data_provider.ConsumeBool ()) {
134+ child. vin [0 ].prevout = COutPoint{mempool_txs.back ().GetHash (), 0 };
135135 }
136- mempool_txs.emplace_back (* child);
136+ mempool_txs.emplace_back (child);
137137 const auto child_entry = ConsumeTxMemPoolEntry (fuzzed_data_provider, mempool_txs.back ());
138138 running_vsize_total += child_entry.GetTxSize ();
139139 if (running_vsize_total > std::numeric_limits<int32_t >::max ()) {
0 commit comments