* 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 aa2ebec5b27ff7786e00d6f1410a361849f5230c..8fd1e582968d8392f66bc0ea3981ab708d6352a3 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 1ce4d91a233bd87074e7af5493d333ee4e7c27d4..ac5a2153ef3168d92b0bba5ac9b02b3bc389ccec 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