From 1835f746a7c7fff70a2cc03a051b14fdc6b3f73f Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Mon, 13 Feb 2017 15:19:48 +0000 Subject: [PATCH] Extend previous patch to cover uncompress_section_contents returning FALSE to other callers. PR binutils/21135 (dump_section_as_bytes, load_specific_debug_section): Likewise. --- binutils/ChangeLog | 1 + binutils/readelf.c | 38 +++++++++++++++++++++++++++----------- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index fdd5f33c737..294e66ce44b 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -3,6 +3,7 @@ PR binutils/21135 * readelf.c (dump_section_as_bytes): Handle the case where uncompress_section_contents returns false. + (dump_section_as_bytes, load_specific_debug_section): Likewise. 2017-02-13 Nick Clifton diff --git a/binutils/readelf.c b/binutils/readelf.c index ede5747e40d..c73a3275ea3 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -12691,10 +12691,18 @@ dump_section_as_strings (Elf_Internal_Shdr * section, FILE * file) new_size -= 12; } - if (uncompressed_size - && uncompress_section_contents (& start, - uncompressed_size, & new_size)) - num_bytes = new_size; + if (uncompressed_size) + { + if (uncompress_section_contents (& start, + uncompressed_size, & new_size)) + num_bytes = new_size; + else + { + error (_("Unable to decompress section %s\n"), + printable_section_name (section)); + return; + } + } } /* If the section being dumped has relocations against it the user might @@ -12986,14 +12994,22 @@ load_specific_debug_section (enum dwarf_section_display_enum debug, size -= 12; } - if (uncompressed_size - && uncompress_section_contents (&start, uncompressed_size, - &size)) + if (uncompressed_size) { - /* Free the compressed buffer, update the section buffer - and the section size if uncompress is successful. */ - free (section->start); - section->start = start; + if (uncompress_section_contents (&start, uncompressed_size, + &size)) + { + /* Free the compressed buffer, update the section buffer + and the section size if uncompress is successful. */ + free (section->start); + section->start = start; + } + else + { + error (_("Unable to decompress section %s\n"), + printable_section_name (sec)); + return 0; + } } section->size = size; } -- 2.30.2