From 645ba68105ee79511a79386811dd932be8becafa Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 19 Mar 2020 11:47:45 +1030 Subject: setup_archive parameter mismatch * elfcomm.c (setup_archive): Make file_size an off_t. Comment. * elfcomm.h (setup_archive): Update prototype. --- binutils/ChangeLog | 5 +++++ binutils/elfcomm.c | 9 +++++++-- binutils/elfcomm.h | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index dad2ed6..bfaeaf0 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,8 @@ +2020-03-19 Alan Modra + + * elfcomm.c (setup_archive): Make file_size an off_t. Comment. + * elfcomm.h (setup_archive): Update prototype. + 2020-03-16 Alan Modra * readelf.c (get_symbols): New function. diff --git a/binutils/elfcomm.c b/binutils/elfcomm.c index e5c6a32..b0fbf57 100644 --- a/binutils/elfcomm.c +++ b/binutils/elfcomm.c @@ -21,6 +21,11 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ +/* Do not use BFD types in this file that differ in size depending on + whether BFD64 is defined. Functions in this file are used by + readelf.c and elfedit.c which define BFD64, and by objdump.c which + doesn't. */ + #include "sysdep.h" #include "libiberty.h" #include "filenames.h" @@ -607,7 +612,7 @@ process_archive_index_and_symbols (struct archive_info * arch, int setup_archive (struct archive_info *arch, const char *file_name, - FILE *file, bfd_size_type file_size, + FILE *file, off_t file_size, bfd_boolean is_thin_archive, bfd_boolean read_symbols) { size_t got; @@ -671,7 +676,7 @@ setup_archive (struct archive_info *arch, const char *file_name, return 1; } /* PR 17531: file: 639d6a26. */ - if (arch->longnames_size > file_size + if ((off_t) arch->longnames_size > file_size || (signed long) arch->longnames_size < 0) { error (_("%s: long name table is too big, (size = 0x%lx)\n"), diff --git a/binutils/elfcomm.h b/binutils/elfcomm.h index 731d3db..8d962f2 100644 --- a/binutils/elfcomm.h +++ b/binutils/elfcomm.h @@ -74,7 +74,7 @@ extern char *adjust_relative_path (const char *, const char *, unsigned long); /* Read the symbol table and long-name table from an archive. */ extern int setup_archive (struct archive_info *, const char *, FILE *, - bfd_size_type, bfd_boolean, bfd_boolean); + off_t, bfd_boolean, bfd_boolean); /* Open and setup a nested archive, if not already open. */ extern int setup_nested_archive (struct archive_info *, const char *); -- cgit v1.1