* bfdio.c (bfd_bread): Don't read past end of archive elements.
This commit is contained in:
Alan Modra 2006-12-14 02:59:25 +00:00
parent 15f6818fba
commit 1fb41da414
2 changed files with 15 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2006-12-14 Alan Modra <amodra@bigpond.net.au>
PR 3704
* bfdio.c (bfd_bread): Don't read past end of archive elements.
2006-12-12 Daniel Jacobowitz <dan@codesourcery.com> 2006-12-12 Daniel Jacobowitz <dan@codesourcery.com>
* doc/Makefile.am (bfd_TEXINFOS): Set. * doc/Makefile.am (bfd_TEXINFOS): Set.

View File

@ -1,7 +1,7 @@
/* Low-level I/O routines for BFDs. /* Low-level I/O routines for BFDs.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc. Free Software Foundation, Inc.
Written by Cygnus Support. Written by Cygnus Support.
@ -116,6 +116,15 @@ bfd_bread (void *ptr, bfd_size_type size, bfd *abfd)
{ {
size_t nread; size_t nread;
/* If this is an archive element, don't read past the end of
this element. */
if (abfd->arelt_data != NULL)
{
size_t maxbytes = ((struct areltdata *) abfd->arelt_data)->parsed_size;
if (size > maxbytes)
size = maxbytes;
}
if ((abfd->flags & BFD_IN_MEMORY) != 0) if ((abfd->flags & BFD_IN_MEMORY) != 0)
{ {
struct bfd_in_memory *bim; struct bfd_in_memory *bim;