diff options
author | iximeow <me@iximeow.net> | 2020-08-03 00:50:18 -0700 |
---|---|---|
committer | iximeow <me@iximeow.net> | 2020-08-09 01:38:57 -0700 |
commit | 959c61e28e05a37aa19cc226d0f5b525610d47d7 (patch) | |
tree | 0423b2926395e6ad50e5536ea0c3dd500dda2f59 /src | |
parent | 70585db861e03ec76648070ed4e3fc88b9808c48 (diff) |
long instructions
Diffstat (limited to 'src')
-rw-r--r-- | src/long_mode/mod.rs | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/long_mode/mod.rs b/src/long_mode/mod.rs index 2f5fe5d..e79c8cb 100644 --- a/src/long_mode/mod.rs +++ b/src/long_mode/mod.rs @@ -5516,6 +5516,9 @@ fn read_instr<T: Iterator<Item=u8>>(decoder: &InstDecoder, mut bytes_iter: T, in match bytes_iter.next() { Some(b) => { length += 1; + if length > 15 { + return Err(DecodeError::TooLong); + } let record = OPCODES[b as usize]; if (b & 0xf0) == 0x40 { prefixes.rex_from(b); @@ -5649,6 +5652,9 @@ fn read_instr<T: Iterator<Item=u8>>(decoder: &InstDecoder, mut bytes_iter: T, in } instruction.prefixes = prefixes; read_operands(decoder, bytes_iter, instruction, record.1, &mut length)?; + if length > 15 { + return Err(DecodeError::TooLong); + } instruction.length = length; if decoder != &InstDecoder::default() { |