Browse Source

Merge topic 'disallow-funny-path-names'

8704525 Reject directory names containing '=' (#11689)
Brad King 14 years ago
parent
commit
45efcc8fa6
2 changed files with 26 additions and 0 deletions
  1. 24 0
      Source/cmake.cxx
  2. 2 0
      Source/cmake.h

+ 24 - 0
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();

+ 2 - 0
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.