https://github.com/igorkudrin created 
https://github.com/llvm/llvm-project/pull/151803

`PlatformList::Create()` added an item in the list even if `Platform::Create()` 
returned `nullptr`. Other methods use items of the list without checking, which 
can lead to a crash. For example:

```
> lldb
(lldb) platform select unknown
error: unable to find a plug-in for the platform named "unknown"
(lldb) file a.out-arm64
PLEASE submit a bug report to...
Stack dump:
0.      Program arguments: lldb
1.      HandleCommand(command = "file a.out-arm64 ")
...
```

>From 5ef53982ec6ecef5c5e1da33bc0088fec2c209fd Mon Sep 17 00:00:00 2001
From: Igor Kudrin <ikud...@accesssoftek.com>
Date: Fri, 1 Aug 2025 23:06:11 -0700
Subject: [PATCH] [lldb] Avoid a crash after selecting an unknown platform

'PlatformList::Create()' added an item in the list even if
'Platform::Create()' returned 'nullptr'. Other methods use items of the
list without checking, which can lead to a crash. For example:

```
> lldb
(lldb) platform select unkwnown
error: unable to find a plug-in for the platform named "unknown"
(lldb) file a.out-arm64
PLEASE submit a bug report to...
Stack dump:
0.      Program arguments: lldb
1.      HandleCommand(command = "file a.out-arm64 ")
...
```
---
 lldb/source/Target/Platform.cpp          | 3 ++-
 lldb/unittests/Platform/PlatformTest.cpp | 6 ++++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/lldb/source/Target/Platform.cpp b/lldb/source/Target/Platform.cpp
index e9d9c8f0976b6..8681adaf5ea76 100644
--- a/lldb/source/Target/Platform.cpp
+++ b/lldb/source/Target/Platform.cpp
@@ -2234,7 +2234,8 @@ PlatformSP 
PlatformList::GetOrCreate(llvm::ArrayRef<ArchSpec> archs,
 PlatformSP PlatformList::Create(llvm::StringRef name) {
   std::lock_guard<std::recursive_mutex> guard(m_mutex);
   PlatformSP platform_sp = Platform::Create(name);
-  m_platforms.push_back(platform_sp);
+  if (platform_sp)
+    m_platforms.push_back(platform_sp);
   return platform_sp;
 }
 
diff --git a/lldb/unittests/Platform/PlatformTest.cpp 
b/lldb/unittests/Platform/PlatformTest.cpp
index 8ab223ea2cd57..6299197791fc4 100644
--- a/lldb/unittests/Platform/PlatformTest.cpp
+++ b/lldb/unittests/Platform/PlatformTest.cpp
@@ -157,3 +157,9 @@ TEST_F(PlatformTest, GetPlatformForArchitecturesCandidates) 
{
 
   PlatformThumb::Terminate();
 }
+
+TEST_F(PlatformTest, CreateUnknown) {
+  SetHostPlatform(std::make_shared<PlatformIntel>());
+  ASSERT_EQ(list.Create("unknown-platform-name"), nullptr);
+  ASSERT_EQ(list.GetOrCreate("dummy"), nullptr);
+}

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to