Fix invalid memory access displayiing contents of sections.
authorNick Clifton <nickc@redhat.com>
Tue, 14 Feb 2017 15:10:34 +0000 (15:10 +0000)
committerNick Clifton <nickc@redhat.com>
Tue, 14 Feb 2017 15:10:34 +0000 (15:10 +0000)
PR binutils/21159
* readelf.c (dump_section_as_strings): Reset the start address if
no decompression is perfromed.
(dump_section_as_bytes): Likewise.

binutils/ChangeLog
binutils/readelf.c

index 4f9bdfa75dc9e5712883eb1362235df2f9178d8c..9d3f7e2a26621aabecc8524bc68bfb0e1e736df3 100644 (file)
@@ -1,3 +1,10 @@
+2017-02-14  Nick Clifton  <nickc@redhat.com>
+
+       PR binutils/21159
+       * readelf.c (dump_section_as_strings): Reset the start address if
+       no decompression is perfromed.
+       (dump_section_as_bytes): Likewise.
+
 2017-02-14  Nick Clifton  <nickc@redhat.com>
 
        PR binutils/21158
index c4bddcdb711db673a3a15aeb52fd1aacb867c61f..150b68025be11c589a1332014b4309a97ae6eb1d 100644 (file)
@@ -12706,6 +12706,8 @@ dump_section_as_strings (Elf_Internal_Shdr * section, FILE * file)
              return;
            }
        }
+      else
+       start = real_start;
     }
 
   /* If the section being dumped has relocations against it the user might
@@ -12840,14 +12842,19 @@ dump_section_as_bytes (Elf_Internal_Shdr * section,
        {
          if (uncompress_section_contents (& start, uncompressed_size,
                                           & new_size))
-           section_size = new_size;
+           {
+             section_size = new_size;
+           }
          else
            {
              error (_("Unable to decompress section %s\n"),
                     printable_section_name (section));
+             /* FIXME: Print the section anyway ?  */
              return;
            }
        }
+      else
+       start = real_start;
     }
 
   if (relocate)
@@ -13014,6 +13021,7 @@ load_specific_debug_section (enum dwarf_section_display_enum debug,
              return 0;
            }
        }
+
       section->size = size;
     }