Fix compile time warnings about the possibility of using uninitialised fields in...
authorNick Clifton <nickc@redhat.com>
Fri, 20 Mar 2020 11:33:07 +0000 (11:33 +0000)
committerNick Clifton <nickc@redhat.com>
Fri, 20 Mar 2020 11:33:07 +0000 (11:33 +0000)
* 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.

binutils/ChangeLog
binutils/readelf.c

index 95761e07e7ac0b0d227d1a5e500a022239d83553..de41d8d66660e9f0f2d955b7c3ede5e421242148 100644 (file)
@@ -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.
index 66d91a37b7a903b94163b61f86f7a7b00e1e0d2d..61f06176835db28e7c089ae90a40bb40401dc0fb 100644 (file)
@@ -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)
            {