[llvm] r186159 - Don't reject an empty archive.
Rafael Espindola
rafael.espindola at gmail.com
Fri Jul 12 06:32:28 PDT 2013
Author: rafael
Date: Fri Jul 12 08:32:28 2013
New Revision: 186159
URL: http://llvm.org/viewvc/llvm-project?rev=186159&view=rev
Log:
Don't reject an empty archive.
Added:
llvm/trunk/test/Object/Inputs/archive-test.a-empty
Modified:
llvm/trunk/lib/Object/Archive.cpp
llvm/trunk/test/Object/nm-archive.test
Modified: llvm/trunk/lib/Object/Archive.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/Archive.cpp?rev=186159&r1=186158&r2=186159&view=diff
==============================================================================
--- llvm/trunk/lib/Object/Archive.cpp (original)
+++ llvm/trunk/lib/Object/Archive.cpp Fri Jul 12 08:32:28 2013
@@ -212,9 +212,9 @@ error_code Archive::Child::getAsBinary(O
Archive::Archive(MemoryBuffer *source, error_code &ec)
: Binary(Binary::ID_Archive, source), SymbolTable(end_children()) {
// Check for sufficient magic.
- if (!source || source->getBufferSize()
- < (8 + sizeof(ArchiveMemberHeader)) // Smallest archive.
- || StringRef(source->getBufferStart(), 8) != Magic) {
+ assert(source);
+ if (source->getBufferSize() < 8 ||
+ StringRef(source->getBufferStart(), 8) != Magic) {
ec = object_error::invalid_file_type;
return;
}
@@ -224,7 +224,7 @@ Archive::Archive(MemoryBuffer *source, e
child_iterator e = end_children();
if (i == e) {
- ec = object_error::parse_failed;
+ ec = object_error::success;
return;
}
@@ -314,6 +314,8 @@ Archive::Archive(MemoryBuffer *source, e
}
Archive::child_iterator Archive::begin_children(bool skip_internal) const {
+ if (Data->getBufferSize() == 8) // empty archive.
+ return end_children();
const char *Loc = Data->getBufferStart() + strlen(Magic);
Child c(this, Loc);
// Skip internals at the beginning of an archive.
Added: llvm/trunk/test/Object/Inputs/archive-test.a-empty
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/Inputs/archive-test.a-empty?rev=186159&view=auto
==============================================================================
--- llvm/trunk/test/Object/Inputs/archive-test.a-empty (added)
+++ llvm/trunk/test/Object/Inputs/archive-test.a-empty Fri Jul 12 08:32:28 2013
@@ -0,0 +1 @@
+!<arch>
Modified: llvm/trunk/test/Object/nm-archive.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/nm-archive.test?rev=186159&r1=186158&r2=186159&view=diff
==============================================================================
--- llvm/trunk/test/Object/nm-archive.test (original)
+++ llvm/trunk/test/Object/nm-archive.test Fri Jul 12 08:32:28 2013
@@ -30,3 +30,6 @@ RUN: llvm-nm %p/Inputs/archive-test.a-gn
And don't crash when asked to print a non existing symtab.
RUN: llvm-nm -s %p/Inputs/archive-test.a-gnu-minimal
+
+Don't reject an empty archive.
+RUN: llvm-nm %p/Inputs/archive-test.a-empty
More information about the llvm-commits
mailing list