Diff to reproduce (turns UB into a runtime exception):
0diff --git a/src/test/fuzz/rbf.cpp b/src/test/fuzz/rbf.cpp
1index 3e5b361186..74099f770d 100644
2--- a/src/test/fuzz/rbf.cpp
3+++ b/src/test/fuzz/rbf.cpp
4@@ -118,7 +118,7 @@ FUZZ_TARGET(package_rbf, .init = initialize_package_rbf)
5 }
6 assert(iter <= g_outpoints.size());
7 replacement_tx->vin.resize(1);
8- replacement_tx->vin[0].prevout = g_outpoints[iter++];
9+ replacement_tx->vin[0].prevout = g_outpoints.at(iter++);
10 CTransaction replacement_tx_final{*replacement_tx};
11 auto replacement_entry = ConsumeTxMemPoolEntry(fuzzed_data_provider, replacement_tx_final);
12 int32_t replacement_vsize = replacement_entry.GetTxSize();
13@@ -132,7 +132,7 @@ FUZZ_TARGET(package_rbf, .init = initialize_package_rbf)
14 CMutableTransaction parent;
15 assert(iter <= g_outpoints.size());
16 parent.vin.resize(1);
17- parent.vin[0].prevout = g_outpoints[iter++];
18+ parent.vin[0].prevout = g_outpoints.at(iter++);
19 parent.vout.emplace_back(0, CScript());
20
21 mempool_txs.emplace_back(parent);
Input to reproduce:
Command to reproduce:
0$ FUZZ=package_rbf ./bld-cmake/bin/fuzz ./package_rbf.crash.not.txt
1
2terminate called after throwing an instance of 'std::out_of_range'
3 what(): vector::_M_range_check: __n (which is 10000) >= this->size() (which is 10000)