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
This commit is contained in:
Saleem Abdulrasool 2016-07-05 00:23:05 +00:00
parent 4a105d73a9
commit aecbdf70bf
3 changed files with 13 additions and 2 deletions

View File

@ -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;
}

View File

@ -0,0 +1,2 @@
!<arch>
library.dll/ 28800 0 0 `

View File

@ -0,0 +1,3 @@
RUN: llvm-ar tv %S/Inputs/msvc-import.lib | FileCheck %s
CHECK: --------- 0/0 0 1970-01-01 00:00:00.000000000 library.dll