summaryrefslogtreecommitdiffstats
path: root/Tests
diff options
context:
space:
mode:
authorEvan Wilde <etceterawilde@gmail.com>2023-08-07 18:14:14 (GMT)
committerBrad King <brad.king@kitware.com>2023-08-07 23:17:29 (GMT)
commit88f90a72f11bfdd16da63681ba3a5c482cf07304 (patch)
tree3cbeb2918de1201eff7bcb4688da609dadd4b917 /Tests
parentcbcd2978268a31fde7e9893dd0da13659dadd166 (diff)
downloadCMake-88f90a72f11bfdd16da63681ba3a5c482cf07304.zip
CMake-88f90a72f11bfdd16da63681ba3a5c482cf07304.tar.gz
CMake-88f90a72f11bfdd16da63681ba3a5c482cf07304.tar.bz2
file(GENERATE): Restore INPUT|CONTENT parse checking
Refactoring in commit bff468c988 (cmFileCommand: Use cm::optional for keyword argument presence, 2022-06-30, v3.25.0-rc1~512^2) accidentally broke the check that the input argument is either `INPUT` or `CONTENT`. The check is supposed to fail when arguments are passed in the wrong order. For example: file(GENERATE OUTPUT ... TARGET <target> CONTENT <content>) Prior to this fix, the input method would be CONTENT, but because the first parsed keyword is not `CONTENT`, `inputIsContent` would be false. The first parsed keyword isn't INPUT either, so we would not continue into the error condition. CMake would then try to handle this as an input file, when there isn't one, resulting in uninitialized memory usage and segfaults or corruption later on. Fixes: #25169
Diffstat (limited to 'Tests')
-rw-r--r--Tests/RunCMake/File_Generate/OutOfOrderArgs-result.txt1
-rw-r--r--Tests/RunCMake/File_Generate/OutOfOrderArgs-stderr.txt4
-rw-r--r--Tests/RunCMake/File_Generate/OutOfOrderArgs.cmake4
-rw-r--r--Tests/RunCMake/File_Generate/RunCMakeTest.cmake1
4 files changed, 10 insertions, 0 deletions
diff --git a/Tests/RunCMake/File_Generate/OutOfOrderArgs-result.txt b/Tests/RunCMake/File_Generate/OutOfOrderArgs-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/File_Generate/OutOfOrderArgs-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/File_Generate/OutOfOrderArgs-stderr.txt b/Tests/RunCMake/File_Generate/OutOfOrderArgs-stderr.txt
new file mode 100644
index 0000000..a3f5cd5
--- /dev/null
+++ b/Tests/RunCMake/File_Generate/OutOfOrderArgs-stderr.txt
@@ -0,0 +1,4 @@
+^CMake Error at OutOfOrderArgs\.cmake:[0-9]+ \(file\):
+ file Unknown argument to GENERATE subcommand\.
+Call Stack \(most recent call first\):
+ CMakeLists\.txt:[0-9]+ \(include\)$
diff --git a/Tests/RunCMake/File_Generate/OutOfOrderArgs.cmake b/Tests/RunCMake/File_Generate/OutOfOrderArgs.cmake
new file mode 100644
index 0000000..7f0578b
--- /dev/null
+++ b/Tests/RunCMake/File_Generate/OutOfOrderArgs.cmake
@@ -0,0 +1,4 @@
+file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/output.txt"
+ CONDITION 1
+ CONTENT "CONTENT argument"
+ )
diff --git a/Tests/RunCMake/File_Generate/RunCMakeTest.cmake b/Tests/RunCMake/File_Generate/RunCMakeTest.cmake
index 5a670ae..e601991 100644
--- a/Tests/RunCMake/File_Generate/RunCMakeTest.cmake
+++ b/Tests/RunCMake/File_Generate/RunCMakeTest.cmake
@@ -15,6 +15,7 @@ endif()
run_cmake(EmptyCondition1)
run_cmake(EmptyCondition2)
run_cmake(BadCondition)
+run_cmake(OutOfOrderArgs)
run_cmake(DebugEvaluate)
run_cmake(GenerateSource)
run_cmake(InputAndContent)