From 4a90ce955e5bcde074b8616ff9d20f9939a9a358 Mon Sep 17 00:00:00 2001 From: John Darrington Date: Mon, 29 Apr 2019 16:05:54 +0200 Subject: S12Z: Opcodes: Fix crash when trying to decode a truncated operation. opcodes/ * s12z-opc.c (shift_discrim): Return OP_INVALID when reading fails. gas/ * testsuite/gas/s12z/truncated.d: New file. * testsuite/gas/s12z/truncated.s: New file. * testsuite/gas/s12z/s12z.exp: Add new test. --- opcodes/ChangeLog | 4 ++++ opcodes/s12z-opc.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) (limited to 'opcodes') diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 0c2980f..1c9bdbc 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,7 @@ +2019-04-29 John Darrington + + * s12z-opc.c (shift_discrim): Return OP_INVALID when reading fails. + 2019-04-26 Andrew Bennett Faraz Shahbazker diff --git a/opcodes/s12z-opc.c b/opcodes/s12z-opc.c index e40f90e..eef097d 100644 --- a/opcodes/s12z-opc.c +++ b/opcodes/s12z-opc.c @@ -2292,7 +2292,7 @@ shift_discrim (struct mem_read_abstraction_base *mra, enum optr hint ATTRIBUTE_ uint8_t sb; int status = mra->read (mra, 0, 1, &sb); if (status < 0) - return status; + return OP_INVALID; enum SB_DIR dir = (sb & 0x40) ? SB_LEFT : SB_RIGHT; enum SB_TYPE type = (sb & 0x80) ? SB_ARITHMETIC : SB_LOGICAL; -- cgit v1.1