OSDN Git Service

* elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Don't segfault on
authoramodra <amodra>
Thu, 21 May 2009 13:49:10 +0000 (13:49 +0000)
committeramodra <amodra>
Thu, 21 May 2009 13:49:10 +0000 (13:49 +0000)
out of range .opd symbols.

bfd/ChangeLog
bfd/elf64-ppc.c

index 3b0e97b..50ef873 100644 (file)
@@ -1,3 +1,8 @@
+2009-05-21  Alan Modra  <amodra@bigpond.net.au>
+
+       * elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Don't segfault on
+       out of range .opd symbols.
+
 2009-05-21  Dave Korn  <dave.korn.cygwin@gmail.com>
 
        * coffgen.c (coff_print_symbol):  Use bfd_fprintf_vma, not
index ce82e16..ae3c3b9 100644 (file)
@@ -3033,6 +3033,10 @@ ppc64_elf_get_synthetic_symtab (bfd *abfd,
        {
          bfd_vma ent;
 
+         /* Ignore bogus symbols.  */
+         if (syms[i]->value > opd->size - 8)
+           continue;
+
          ent = bfd_get_64 (abfd, contents + syms[i]->value);
          if (!sym_exists_at (syms, opdsymend, symcount, -1, ent))
            {
@@ -3126,6 +3130,9 @@ ppc64_elf_get_synthetic_symtab (bfd *abfd,
        {
          bfd_vma ent;
 
+         if (syms[i]->value > opd->size - 8)
+           continue;
+
          ent = bfd_get_64 (abfd, contents + syms[i]->value);
          if (!sym_exists_at (syms, opdsymend, symcount, -1, ent))
            {