diff options
author | Brad King <brad.king@kitware.com> | 2011-02-22 19:31:07 (GMT) |
---|---|---|
committer | CMake Topic Stage <kwrobot@kitware.com> | 2011-02-22 19:31:07 (GMT) |
commit | 45efcc8fa6eff6447402c9314953404d85d2a2c8 (patch) | |
tree | d65e38128ae38dc32780935f4ab0b1d94be61c16 | |
parent | 64d997a78c1f2a24a8fd1978856a2b5f4a97a0f9 (diff) | |
parent | 8704525f201452929a2bec96fb04387c97ad8a79 (diff) | |
download | CMake-45efcc8fa6eff6447402c9314953404d85d2a2c8.zip CMake-45efcc8fa6eff6447402c9314953404d85d2a2c8.tar.gz CMake-45efcc8fa6eff6447402c9314953404d85d2a2c8.tar.bz2 |
Merge topic 'disallow-funny-path-names'
8704525 Reject directory names containing '=' (#11689)
-rw-r--r-- | Source/cmake.cxx | 24 | ||||
-rw-r--r-- | Source/cmake.h | 2 |
2 files changed, 26 insertions, 0 deletions
diff --git a/Source/cmake.cxx b/Source/cmake.cxx index a1a3a68..0c03b65 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -1986,8 +1986,32 @@ int cmake::Configure() } +bool cmake::RejectUnsupportedPaths(const char* desc, std::string const& path) +{ + // Some characters are not well-supported by native build systems. + std::string::size_type pos = path.find_first_of("="); + if(pos == std::string::npos) + { + return false; + } + cmOStringStream e; + e << "The path to the " << desc << " directory:\n" + << " " << path << "\n" + << "contains unsupported character '" << path[pos] << "'.\n" + << "Please use a different " << desc << " directory name."; + cmListFileBacktrace bt; + this->IssueMessage(cmake::FATAL_ERROR, e.str(), bt); + return true; +} + int cmake::ActualConfigure() { + if(this->RejectUnsupportedPaths("source", this->cmHomeDirectory) || + this->RejectUnsupportedPaths("binary", this->HomeOutputDirectory)) + { + return 1; + } + // Construct right now our path conversion table before it's too late: this->UpdateConversionPathTable(); this->CleanupCommandsAndMacros(); diff --git a/Source/cmake.h b/Source/cmake.h index 1bb42d3..70fcaa8 100644 --- a/Source/cmake.h +++ b/Source/cmake.h @@ -451,6 +451,8 @@ protected: ///! Find the full path to one of the cmake programs like ctest, cpack, etc. std::string FindCMakeProgram(const char* name) const; + + bool RejectUnsupportedPaths(const char* desc, std::string const& path); private: cmake(const cmake&); // Not implemented. void operator=(const cmake&); // Not implemented. |