sgraenitz created this revision.
sgraenitz added a reviewer: jingham.

As seen in a crash report, the C-string returned for the directory component of 
`target_file` can null. It should not be assigned to `std::string` directly as 
this is undefined behavior.


https://reviews.llvm.org/D57964

Files:
  source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp


Index: source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
===================================================================
--- source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
+++ source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
@@ -2780,7 +2780,13 @@
       basename = pathname; // not a filename, probably a package of some sort,
                            // let it go through
     } else if (is_directory(st) || is_regular_file(st)) {
-      std::string directory = target_file.GetDirectory().GetCString();
+      const char *dir_cstr = target_file.GetDirectory().GetCString();
+      if (!dir_cstr) {
+        error.SetErrorString("invalid directory name");
+        return false;
+      }
+
+      std::string directory(dir_cstr);
       replace_all(directory, "\\", "\\\\");
       replace_all(directory, "'", "\\'");
 
@@ -2843,6 +2849,7 @@
     }
 
     // now actually do the import
+
     command_stream.Clear();
 
     if (was_imported) {


Index: source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
===================================================================
--- source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
+++ source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
@@ -2780,7 +2780,13 @@
       basename = pathname; // not a filename, probably a package of some sort,
                            // let it go through
     } else if (is_directory(st) || is_regular_file(st)) {
-      std::string directory = target_file.GetDirectory().GetCString();
+      const char *dir_cstr = target_file.GetDirectory().GetCString();
+      if (!dir_cstr) {
+        error.SetErrorString("invalid directory name");
+        return false;
+      }
+
+      std::string directory(dir_cstr);
       replace_all(directory, "\\", "\\\\");
       replace_all(directory, "'", "\\'");
 
@@ -2843,6 +2849,7 @@
     }
 
     // now actually do the import
+
     command_stream.Clear();
 
     if (was_imported) {
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to