Author: Igor Kudrin
Date: 2025-08-05T12:42:38-07:00
New Revision: f8a4f61101bbed236adfeca58e59cac4b95afe15

URL: 
https://github.com/llvm/llvm-project/commit/f8a4f61101bbed236adfeca58e59cac4b95afe15
DIFF: 
https://github.com/llvm/llvm-project/commit/f8a4f61101bbed236adfeca58e59cac4b95afe15.diff

LOG: [lldb] Avoid a crash after selecting an unknown platform (#151803)

`PlatformList::Create()` added an item to the list even when
`Platform::Create()` returned `nullptr`. Other methods use these items
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 ")
...
```

Added: 
    

Modified: 
    lldb/source/Target/Platform.cpp
    lldb/unittests/Platform/PlatformTest.cpp

Removed: 
    


################################################################################
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