diff options
-rw-r--r-- | llvm/lib/Object/Archive.cpp | 6 | ||||
-rw-r--r-- | llvm/test/Object/archive-toc.test | 6 |
2 files changed, 9 insertions, 3 deletions
diff --git a/llvm/lib/Object/Archive.cpp b/llvm/lib/Object/Archive.cpp index b9d949b4428..efcc2d66362 100644 --- a/llvm/lib/Object/Archive.cpp +++ b/llvm/lib/Object/Archive.cpp @@ -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/")) { diff --git a/llvm/test/Object/archive-toc.test b/llvm/test/Object/archive-toc.test index 93eb49ab784..cca4b868c46 100644 --- a/llvm/test/Object/archive-toc.test +++ b/llvm/test/Object/archive-toc.test @@ -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 |