* elf.c (bfd_section_from_shdr): Avoid crashing on a bogus sh_link
authorIan Lance Taylor <ian@airs.com>
Tue, 22 Jun 1999 21:25:49 +0000 (21:25 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 22 Jun 1999 21:25:49 +0000 (21:25 +0000)
field.

bfd/ChangeLog
bfd/elf.c

index aa2ebec..8fd1e58 100644 (file)
@@ -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>:
index 1ce4d91..ac5a215 100644 (file)
--- 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