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
This commit is contained in:
Ben Boeckel
2021-10-26 12:51:44 -04:00
parent fb6ab54076
commit 69f95cf1d9
3 changed files with 27 additions and 7 deletions

View File

@@ -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;

View File

@@ -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"
)

View File

@@ -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)