Reserve memory for a new DIE first. The caller might not care, but it isn't really nice to change the DIE the caller gave us.
See also https://sourceware.org/bugzilla/show_bug.cgi?id=22546#c5 Signed-off-by: Mark Wielaard <m...@klomp.org> --- libdw/ChangeLog | 5 +++++ libdw/dwarf_aggregate_size.c | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/libdw/ChangeLog b/libdw/ChangeLog index 2a6d711..350230e 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,8 @@ +2017-12-12 Mark Wielaard <m...@klomp.org> + + * dwarf_aggregate_size.c (dwarf_aggregate_size): Don't peel the + given DIE. Reserve memory for a new DIE first. + 2017-12-11 Dima Kogan <d...@secretsauce.net> * dwarf_aggregate_size.c (array_size): Handle multi-dimensional diff --git a/libdw/dwarf_aggregate_size.c b/libdw/dwarf_aggregate_size.c index 3010c0a..6e50185 100644 --- a/libdw/dwarf_aggregate_size.c +++ b/libdw/dwarf_aggregate_size.c @@ -199,12 +199,12 @@ aggregate_size (Dwarf_Die *die, Dwarf_Word *size, Dwarf_Die *type_mem) int dwarf_aggregate_size (Dwarf_Die *die, Dwarf_Word *size) { - Dwarf_Die type_mem; + Dwarf_Die die_mem, type_mem; - if (INTUSE (dwarf_peel_type) (die, die) != 0) + if (INTUSE (dwarf_peel_type) (die, &die_mem) != 0) return -1; - return aggregate_size (die, size, &type_mem); + return aggregate_size (&die_mem, size, &type_mem); } INTDEF (dwarf_aggregate_size) OLD_VERSION (dwarf_aggregate_size, ELFUTILS_0.144) -- 1.8.3.1