From 9a8a8159d342dc1f5430ff4139c25ad2228111f5 Mon Sep 17 00:00:00 2001 From: Jake Ehrlich Date: Fri, 27 Oct 2017 21:47:38 +0000 Subject: [PATCH] Make 32-bit member offset in Archive::Symbol::getMember 64-bit When accessing a member for a symbol with an offset greater than 2^32 - 1 the current Archive::Symbol::getMember implementation will overflow and cause unexpected behavior. This change simply fixes that. In particular if you call "llvm-nm --print-armap" on an archive that has this behavior you'll get an error. Differential Revision: https://reviews.llvm.org/D39379 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@316801 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Object/Archive.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Object/Archive.cpp b/lib/Object/Archive.cpp index 20aaa1f2a3e..b17eefd220b 100644 --- a/lib/Object/Archive.cpp +++ b/lib/Object/Archive.cpp @@ -801,7 +801,7 @@ Expected Archive::Symbol::getMember() const { Offsets += sizeof(uint64_t); else Offsets += sizeof(uint32_t); - uint32_t Offset = 0; + uint64_t Offset = 0; if (Parent->kind() == K_GNU) { Offset = read32be(Offsets + SymbolIndex * 4); } else if (Parent->kind() == K_GNU64) {