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