summaryrefslogtreecommitdiffstats
path: root/libelf/elf_compress.c
diff options
context:
space:
mode:
Diffstat (limited to 'libelf/elf_compress.c')
-rw-r--r--libelf/elf_compress.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/libelf/elf_compress.c b/libelf/elf_compress.c
index 0ad6a32a..2cd32a6f 100644
--- a/libelf/elf_compress.c
+++ b/libelf/elf_compress.c
@@ -519,7 +519,17 @@ __libelf_reset_rawdata (Elf_Scn *scn, void *buf, size_t size, size_t align,
scn->rawdata.d.d_align = align;
scn->rawdata.d.d_type = type;
+ /* Remove the old data. */
+ Elf_Data_List *runp = scn->data_list.next;
+ while (runp != NULL)
+ {
+ Elf_Data_List *oldp = runp;
+ runp = runp->next;
+ if ((oldp->flags & ELF_F_MALLOCED) != 0)
+ free (oldp);
+ }
/* Existing existing data is no longer valid. */
+ scn->data_list.next = NULL;
scn->data_list_rear = NULL;
if (scn->data_base != scn->rawdata_base)
free (scn->data_base);