aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2004-12-10 13:08:03 +0000
committerJakub Jelinek <jakub@redhat.com>2004-12-10 13:08:03 +0000
commit138f35cc73eff0f822352241172678de82934d86 (patch)
treedca68c003a012e2ec173c038ea2c97b560e83a02
parent3cd36e7c72e3d4b36683ff99ca763a055b0d431c (diff)
downloadgdb-138f35cc73eff0f822352241172678de82934d86.zip
gdb-138f35cc73eff0f822352241172678de82934d86.tar.gz
gdb-138f35cc73eff0f822352241172678de82934d86.tar.bz2
* elf.c (bfd_elf_local_sym_name): Avoid crashes with invalid
st_shndx on STT_SECTION sections.
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf.c5
2 files changed, 9 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index d488fbb..415356d 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2004-12-10 Jakub Jelinek <jakub@redhat.com>
+
+ * elf.c (bfd_elf_local_sym_name): Avoid crashes with invalid
+ st_shndx on STT_SECTION sections.
+
2004-12-09 Daniel Jacobowitz <dan@codesourcery.com>
* elfcode.h (elf_slurp_reloc_table_from_section): Don't canonicalize
diff --git a/bfd/elf.c b/bfd/elf.c
index c14b91a..2eef4ba 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -409,7 +409,10 @@ bfd_elf_local_sym_name (bfd *abfd, Elf_Internal_Sym *isym)
{
unsigned int iname = isym->st_name;
unsigned int shindex = elf_tdata (abfd)->symtab_hdr.sh_link;
- if (iname == 0 && ELF_ST_TYPE (isym->st_info) == STT_SECTION)
+ if (iname == 0 && ELF_ST_TYPE (isym->st_info) == STT_SECTION
+ /* Check for a bogus st_shndx to avoid crashing. */
+ && isym->st_shndx < elf_numsections (abfd)
+ && !(isym->st_shndx >= SHN_LORESERVE && isym->st_shndx <= SHN_HIRESERVE))
{
iname = elf_elfsections (abfd)[isym->st_shndx]->sh_name;
shindex = elf_elfheader (abfd)->e_shstrndx;