aboutsummaryrefslogtreecommitdiff
path: root/libdw
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2018-05-31 13:01:39 +0200
committerMark Wielaard <mark@klomp.org>2018-05-31 19:48:00 +0200
commitaa02fb9028abcadaa18440b86b1ed085e029956c (patch)
tree30ca85ec66c4f0be7af59ddf9b8f81694d4b0ea5 /libdw
parent7d6fe0a39f6ae5c516ffd63558e12b24297bf982 (diff)
downloadelfutils-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/ChangeLog5
-rw-r--r--libdw/dwarf_dieoffset.c4
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)