mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-27 22:48:57 +08:00
Re: readelf looping in process_archive
This patch fixes a leak of qualified_name caused by 4c83662712 and a double free introduced by fd486f32d1. Not breaking out of the loop results in an error: "failed to seek to next archive header". That's slightly better than silently preventing the possibility of endless loops. * readelf.c (process_archive): Don't double free qualified_name. Don't break out of loop with "negative" archive_file_size, just set file offset to max.
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2020-03-27 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* readelf.c (process_archive): Don't double free qualified_name.
|
||||||
|
Don't break out of loop with "negative" archive_file_size, just
|
||||||
|
set file offset to max.
|
||||||
|
|
||||||
2020-03-25 Alan Modra <amodra@gmail.com>
|
2020-03-25 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* readelf.c (process_archive): Prevent endless loop.
|
* readelf.c (process_archive): Prevent endless loop.
|
||||||
|
@ -20461,7 +20461,6 @@ process_archive (Filedata * filedata, bfd_boolean is_thin_archive)
|
|||||||
|
|
||||||
close_file (member_filedata);
|
close_file (member_filedata);
|
||||||
free (member_file_name);
|
free (member_file_name);
|
||||||
free (qualified_name);
|
|
||||||
}
|
}
|
||||||
else if (is_thin_archive)
|
else if (is_thin_archive)
|
||||||
{
|
{
|
||||||
@ -20511,7 +20510,7 @@ process_archive (Filedata * filedata, bfd_boolean is_thin_archive)
|
|||||||
arch.next_arhdr_offset += archive_file_size;
|
arch.next_arhdr_offset += archive_file_size;
|
||||||
/* Stop looping with "negative" archive_file_size. */
|
/* Stop looping with "negative" archive_file_size. */
|
||||||
if (arch.next_arhdr_offset < archive_file_size)
|
if (arch.next_arhdr_offset < archive_file_size)
|
||||||
break;
|
arch.next_arhdr_offset = -1ul;
|
||||||
}
|
}
|
||||||
|
|
||||||
free (qualified_name);
|
free (qualified_name);
|
||||||
|
Reference in New Issue
Block a user