1 diff -rup binutils.orig/bfd/archive64.c binutils-2.31.1/bfd/archive64.c
2 --- binutils.orig/bfd/archive64.c 2019-02-26 11:17:11.882530151 +0000
3 +++ binutils-2.31.1/bfd/archive64.c 2019-02-26 11:19:18.422488805 +0000
4 @@ -100,8 +100,6 @@ _bfd_archive_64_bit_slurp_armap (bfd *ab
6 carsyms = ardata->symdefs;
7 stringbase = ((char *) ardata->symdefs) + carsym_size;
8 - stringbase[stringsize] = 0;
9 - stringend = stringbase + stringsize;
11 raw_armap = (bfd_byte *) bfd_alloc (abfd, ptrsize);
12 if (raw_armap == NULL)
13 @@ -115,15 +113,17 @@ _bfd_archive_64_bit_slurp_armap (bfd *ab
14 goto release_raw_armap;
17 + stringend = stringbase + stringsize;
19 for (i = 0; i < nsymz; i++)
21 carsyms->file_offset = bfd_getb64 (raw_armap + i * 8);
22 carsyms->name = stringbase;
23 - if (stringbase < stringend)
24 - stringbase += strlen (stringbase) + 1;
25 + stringbase += strlen (stringbase);
26 + if (stringbase != stringend)
32 ardata->symdef_count = nsymz;
33 ardata->first_file_filepos = bfd_tell (abfd);
34 diff -rup binutils.orig/bfd/archive.c binutils-2.31.1/bfd/archive.c
35 --- binutils.orig/bfd/archive.c 2019-02-26 11:17:11.884530134 +0000
36 +++ binutils-2.31.1/bfd/archive.c 2019-02-26 11:18:33.354859687 +0000
37 @@ -1014,6 +1014,7 @@ do_slurp_coff_armap (bfd *abfd)
38 int *raw_armap, *rawptr;
39 struct artdata *ardata = bfd_ardata (abfd);
42 bfd_size_type stringsize;
43 bfd_size_type parsed_size;
45 @@ -1073,22 +1074,20 @@ do_slurp_coff_armap (bfd *abfd)
48 /* OK, build the carsyms. */
49 - for (i = 0; i < nsymz && stringsize > 0; i++)
50 + stringend = stringbase + stringsize;
52 + for (i = 0; i < nsymz; i++)
56 rawptr = raw_armap + i;
57 carsyms->file_offset = swap ((bfd_byte *) rawptr);
58 carsyms->name = stringbase;
59 - /* PR 17512: file: 4a1d50c1. */
60 - len = strnlen (stringbase, stringsize);
61 - if (len < stringsize)
65 + stringbase += strlen (stringbase);
66 + if (stringbase != stringend)
72 ardata->symdef_count = nsymz;
73 ardata->first_file_filepos = bfd_tell (abfd);