diff options
author | Andrew Chow <achow101-github@achow101.com> | 2017-05-30 15:42:10 -0700 |
---|---|---|
committer | Andrew Chow <achow101-github@achow101.com> | 2017-06-07 12:40:01 -0700 |
commit | 5b75c477841fa463aad9c6e6d95a98b50ce14dd3 (patch) | |
tree | b1d8f572c189d1eb8af6aa324a002b1ee3a299aa /src/script | |
parent | 9fec4da0bec93a49798b5f5e92cf76e900759ee4 (diff) |
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
Diffstat (limited to 'src/script')
-rw-r--r-- | src/script/script.cpp | 12 | ||||
-rw-r--r-- | src/script/script.h | 3 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/script/script.cpp b/src/script/script.cpp index 70eb8a139b..a71fee19cf 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; +} diff --git a/src/script/script.h b/src/script/script.h index 95a5999a13..25b80ef62b 100644 --- a/src/script/script.h +++ b/src/script/script.h @@ -630,6 +630,9 @@ public: bool IsPushOnly(const_iterator pc) const; bool IsPushOnly() const; + /** Check if the script contains valid OP_CODES */ + bool HasValidOps() const; + /** * Returns whether the script is guaranteed to fail at execution, * regardless of the initial stack. This allows outputs to be pruned |