From 0b04fd05a955033dc781caaec6eb2b32f85c1b3f Mon Sep 17 00:00:00 2001 From: iximeow Date: Fri, 2 Jul 2021 19:37:56 -0700 Subject: fix several strict rejection for several --- src/long_mode/mod.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/long_mode') diff --git a/src/long_mode/mod.rs b/src/long_mode/mod.rs index 65bda54..22ffe58 100644 --- a/src/long_mode/mod.rs +++ b/src/long_mode/mod.rs @@ -7595,6 +7595,9 @@ fn read_operands::Address, { + if instruction.opcode == Opcode::Invalid { + return Err(DecodeError::InvalidOpcode); + } instruction.operands[0] = OperandSpec::Nothing; instruction.operand_count = 0; return Ok(()); @@ -7731,14 +7734,14 @@ fn unlikely_operands::Address, { let modrm = read_modrm(words)?; + if modrm >= 0xc0 { + return Err(DecodeError::InvalidOperand); + } instruction.regs[0] = RegSpec::from_parts((modrm >> 3) & 7, instruction.prefixes.rex().r(), RegisterBank::Q); instruction.operands[0] = OperandSpec::RegRRR; instruction.operands[1] = read_M(words, instruction, modrm)?; - if instruction.operands[1] == OperandSpec::RegMMM { - return Err(DecodeError::InvalidOperand); - } if [Opcode::LFS, Opcode::LGS, Opcode::LSS].contains(&instruction.opcode) { if instruction.prefixes.rex().w() { instruction.mem_size = 10; -- cgit v1.1