aboutsummaryrefslogtreecommitdiff
path: root/src/script
diff options
context:
space:
mode:
authorAndrew Chow <achow101-github@achow101.com>2017-05-30 15:43:07 -0700
committerAndrew Chow <achow101-github@achow101.com>2017-06-07 14:07:26 -0700
commitac4e438229134595e949bfedb1f487c71fd45d24 (patch)
tree08114ad8a0bd5616c83fd10d2a0db4f091b2e09b /src/script
parent5b75c477841fa463aad9c6e6d95a98b50ce14dd3 (diff)
downloadbitcoin-ac4e438229134595e949bfedb1f487c71fd45d24.tar.xz
Sanity check transaction scripts in DecodeHexTx
Make sure that the scripts of decoded transactions are valid scripts.
Diffstat (limited to 'src/script')
-rw-r--r--src/script/script.cpp3
-rw-r--r--src/script/script.h3
2 files changed, 5 insertions, 1 deletions
diff --git a/src/script/script.cpp b/src/script/script.cpp
index a71fee19cf..a10b619f7d 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<unsigned char> item;
+ if (!GetOp(it, opcode, item) || opcode > MAX_OPCODE || item.size() > MAX_SCRIPT_ELEMENT_SIZE) {
return false;
}
}
diff --git a/src/script/script.h b/src/script/script.h
index 25b80ef62b..23706b9826 100644
--- a/src/script/script.h
+++ b/src/script/script.h
@@ -190,6 +190,9 @@ enum opcodetype
OP_INVALIDOPCODE = 0xff,
};
+// Maximum value that an opcode can be
+static const unsigned int MAX_OPCODE = OP_NOP10;
+
const char* GetOpName(opcodetype opcode);
class scriptnum_error : public std::runtime_error