Check thin archive element file size against archive header
authorAlan Modra <amodra@gmail.com>
Tue, 28 Dec 2021 12:21:55 +0000 (22:51 +1030)
committerAlan Modra <amodra@gmail.com>
Tue, 18 Jan 2022 00:49:14 +0000 (11:19 +1030)
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.

bfd/archive.c

index 9ad61adc6159a2731a0443353f393baeea48bf5d..ffaec7e22310ea6067c58e2d92cdf340d6b7e93a 100644 (file)
@@ -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 ())
            {