| From 0b01edd242c89bf970f4604894c09d7545372bc0 Mon Sep 17 00:00:00 2001 |
| From: Andrew Hsieh <andrewhsieh@google.com> |
| Date: Fri, 1 Mar 2013 18:24:12 +0800 |
| Subject: [PATCH] Ignore empty archive |
| |
| Change-Id: If0f144cc847790fdc77e997fda455bcaa3ab0b7d |
| --- |
| lib/LD/GNUArchiveReader.cpp | 14 ++++++++++++-- |
| 1 files changed, 12 insertions(+), 2 deletions(-) |
| |
| diff --git a/lib/LD/GNUArchiveReader.cpp b/lib/LD/GNUArchiveReader.cpp |
| index 82e4fec..70a9289 100644 |
| --- a/lib/LD/GNUArchiveReader.cpp |
| +++ b/lib/LD/GNUArchiveReader.cpp |
| @@ -237,6 +237,11 @@ Input* GNUArchiveReader::readMemberHeader(Archive& pArchiveRoot, |
| bool GNUArchiveReader::readSymbolTable(Archive& pArchive) |
| { |
| assert(pArchive.getARFile().hasMemArea()); |
| + FileHandle *handler = pArchive.getARFile().memArea()->handler(); |
| + if (handler->size() == Archive::MAGIC_LEN) { |
| + pArchive.setSymTabSize(0); |
| + return true; |
| + } |
| |
| MemoryRegion* header_region = |
| pArchive.getARFile().memArea()->request((pArchive.getARFile().fileOffset() + |
| @@ -288,6 +293,13 @@ bool GNUArchiveReader::readSymbolTable(Archive& pArchive) |
| /// readStringTable - read the strtab for long file name of the archive |
| bool GNUArchiveReader::readStringTable(Archive& pArchive) |
| { |
| + assert(pArchive.getARFile().hasMemArea()); |
| + |
| + FileHandle *handler = pArchive.getARFile().memArea()->handler(); |
| + if (handler->size() == Archive::MAGIC_LEN) { |
| + return true; |
| + } |
| + |
| size_t offset = Archive::MAGIC_LEN + |
| sizeof(Archive::MemberHeader) + |
| pArchive.getSymTabSize(); |
| @@ -295,8 +307,6 @@ bool GNUArchiveReader::readStringTable(Archive& pArchive) |
| if (0x0 != (offset & 1)) |
| ++offset; |
| |
| - assert(pArchive.getARFile().hasMemArea()); |
| - |
| MemoryRegion* header_region = |
| pArchive.getARFile().memArea()->request((pArchive.getARFile().fileOffset() + |
| offset), |
| -- |
| 1.7.7.3 |
| |