aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2020-03-20 11:33:07 +0000
committerNick Clifton <nickc@redhat.com>2020-03-20 11:33:07 +0000
commit5844b4657aa2b9eb52aecc5a6338324032fb6eae (patch)
tree0c7808d2a31d5adb511061c1f9ba9844e0020473
parent3d98c46092341c1373d960d0a66ca502d5b7ee7f (diff)
downloadgdb-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/ChangeLog9
-rw-r--r--binutils/readelf.c34
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)
{