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