diff options
author | Saleem Abdulrasool <compnerd@compnerd.org> | 2016-07-05 00:23:05 +0000 |
---|---|---|
committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2016-07-05 00:23:05 +0000 |
commit | aecbdf70bfd3dbba8fe5c902046188821513e1b8 (patch) | |
tree | f99db926dbc38527396adbadffda9eee8fdb347b /llvm/lib/Object/Archive.cpp | |
parent | 4a105d73a9c0633a248049a622d6a74fa5dd8ca4 (diff) | |
download | bcm5719-llvm-aecbdf70bfd3dbba8fe5c902046188821513e1b8.tar.gz bcm5719-llvm-aecbdf70bfd3dbba8fe5c902046188821513e1b8.zip |
Object: support empty UID/GID fields
Normal archives do not have empty UID/GID fields. However, the Microsoft
Import library format is a customized archive (it just uses an alternate symbol
index format). When the import library is constructed by lib.exe, the UID and
GID fields are left empty. Do not abort on such an input.
llvm-svn: 274528
Diffstat (limited to 'llvm/lib/Object/Archive.cpp')
-rw-r--r-- | llvm/lib/Object/Archive.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/llvm/lib/Object/Archive.cpp b/llvm/lib/Object/Archive.cpp index 4e9a18ee40c..4720bf894e9 100644 --- a/llvm/lib/Object/Archive.cpp +++ b/llvm/lib/Object/Archive.cpp @@ -69,14 +69,20 @@ sys::TimeValue ArchiveMemberHeader::getLastModified() const { unsigned ArchiveMemberHeader::getUID() const { unsigned Ret; - if (StringRef(UID, sizeof(UID)).rtrim(' ').getAsInteger(10, Ret)) + StringRef User = StringRef(UID, sizeof(UID)).rtrim(' '); + if (User.empty()) + return 0; + if (User.getAsInteger(10, Ret)) llvm_unreachable("UID time not a decimal number."); return Ret; } unsigned ArchiveMemberHeader::getGID() const { unsigned Ret; - if (StringRef(GID, sizeof(GID)).rtrim(' ').getAsInteger(10, Ret)) + StringRef Group = StringRef(GID, sizeof(GID)).rtrim(' '); + if (Group.empty()) + return 0; + if (Group.getAsInteger(10, Ret)) llvm_unreachable("GID time not a decimal number."); return Ret; } |