Skip to content

Commit 327a31d

Browse files
committed
Validate oversized transaction
1 parent 1984187 commit 327a31d

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

src/test/transaction_tests.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,32 @@ BOOST_AUTO_TEST_CASE(tx_no_inputs)
378378
BOOST_CHECK(state.GetRejectReason() == "bad-txns-vin-empty");
379379
}
380380

381+
BOOST_AUTO_TEST_CASE(tx_oversized)
382+
{
383+
auto createTransaction =[](size_t payloadSize) {
384+
CMutableTransaction tx;
385+
tx.vin.resize(1);
386+
tx.vout.emplace_back(1, CScript() << OP_RETURN << std::vector<unsigned char>(payloadSize));
387+
return CTransaction(tx);
388+
};
389+
const auto maxTransactionSize = MAX_BLOCK_WEIGHT / WITNESS_SCALE_FACTOR;
390+
const auto oversizedTransactionBaseSize = ::GetSerializeSize(TX_NO_WITNESS(createTransaction(maxTransactionSize))) - maxTransactionSize;
391+
392+
auto maxPayloadSize = maxTransactionSize - oversizedTransactionBaseSize;
393+
{
394+
TxValidationState state;
395+
CheckTransaction(createTransaction(maxPayloadSize), state);
396+
BOOST_CHECK(state.GetRejectReason() != "bad-txns-oversize");
397+
}
398+
399+
maxPayloadSize += 1;
400+
{
401+
TxValidationState state;
402+
BOOST_CHECK_MESSAGE(!CheckTransaction(createTransaction(maxPayloadSize), state), "Oversized transaction should be invalid");
403+
BOOST_CHECK(state.GetRejectReason() == "bad-txns-oversize");
404+
}
405+
}
406+
381407
BOOST_AUTO_TEST_CASE(basic_transaction_tests)
382408
{
383409
// Random real transaction (e2769b09e784f32f62ef849763d4f45b98e07ba658647343b915ff832b110436)

0 commit comments

Comments
 (0)