From: Mark Wielaard Date: Tue, 12 Jun 2018 10:18:31 +0000 (+0200) Subject: libdw: Make __libdw_dieabbrev more robust on failure. X-Git-Tag: elfutils-0.173~18 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=29a3395004643c4e412a47cec5de10f63c23f13c;p=thirdparty%2Felfutils.git libdw: Make __libdw_dieabbrev more robust on failure. Make sure to always set die->abbrev to DWARF_END_ABBREV on failure. DWARF_END_ABBREV is also what the function reports on failure. And it will prevent trying to lookup the abbrev ever again. Signed-off-by: Mark Wielaard --- diff --git a/libdw/ChangeLog b/libdw/ChangeLog index 07a1346b3..783216540 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,8 @@ +2018-06-12 Mark Wielaard + + * libdw.h (__libdw_dieabbrev): Set die->abbrev to DWARF_END_ABBREV + on failure. + 2018-06-10 Mark Wielaard * dwarf_attr_integrate.c (dwarf_attr_integrate): Stop after 16 DIE diff --git a/libdw/libdwP.h b/libdw/libdwP.h index 3d8e145a9..eebb7d126 100644 --- a/libdw/libdwP.h +++ b/libdw/libdwP.h @@ -653,8 +653,9 @@ __libdw_dieabbrev (Dwarf_Die *die, const unsigned char **readp) /* Get the abbreviation code. */ unsigned int code; const unsigned char *addr = die->addr; - if (die->cu == NULL || addr >= (const unsigned char *) die->cu->endp) - return DWARF_END_ABBREV; + if (unlikely (die->cu == NULL + || addr >= (const unsigned char *) die->cu->endp)) + return die->abbrev = DWARF_END_ABBREV; get_uleb128 (code, addr, die->cu->endp); if (readp != NULL) *readp = addr;