If a Dwarf_Die was requested from an offset into a section data that didn't exist we would crash. Crashing is bad even if given bad input. Just return an error in that case.
Signed-off-by: Mark Wielaard <m...@klomp.org> --- libdw/ChangeLog | 4 ++++ libdw/dwarf_offdie.c | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/libdw/ChangeLog b/libdw/ChangeLog index eb1cb709..97155de1 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,7 @@ +2017-12-28 Mark Wielaard <m...@klomp.org> + + * dwarf_offdie.c (__libdw_offdie): Check sectiondata exists. + 2017-05-09 Ulf Hermann <ulf.herm...@qt.io> Mark Wielaard <m...@klomp.org> diff --git a/libdw/dwarf_offdie.c b/libdw/dwarf_offdie.c index 15f55c22..883720de 100644 --- a/libdw/dwarf_offdie.c +++ b/libdw/dwarf_offdie.c @@ -1,5 +1,5 @@ /* Return DIE at given offset. - Copyright (C) 2002-2010 Red Hat, Inc. + Copyright (C) 2002-2010, 2017 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper <drep...@redhat.com>, 2002. @@ -45,7 +45,7 @@ __libdw_offdie (Dwarf *dbg, Dwarf_Off offset, Dwarf_Die *result, Elf_Data *const data = dbg->sectiondata[debug_types ? IDX_debug_types : IDX_debug_info]; - if (offset >= data->d_size) + if (data == NULL || offset >= data->d_size) { __libdw_seterrno (DWARF_E_INVALID_DWARF); return NULL; -- 2.14.3