diff options
author | Ben Smith <binjimin@gmail.com> | 2018-10-05 16:10:30 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-05 16:10:30 -0700 |
commit | 795d1292377b7e5de8dabeefaa11edfaf6bd97af (patch) | |
tree | 1b1ce2fa8812d70c43bba4e2e48b5b2b8922055e /src | |
parent | c60072616662f3e7000cc7959ce6ae1280b09ec0 (diff) | |
download | wabt-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.cc | 12 |
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); |