Avoid crash in dwarf2_init_complex_target_type
authorTom Tromey <tromey@adacore.com>
Tue, 16 Apr 2019 18:12:09 +0000 (12:12 -0600)
committerTom Tromey <tromey@adacore.com>
Wed, 17 Apr 2019 12:55:05 +0000 (06:55 -0600)
After commit 35add35 ("gdb: Fix failure in gdb.base/complex-parts.exp
for x86-32"), dwarf2_init_complex_target_type can crash if "tt" is
nullptr.  This patch avoids the problem by checking for this case.

No test case because I don't know a good way to write one; it was
found by an internal AdaCore test case that apparently uses a 16 bit
floating point type.

gdb/ChangeLog:
* dwarf2read.c (dwarf2_init_complex_target_type): Check "tt"
against nullptr before use.

gdb/ChangeLog
2019-04-17  Tom Tromey  <tromey@adacore.com>

* dwarf2read.c (dwarf2_init_complex_target_type): Check "tt"
against nullptr before use.

gdb/ChangeLog
gdb/dwarf2read.c

index 2fb4b87..ef77fdb 100644 (file)
@@ -1,3 +1,8 @@
+2019-04-17  Tom Tromey  <tromey@adacore.com>
+
+       * dwarf2read.c (dwarf2_init_complex_target_type): Check "tt"
+       against nullptr before use.
+
 2019-04-17  Alan Hayward  <alan.hayward@arm.com>
 
        * nat/linux-waitpid.c (linux_debug): Call debug_vprintf.
index 0873028..16bf240 100644 (file)
@@ -17566,7 +17566,7 @@ dwarf2_init_complex_target_type (struct dwarf2_cu *cu,
   /* If the type we found doesn't match the size we were looking for, then
      pretend we didn't find a type at all, the complex target type we
      create will then be nameless.  */
-  if (TYPE_LENGTH (tt) * TARGET_CHAR_BIT != bits)
+  if (tt != nullptr && TYPE_LENGTH (tt) * TARGET_CHAR_BIT != bits)
     tt = nullptr;
 
   const char *name = (tt == nullptr) ? nullptr : TYPE_NAME (tt);