From 2894721aa05bbef0b9e5642e0e0c85045aac7446 Mon Sep 17 00:00:00 2001 From: Daniil Kutz Date: Mon, 8 Sep 2025 16:10:32 +0300 Subject: [PATCH 1/3] [llvm] Validate Parent object before dereference --- llvm/lib/Object/Archive.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Object/Archive.cpp b/llvm/lib/Object/Archive.cpp index 92f31c909efd4..c3111ebe0f525 100644 --- a/llvm/lib/Object/Archive.cpp +++ b/llvm/lib/Object/Archive.cpp @@ -472,10 +472,11 @@ Archive::Child::Child(const Archive *Parent, const char *Start, Error *Err) return; } + assert(Parent && "Parent can't be nullptr if Start is not a nullptr"); + Header = Parent->createArchiveMemberHeader( Start, - Parent ? Parent->getData().size() - (Start - Parent->getData().data()) - : 0, + Parent->getData().size() - (Start - Parent->getData().data()), Err); // If we are pointed to real data, Start is not a nullptr, then there must be From 29d1ade943b097a0bafab520b6588eeeed6dd106 Mon Sep 17 00:00:00 2001 From: Daniil Kutz Date: Tue, 9 Sep 2025 11:23:41 +0300 Subject: [PATCH 2/3] Fix linter error --- llvm/lib/Object/Archive.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/llvm/lib/Object/Archive.cpp b/llvm/lib/Object/Archive.cpp index c3111ebe0f525..ad77dc93b494a 100644 --- a/llvm/lib/Object/Archive.cpp +++ b/llvm/lib/Object/Archive.cpp @@ -475,8 +475,7 @@ Archive::Child::Child(const Archive *Parent, const char *Start, Error *Err) assert(Parent && "Parent can't be nullptr if Start is not a nullptr"); Header = Parent->createArchiveMemberHeader( - Start, - Parent->getData().size() - (Start - Parent->getData().data()), + Start, Parent->getData().size() - (Start - Parent->getData().data()), Err); // If we are pointed to real data, Start is not a nullptr, then there must be From ec4a38fe241f190c6d515a392873054a68538813 Mon Sep 17 00:00:00 2001 From: Daniil Kutz Date: Tue, 9 Sep 2025 13:14:38 +0300 Subject: [PATCH 3/3] Remove redunant assert as Parent is always non-null --- llvm/lib/Object/Archive.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/llvm/lib/Object/Archive.cpp b/llvm/lib/Object/Archive.cpp index ad77dc93b494a..753f805824cea 100644 --- a/llvm/lib/Object/Archive.cpp +++ b/llvm/lib/Object/Archive.cpp @@ -472,8 +472,6 @@ Archive::Child::Child(const Archive *Parent, const char *Start, Error *Err) return; } - assert(Parent && "Parent can't be nullptr if Start is not a nullptr"); - Header = Parent->createArchiveMemberHeader( Start, Parent->getData().size() - (Start - Parent->getData().data()), Err);