diff --git a/bfd/ChangeLog b/bfd/ChangeLog index e4df74d331..5f6b4235ee 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2017-09-15 Alan Modra + + PR 22116 + * archive.c (bfd_ar_hdr_from_filesystem): Detect when status.st_size + overflows bfd_size_type. + 2017-09-14 H.J. Lu PR ld/22135 diff --git a/bfd/archive.c b/bfd/archive.c index 885bf489c0..3ce3f9eb89 100644 --- a/bfd/archive.c +++ b/bfd/archive.c @@ -1980,6 +1980,12 @@ bfd_ar_hdr_from_filesystem (bfd *abfd, const char *filename, bfd *member) status.st_gid); _bfd_ar_spacepad (hdr->ar_mode, sizeof (hdr->ar_mode), "%-8lo", status.st_mode); + if (status.st_size - (bfd_size_type) status.st_size != 0) + { + bfd_set_error (bfd_error_file_too_big); + free (ared); + return NULL; + } if (!_bfd_ar_sizepad (hdr->ar_size, sizeof (hdr->ar_size), status.st_size)) { free (ared);