libcpu: Replace assert with goto invalid_op for bad prefix.
authorMark Wielaard <mark@klomp.org>
Thu, 16 Apr 2020 13:41:57 +0000 (15:41 +0200)
committerMark Wielaard <mark@klomp.org>
Tue, 21 Apr 2020 20:23:18 +0000 (22:23 +0200)
https://sourceware.org/bugzilla/show_bug.cgi?id=25831

Signed-off-by: Mark Wielaard <mark@klomp.org>
libcpu/ChangeLog
libcpu/i386_disasm.c

index 7079651..a8b2b95 100644 (file)
@@ -1,3 +1,8 @@
+2020-04-16  Mark Wielaard  <mark@klomp.org>
+
+       * i386_disasm.c (i386_disasm): Replace assert with goto invalid_op
+       for bad prefix.
+
 2019-12-11  Omar Sandoval  <osandov@fb.com>
 
        * Makefile.am (i386_lex_CFLAGS): Add -Wno-implicit-fallthrough.
index 4422ffa..32df8cd 100644 (file)
@@ -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.  */