PR24938, Null Pointer Dereference in debug.c:debug_write_type
authorAlan Modra <amodra@gmail.com>
Mon, 26 Aug 2019 09:36:28 +0000 (19:06 +0930)
committerAlan Modra <amodra@gmail.com>
Mon, 26 Aug 2019 10:01:10 +0000 (19:31 +0930)
PR 24938
* debug.c (debug_write_type): Call empty_type for NULL type here..
(debug_write_type): ..rather than in just one case here.

binutils/ChangeLog
binutils/debug.c

index e5b197a50e34b16bc8038e774110615e8f5f7b2c..15160763870083e80d5cdf3f71ef1003aea5abbd 100644 (file)
@@ -1,3 +1,9 @@
+2019-08-26  Alan Modra  <amodra@gmail.com>
+
+       PR 24938
+       * debug.c (debug_write_type): Call empty_type for NULL type here..
+       (debug_write_type): ..rather than in just one case here.
+
 2019-08-23  Nick Clifton  <nickc@redhat.com>
 
        PR 24829
index 5c984b7550d8ecd2433a490b01ab57f18ee7ff29..925d84c07ca2adedf8a70476eccf8ca6fd9d716f 100644 (file)
@@ -2419,6 +2419,9 @@ debug_write_type (struct debug_handle *info,
   int is;
   const char *tag = NULL;
 
+  if (type == DEBUG_TYPE_NULL)
+    return (*fns->empty_type) (fhandle);
+
   /* If we have a name for this type, just output it.  We only output
      typedef names after they have been defined.  We output type tags
      whenever we are not actually defining them.  */
@@ -2481,8 +2484,6 @@ debug_write_type (struct debug_handle *info,
       debug_error (_("debug_write_type: illegal type encountered"));
       return FALSE;
     case DEBUG_KIND_INDIRECT:
-      if (*type->u.kindirect->slot == DEBUG_TYPE_NULL)
-       return (*fns->empty_type) (fhandle);
       return debug_write_type (info, fns, fhandle, *type->u.kindirect->slot,
                               name);
     case DEBUG_KIND_VOID: