Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F14362726
D3100.id8842.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
3 KB
Subscribers
None
D3100.id8842.diff
View Options
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
Details
Attached
Mime Type
text/plain
Expires
Mon, May 12, 01:43 (3 h, 51 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5777049
Default Alt Text
D3100.id8842.diff (3 KB)
Attached To
D3100: Interpret scripts with CHECKDATASIG opcode always valid.
Event Timeline
Log In to Comment