diff options
| -rw-r--r-- | llvm/lib/Object/Archive.cpp | 10 | ||||
| -rw-r--r-- | llvm/test/tools/llvm-ar/Inputs/msvc-import.lib | 2 | ||||
| -rw-r--r-- | llvm/test/tools/llvm-ar/empty-uid-gid.test | 3 |
3 files changed, 13 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; } diff --git a/llvm/test/tools/llvm-ar/Inputs/msvc-import.lib b/llvm/test/tools/llvm-ar/Inputs/msvc-import.lib new file mode 100644 index 00000000000..224125bafce --- /dev/null +++ b/llvm/test/tools/llvm-ar/Inputs/msvc-import.lib @@ -0,0 +1,2 @@ +!<arch> +library.dll/ 28800 0 0 ` diff --git a/llvm/test/tools/llvm-ar/empty-uid-gid.test b/llvm/test/tools/llvm-ar/empty-uid-gid.test new file mode 100644 index 00000000000..f289089f81a --- /dev/null +++ b/llvm/test/tools/llvm-ar/empty-uid-gid.test @@ -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 |

