aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c
diff options
context:
space:
mode:
authorSean Callanan <scallanan@apple.com>2010-04-07 21:42:19 +0000
committerSean Callanan <scallanan@apple.com>2010-04-07 21:42:19 +0000
commitc51cfa404f6435cfc22f3c0c768ae07f611aeb62 (patch)
treecbcf2dec19ee024c1bf4efaefaac581b8364d771 /lib/Target/X86/Disassembler/X86DisassemblerDecoder.c
parentc195a8be9ccb3ecb7ffddaad05511d23329a3bc5 (diff)
downloadexternal_llvm-c51cfa404f6435cfc22f3c0c768ae07f611aeb62.zip
external_llvm-c51cfa404f6435cfc22f3c0c768ae07f611aeb62.tar.gz
external_llvm-c51cfa404f6435cfc22f3c0c768ae07f611aeb62.tar.bz2
Fixed a bug where the disassembler would allow an immediate
argument that had to be between 0 and 7 to have any value, firing an assert later in the AsmPrinter. Now, the disassembler rejects instructions with out-of-range values for that immediate. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100694 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/Disassembler/X86DisassemblerDecoder.c')
-rw-r--r--lib/Target/X86/Disassembler/X86DisassemblerDecoder.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c b/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c
index db694bc..d6f48b7 100644
--- a/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c
+++ b/lib/Target/X86/Disassembler/X86DisassemblerDecoder.c
@@ -1277,6 +1277,9 @@ static int readOperands(struct InternalInstruction* insn) {
case ENCODING_IB:
if (readImmediate(insn, 1))
return -1;
+ if (insn->spec->operands[index].type == TYPE_IMM3 &&
+ insn->immediates[insn->numImmediatesConsumed - 1] > 7)
+ return -1;
break;
case ENCODING_IW:
if (readImmediate(insn, 2))