From f2343bd953f52eb39a3a9c0a76708e17b17cd54f Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Mon, 13 Jul 2015 23:07:05 +0000 Subject: [PATCH] Fix reading archive members with / in the name. 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 | 6 +++--- test/Object/archive-toc.test | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/Object/Archive.cpp b/lib/Object/Archive.cpp index b9d949b4428..efcc2d66362 100644 --- a/lib/Object/Archive.cpp +++ b/lib/Object/Archive.cpp @@ -162,10 +162,10 @@ ErrorOr 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/test/Object/archive-toc.test b/test/Object/archive-toc.test index 93eb49ab784..cca4b868c46 100644 --- a/test/Object/archive-toc.test +++ b/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