aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2017-06-21 13:18:46 +0100
committerNick Clifton <nickc@redhat.com>2017-06-21 13:18:46 +0100
commit20bd1b6ba53491e4979c03a4f679d0d17b9b9046 (patch)
tree271a81c64c7389e0d669aa553a265374488dceaf /bfd
parente4da2c61669d199c75b96a1be25e13e3b8254e89 (diff)
downloadgdb-20bd1b6ba53491e4979c03a4f679d0d17b9b9046.zip
gdb-20bd1b6ba53491e4979c03a4f679d0d17b9b9046.tar.gz
gdb-20bd1b6ba53491e4979c03a4f679d0d17b9b9046.tar.bz2
Fix seg-fault in the BFD parsing a corrupt input binary.
PR binutils/21645 * reloc.c (bfd_generic_get_relocated_section_contents): Fail if bfd_get_full_section_contents returns no contents.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/coff-sh.c1
-rw-r--r--bfd/reloc.c3
3 files changed, 10 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index c92ed67..1d9ba02 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,11 @@
2017-06-21 Nick Clifton <nickc@redhat.com>
+ PR binutils/21645
+ * reloc.c (bfd_generic_get_relocated_section_contents): Fail if
+ bfd_get_full_section_contents returns no contents.
+
+2017-06-21 Nick Clifton <nickc@redhat.com>
+
PR binutils/21638
* vms-alpha.c (_bfd_vms_slurp_egsd): Check for an undersized
record.
diff --git a/bfd/coff-sh.c b/bfd/coff-sh.c
index dd8090c..d76f98a 100644
--- a/bfd/coff-sh.c
+++ b/bfd/coff-sh.c
@@ -2910,6 +2910,7 @@ sh_coff_get_relocated_section_contents (bfd *output_bfd,
struct internal_reloc *internal_relocs = NULL;
struct internal_syment *internal_syms = NULL;
+fprintf (stderr, "DATA = %p\n", data);
/* We only need to handle the case of relaxing, or of having a
particular set of section contents, specially. */
if (relocatable
diff --git a/bfd/reloc.c b/bfd/reloc.c
index 8dedfe8..ee01d88 100644
--- a/bfd/reloc.c
+++ b/bfd/reloc.c
@@ -8126,6 +8126,9 @@ bfd_generic_get_relocated_section_contents (bfd *abfd,
if (!bfd_get_full_section_contents (input_bfd, input_section, &data))
return NULL;
+ if (data == NULL)
+ return NULL;
+
if (reloc_size == 0)
return data;