diff options
| -rw-r--r-- | CHANGELOG | 5 | ||||
| -rw-r--r-- | fuzz/fuzz_targets/decode_does_not_panic.rs | 9 | ||||
| -rw-r--r-- | fuzz/fuzz_targets/displaysink_used_correctly.rs | 4 | ||||
| -rw-r--r-- | src/long_mode/mod.rs | 1 | ||||
| -rw-r--r-- | src/protected_mode/mod.rs | 1 | ||||
| -rw-r--r-- | src/real_mode/mod.rs | 1 |
6 files changed, 18 insertions, 3 deletions
@@ -1,3 +1,8 @@ +## 2.1.1 + +* fix jrcxz/jecxz/jcxz having "two operands". accessing the "second" operand + through `Instruction::operand` is a guaranteed panic. + ## 2.1.0 ### additions diff --git a/fuzz/fuzz_targets/decode_does_not_panic.rs b/fuzz/fuzz_targets/decode_does_not_panic.rs index fd6efec..7e0c812 100644 --- a/fuzz/fuzz_targets/decode_does_not_panic.rs +++ b/fuzz/fuzz_targets/decode_does_not_panic.rs @@ -3,10 +3,13 @@ extern crate yaxpeax_x86; fuzz_target!(|data: &[u8]| { + if data.len() > 15 { + return; + } let x86_64_decoder = yaxpeax_x86::long_mode::InstDecoder::default(); let x86_32_decoder = yaxpeax_x86::protected_mode::InstDecoder::default(); let x86_16_decoder = yaxpeax_x86::real_mode::InstDecoder::default(); - x86_64_decoder.decode_slice(data).expect("is ok"); - x86_32_decoder.decode_slice(data).expect("is ok"); - x86_16_decoder.decode_slice(data).expect("is ok"); + let _res = x86_64_decoder.decode_slice(data); + let _res = x86_32_decoder.decode_slice(data); + let _res = x86_16_decoder.decode_slice(data); }); diff --git a/fuzz/fuzz_targets/displaysink_used_correctly.rs b/fuzz/fuzz_targets/displaysink_used_correctly.rs index bd8d1db..4815047 100644 --- a/fuzz/fuzz_targets/displaysink_used_correctly.rs +++ b/fuzz/fuzz_targets/displaysink_used_correctly.rs @@ -4,6 +4,10 @@ extern crate yaxpeax_x86; extern crate yaxpeax_arch; fuzz_target!(|data: &[u8]| { + if data.len() > 15 { + return; + } + let x86_64_decoder = yaxpeax_x86::long_mode::InstDecoder::default(); let x86_32_decoder = yaxpeax_x86::protected_mode::InstDecoder::default(); let x86_16_decoder = yaxpeax_x86::real_mode::InstDecoder::default(); diff --git a/src/long_mode/mod.rs b/src/long_mode/mod.rs index bfe67c3..ca2e7cb 100644 --- a/src/long_mode/mod.rs +++ b/src/long_mode/mod.rs @@ -9144,6 +9144,7 @@ fn read_operands< .with_id(words.offset() as u32 * 8), ); instruction.operands[0] = OperandSpec::ImmI8; + instruction.operand_count = 1; }, }; Ok(()) diff --git a/src/protected_mode/mod.rs b/src/protected_mode/mod.rs index 3036620..6a1d19b 100644 --- a/src/protected_mode/mod.rs +++ b/src/protected_mode/mod.rs @@ -9053,6 +9053,7 @@ fn read_operands< .with_id(words.offset() as u32 * 8), ); instruction.operands[0] = OperandSpec::ImmI8; + instruction.operand_count = 1; }, }; Ok(()) diff --git a/src/real_mode/mod.rs b/src/real_mode/mod.rs index aa98846..f54533c 100644 --- a/src/real_mode/mod.rs +++ b/src/real_mode/mod.rs @@ -9112,6 +9112,7 @@ fn read_operands< .with_id(words.offset() as u32 * 8), ); instruction.operands[0] = OperandSpec::ImmI8; + instruction.operand_count = 1; }, }; Ok(()) |
