diff options
author | Mark Wielaard <mark@klomp.org> | 2018-05-31 13:01:39 +0200 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2018-05-31 19:48:00 +0200 |
commit | aa02fb9028abcadaa18440b86b1ed085e029956c (patch) | |
tree | 30ca85ec66c4f0be7af59ddf9b8f81694d4b0ea5 /libdw | |
parent | 7d6fe0a39f6ae5c516ffd63558e12b24297bf982 (diff) | |
download | elfutils-aa02fb9028abcadaa18440b86b1ed085e029956c.tar.gz |
libdw: Don't crash on invalid die in dwarf_dieoffset.
Add explicit test in get-units-invalid for dwarf_cuoffset and
dwarf_dieoffset. Make sure dwarf_dieoffset returns (Dwarf_Off) -1
on failure.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Diffstat (limited to 'libdw')
-rw-r--r-- | libdw/ChangeLog | 5 | ||||
-rw-r--r-- | libdw/dwarf_dieoffset.c | 4 |
2 files changed, 7 insertions, 2 deletions
diff --git a/libdw/ChangeLog b/libdw/ChangeLog index 5a33d9c1..38b45bad 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,8 @@ +2018-05-31 Mark Wielaard <mark@klomp.org> + + * dwarf_dieoffset.c: Check die->cu != NULL. Return -1, not ~0ul + on failure. + 2018-05-29 Mark Wielaard <mark@klomp.org> * dwarf_cuoffset.c (dwarf_cuoffset): Check die->cu is not NULL. diff --git a/libdw/dwarf_dieoffset.c b/libdw/dwarf_dieoffset.c index 8028f6dd..3a8e2cb6 100644 --- a/libdw/dwarf_dieoffset.c +++ b/libdw/dwarf_dieoffset.c @@ -38,8 +38,8 @@ Dwarf_Off dwarf_dieoffset (Dwarf_Die *die) { - return (die == NULL - ? ~0ul + return ((die == NULL || die->cu == NULL) + ? (Dwarf_Off) -1 : (Dwarf_Off) (die->addr - die->cu->startp + die->cu->start)); } INTDEF(dwarf_dieoffset) |