[PATCH] libcpu: Replace assert with goto invalid_op for bad prefix.

Mark Wielaard mark@klomp.org
Thu Apr 16 13:42:28 GMT 2020


https://sourceware.org/bugzilla/show_bug.cgi?id=25831

Signed-off-by: Mark Wielaard <mark@klomp.org>
---
 libcpu/ChangeLog     |  5 +++++
 libcpu/i386_disasm.c | 11 +++++++----
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/libcpu/ChangeLog b/libcpu/ChangeLog
index 70796514..a8b2b951 100644
--- a/libcpu/ChangeLog
+++ b/libcpu/ChangeLog
@@ -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.
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.  */
-- 
2.18.2



More information about the Elfutils-devel mailing list