@ -167,6 +167,17 @@ void DoTest(const CScript& scriptPubKey, const CScript& scriptSig, const CScript
CMutableTransaction tx2 = tx ;
BOOST_CHECK_MESSAGE ( VerifyScript ( scriptSig , scriptPubKey , & scriptWitness , flags , MutableTransactionSignatureChecker ( & tx , 0 , txCredit . vout [ 0 ] . nValue ) , & err ) = = expect , message ) ;
BOOST_CHECK_MESSAGE ( err = = scriptError , std : : string ( FormatScriptError ( err ) ) + " where " + std : : string ( FormatScriptError ( ( ScriptError_t ) scriptError ) ) + " expected: " + message ) ;
// Verify that removing flags from a passing test or adding flags to a failing test does not change the result.
for ( int i = 0 ; i < 16 ; + + i ) {
int extra_flags = InsecureRandBits ( 16 ) ;
int combined_flags = expect ? ( flags & ~ extra_flags ) : ( flags | extra_flags ) ;
// Weed out some invalid flag combinations.
if ( combined_flags & SCRIPT_VERIFY_CLEANSTACK & & ~ combined_flags & ( SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_WITNESS ) ) continue ;
if ( combined_flags & SCRIPT_VERIFY_WITNESS & & ~ combined_flags & SCRIPT_VERIFY_P2SH ) continue ;
BOOST_CHECK_MESSAGE ( VerifyScript ( scriptSig , scriptPubKey , & scriptWitness , combined_flags , MutableTransactionSignatureChecker ( & tx , 0 , txCredit . vout [ 0 ] . nValue ) , & err ) = = expect , message + strprintf ( " (with flags %x) " , combined_flags ) ) ;
}
# if defined(HAVE_CONSENSUS_LIB)
CDataStream stream ( SER_NETWORK , PROTOCOL_VERSION ) ;
stream < < tx2 ;