diff options
Diffstat (limited to 'libelf/elf_compress.c')
| -rw-r--r-- | libelf/elf_compress.c | 10 |
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); |
