Add explicit test in get-units-invalid for dwarf_cuoffset and dwarf_dieoffset.
Signed-off-by: Mark Wielaard <m...@klomp.org> --- libdw/ChangeLog | 4 ++++ libdw/dwarf_dieoffset.c | 2 +- tests/ChangeLog | 5 +++++ tests/get-units-invalid.c | 14 +++++++++++++- 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/libdw/ChangeLog b/libdw/ChangeLog index c304a3b..61bf14f 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,7 @@ +2018-05-31 Mark Wielaard <m...@klomp.org> + + * dwarf_dieoffset.c: Check die->cu != NULL. + 2018-05-30 Mark Wielaard <m...@klomp.org> * libdw/dwarf_getsrclines.c (read_srclines): Change ndir and diff --git a/libdw/dwarf_dieoffset.c b/libdw/dwarf_dieoffset.c index 8028f6d..c869ecd 100644 --- a/libdw/dwarf_dieoffset.c +++ b/libdw/dwarf_dieoffset.c @@ -38,7 +38,7 @@ Dwarf_Off dwarf_dieoffset (Dwarf_Die *die) { - return (die == NULL + return ((die == NULL || die->cu == NULL) ? ~0ul : (Dwarf_Off) (die->addr - die->cu->startp + die->cu->start)); } diff --git a/tests/ChangeLog b/tests/ChangeLog index b656bee..521df52 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2018-05-31 Mark Wielaard <m...@klomp.org> + + * get-units-invalid.c (main): Check dwarf_cuoffset and + dwarf_dieoffset. + 2018-05-29 Mark Wielaard <m...@klomp.org> * dwarf-die-addr-die.c (check_dbg): Also check subdies, split or diff --git a/tests/get-units-invalid.c b/tests/get-units-invalid.c index 58b32c0..ba0f818 100644 --- a/tests/get-units-invalid.c +++ b/tests/get-units-invalid.c @@ -83,7 +83,19 @@ main (int argc, char *argv[]) if (dwarf_ranges (&subdie, 0, &base, &start, &end) != -1) { printf ("Should NOT have a ranges: %s\n", - dwarf_diename (&result)); + dwarf_diename (&subdie)); + return -1; + } + if (dwarf_cuoffset (&subdie) != (Dwarf_Off) -1) + { + printf ("Should NOT have a cuoffset: %s\n", + dwarf_diename (&subdie)); + return -1; + } + if (dwarf_dieoffset (&subdie) != (Dwarf_Off) -1) + { + printf ("Should NOT have a die offset: %s\n", + dwarf_diename (&subdie)); return -1; } } -- 1.8.3.1