aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Darrington <john@darrington.wattle.id.au>2019-01-04 09:44:58 +0100
committerJohn Darrington <john@darrington.wattle.id.au>2019-01-09 19:47:06 +0100
commit448b8ca86519cce1216c9db5f0236604a6a33320 (patch)
treebff31676ee1c6972f2c87ff582a2ca7844494531
parent39f286cd585226ad98c2cd94ee0f96988b3696ce (diff)
downloadgdb-448b8ca86519cce1216c9db5f0236604a6a33320.zip
gdb-448b8ca86519cce1216c9db5f0236604a6a33320.tar.gz
gdb-448b8ca86519cce1216c9db5f0236604a6a33320.tar.bz2
S12Z: Don't crash when disassembling invalid instructions.
Check for null before dereferencing an operand pointer. Normally this situation should never arise, but could happen if a "partial" instruction is encountered at the end of a file or section. opcodes/ * s12z-dis.c (print_insn_s12z): Do not dereference an operand if it is null.
-rw-r--r--opcodes/ChangeLog4
-rw-r--r--opcodes/s12z-dis.c4
2 files changed, 5 insertions, 3 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index d17ee10..cf7d55e 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,6 +1,8 @@
2019-01-09 John Darrington <john@darrington.wattle.id.au>
- * s12z-dis.c (opr_emit_disassembly): Do not omit an index if it is
+ * s12z-dis.c (print_insn_s12z): Do not dereference an operand
+ if it is null.
+ -dis.c (opr_emit_disassembly): Do not omit an index if it is
zero.
2019-01-09 Andrew Paprocki <andrew@ishiboo.com>
diff --git a/opcodes/s12z-dis.c b/opcodes/s12z-dis.c
index 5db0b43..d4d5fd7 100644
--- a/opcodes/s12z-dis.c
+++ b/opcodes/s12z-dis.c
@@ -351,7 +351,7 @@ print_insn_s12z (bfd_vma memaddr, struct disassemble_info* info)
(struct mem_read_abstraction_base *) &mra);
(info->fprintf_func) (info->stream, "%s", mnemonics[(long)operator]);
-
+
/* Ship out size sufficies for those instructions which
need them. */
if (osize == -1)
@@ -359,7 +359,7 @@ print_insn_s12z (bfd_vma memaddr, struct disassemble_info* info)
bool suffix = false;
for (o = 0; o < n_operands; ++o)
{
- if (operands[o]->osize != -1)
+ if (operands[o] && operands[o]->osize != -1)
{
if (!suffix)
{