Просмотр исходного кода

ctest_memcheck: Fix sanitizers when MemoryCheckSanitizerOptions is empty

Jamie Snape 9 лет назад
Родитель
Сommit
e116f2a5de

+ 9 - 3
Source/CTest/cmCTestMemCheckHandler.cxx

@@ -607,9 +607,13 @@ bool cmCTestMemCheckHandler::InitializeMemoryChecking()
       this->MemoryTesterDynamicOptions.push_back("-E");
       this->MemoryTesterDynamicOptions.push_back("env");
       std::string envVar;
-      std::string extraOptions = ":" +
-        this->CTest->GetCTestConfiguration("MemoryCheckSanitizerOptions");
+      std::string extraOptions;
       std::string suppressionsOption;
+      if (!this->CTest->GetCTestConfiguration("MemoryCheckSanitizerOptions")
+             .empty()) {
+        extraOptions = ":" +
+          this->CTest->GetCTestConfiguration("MemoryCheckSanitizerOptions");
+      }
       if (!this->CTest->GetCTestConfiguration("MemoryCheckSuppressionFile")
              .empty()) {
         suppressionsOption = ":suppressions=" +
@@ -631,8 +635,10 @@ bool cmCTestMemCheckHandler::InitializeMemoryChecking()
                  cmCTestMemCheckHandler::UB_SANITIZER) {
         envVar = "UBSAN_OPTIONS";
       }
+      // Quote log_path with single quotes; see
+      // https://bugs.chromium.org/p/chromium/issues/detail?id=467936
       std::string outputFile =
-        envVar + "=log_path=\"" + this->MemoryTesterOutputFile + "\"";
+        envVar + "=log_path='" + this->MemoryTesterOutputFile + "'";
       this->MemoryTesterEnvironmentVariable =
         outputFile + suppressionsOption + extraOptions;
       break;

+ 1 - 1
Tests/RunCMake/ctest_memcheck/testAddressLeakSanitizer.cmake

@@ -2,7 +2,7 @@
 # options
 
 message("ASAN_OPTIONS = [$ENV{ASAN_OPTIONS}]")
-string(REGEX REPLACE ".*log_path=\"([^\"]*)\".*" "\\1" LOG_FILE "$ENV{ASAN_OPTIONS}")
+string(REGEX REPLACE ".*log_path=\'([^\']*)\'.*" "\\1" LOG_FILE "$ENV{ASAN_OPTIONS}")
 message("LOG_FILE=[${LOG_FILE}]")
 
 # if we are not asked to simulate AddressSanitizer don't do it

+ 1 - 1
Tests/RunCMake/ctest_memcheck/testAddressSanitizer.cmake

@@ -2,7 +2,7 @@
 # options
 
 message("ASAN_OPTIONS = [$ENV{ASAN_OPTIONS}]")
-string(REGEX REPLACE ".*log_path=\"([^\"]*)\".*" "\\1" LOG_FILE "$ENV{ASAN_OPTIONS}")
+string(REGEX REPLACE ".*log_path=\'([^\']*)\'.*" "\\1" LOG_FILE "$ENV{ASAN_OPTIONS}")
 message("LOG_FILE=[${LOG_FILE}]")
 
 # if we are not asked to simulate address sanitizer don't do it

+ 1 - 1
Tests/RunCMake/ctest_memcheck/testLeakSanitizer.cmake

@@ -2,7 +2,7 @@
 # options
 
 message("LSAN_OPTIONS = [$ENV{LSAN_OPTIONS}]")
-string(REGEX REPLACE ".*log_path=\"([^\"]*)\".*" "\\1" LOG_FILE "$ENV{LSAN_OPTIONS}")
+string(REGEX REPLACE ".*log_path=\'([^\']*)\'.*" "\\1" LOG_FILE "$ENV{LSAN_OPTIONS}")
 message("LOG_FILE=[${LOG_FILE}]")
 
 # if we are not asked to simulate LeakSanitizer don't do it

+ 2 - 2
Tests/RunCMake/ctest_memcheck/testMemorySanitizer.cmake

@@ -1,8 +1,8 @@
-# this file simulates a program that has been built with thread sanitizer
+# this file simulates a program that has been built with MemorySanitizer
 # options
 
 message("MSAN_OPTIONS = [$ENV{MSAN_OPTIONS}]")
-string(REGEX REPLACE ".*log_path=\"([^\"]*)\".*" "\\1" LOG_FILE "$ENV{MSAN_OPTIONS}")
+string(REGEX REPLACE ".*log_path=\'([^\']*)\'.*" "\\1" LOG_FILE "$ENV{MSAN_OPTIONS}")
 message("LOG_FILE=[${LOG_FILE}]")
 
 # if we are not asked to simulate address sanitizer don't do it

+ 2 - 2
Tests/RunCMake/ctest_memcheck/testThreadSanitizer.cmake

@@ -1,8 +1,8 @@
-# this file simulates a program that has been built with thread sanitizer
+# this file simulates a program that has been built with ThreadSanitizer
 # options
 
 message("TSAN_OPTIONS = [$ENV{TSAN_OPTIONS}]")
-string(REGEX REPLACE ".*log_path=\"([^\"]*)\".*" "\\1" LOG_FILE "$ENV{TSAN_OPTIONS}")
+string(REGEX REPLACE ".*log_path=\'([^\']*)\'.*" "\\1" LOG_FILE "$ENV{TSAN_OPTIONS}")
 message("LOG_FILE=[${LOG_FILE}]")
 
 set(error_types

+ 3 - 3
Tests/RunCMake/ctest_memcheck/testUndefinedBehaviorSanitizer.cmake

@@ -1,8 +1,8 @@
-# this file simulates a program that has been built with undefined behavior
-# sanitizer options
+# this file simulates a program that has been built with
+# UndefinedBehaviorSanitizer options
 
 message("UBSAN_OPTIONS = [$ENV{UBSAN_OPTIONS}]")
-string(REGEX REPLACE ".*log_path=\"([^\"]*)\".*" "\\1" LOG_FILE "$ENV{UBSAN_OPTIONS}")
+string(REGEX REPLACE ".*log_path=\'([^\']*)\'.*" "\\1" LOG_FILE "$ENV{UBSAN_OPTIONS}")
 message("LOG_FILE=[${LOG_FILE}]")
 
 # if we are not asked to simulate address sanitizer don't do it