dwarf-reader: handle binaries with missing symtab
authorMatthias Maennich <maennich@google.com>
Sat, 25 Jan 2020 21:40:14 +0000 (21:40 +0000)
committerMatthias Maennich <maennich@google.com>
Sat, 25 Jan 2020 21:40:14 +0000 (21:40 +0000)
A broken elf file might not have a valid symtab. As of now we would hit
an ABG_ASSERT and crash. Let's catch that case and bail out instead.

        * src/abg-dwarf-reader.cc (load_symbol_maps_from_symtab_section):
        Handle elf file with missing symtab.
        * tests/test-read-dwarf.cc (InOutSpec): add test case.
        * tests/data/test-read-dwarf/test26-bogus-binary.elf: new test data.

Signed-off-by: Matthias Maennich <maennich@google.com>
src/abg-dwarf-reader.cc
tests/data/test-read-dwarf/test26-bogus-binary.elf [new file with mode: 0644]
tests/test-read-dwarf.cc

index 555170e..f6ab72c 100644 (file)
@@ -7396,7 +7396,8 @@ public:
     size_t nb_syms = symtab_sheader->sh_size / symtab_sheader->sh_entsize;
 
     Elf_Data* symtab = elf_getdata(symtab_section, 0);
-    ABG_ASSERT(symtab);
+    if (!symtab)
+      return false;
 
     GElf_Ehdr elf_header;
     ABG_ASSERT(gelf_getehdr(elf_handle(), &elf_header));
diff --git a/tests/data/test-read-dwarf/test26-bogus-binary.elf b/tests/data/test-read-dwarf/test26-bogus-binary.elf
new file mode 100644 (file)
index 0000000..e16c0b8
Binary files /dev/null and b/tests/data/test-read-dwarf/test26-bogus-binary.elf differ
index 8f460fe..c33c772 100644 (file)
@@ -259,6 +259,12 @@ InOutSpec in_out_specs[] =
     "",
     "",
   },
+  {
+    "data/test-read-dwarf/test26-bogus-binary.elf",
+    "",
+    "",
+    "",
+  },
   // This should be the last entry.
   {NULL, NULL, NULL, NULL}
 };