Fix reading archive members with / in the name.
authorRafael Espindola <rafael.espindola@gmail.com>
Mon, 13 Jul 2015 23:07:05 +0000 (23:07 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Mon, 13 Jul 2015 23:07:05 +0000 (23:07 +0000)
This is important for thin archives.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242082 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Object/Archive.cpp
test/Object/archive-toc.test

index b9d949b4428c42343d7baacc3769c521db4022a4..efcc2d66362c86e11de2c5e4b868786b0929739c 100644 (file)
@@ -162,10 +162,10 @@ ErrorOr<StringRef> Archive::Child::getName() const {
                    + Parent->StringTable->getSize()))
       return object_error::parse_failed;
 
-    // GNU long file names end with a /.
+    // GNU long file names end with a "/\n".
     if (Parent->kind() == K_GNU || Parent->kind() == K_MIPS64) {
-      StringRef::size_type End = StringRef(addr).find('/');
-      return StringRef(addr, End);
+      StringRef::size_type End = StringRef(addr).find('\n');
+      return StringRef(addr, End - 1);
     }
     return StringRef(addr);
   } else if (name.startswith("#1/")) {
index 93eb49ab7842d6c36f4cb025b82388909d2ddd0b..cca4b868c46b7ed6542c0922c1fbc74811a869a0 100644 (file)
@@ -38,3 +38,9 @@ THIN-NEXT: rw-r--r-- 1000/1000   2280 2014-12-16 00:56:27.000000000 IsNAN.o
 Test reading an archive with just a symbol table. We use to reject them.
 RUN: llvm-ar tv %p/Inputs/symtab-only.a | FileCheck --allow-empty --check-prefix=EMPTY %s
 EMPTY-NOT: {{.}}
+
+Test reading a thin archive with directory names.
+RUN: env TZ=GMT llvm-ar tv %p/Inputs/thin-path.a | FileCheck %s --check-prefix=THINPATH -strict-whitespace
+
+THINPATH: rw-r--r-- 0/0   1224 1970-01-01 00:00:00.000000000 test.o
+THINPATH-NEXT: rw-r--r-- 0/0   1224 1970-01-01 00:00:00.000000000 t/test2.o