diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2002-06-06 09:24:56 +0000 |
---|---|---|
committer | Richard Sandiford <rdsandiford@googlemail.com> | 2002-06-06 09:24:56 +0000 |
commit | 644c4c80f9dd4e06eb9cae2ae391e2b4f2b36fff (patch) | |
tree | f74f1884005aad66472bf9fe9a4cbe9ef14a814d /bfd | |
parent | ec8b3afdf273b2d682ce02a5d4f594d3fa5cf268 (diff) | |
download | gdb-644c4c80f9dd4e06eb9cae2ae391e2b4f2b36fff.zip gdb-644c4c80f9dd4e06eb9cae2ae391e2b4f2b36fff.tar.gz gdb-644c4c80f9dd4e06eb9cae2ae391e2b4f2b36fff.tar.bz2 |
* stabs.c (_bfd_link_section_stabs): Check that the symbol offset
is within the .stabstr section.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/stabs.c | 16 |
2 files changed, 18 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 772c075..51f9a90 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2002-06-06 Richard Sandiford <rsandifo@redhat.com> + + * stabs.c (_bfd_link_section_stabs): Check that the symbol offset + is within the .stabstr section. + 2002-06-06 Alan Modra <amodra@bigpond.net.au> * elf-bfd.h (struct elf_size_info <swap_symbol_in>): Function args diff --git a/bfd/stabs.c b/bfd/stabs.c index bba4a6d..e225d9c 100644 --- a/bfd/stabs.c +++ b/bfd/stabs.c @@ -284,6 +284,7 @@ _bfd_link_section_stabs (abfd, psinfo, stabsec, stabstrsec, psecinfo) sym < symend; sym += STABSIZE, ++pstridx) { + bfd_size_type symstroff; int type; const char *string; @@ -311,9 +312,18 @@ _bfd_link_section_stabs (abfd, psinfo, stabsec, stabstrsec, psecinfo) } /* Store the string in the hash table, and record the index. */ - string = ((char *) stabstrbuf - + stroff - + bfd_get_32 (abfd, sym + STRDXOFF)); + symstroff = stroff + bfd_get_32 (abfd, sym + STRDXOFF); + if (symstroff >= stabstrsec->_raw_size) + { + (*_bfd_error_handler) + (_("%s(%s+0x%lx): Stabs entry has invalid string index."), + bfd_archive_filename (abfd), + bfd_get_section_name (abfd, stabsec), + (long) (sym - stabbuf)); + bfd_set_error (bfd_error_bad_value); + goto error_return; + } + string = (char *) stabstrbuf + symstroff; *pstridx = _bfd_stringtab_add (sinfo->strings, string, true, true); /* An N_BINCL symbol indicates the start of the stabs entries |