summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Source/cmListCommand.cxx13
-rw-r--r--Tests/RunCMake/list/RunCMakeTest.cmake3
-rw-r--r--Tests/RunCMake/list/TRANSFORM-Selector-FOR-BackwardsRange-result.txt1
-rw-r--r--Tests/RunCMake/list/TRANSFORM-Selector-FOR-BackwardsRange-stderr.txt5
-rw-r--r--Tests/RunCMake/list/TRANSFORM-Selector-FOR-BackwardsRange.cmake2
-rw-r--r--Tests/RunCMake/list/TRANSFORM-Selector-FOR-NegativeStepArgument-result.txt1
-rw-r--r--Tests/RunCMake/list/TRANSFORM-Selector-FOR-NegativeStepArgument-stderr.txt5
-rw-r--r--Tests/RunCMake/list/TRANSFORM-Selector-FOR-NegativeStepArgument.cmake2
-rw-r--r--Tests/RunCMake/list/TRANSFORM-Selector-FOR-ZeroStepArgument-result.txt1
-rw-r--r--Tests/RunCMake/list/TRANSFORM-Selector-FOR-ZeroStepArgument-stderr.txt5
-rw-r--r--Tests/RunCMake/list/TRANSFORM-Selector-FOR-ZeroStepArgument.cmake2
11 files changed, 38 insertions, 2 deletions
diff --git a/Source/cmListCommand.cxx b/Source/cmListCommand.cxx
index b35832797d..56345df010 100644
--- a/Source/cmListCommand.cxx
+++ b/Source/cmListCommand.cxx
@@ -678,6 +678,14 @@ public:
this->Start = this->NormalizeIndex(this->Start, count);
this->Stop = this->NormalizeIndex(this->Stop, count);
+ // Does stepping move us further from the end?
+ if (this->Start > this->Stop) {
+ throw transform_error(
+ cmStrCat("sub-command TRANSFORM, selector FOR "
+ "expects <start> to be no greater than <stop> (",
+ this->Start, " > ", this->Stop, ")"));
+ }
+
// compute indexes
auto size = (this->Stop - this->Start + 1) / this->Step;
if ((this->Stop - this->Start + 1) % this->Step != 0) {
@@ -1026,9 +1034,10 @@ bool HandleTransformCommand(std::vector<std::string> const& args,
}
}
- if (step < 0) {
+ if (step <= 0) {
status.SetError("sub-command TRANSFORM, selector FOR expects "
- "non negative numeric value for <step>.");
+ "positive numeric value for <step>.");
+ return false;
}
command.Selector =
diff --git a/Tests/RunCMake/list/RunCMakeTest.cmake b/Tests/RunCMake/list/RunCMakeTest.cmake
index c11891c51f..eb43ee0aca 100644
--- a/Tests/RunCMake/list/RunCMakeTest.cmake
+++ b/Tests/RunCMake/list/RunCMakeTest.cmake
@@ -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)
diff --git a/Tests/RunCMake/list/TRANSFORM-Selector-FOR-BackwardsRange-result.txt b/Tests/RunCMake/list/TRANSFORM-Selector-FOR-BackwardsRange-result.txt
new file mode 100644
index 0000000000..d00491fd7e
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-Selector-FOR-BackwardsRange-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/list/TRANSFORM-Selector-FOR-BackwardsRange-stderr.txt b/Tests/RunCMake/list/TRANSFORM-Selector-FOR-BackwardsRange-stderr.txt
new file mode 100644
index 0000000000..1acdc15790
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-Selector-FOR-BackwardsRange-stderr.txt
@@ -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\)$
diff --git a/Tests/RunCMake/list/TRANSFORM-Selector-FOR-BackwardsRange.cmake b/Tests/RunCMake/list/TRANSFORM-Selector-FOR-BackwardsRange.cmake
new file mode 100644
index 0000000000..761c187cb2
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-Selector-FOR-BackwardsRange.cmake
@@ -0,0 +1,2 @@
+set(mylist alpha bravo charlie)
+list(TRANSFORM mylist TOUPPER FOR 2 1)
diff --git a/Tests/RunCMake/list/TRANSFORM-Selector-FOR-NegativeStepArgument-result.txt b/Tests/RunCMake/list/TRANSFORM-Selector-FOR-NegativeStepArgument-result.txt
new file mode 100644
index 0000000000..d00491fd7e
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-Selector-FOR-NegativeStepArgument-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/list/TRANSFORM-Selector-FOR-NegativeStepArgument-stderr.txt b/Tests/RunCMake/list/TRANSFORM-Selector-FOR-NegativeStepArgument-stderr.txt
new file mode 100644
index 0000000000..b9845a75b5
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-Selector-FOR-NegativeStepArgument-stderr.txt
@@ -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\)$
diff --git a/Tests/RunCMake/list/TRANSFORM-Selector-FOR-NegativeStepArgument.cmake b/Tests/RunCMake/list/TRANSFORM-Selector-FOR-NegativeStepArgument.cmake
new file mode 100644
index 0000000000..087651254a
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-Selector-FOR-NegativeStepArgument.cmake
@@ -0,0 +1,2 @@
+set(mylist alpha bravo charlie)
+list(TRANSFORM mylist TOUPPER FOR 0 2 -1)
diff --git a/Tests/RunCMake/list/TRANSFORM-Selector-FOR-ZeroStepArgument-result.txt b/Tests/RunCMake/list/TRANSFORM-Selector-FOR-ZeroStepArgument-result.txt
new file mode 100644
index 0000000000..d00491fd7e
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-Selector-FOR-ZeroStepArgument-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/list/TRANSFORM-Selector-FOR-ZeroStepArgument-stderr.txt b/Tests/RunCMake/list/TRANSFORM-Selector-FOR-ZeroStepArgument-stderr.txt
new file mode 100644
index 0000000000..e8be4f1190
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-Selector-FOR-ZeroStepArgument-stderr.txt
@@ -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\)$
diff --git a/Tests/RunCMake/list/TRANSFORM-Selector-FOR-ZeroStepArgument.cmake b/Tests/RunCMake/list/TRANSFORM-Selector-FOR-ZeroStepArgument.cmake
new file mode 100644
index 0000000000..7b14eb6d70
--- /dev/null
+++ b/Tests/RunCMake/list/TRANSFORM-Selector-FOR-ZeroStepArgument.cmake
@@ -0,0 +1,2 @@
+set(mylist alpha bravo charlie)
+list(TRANSFORM mylist TOUPPER FOR 0 2 0)