summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>1999-06-22 21:25:49 +0000
committerIan Lance Taylor <ian@airs.com>1999-06-22 21:25:49 +0000
commit03ae5f594ecda3eccaa441dd8454889379980c1d (patch)
treec694b7ffe73b9bf46fa0e09afa36654b0bfbc497
parent7b9eea348fbba7b2fb103bf63e9e34973c1cddff (diff)
downloadbinutils-gdb-03ae5f594ecda3eccaa441dd8454889379980c1d.tar.gz
* elf.c (bfd_section_from_shdr): Avoid crashing on a bogus sh_link
field.
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf.c9
2 files changed, 14 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index aa2ebec5b27..8fd1e582968 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+1999-06-23 Ian Lance Taylor <ian@zembu.com>
+
+ * elf.c (bfd_section_from_shdr): Avoid crashing on a bogus sh_link
+ field.
+
1999-06-22 Ian Lance Taylor <ian@zembu.com>
From Franz Sirl <Franz.Sirl-kernel@lauterbach.com>:
diff --git a/bfd/elf.c b/bfd/elf.c
index 1ce4d91a233..ac5a2153ef3 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -1201,6 +1201,15 @@ bfd_section_from_shdr (abfd, shindex)
asection *target_sect;
Elf_Internal_Shdr *hdr2;
+ /* Check for a bogus link to avoid crashing. */
+ if (hdr->sh_link >= ehdr->e_shnum)
+ {
+ ((*_bfd_error_handler)
+ (_("%s: invalid link %lu for reloc section %s (index %u)"),
+ bfd_get_filename (abfd), hdr->sh_link, name, shindex));
+ return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
+ }
+
/* For some incomprehensible reason Oracle distributes
libraries for Solaris in which some of the objects have
bogus sh_link fields. It would be nice if we could just