43332ba
diff -rup binutils.orig/bfd/archive64.c binutils-2.31.1/bfd/archive64.c
43332ba
--- binutils.orig/bfd/archive64.c	2019-02-26 11:17:11.882530151 +0000
43332ba
+++ binutils-2.31.1/bfd/archive64.c	2019-02-26 11:19:18.422488805 +0000
43332ba
@@ -100,8 +100,6 @@ _bfd_archive_64_bit_slurp_armap (bfd *ab
43332ba
     return FALSE;
43332ba
   carsyms = ardata->symdefs;
43332ba
   stringbase = ((char *) ardata->symdefs) + carsym_size;
43332ba
-  stringbase[stringsize] = 0;
43332ba
-  stringend = stringbase + stringsize;
43332ba
 
43332ba
   raw_armap = (bfd_byte *) bfd_alloc (abfd, ptrsize);
43332ba
   if (raw_armap == NULL)
43332ba
@@ -115,15 +113,17 @@ _bfd_archive_64_bit_slurp_armap (bfd *ab
43332ba
       goto release_raw_armap;
43332ba
     }
43332ba
 
43332ba
+  stringend = stringbase + stringsize;
43332ba
+  *stringend = 0;
43332ba
   for (i = 0; i < nsymz; i++)
43332ba
     {
43332ba
       carsyms->file_offset = bfd_getb64 (raw_armap + i * 8);
43332ba
       carsyms->name = stringbase;
43332ba
-      if (stringbase < stringend)
43332ba
-	stringbase += strlen (stringbase) + 1;
43332ba
+      stringbase += strlen (stringbase);
43332ba
+      if (stringbase != stringend)
43332ba
+	++stringbase;
43332ba
       ++carsyms;
43332ba
     }
43332ba
-  *stringbase = '\0';
43332ba
 
43332ba
   ardata->symdef_count = nsymz;
43332ba
   ardata->first_file_filepos = bfd_tell (abfd);
43332ba
diff -rup binutils.orig/bfd/archive.c binutils-2.31.1/bfd/archive.c
43332ba
--- binutils.orig/bfd/archive.c	2019-02-26 11:17:11.884530134 +0000
43332ba
+++ binutils-2.31.1/bfd/archive.c	2019-02-26 11:18:33.354859687 +0000
43332ba
@@ -1014,6 +1014,7 @@ do_slurp_coff_armap (bfd *abfd)
43332ba
   int *raw_armap, *rawptr;
43332ba
   struct artdata *ardata = bfd_ardata (abfd);
43332ba
   char *stringbase;
43332ba
+  char *stringend;
43332ba
   bfd_size_type stringsize;
43332ba
   bfd_size_type parsed_size;
43332ba
   carsym *carsyms;
43332ba
@@ -1073,22 +1074,20 @@ do_slurp_coff_armap (bfd *abfd)
43332ba
     }
43332ba
 
43332ba
   /* OK, build the carsyms.  */
43332ba
-  for (i = 0; i < nsymz && stringsize > 0; i++)
43332ba
+  stringend = stringbase + stringsize;
43332ba
+  *stringend = 0;
43332ba
+  for (i = 0; i < nsymz; i++)
43332ba
     {
43332ba
       bfd_size_type len;
43332ba
 
43332ba
       rawptr = raw_armap + i;
43332ba
       carsyms->file_offset = swap ((bfd_byte *) rawptr);
43332ba
       carsyms->name = stringbase;
43332ba
-      /* PR 17512: file: 4a1d50c1.  */
43332ba
-      len = strnlen (stringbase, stringsize);
43332ba
-      if (len < stringsize)
43332ba
-	len ++;
43332ba
-      stringbase += len;
43332ba
-      stringsize -= len;
43332ba
+      stringbase += strlen (stringbase);
43332ba
+      if (stringbase != stringend)
43332ba
+	++stringbase;
43332ba
       carsyms++;
43332ba
     }
43332ba
-  *stringbase = 0;
43332ba
 
43332ba
   ardata->symdef_count = nsymz;
43332ba
   ardata->first_file_filepos = bfd_tell (abfd);