diff options
author | Michael J. Spencer <bigcheesegs@gmail.com> | 2013-01-10 00:07:38 +0000 |
---|---|---|
committer | Michael J. Spencer <bigcheesegs@gmail.com> | 2013-01-10 00:07:38 +0000 |
commit | 04614ff6ba40b1eed86083a89c4267eb9ef579ff (patch) | |
tree | 551bf27aac5220db704f946946826483a15e4961 /llvm/lib/Object | |
parent | c9a35eb947e19325ca32b790715f9b5399144878 (diff) | |
download | bcm5719-llvm-04614ff6ba40b1eed86083a89c4267eb9ef579ff.tar.gz bcm5719-llvm-04614ff6ba40b1eed86083a89c4267eb9ef579ff.zip |
[Object][Archive] Apparently StringRef::getAsInteger for APInt accepts spaces.
llvm-svn: 172022
Diffstat (limited to 'llvm/lib/Object')
-rw-r--r-- | llvm/lib/Object/Archive.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/Object/Archive.cpp b/llvm/lib/Object/Archive.cpp index 95eba625edf..0d12be8f049 100644 --- a/llvm/lib/Object/Archive.cpp +++ b/llvm/lib/Object/Archive.cpp @@ -49,7 +49,7 @@ struct ArchiveMemberHeader { uint64_t getSize() const { uint64_t ret; - StringRef(Size, sizeof(Size)).getAsInteger(10, ret); + StringRef(Size, sizeof(Size)).rtrim(" ").getAsInteger(10, ret); return ret; } }; @@ -110,7 +110,7 @@ error_code Archive::Child::getName(StringRef &Result) const { } // It's a long name. // Get the offset. - uint64_t offset; + std::size_t offset; name.substr(1).getAsInteger(10, offset); const char *addr = Parent->StringTable->Data.begin() + sizeof(ArchiveMemberHeader) @@ -218,6 +218,10 @@ Archive::Archive(MemoryBuffer *source, error_code &ec) SymbolTable = i; StringTable = e; if (i != e) ++i; + if (i == e) { + ec = object_error::parse_failed; + return; + } if ((ec = i->getName(name))) return; if (name[0] != '/') { |