From b10ce9aa48c8937cb91fca05e29c68098a364d93 Mon Sep 17 00:00:00 2001 From: gzhao408 Date: Tue, 26 Jan 2021 14:10:18 -0800 Subject: [PATCH] [test] check verification flags are minimal/maximal Co-authored-by: Johnson Lau --- src/test/transaction_tests.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/test/transaction_tests.cpp b/src/test/transaction_tests.cpp index 0102ec627f6..e2a99874e8e 100644 --- a/src/test/transaction_tests.cpp +++ b/src/test/transaction_tests.cpp @@ -230,6 +230,12 @@ BOOST_AUTO_TEST_CASE(tx_valid) if (!CheckTxScripts(tx, mapprevOutScriptPubKeys, mapprevOutValues, ~verify_flags, txdata, strTest, /* expect_valid */ true)) { BOOST_ERROR("Tx unexpectedly failed: " << strTest); } + // Check that flags are maximal: transaction should fail if any unset flags are set. + for (auto flags_excluding_one: ExcludeIndividualFlags(verify_flags)) { + if (!CheckTxScripts(tx, mapprevOutScriptPubKeys, mapprevOutValues, ~flags_excluding_one, txdata, strTest, /* expect_valid */ false)) { + BOOST_ERROR("Too many flags unset: " << strTest); + } + } } } } @@ -292,9 +298,16 @@ BOOST_AUTO_TEST_CASE(tx_invalid) PrecomputedTransactionData txdata(tx); unsigned int verify_flags = ParseScriptFlags(test[2].get_str()); + // Not using FillFlags() in the main test, in order to detect invalid verifyFlags combination if (!CheckTxScripts(tx, mapprevOutScriptPubKeys, mapprevOutValues, verify_flags, txdata, strTest, /* expect_valid */ false)) { BOOST_ERROR("Tx unexpectedly passed: " << strTest); } + // Check that flags are minimal: transaction should succeed if any set flags are unset. + for (auto flags_excluding_one: ExcludeIndividualFlags(verify_flags)) { + if (!CheckTxScripts(tx, mapprevOutScriptPubKeys, mapprevOutValues, flags_excluding_one, txdata, strTest, /* expect_valid */ true)) { + BOOST_ERROR("Too many flags set: " << strTest); + } + } } } }