summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Boeckel <ben.boeckel@kitware.com>2021-10-26 16:51:44 (GMT)
committerBen Boeckel <ben.boeckel@kitware.com>2021-10-26 16:51:44 (GMT)
commit69f95cf1d93945ace09ee9a87c0185b1ee6e4a47 (patch)
treead62afb6d54b53c5326a471088caf03a5e19c7f3
parentfb6ab54076217452e673ad310faba2a1a993366f (diff)
downloadCMake-69f95cf1d93945ace09ee9a87c0185b1ee6e4a47.zip
CMake-69f95cf1d93945ace09ee9a87c0185b1ee6e4a47.tar.gz
CMake-69f95cf1d93945ace09ee9a87c0185b1ee6e4a47.tar.bz2
cmCTestRunTest: fix modifying non-existent envvars
When appending or modifying to a variable that has not been modified before, the iterator was not valid, but it was used to insert into the map again. Instead, just use indexing into the map since we know it will exist by the end of the function anyways. Fixes: #22796
-rw-r--r--Source/CTest/cmCTestRunTest.cxx8
-rw-r--r--Tests/Environment/CMakeLists.txt18
-rw-r--r--Tests/Environment/check_mod.cmake8
3 files changed, 27 insertions, 7 deletions
diff --git a/Source/CTest/cmCTestRunTest.cxx b/Source/CTest/cmCTestRunTest.cxx
index 20f0ed3..2d1562a 100644
--- a/Source/CTest/cmCTestRunTest.cxx
+++ b/Source/CTest/cmCTestRunTest.cxx
@@ -800,13 +800,9 @@ bool cmCTestRunTest::ForkProcess(
auto apply_diff =
[&env_application](const std::string& name,
std::function<void(std::string&)> const& apply) {
- auto entry = env_application.find(name);
- std::string output;
- if (entry != env_application.end() && entry->second) {
- output = *entry->second;
- }
+ std::string output = env_application[name].value_or(std::string{});
apply(output);
- entry->second = output;
+ env_application[name] = output;
};
bool err_occurred = false;
diff --git a/Tests/Environment/CMakeLists.txt b/Tests/Environment/CMakeLists.txt
index 17009bd..5f1edbf 100644
--- a/Tests/Environment/CMakeLists.txt
+++ b/Tests/Environment/CMakeLists.txt
@@ -45,6 +45,12 @@ set_property(TEST EchoEnvironment3
"STRING_MANIP=string_append:suffix"
"STRING_MANIP=string_prepend:prefix"
+ # String manipulation on non-existent.
+ "STRING_DNE=string_append:post-"
+ "STRING_DNE=string_prepend:-pre"
+ "STRING_DNE=string_append:suffix"
+ "STRING_DNE=string_prepend:prefix"
+
# Path manipulation.
"PATH_MANIP=set:core"
"PATH_MANIP=path_list_append:post"
@@ -52,10 +58,22 @@ set_property(TEST EchoEnvironment3
"PATH_MANIP=path_list_append:suffix"
"PATH_MANIP=path_list_prepend:prefix"
+ # Path manipulation on non-existent.
+ "PATH_DNE=path_list_append:post"
+ "PATH_DNE=path_list_prepend:pre"
+ "PATH_DNE=path_list_append:suffix"
+ "PATH_DNE=path_list_prepend:prefix"
+
# CMake list manipulation.
"CMAKE_LIST_MANIP=set:core"
"CMAKE_LIST_MANIP=cmake_list_append:post"
"CMAKE_LIST_MANIP=cmake_list_prepend:pre"
"CMAKE_LIST_MANIP=cmake_list_append:suffix"
"CMAKE_LIST_MANIP=cmake_list_prepend:prefix"
+
+ # CMake list manipulation on non-existent.
+ "CMAKE_LIST_DNE=cmake_list_append:post"
+ "CMAKE_LIST_DNE=cmake_list_prepend:pre"
+ "CMAKE_LIST_DNE=cmake_list_append:suffix"
+ "CMAKE_LIST_DNE=cmake_list_prepend:prefix"
)
diff --git a/Tests/Environment/check_mod.cmake b/Tests/Environment/check_mod.cmake
index 16d02f2..179bd7a 100644
--- a/Tests/Environment/check_mod.cmake
+++ b/Tests/Environment/check_mod.cmake
@@ -20,12 +20,18 @@ set(expect_DIRECT "new")
set(expect_STRING_MANIP "prefix-pre-core-post-suffix")
set(expect_PATH_MANIP "prefix${path_sep}pre${path_sep}core${path_sep}post${path_sep}suffix")
set(expect_CMAKE_LIST_MANIP "prefix;pre;core;post;suffix")
+set(expect_STRING_DNE "prefix-prepost-suffix")
+set(expect_PATH_DNE "prefix${path_sep}pre${path_sep}post${path_sep}suffix")
+set(expect_CMAKE_LIST_DNE "prefix;pre;post;suffix")
set(expected_vars
DIRECT
STRING_MANIP
PATH_MANIP
- CMAKE_LIST_MANIP)
+ CMAKE_LIST_MANIP
+ STRING_DNE
+ PATH_DNE
+ CMAKE_LIST_DNE)
while (out)
string(FIND "${out}" "\n" nl_pos)