@@ -91,8 +91,10 @@ FUZZ_TARGET(package_rbf, .init = initialize_package_rbf)
91
91
FuzzedDataProvider fuzzed_data_provider (buffer.data (), buffer.size ());
92
92
SetMockTime (ConsumeTime (fuzzed_data_provider));
93
93
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 );
96
98
97
99
bilingual_str error;
98
100
CTxMemPool pool{MemPoolOptionsForTest (g_setup->m_node ), error};
@@ -113,15 +115,13 @@ FUZZ_TARGET(package_rbf, .init = initialize_package_rbf)
113
115
LIMITED_WHILE (fuzzed_data_provider.ConsumeBool (), NUM_ITERS)
114
116
{
115
117
// 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;
120
119
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 ());
123
123
124
- mempool_txs.emplace_back (* parent);
124
+ mempool_txs.emplace_back (parent);
125
125
const auto parent_entry = ConsumeTxMemPoolEntry (fuzzed_data_provider, mempool_txs.back ());
126
126
running_vsize_total += parent_entry.GetTxSize ();
127
127
if (running_vsize_total > std::numeric_limits<int32_t >::max ()) {
@@ -130,10 +130,10 @@ FUZZ_TARGET(package_rbf, .init = initialize_package_rbf)
130
130
break ;
131
131
}
132
132
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 };
135
135
}
136
- mempool_txs.emplace_back (* child);
136
+ mempool_txs.emplace_back (child);
137
137
const auto child_entry = ConsumeTxMemPoolEntry (fuzzed_data_provider, mempool_txs.back ());
138
138
running_vsize_total += child_entry.GetTxSize ();
139
139
if (running_vsize_total > std::numeric_limits<int32_t >::max ()) {
0 commit comments