From 5b75c477841fa463aad9c6e6d95a98b50ce14dd3 Mon Sep 17 00:00:00 2001 From: Andrew Chow Date: Tue, 30 May 2017 15:42:10 -0700 Subject: Add a valid opcode sanity check to CScript Added a function in CScript that checks if the script contains valid opcodes. Add a test for that function --- src/script/script.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/script/script.cpp') diff --git a/src/script/script.cpp b/src/script/script.cpp index 70eb8a139..a71fee19c 100644 --- a/src/script/script.cpp +++ b/src/script/script.cpp @@ -267,3 +267,15 @@ std::string CScriptWitness::ToString() const } return ret + ")"; } + +bool CScript::HasValidOps() const +{ + CScript::const_iterator it = begin(); + while (it < end()) { + opcodetype opcode; + if (!GetOp(it, opcode) || opcode > 0xb9) { + return false; + } + } + return true; +} -- cgit v1.2.3 From ac4e438229134595e949bfedb1f487c71fd45d24 Mon Sep 17 00:00:00 2001 From: Andrew Chow Date: Tue, 30 May 2017 15:43:07 -0700 Subject: Sanity check transaction scripts in DecodeHexTx Make sure that the scripts of decoded transactions are valid scripts. --- src/script/script.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/script/script.cpp') diff --git a/src/script/script.cpp b/src/script/script.cpp index a71fee19c..a10b619f7 100644 --- a/src/script/script.cpp +++ b/src/script/script.cpp @@ -273,7 +273,8 @@ bool CScript::HasValidOps() const CScript::const_iterator it = begin(); while (it < end()) { opcodetype opcode; - if (!GetOp(it, opcode) || opcode > 0xb9) { + std::vector item; + if (!GetOp(it, opcode, item) || opcode > MAX_OPCODE || item.size() > MAX_SCRIPT_ELEMENT_SIZE) { return false; } } -- cgit v1.2.3