diff options
Diffstat (limited to 'src/long_mode')
| -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() { | 
