[X86] Check return value of readSIB in disassembler so errors propagate. In particula...
authorCraig Topper <craig.topper@gmail.com>
Thu, 20 Mar 2014 05:56:00 +0000 (05:56 +0000)
committerCraig Topper <craig.topper@gmail.com>
Thu, 20 Mar 2014 05:56:00 +0000 (05:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204305 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/Disassembler/X86DisassemblerDecoder.c

index 482ce652dde9ddc7ce0a84218c5d26ba707104d3..0801c969d34170f6fde81e29b9db99c88ddd4ae5 100644 (file)
@@ -1092,7 +1092,6 @@ static int readSIB(struct InternalInstruction* insn) {
   case 2:
     dbgprintf(insn, "SIB-based addressing doesn't work in 16-bit mode");
     return -1;
-    break;
   case 4:
     sibIndexBase = SIB_INDEX_EAX;
     sibBaseBase = SIB_BASE_EAX;
@@ -1314,8 +1313,7 @@ static int readModRM(struct InternalInstruction* insn) {
       case 0xc:   /* in case REXW.b is set */
         insn->eaBase = (insn->addressSize == 4 ?
                         EA_BASE_sib : EA_BASE_sib64);
-        readSIB(insn);
-        if (readDisplacement(insn))
+        if (readSIB(insn) || readDisplacement(insn))
           return -1;
         break;
       case 0x5:
@@ -1339,8 +1337,7 @@ static int readModRM(struct InternalInstruction* insn) {
       case 0x4:
       case 0xc:   /* in case REXW.b is set */
         insn->eaBase = EA_BASE_sib;
-        readSIB(insn);
-        if (readDisplacement(insn))
+        if (readSIB(insn) || readDisplacement(insn))
           return -1;
         break;
       default: