@@ -1030,6 +1030,28 @@ BOOST_AUTO_TEST_CASE(script_PushData)
10301030 BOOST_CHECK (EvalScript (pushdata4Stack, CScript (pushdata4, pushdata4 + sizeof (pushdata4)), SCRIPT_VERIFY_P2SH, BaseSignatureChecker (), SigVersion::BASE, &err));
10311031 BOOST_CHECK (pushdata4Stack == directStack);
10321032 BOOST_CHECK_MESSAGE (err == SCRIPT_ERR_OK, ScriptErrorString (err));
1033+
1034+ const std::vector<unsigned char > pushdata1_trunc{OP_PUSHDATA1, 1 };
1035+ const std::vector<unsigned char > pushdata2_trunc{OP_PUSHDATA2, 1 , 0 };
1036+ const std::vector<unsigned char > pushdata4_trunc{OP_PUSHDATA4, 1 , 0 , 0 , 0 };
1037+
1038+ std::vector<std::vector<unsigned char >> stack_ignore;
1039+ BOOST_CHECK (!EvalScript (stack_ignore, CScript (pushdata1_trunc.begin (), pushdata1_trunc.end ()), SCRIPT_VERIFY_P2SH, BaseSignatureChecker (), SigVersion::BASE, &err));
1040+ BOOST_CHECK_EQUAL (err, SCRIPT_ERR_BAD_OPCODE);
1041+ BOOST_CHECK (!EvalScript (stack_ignore, CScript (pushdata2_trunc.begin (), pushdata2_trunc.end ()), SCRIPT_VERIFY_P2SH, BaseSignatureChecker (), SigVersion::BASE, &err));
1042+ BOOST_CHECK_EQUAL (err, SCRIPT_ERR_BAD_OPCODE);
1043+ BOOST_CHECK (!EvalScript (stack_ignore, CScript (pushdata4_trunc.begin (), pushdata4_trunc.end ()), SCRIPT_VERIFY_P2SH, BaseSignatureChecker (), SigVersion::BASE, &err));
1044+ BOOST_CHECK_EQUAL (err, SCRIPT_ERR_BAD_OPCODE);
1045+ }
1046+
1047+ BOOST_AUTO_TEST_CASE (script_cltv_truncated)
1048+ {
1049+ const auto script_cltv_trunc = CScript () << OP_CHECKLOCKTIMEVERIFY;
1050+
1051+ std::vector<std::vector<unsigned char >> stack_ignore;
1052+ ScriptError err;
1053+ BOOST_CHECK (!EvalScript (stack_ignore, script_cltv_trunc, SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY, BaseSignatureChecker (), SigVersion::BASE, &err));
1054+ BOOST_CHECK_EQUAL (err, SCRIPT_ERR_INVALID_STACK_OPERATION);
10331055}
10341056
10351057static CScript
0 commit comments