Browse Source

instrumentation: Quote command arguments to preserve separation

Fixes: #26702
Martin Duffy 7 months ago
parent
commit
4e7b37cad3

+ 1 - 1
Help/manual/cmake-instrumentation.7.rst

@@ -369,7 +369,7 @@ Example:
 
   {
     "version": 1,
-    "command" : "/usr/bin/c++ -MD -MT CMakeFiles/main.dir/main.cxx.o -MF CMakeFiles/main.dir/main.cxx.o.d -o CMakeFiles/main.dir/main.cxx.o -c <src>/main.cxx",
+    "command" : "\"/usr/bin/c++\" \"-MD\" \"-MT\" \"CMakeFiles/main.dir/main.cxx.o\" \"-MF\" \"CMakeFiles/main.dir/main.cxx.o.d\" \"-o\" \"CMakeFiles/main.dir/main.cxx.o\" \"-c\" \"<src>/main.cxx\"",
     "role" : "compile",
     "return" : 1,
     "target": "main",

+ 1 - 1
Source/cmInstrumentation.cxx

@@ -538,7 +538,7 @@ std::string cmInstrumentation::GetCommandStr(
 {
   std::string command_str;
   for (size_t i = 0; i < args.size(); ++i) {
-    command_str = cmStrCat(command_str, args[i]);
+    command_str = cmStrCat(command_str, '"', args[i], '"');
     if (i < args.size() - 1) {
       command_str = cmStrCat(command_str, ' ');
     }

+ 1 - 1
Tests/RunCMake/Instrumentation/check-data-dir.cmake

@@ -111,7 +111,7 @@ foreach(snippet IN LISTS snippets)
   # Verify command args were passed
   if (filename MATCHES "^cmakeBuild|^ctest")
     string(JSON command GET "${contents}" command)
-    if (NOT command MATCHES "-.* Debug")
+    if (NOT command MATCHES "Debug")
       snippet_error(${snippet} "Command value missing passed arguments")
     endif()
   endif()

+ 1 - 1
Tests/RunCMake/Instrumentation/query/cmake-command-make-program.cmake

@@ -3,5 +3,5 @@ cmake_instrumentation(
   API_VERSION 1
   DATA_VERSION 1
   HOOKS preBuild postBuild
-  CALLBACK "\"${CMAKE_COMMAND}\" -P \"${hook_path}\" 0"
+  CALLBACK ${CMAKE_COMMAND} -P ${hook_path} 0
 )

+ 3 - 3
Tests/RunCMake/Instrumentation/query/cmake-command.cmake

@@ -8,7 +8,7 @@
     API_VERSION 1
     DATA_VERSION 1
     HOOKS postGenerate
-    CALLBACK \"${CMAKE_COMMAND}\" -E echo callback1
+    CALLBACK ${CMAKE_COMMAND} -E echo callback1
   )
   # Query 2
   cmake_instrumentation(
@@ -16,6 +16,6 @@
     DATA_VERSION 1
     HOOKS postCMakeBuild
     QUERIES staticSystemInformation dynamicSystemInformation
-    CALLBACK \"${CMAKE_COMMAND}\" -E echo callback2
-    CALLBACK \"${CMAKE_COMMAND}\" -E echo callback3
+    CALLBACK ${CMAKE_COMMAND} -E echo callback2
+    CALLBACK ${CMAKE_COMMAND} -E echo callback3
   )

+ 1 - 1
Tests/RunCMake/Instrumentation/query/generated/query-1.json.in

@@ -1,7 +1,7 @@
 {
   "callbacks" :
   [
-    "\"@CMAKE_COMMAND@\" -E echo callback1"
+    "\"@CMAKE_COMMAND@\" \"-E\" \"echo\" \"callback1\""
   ],
   "hooks" :
   [

+ 2 - 2
Tests/RunCMake/Instrumentation/query/generated/query-2.json.in

@@ -1,8 +1,8 @@
 {
   "callbacks" :
   [
-    "\"@CMAKE_COMMAND@\" -E echo callback2",
-    "\"@CMAKE_COMMAND@\" -E echo callback3"
+    "\"@CMAKE_COMMAND@\" \"-E\" \"echo\" \"callback2\"",
+    "\"@CMAKE_COMMAND@\" \"-E\" \"echo\" \"callback3\""
   ],
   "hooks" :
   [