diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-07-12 13:32:28 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-07-12 13:32:28 +0000 |
| commit | f0c617264aa1685bdf199d37babc1b223170d22e (patch) | |
| tree | a77934ad1ab71c4b1b8579bf63f9007870095246 /llvm/lib/Object | |
| parent | 0048a248bde142e8fcc7757c633aa16d49df046c (diff) | |
| download | bcm5719-llvm-f0c617264aa1685bdf199d37babc1b223170d22e.tar.gz bcm5719-llvm-f0c617264aa1685bdf199d37babc1b223170d22e.zip | |
Don't reject an empty archive.
llvm-svn: 186159
Diffstat (limited to 'llvm/lib/Object')
| -rw-r--r-- | llvm/lib/Object/Archive.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/llvm/lib/Object/Archive.cpp b/llvm/lib/Object/Archive.cpp index 60c6d21f482..7579a9ac98d 100644 --- a/llvm/lib/Object/Archive.cpp +++ b/llvm/lib/Object/Archive.cpp @@ -212,9 +212,9 @@ error_code Archive::Child::getAsBinary(OwningPtr<Binary> &Result) const { 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, error_code &ec) 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, error_code &ec) } 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. |

