[PATCH] D46527: Object: Find terminator correctly when getting long filenames from GNU archives

Peter Collingbourne via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue May 8 18:27:38 PDT 2018


pcc added a comment.

The issue is that the StringRef ctor was looking for a `\0`, not a `/`, so any `/` bytes in the file are irrelevant. Most object files will contain a `\0` in their contents, which would terminate the search, but if the archive is a thin archive (as it is in this case), the file contents will not appear in the archive and the entire archive index will not contain any `\0` bytes.

Here is a script that will create an archive that will reproduce the problem. You can also replace `cru` with `cruT` to create a thin archive with the same problem. I can only repro the crash on Windows; on my Linux machine an r/w page is mapped immediately after the archive file.

  touch 012345678901234567890123456789012345678901234567890123456789012-{1..124}.o xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.o
  rm -f file.a
  ../src2/llvm-project5/ra/bin/llvm-ar cru file.a 012345678901234567890123456789012345678901234567890123456789012-{1..124}.o xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.o


Repository:
  rL LLVM

https://reviews.llvm.org/D46527





More information about the llvm-commits mailing list