* elf.c (bfd_elf_string_from_elf_section): Return NULL on
authorAlan Modra <amodra@gmail.com>
Mon, 14 May 2007 04:15:53 +0000 (04:15 +0000)
committerAlan Modra <amodra@gmail.com>
Mon, 14 May 2007 04:15:53 +0000 (04:15 +0000)
invalid shstrndx.
(bfd_elf_get_str_section): Likewise.

bfd/ChangeLog
bfd/elf.c

index 81848c0631b4c3e62bc32b46845bc913a6f4232d..c8662919d9eecbdc5ccf540ce9e97bee22f581c1 100644 (file)
@@ -1,3 +1,9 @@
+2007-05-14  Alan Modra  <amodra@bigpond.net.au>
+
+       * elf.c (bfd_elf_string_from_elf_section): Return NULL on
+       invalid shstrndx.
+       (bfd_elf_get_str_section): Likewise.
+
 2007-05-12  Alan Modra  <amodra@bigpond.net.au>
 
        PR 4497
index 6e1ab9631ac8a75c112ade5230bfea35e6dc5247..458c6797658b567d1f27ef791c4eae6fd0ebc2e7 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -252,7 +252,9 @@ bfd_elf_get_str_section (bfd *abfd, unsigned int shindex)
   bfd_size_type shstrtabsize;
 
   i_shdrp = elf_elfsections (abfd);
-  if (i_shdrp == 0 || i_shdrp[shindex] == 0)
+  if (i_shdrp == 0
+      || shindex >= elf_numsections (abfd)
+      || i_shdrp[shindex] == 0)
     return NULL;
 
   shstrtab = i_shdrp[shindex]->contents;
@@ -291,6 +293,9 @@ bfd_elf_string_from_elf_section (bfd *abfd,
   if (strindex == 0)
     return "";
 
+  if (elf_elfsections (abfd) == NULL || shindex >= elf_numsections (abfd))
+    return NULL;
+
   hdr = elf_elfsections (abfd)[shindex];
 
   if (hdr->contents == NULL