Browse Source

cmCTest*Command: Fortify argument parsing

Fix tests that pass `CDASH_UPLOAD` or `SCHEDULE_RANDOM` without an argument.
Daniel Pfeifer 1 year ago
parent
commit
caa449493b

+ 4 - 0
Source/CTest/cmCTestHandlerCommand.cxx

@@ -80,6 +80,10 @@ bool cmCTestHandlerCommand::InvokeImpl(
   }
 
   bool success = [&]() -> bool {
+    if (args.MaybeReportError(status.GetMakefile())) {
+      return true;
+    }
+
     std::sort(args.ParsedKeywords.begin(), args.ParsedKeywords.end());
     auto const it = std::adjacent_find(args.ParsedKeywords.begin(),
                                        args.ParsedKeywords.end());

+ 1 - 1
Source/CTest/cmCTestHandlerCommand.h

@@ -25,7 +25,7 @@ public:
   using cmCTestCommand::cmCTestCommand;
 
 protected:
-  struct BasicArguments
+  struct BasicArguments : ArgumentParser::ParseResult
   {
     std::string CaptureCMakeError;
     std::vector<cm::string_view> ParsedKeywords;

+ 0 - 4
Source/CTest/cmCTestSubmitHandler.cxx

@@ -484,10 +484,6 @@ void cmCTestSubmitHandler::ParseResponse(
 int cmCTestSubmitHandler::HandleCDashUploadFile(std::string const& file,
                                                 std::string const& typeString)
 {
-  if (file.empty()) {
-    cmCTestLog(this->CTest, ERROR_MESSAGE, "Upload file not specified\n");
-    return -1;
-  }
   if (!cmSystemTools::FileExists(file)) {
     cmCTestLog(this->CTest, ERROR_MESSAGE,
                "Upload file not found: '" << file << "'\n");

+ 9 - 1
Tests/RunCMake/CTestResourceAllocation/test.cmake.in

@@ -31,10 +31,18 @@ elseif(CTEST_RESOURCE_SPEC_SOURCE STREQUAL "CACHE")
   list(APPEND config_options "-DCTEST_RESOURCE_SPEC_FILE=@RunCMake_SOURCE_DIR@/resspec.json")
 endif()
 
+set(test_args)
+if(DEFINED CTEST_PARALLEL)
+  list(APPEND test_args PARALLEL_LEVEL ${CTEST_PARALLEL})
+endif()
+if(DEFINED CTEST_RANDOM)
+  list(APPEND test_args SCHEDULE_RANDOM ${CTEST_RANDOM})
+endif()
+
 ctest_start(Experimental QUIET)
 ctest_configure(OPTIONS "${config_options}")
 ctest_build()
-ctest_test(${resspec} RETURN_VALUE retval PARALLEL_LEVEL ${CTEST_PARALLEL} SCHEDULE_RANDOM ${CTEST_RANDOM})
+ctest_test(${resspec} RETURN_VALUE retval ${test_args})
 if(retval)
   message(FATAL_ERROR "Tests did not pass")
 endif()

+ 4 - 1
Tests/RunCMake/ctest_submit/CDashUploadNone-stderr.txt

@@ -1 +1,4 @@
-Upload file not specified
+^CMake Error at .*Tests/RunCMake/ctest_submit/CDashUploadNone/test.cmake:[0-9]+ \(ctest_submit\):
+  Error after keyword "CDASH_UPLOAD":
+
+    missing required value