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

Reply via email to