Allow for some recursion when scanning archives.

This commit is contained in:
Nick Clifton 2013-02-15 15:53:42 +00:00
parent 214383dd76
commit 088f7bb95c

View file

@ -618,6 +618,7 @@ bfd *
_bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos)
{
static file_ptr prev_filepos;
static unsigned int dup_filepos_count = 0;
struct areltdata *new_areldata;
bfd *n_nfd;
char *filename;
@ -625,12 +626,17 @@ _bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos)
n_nfd = _bfd_look_for_bfd_in_cache (archive, filepos);
if (n_nfd)
return n_nfd;
/* PR15140: Prevent an inifnite recursion scanning a malformed nested archive. */
/* PR15140: Prevent an infinite recursion scanning a malformed nested archive. */
if (filepos == prev_filepos)
{
bfd_set_error (bfd_error_malformed_archive);
return NULL;
if (++ dup_filepos_count > 100)
{
bfd_set_error (bfd_error_malformed_archive);
return NULL;
}
}
else
dup_filepos_count = 0;
if (0 > bfd_seek (archive, filepos, SEEK_SET))
return NULL;