diff options
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/elf64-ppc.c | 7 |
2 files changed, 12 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 3b0e97b..50ef873 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -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 diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index ce82e16..ae3c3b9 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -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)) { |