mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-09 23:30:35 -06:00
LINK_OPTIONS: Fix crash on empty LINKER: prefix
Since commit e3895f4a8b (Linking: Preserve nested LINKER: prefixes as
written, 2024-09-17, v3.31.0-rc1~60^2) we may increment an iterator past
the end. Revise logic to avoid that.
Fixes: #26499
This commit is contained in:
@@ -551,8 +551,9 @@ std::vector<BT<std::string>>& cmGeneratorTarget::ResolveLinkerWrapper(
|
||||
const std::string SHELL{ "SHELL:" };
|
||||
const std::string LINKER_SHELL = LINKER + SHELL;
|
||||
|
||||
for (auto entry = result.begin(); entry != result.end(); ++entry) {
|
||||
for (auto entry = result.begin(); entry != result.end();) {
|
||||
if (entry->Value.compare(0, LINKER.length(), LINKER) != 0) {
|
||||
++entry;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -594,10 +595,10 @@ std::vector<BT<std::string>>& cmGeneratorTarget::ResolveLinkerWrapper(
|
||||
if (joinItems) {
|
||||
result.insert(
|
||||
entry, cmJoin(cmMakeRange(options.begin(), options.end()), " "_s));
|
||||
entry = std::next(result.begin(), index);
|
||||
entry = std::next(result.begin(), index + 1);
|
||||
} else {
|
||||
result.insert(entry, options.begin(), options.end());
|
||||
entry = std::next(result.begin(), index + options.size() - 1);
|
||||
entry = std::next(result.begin(), index + options.size());
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
||||
@@ -26,6 +26,7 @@ endfunction()
|
||||
# Use LINKER alone
|
||||
add_test_library(linker)
|
||||
target_link_options(linker PRIVATE "LINKER:-foo,bar")
|
||||
target_link_options(linker PRIVATE "LINKER:") # empty
|
||||
|
||||
# Use LINKER with SHELL
|
||||
add_test_library(linker_shell)
|
||||
|
||||
Reference in New Issue
Block a user