Check thin archive element file size against archive header

Alan Modra amodra@gmail.com
Tue Jan 18 00:55:52 GMT 2022


Makes it a little less likely for someone to break their thin archives.

	* archive.c (_bfd_get_elt_at_filepos): Check thin archive
	element file size.

diff --git a/bfd/archive.c b/bfd/archive.c
index 9ad61adc615..ffaec7e2231 100644
--- a/bfd/archive.c
+++ b/bfd/archive.c
@@ -717,7 +717,17 @@ _bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos,
 	 open the external file as a bfd.  */
       bfd_set_error (bfd_error_no_error);
       n_bfd = open_nested_file (filename, archive);
-      if (n_bfd == NULL)
+      if (n_bfd != NULL)
+	{
+	  ufile_ptr size = bfd_get_size (n_bfd);
+	  if (size != 0 && size != new_areldata->parsed_size)
+	    {
+	      bfd_set_error (bfd_error_malformed_archive);
+	      bfd_close (n_bfd);
+	      n_bfd = NULL;
+	    }
+	}
+      else
 	{
 	  switch (bfd_get_error ())
 	    {

-- 
Alan Modra
Australia Development Lab, IBM


More information about the Binutils mailing list