summaryrefslogtreecommitdiffstats
path: root/libcpu/i386_disasm.c
diff options
context:
space:
mode:
Diffstat (limited to 'libcpu/i386_disasm.c')
-rw-r--r--libcpu/i386_disasm.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/libcpu/i386_disasm.c b/libcpu/i386_disasm.c
index 4422ffa2..32df8cd0 100644
--- a/libcpu/i386_disasm.c
+++ b/libcpu/i386_disasm.c
@@ -407,7 +407,8 @@ i386_disasm (Ebl *ebl __attribute__((unused)),
++curr;
- assert (last_prefix_bit != 0);
+ if (last_prefix_bit == 0)
+ goto invalid_op;
correct_prefix = last_prefix_bit;
}
@@ -445,8 +446,8 @@ i386_disasm (Ebl *ebl __attribute__((unused)),
the input data. */
goto do_ret;
- assert (correct_prefix == 0
- || (prefixes & correct_prefix) != 0);
+ if (correct_prefix != 0 && (prefixes & correct_prefix) == 0)
+ goto invalid_op;
prefixes ^= correct_prefix;
if (0)
@@ -473,7 +474,8 @@ i386_disasm (Ebl *ebl __attribute__((unused)),
if (data == end)
{
- assert (prefixes != 0);
+ if (prefixes == 0)
+ goto invalid_op;
goto print_prefix;
}
@@ -1125,6 +1127,7 @@ i386_disasm (Ebl *ebl __attribute__((unused)),
}
/* Invalid (or at least unhandled) opcode. */
+ invalid_op:
if (prefixes != 0)
goto print_prefix;
/* Make sure we get past the unrecognized opcode if we haven't yet. */