dwarf-reader: handle binaries with missing symtab
Commit Message
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 | 3 ++-
.../data/test-read-dwarf/test26-bogus-binary.elf | Bin 0 -> 200 bytes
tests/test-read-dwarf.cc | 6 ++++++
3 files changed, 8 insertions(+), 1 deletion(-)
create mode 100644 tests/data/test-read-dwarf/test26-bogus-binary.elf
Comments
Hello Matthias,
Matthias Maennich <maennich@google.com> a ?crit:
> 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.
This is OK to commit to master.
Thanks!
On Mon, Jan 27, 2020 at 04:21:21PM +0100, Dodji Seketeli wrote:
>Hello Matthias,
>
>Matthias Maennich <maennich@google.com> a ?crit:
>
>> 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.
>
>This is OK to commit to master.
Done. Thanks!
Cheers,
Matthias
>
>Thanks!
>
>--
> Dodji
@@ -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));
new file mode 100644
GIT binary patch
literal 200
zcmb<-^>JflWMpArWB>vXLl?wgVBmmIU~+W{8xV-GvGMV-0tNp6XW(I|0|EvyAg>OH
z|NV!8d{-C?L^J>Y9}YGEqz4M1e1;u$4BS9AP!wn@gz*a`2NVZ#L5dj||Ns9Dq;LVS
NlEggSq|7`9I{+HKKxzO0
literal 0
HcmV?d00001
@@ -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}
};