llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-lldb Author: Ebuka Ezike (da-viper) <details> <summary>Changes</summary> Crashed because std::string is constructed with a nullptr. Wrap with `llvm::StringRef`. Add a unittest --- Full diff: https://github.com/llvm/llvm-project/pull/218906.diff 3 Files Affected: - (modified) lldb/source/API/SBEnvironment.cpp (+5-3) - (modified) lldb/unittests/API/CMakeLists.txt (+1) - (added) lldb/unittests/API/SBEnvironmentTest.cpp (+25) ``````````diff diff --git a/lldb/source/API/SBEnvironment.cpp b/lldb/source/API/SBEnvironment.cpp index 5fafabe02e014..e9678292589ab 100644 --- a/lldb/source/API/SBEnvironment.cpp +++ b/lldb/source/API/SBEnvironment.cpp @@ -75,17 +75,19 @@ const char *SBEnvironment::GetValueAtIndex(size_t index) { bool SBEnvironment::Set(const char *name, const char *value, bool overwrite) { LLDB_INSTRUMENT_VA(this, name, value, overwrite); + llvm::StringRef name_ref{name}; + llvm::StringRef value_ref{value}; if (overwrite) { - m_opaque_up->insert_or_assign(name, std::string(value)); + m_opaque_up->insert_or_assign(name_ref, value_ref.str()); return true; } - return m_opaque_up->try_emplace(name, std::string(value)).second; + return m_opaque_up->try_emplace(name_ref, value_ref.str()).second; } bool SBEnvironment::Unset(const char *name) { LLDB_INSTRUMENT_VA(this, name); - return m_opaque_up->erase(name); + return m_opaque_up->erase(llvm::StringRef(name)); } SBStringList SBEnvironment::GetEntries() { diff --git a/lldb/unittests/API/CMakeLists.txt b/lldb/unittests/API/CMakeLists.txt index a7db51aea4994..be0f32b22ba5a 100644 --- a/lldb/unittests/API/CMakeLists.txt +++ b/lldb/unittests/API/CMakeLists.txt @@ -1,5 +1,6 @@ add_lldb_unittest(APITests SBCommandInterpreterTest.cpp + SBEnvironmentTest.cpp SBLineEntryTest.cpp SBMutexTest.cpp SBBreakpointClearConditionTest.cpp diff --git a/lldb/unittests/API/SBEnvironmentTest.cpp b/lldb/unittests/API/SBEnvironmentTest.cpp new file mode 100644 index 0000000000000..2e4d7b09a21a7 --- /dev/null +++ b/lldb/unittests/API/SBEnvironmentTest.cpp @@ -0,0 +1,25 @@ +//===-- SBEnvironment.cpp -------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===/ + +#include "lldb/API/SBEnvironment.h" +#include "gtest/gtest.h" + +TEST(SBEnvironmentTest, SetAndGetEnv) { + + lldb::SBEnvironment env{}; + + // Setting an env var without a value does not crash. + env.Set("FOO", nullptr, false); + const char *foo_val = env.Get("FOO"); + EXPECT_STREQ(foo_val, ""); + + env.Set("BAR", "BAR_VALUE", true); + env.Set("BAR", nullptr, true); + const char *bar_val = env.Get("BAR"); + EXPECT_STREQ(bar_val, "") << "'BAR' should return the most recent value"; +} `````````` </details> https://github.com/llvm/llvm-project/pull/218906 _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
