diff options
author | David Cole <david.cole@kitware.com> | 2011-11-18 22:13:07 (GMT) |
---|---|---|
committer | David Cole <david.cole@kitware.com> | 2011-11-18 22:13:07 (GMT) |
commit | 92af1dad0652951e8f7adc1a4a59527bd98435fa (patch) | |
tree | 60cb795c73406db2bd85086ab41a6ebc014a74fb /Source/cmCTest.cxx | |
parent | 8e1bbee4d948025dfb1888e0a8b0365d7bd360c8 (diff) | |
download | CMake-92af1dad0652951e8f7adc1a4a59527bd98435fa.zip CMake-92af1dad0652951e8f7adc1a4a59527bd98435fa.tar.gz CMake-92af1dad0652951e8f7adc1a4a59527bd98435fa.tar.bz2 |
CTest: Disallow problem chars in build and site names (#11792)
Also, use "(empty)" rather than actually sending an empty string
if build or site name is not set properly.
Diffstat (limited to 'Source/cmCTest.cxx')
-rw-r--r-- | Source/cmCTest.cxx | 57 |
1 files changed, 51 insertions, 6 deletions
diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx index 7bb8b27..14055a4 100644 --- a/Source/cmCTest.cxx +++ b/Source/cmCTest.cxx @@ -1441,6 +1441,43 @@ int cmCTest::RunTest(std::vector<const char*> argv, } //---------------------------------------------------------------------- +std::string cmCTest::SafeBuildIdField(const std::string& value) +{ + std::string safevalue(value); + + if (safevalue != "") + { + // Disallow non-filename and non-space whitespace characters. + // If they occur, replace them with "" + // + const char *disallowed = "\\/:*?\"<>|\n\r\t\f\v"; + + if (safevalue.find_first_of(disallowed) != value.npos) + { + std::string::size_type i = 0; + std::string::size_type n = strlen(disallowed); + char replace[2]; + replace[1] = 0; + + for (i= 0; i<n; ++i) + { + replace[0] = disallowed[i]; + cmSystemTools::ReplaceString(safevalue, replace, ""); + } + } + + safevalue = cmXMLSafe(safevalue).str(); + } + + if (safevalue == "") + { + safevalue = "(empty)"; + } + + return safevalue; +} + +//---------------------------------------------------------------------- void cmCTest::StartXML(std::ostream& ostr, bool append) { if(this->CurrentTag.empty()) @@ -1450,19 +1487,27 @@ void cmCTest::StartXML(std::ostream& ostr, bool append) " NightlStartTime was not set correctly." << std::endl); cmSystemTools::SetFatalErrorOccured(); } + // find out about the system cmsys::SystemInformation info; info.RunCPUCheck(); info.RunOSCheck(); info.RunMemoryCheck(); + + std::string buildname = cmCTest::SafeBuildIdField( + this->GetCTestConfiguration("BuildName")); + std::string stamp = cmCTest::SafeBuildIdField( + this->CurrentTag + "-" + this->GetTestModelString()); + std::string site = cmCTest::SafeBuildIdField( + this->GetCTestConfiguration("Site")); + ostr << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" - << "<Site BuildName=\"" << this->GetCTestConfiguration("BuildName") - << "\"\n\tBuildStamp=\"" << this->CurrentTag << "-" - << this->GetTestModelString() << "\"\n\tName=\"" - << this->GetCTestConfiguration("Site") << "\"\n\tGenerator=\"ctest-" - << cmVersion::GetCMakeVersion() << "\"\n" + << "<Site BuildName=\"" << buildname << "\"\n" + << "\tBuildStamp=\"" << stamp << "\"\n" + << "\tName=\"" << site << "\"\n" + << "\tGenerator=\"ctest-" << cmVersion::GetCMakeVersion() << "\"\n" << (append? "\tAppend=\"true\"\n":"") - << "\tCompilerName=\"" << this->GetCTestConfiguration("Compiler") + << "\tCompilerName=\"" << this->GetCTestConfiguration("Compiler") << "\"\n" #ifdef _COMPILER_VERSION << "\tCompilerVersion=\"_COMPILER_VERSION\"\n" |