diff options
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/compress.c | 9 |
2 files changed, 12 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index f50ae75..10a3ae2 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2015-04-10 H.J. Lu <hongjiu.lu@intel.com> + + * compress.c (bfd_compress_section_contents): Replace bfd_malloc + and free with bfd_alloc and bfd_release on compressed buffer. + Release buffer if compressed section isn't smaller. + 2015-04-10 Alan Modra <amodra@gmail.com> PR ld/18222 diff --git a/bfd/compress.c b/bfd/compress.c index 7945344..770ea57 100644 --- a/bfd/compress.c +++ b/bfd/compress.c @@ -131,7 +131,7 @@ bfd_compress_section_contents (bfd *abfd, sec_ptr sec, decompress = FALSE; buffer_size = compressed_size + compression_header_size; } - buffer = (bfd_byte *) bfd_malloc (buffer_size); + buffer = (bfd_byte *) bfd_alloc (abfd, buffer_size); if (buffer == NULL) return 0; @@ -144,7 +144,7 @@ bfd_compress_section_contents (bfd *abfd, sec_ptr sec, buffer, uncompressed_size)) { bfd_set_error (bfd_error_bad_value); - free (buffer); + bfd_release (abfd, buffer); return 0; } free (uncompressed_buffer); @@ -169,7 +169,7 @@ bfd_compress_section_contents (bfd *abfd, sec_ptr sec, (const Bytef*) uncompressed_buffer, uncompressed_size) != Z_OK) { - free (buffer); + bfd_release (abfd, buffer); bfd_set_error (bfd_error_bad_value); return 0; } @@ -189,6 +189,9 @@ bfd_compress_section_contents (bfd *abfd, sec_ptr sec, } else { + /* NOTE: There is a small memory leak here since + uncompressed_buffer is malloced and won't be freed. */ + bfd_release (abfd, buffer); sec->contents = uncompressed_buffer; sec->compress_status = COMPRESS_SECTION_NONE; return uncompressed_size; |