Browse Source

Merge topic 'multiline-cache-help' into release-4.0

637a0f7ed4 cmCacheManager: Prevent corruption from multiline help strings

Acked-by: Kitware Robot <[email protected]>
Merge-request: !10290
Brad King 10 months ago
parent
commit
ae68964f5d

+ 1 - 1
Source/cmCacheManager.cxx

@@ -414,7 +414,7 @@ void cmCacheManager::OutputHelpString(std::ostream& fout,
   }
   std::string oneLine;
   std::string::size_type pos = 0;
-  for (std::string::size_type i = 0; i <= end; i++) {
+  for (std::string::size_type i = 1; i <= end; i++) {
     if ((i == end) || (helpString[i] == '\n') ||
         ((i - pos >= 60) && (helpString[i] == ' '))) {
       fout << "//";

+ 21 - 0
Tests/RunCMake/Configure/CacheVarHelpString.cmake

@@ -0,0 +1,21 @@
+# Various newline possibilities
+
+set(help_strings
+  "\n"
+  "\n\n\n"
+  "\n \n"
+  "\nline1"
+  "line1\n"
+  "\nline1\n"
+  "line1\nline2\nline3"
+  "\nline1\nline2\nline3\n"
+  "
+line line line line line line line line line line line line line line line line
+line line line line line line line line line line line line line line line line
+line line line line line line line line line line line line line line line line"
+)
+
+foreach(help IN LISTS help_strings)
+  string(SHA1 name "${help}")
+  set("${name}" "" CACHE STRING "${help}" FORCE)
+endforeach()

+ 6 - 0
Tests/RunCMake/Configure/RunCMakeTest.cmake

@@ -64,6 +64,12 @@ if(NOT RunCMake_GENERATOR MATCHES "^Ninja Multi-Config$")
   run_cmake(NoCMAKE_DEFAULT_CONFIGS)
 endif()
 
+block()
+  run_cmake(CacheVarHelpString)
+  set(RunCMake_TEST_NO_CLEAN 1)
+  run_cmake(CacheVarHelpString)
+endblock()
+
 if(NOT CMAKE_HOST_WIN32)
   block()
     # Test a non-writable build directory.