diff options
author | Nick Clifton <nickc@redhat.com> | 2020-03-20 11:33:07 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2020-03-20 11:33:07 +0000 |
commit | 5844b4657aa2b9eb52aecc5a6338324032fb6eae (patch) | |
tree | 0c7808d2a31d5adb511061c1f9ba9844e0020473 | |
parent | 3d98c46092341c1373d960d0a66ca502d5b7ee7f (diff) | |
download | gdb-5844b4657aa2b9eb52aecc5a6338324032fb6eae.zip gdb-5844b4657aa2b9eb52aecc5a6338324032fb6eae.tar.gz gdb-5844b4657aa2b9eb52aecc5a6338324032fb6eae.tar.bz2 |
Fix compile time warnings about the possibility of using uninitialised fields in the Elf_Internal_Chdr structure when building readelf.
* readelf.c (get_compression_header): Add ATTRIBUTE_WARN_UNUSED_RESULT.
(process_section_headers): Check the return value from
get_compression_header.
(dump_section_as_strings): Likewise.
(dump_section_as_bytes): Likewise.
(load_specific_debug_section): Likewise.
-rw-r--r-- | binutils/ChangeLog | 9 | ||||
-rw-r--r-- | binutils/readelf.c | 34 |
2 files changed, 34 insertions, 9 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 95761e0..de41d8d 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,12 @@ +2020-03-20 Nick Clifton <nickc@redhat.com> + + * readelf.c (get_compression_header): Add ATTRIBUTE_WARN_UNUSED_RESULT. + (process_section_headers): Check the return value from + get_compression_header. + (dump_section_as_strings): Likewise. + (dump_section_as_bytes): Likewise. + (load_specific_debug_section): Likewise. + 2020-03-20 H.J. Lu <hongjiu.lu@intel.com> * ar.c (main): Update bfd_plugin_set_program_name call. diff --git a/binutils/readelf.c b/binutils/readelf.c index 66d91a3..61f0617 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -6076,7 +6076,7 @@ get_elf_section_flags (Filedata * filedata, bfd_vma sh_flags) return buff; } -static unsigned int +static unsigned int ATTRIBUTE_WARN_UNUSED_RESULT get_compression_header (Elf_Internal_Chdr *chdr, unsigned char *buf, bfd_size_type size) { if (is_32bit_elf) @@ -6728,15 +6728,18 @@ process_section_headers (Filedata * filedata) { Elf_Internal_Chdr chdr; - (void) get_compression_header (&chdr, buf, sizeof (buf)); - - if (chdr.ch_type == ELFCOMPRESS_ZLIB) - printf (" ZLIB, "); + if (get_compression_header (&chdr, buf, sizeof (buf)) == 0) + printf (_(" [<corrupt>]\n")); else - printf (_(" [<unknown>: 0x%x], "), - chdr.ch_type); - print_vma (chdr.ch_size, LONG_HEX); - printf (", %lu\n", (unsigned long) chdr.ch_addralign); + { + if (chdr.ch_type == ELFCOMPRESS_ZLIB) + printf (" ZLIB, "); + else + printf (_(" [<unknown>: 0x%x], "), + chdr.ch_type); + print_vma (chdr.ch_size, LONG_HEX); + printf (", %lu\n", (unsigned long) chdr.ch_addralign); + } } } } @@ -13692,6 +13695,10 @@ dump_section_as_strings (Elf_Internal_Shdr * section, Filedata * filedata) unsigned int compression_header_size = get_compression_header (& chdr, (unsigned char *) start, num_bytes); + if (compression_header_size == 0) + /* An error message will have already been generated + by get_compression_header. */ + goto error_out; if (chdr.ch_type != ELFCOMPRESS_ZLIB) { @@ -13904,6 +13911,11 @@ dump_section_as_bytes (Elf_Internal_Shdr * section, unsigned int compression_header_size = get_compression_header (& chdr, start, section_size); + if (compression_header_size == 0) + /* An error message will have already been generated + by get_compression_header. */ + goto error_out; + if (chdr.ch_type != ELFCOMPRESS_ZLIB) { warn (_("section '%s' has unsupported compress type: %d\n"), @@ -14237,6 +14249,10 @@ load_specific_debug_section (enum dwarf_section_display_enum debug, } compression_header_size = get_compression_header (&chdr, start, size); + if (compression_header_size == 0) + /* An error message will have already been generated + by get_compression_header. */ + return FALSE; if (chdr.ch_type != ELFCOMPRESS_ZLIB) { |