diff --git a/src/primitives/transaction.h b/src/primitives/transaction.h index 808ad1cea4..ddf0272646 100644 --- a/src/primitives/transaction.h +++ b/src/primitives/transaction.h @@ -655,6 +655,10 @@ inline void UnserializeTransaction(TxType& tx, Stream& s) { const_cast(&tx.wit)->vtxinwit.resize(tx.vin.size()); const_cast(&tx.wit)->vtxoutwit.resize(tx.vout.size()); s >> tx.wit; + if (!tx.HasWitness()) { + /* It's illegal to encode witnesses when all witness stacks are empty. */ + throw std::ios_base::failure("Superfluous witness record"); + } } if (flags) { /* Unknown flag in the serialization */