aboutsummaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2017-02-14 15:10:34 +0000
committerNick Clifton <nickc@redhat.com>2017-02-14 15:10:34 +0000
commitbc303e5d6c2dd33086478f80fd1d3096d4e1bc01 (patch)
tree853e7390d0fea4e88a0607c6661fbcfc39199b54 /binutils
parent92134dc19b4bf6407a88a306b771c9c6c88658d6 (diff)
downloadgdb-bc303e5d6c2dd33086478f80fd1d3096d4e1bc01.zip
gdb-bc303e5d6c2dd33086478f80fd1d3096d4e1bc01.tar.gz
gdb-bc303e5d6c2dd33086478f80fd1d3096d4e1bc01.tar.bz2
Fix invalid memory access displayiing contents of sections.
PR binutils/21159 * readelf.c (dump_section_as_strings): Reset the start address if no decompression is perfromed. (dump_section_as_bytes): Likewise.
Diffstat (limited to 'binutils')
-rw-r--r--binutils/ChangeLog7
-rw-r--r--binutils/readelf.c10
2 files changed, 16 insertions, 1 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 4f9bdfa..9d3f7e2 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,5 +1,12 @@
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
* rddbg.c (read_symbol_stabs_debugging_info): Check for a null or
empty symbol name.
diff --git a/binutils/readelf.c b/binutils/readelf.c
index c4bddcd..150b680 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -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;
}