Page MenuHomePhabricator

D3100.id8842.diff
No OneTemporary

D3100.id8842.diff

diff --git a/src/script/interpreter.cpp b/src/script/interpreter.cpp
--- a/src/script/interpreter.cpp
+++ b/src/script/interpreter.cpp
@@ -913,11 +913,6 @@
case OP_CHECKDATASIG:
case OP_CHECKDATASIGVERIFY: {
- // Make sure this remains an error before activation.
- if ((flags & SCRIPT_ENABLE_CHECKDATASIG) == 0) {
- return set_error(serror, SCRIPT_ERR_BAD_OPCODE);
- }
-
// (sig message pubkey -- bool)
if (stack.size() < 3) {
return set_error(
diff --git a/src/script/script_flags.h b/src/script/script_flags.h
--- a/src/script/script_flags.h
+++ b/src/script/script_flags.h
@@ -95,8 +95,9 @@
//
SCRIPT_ENABLE_REPLAY_PROTECTION = (1U << 17),
- // Is OP_CHECKDATASIG and variant are enabled, and must be counted towards
- // Sigops limits.
+ // Count sigops for OP_CHECKDATASIG and variant. The interpreter treats
+ // OP_CHECKDATASIG(VERIFY) as always valid, this flag only affects sigops
+ // counting.
//
SCRIPT_ENABLE_CHECKDATASIG = (1U << 18),
diff --git a/src/test/checkdatasig_tests.cpp b/src/test/checkdatasig_tests.cpp
--- a/src/test/checkdatasig_tests.cpp
+++ b/src/test/checkdatasig_tests.cpp
@@ -66,12 +66,13 @@
const CScript &script,
const stacktype &expected) {
for (uint32_t flags : flagset) {
- // Make sure that we get a bad opcode when the activation flag is not
- // passed.
- CheckError(flags & ~SCRIPT_ENABLE_CHECKDATASIG, original_stack, script,
- SCRIPT_ERR_BAD_OPCODE);
+ // The script executes as expected if SCRIPT_ENABLE_CHECKDATASIG flag is
+ // not passed.
+ CheckPass(flags & ~SCRIPT_ENABLE_CHECKDATASIG, original_stack, script,
+ expected);
- // The script execute as expected if the opcodes are activated.
+ // The script executes as expected if SCRIPT_ENABLE_CHECKDATASIG flag is
+ // passed.
CheckPass(flags | SCRIPT_ENABLE_CHECKDATASIG, original_stack, script,
expected);
}
@@ -80,12 +81,13 @@
static void CheckErrorForAllFlags(const stacktype &original_stack,
const CScript &script, ScriptError expected) {
for (uint32_t flags : flagset) {
- // Make sure that we get a bad opcode when the activation flag is not
- // passed.
+ // The script generates the proper error if SCRIPT_ENABLE_CHECKDATASIG
+ // flag is not passed.
CheckError(flags & ~SCRIPT_ENABLE_CHECKDATASIG, original_stack, script,
- SCRIPT_ERR_BAD_OPCODE);
+ expected);
- // The script generates the proper error if the opcodes are activated.
+ // The script generates the proper error if SCRIPT_ENABLE_CHECKDATASIG
+ // flag is passed.
CheckError(flags | SCRIPT_ENABLE_CHECKDATASIG, original_stack, script,
expected);
}
diff --git a/src/test/data/script_tests.json b/src/test/data/script_tests.json
--- a/src/test/data/script_tests.json
+++ b/src/test/data/script_tests.json
@@ -1233,8 +1233,6 @@
"P2SH,DISCOURAGE_UPGRADABLE_NOPS", "DISCOURAGE_UPGRADABLE_NOPS", "Discouraged NOP10 in redeemScript"],
["0x50","1", "P2SH,STRICTENC", "BAD_OPCODE", "opcode 0x50 is reserved"],
-["1", "IF CHECKDATASIG ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"],
-["1", "IF CHECKDATASIGVERIFY ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"],
["1", "IF 0xbc ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE", "opcodes >= FIRST_UNDEFINED_OP_VALUE invalid if executed"],
["1", "IF 0xbd ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"],
["1", "IF 0xbe ELSE 1 ENDIF", "P2SH,STRICTENC", "BAD_OPCODE"],

File Metadata

Mime Type
text/plain
Expires
Mon, May 12, 01:43 (21 h, 2 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5777049
Default Alt Text
D3100.id8842.diff (3 KB)

Event Timeline