summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBen Smith <binjimin@gmail.com>2018-10-05 16:10:30 -0700
committerGitHub <noreply@github.com>2018-10-05 16:10:30 -0700
commit795d1292377b7e5de8dabeefaa11edfaf6bd97af (patch)
tree1b1ce2fa8812d70c43bba4e2e48b5b2b8922055e /src
parentc60072616662f3e7000cc7959ce6ae1280b09ec0 (diff)
downloadwabt-795d1292377b7e5de8dabeefaa11edfaf6bd97af.tar.gz
wabt-795d1292377b7e5de8dabeefaa11edfaf6bd97af.tar.bz2
wabt-795d1292377b7e5de8dabeefaa11edfaf6bd97af.zip
Require reserved instruction bytes to be one byte (#922)
The spec requires that the reserved bytes in `call_indirect`, `memory.grow`, and `memory.size` to be one zero byte. This means that we cannot accept `0x80 0x00`, or other "long" LEB128 encodings of zero.
Diffstat (limited to 'src')
-rw-r--r--src/binary-reader.cc12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/binary-reader.cc b/src/binary-reader.cc
index 61284734..35e079f7 100644
--- a/src/binary-reader.cc
+++ b/src/binary-reader.cc
@@ -747,8 +747,8 @@ Result BinaryReader::ReadFunctionBody(Offset end_offset) {
CHECK_RESULT(ReadIndex(&sig_index, "call_indirect signature index"));
ERROR_UNLESS(sig_index < num_signatures_,
"invalid call_indirect signature index");
- uint32_t reserved;
- CHECK_RESULT(ReadU32Leb128(&reserved, "call_indirect reserved"));
+ uint8_t reserved;
+ CHECK_RESULT(ReadU8(&reserved, "call_indirect reserved"));
ERROR_UNLESS(reserved == 0, "call_indirect reserved value must be 0");
CALLBACK(OnCallIndirectExpr, sig_index);
CALLBACK(OnOpcodeUint32Uint32, sig_index, reserved);
@@ -809,8 +809,8 @@ Result BinaryReader::ReadFunctionBody(Offset end_offset) {
}
case Opcode::MemorySize: {
- uint32_t reserved;
- CHECK_RESULT(ReadU32Leb128(&reserved, "memory.size reserved"));
+ uint8_t reserved;
+ CHECK_RESULT(ReadU8(&reserved, "memory.size reserved"));
ERROR_UNLESS(reserved == 0, "memory.size reserved value must be 0");
CALLBACK0(OnMemorySizeExpr);
CALLBACK(OnOpcodeUint32, reserved);
@@ -818,8 +818,8 @@ Result BinaryReader::ReadFunctionBody(Offset end_offset) {
}
case Opcode::MemoryGrow: {
- uint32_t reserved;
- CHECK_RESULT(ReadU32Leb128(&reserved, "memory.grow reserved"));
+ uint8_t reserved;
+ CHECK_RESULT(ReadU8(&reserved, "memory.grow reserved"));
ERROR_UNLESS(reserved == 0, "memory.grow reserved value must be 0");
CALLBACK0(OnMemoryGrowExpr);
CALLBACK(OnOpcodeUint32, reserved);