cmListCommand: Handle invalid FOR selector ranges

Fixes crashes involving invalid ranges specified in list(TRANSFORM ...
FOR ...) calls.
* Report error when step is not positive
* Report error when start is after stop

Fixes: #22985
This commit is contained in:
Nick Muggio
2021-12-08 20:54:04 -05:00
parent a54f18ff36
commit 7dd3e99270
11 changed files with 38 additions and 2 deletions
+3
View File
@@ -77,6 +77,9 @@ run_cmake(TRANSFORM-Selector-FOR-NoEnoughArguments)
run_cmake(TRANSFORM-Selector-FOR-TooManyArguments)
run_cmake(TRANSFORM-Selector-FOR-BadArgument)
run_cmake(TRANSFORM-Selector-FOR-InvalidIndex)
run_cmake(TRANSFORM-Selector-FOR-ZeroStepArgument)
run_cmake(TRANSFORM-Selector-FOR-NegativeStepArgument)
run_cmake(TRANSFORM-Selector-FOR-BackwardsRange)
# 'output' oriented tests
run_cmake(TRANSFORM-Output-OUTPUT_VARIABLE-NoArguments)
run_cmake(TRANSFORM-Output-OUTPUT_VARIABLE-TooManyArguments)
@@ -0,0 +1,5 @@
^CMake Error at TRANSFORM-Selector-FOR-BackwardsRange.cmake:2 \(list\):
list sub-command TRANSFORM, selector FOR expects <start> to be no greater
than <stop> \(2 > 1\)
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)$
@@ -0,0 +1,2 @@
set(mylist alpha bravo charlie)
list(TRANSFORM mylist TOUPPER FOR 2 1)
@@ -0,0 +1,5 @@
^CMake Error at TRANSFORM-Selector-FOR-NegativeStepArgument.cmake:2 \(list\):
list sub-command TRANSFORM, selector FOR expects positive numeric value for
<step>.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)$
@@ -0,0 +1,2 @@
set(mylist alpha bravo charlie)
list(TRANSFORM mylist TOUPPER FOR 0 2 -1)
@@ -0,0 +1,5 @@
^CMake Error at TRANSFORM-Selector-FOR-ZeroStepArgument.cmake:2 \(list\):
list sub-command TRANSFORM, selector FOR expects positive numeric value for
<step>.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)$
@@ -0,0 +1,2 @@
set(mylist alpha bravo charlie)
list(TRANSFORM mylist TOUPPER FOR 0 2 0)