diff --git a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp --- a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp +++ b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp @@ -2781,6 +2781,7 @@ }; std::string module_name(pathname); + bool possible_package = false; if (extra_search_dir) { if (llvm::Error e = ExtendSysPath(extra_search_dir.GetPath())) { @@ -2805,6 +2806,7 @@ return false; } // Not a filename, probably a package of some sort, let it go through. + possible_package = true; } else if (is_directory(st) || is_regular_file(st)) { if (module_file.GetDirectory().IsEmpty()) { error.SetErrorString("invalid directory name"); @@ -2831,6 +2833,18 @@ module_name.resize(module_name.length() - 4); } + if (!possible_package && module_name.find('.') != llvm::StringRef::npos) { + error.SetErrorStringWithFormat( + "Python does not allow dots in module names: %s", module_name.c_str()); + return false; + } + + if (module_name.find('-') != llvm::StringRef::npos) { + error.SetErrorStringWithFormat( + "Python discourages dashes in module names: %s", module_name.c_str()); + return false; + } + // check if the module is already import-ed StreamString command_stream; command_stream.Clear(); diff --git a/lldb/test/Shell/ScriptInterpreter/Python/command_import.test b/lldb/test/Shell/ScriptInterpreter/Python/command_import.test new file mode 100644 --- /dev/null +++ b/lldb/test/Shell/ScriptInterpreter/Python/command_import.test @@ -0,0 +1,20 @@ +# REQUIRES: python + +# RUN: rm -rf %t && mkdir -p %t +# RUN: echo "print('Rene Magritte')" >> %t/foo.py +# RUN: echo "print('Jan van Eyck')" >> %t/foo-bar.py +# RUN: echo "print('Pieter Bruegel the Elder')" >> %t/foo.bar.py +# RUN: echo "print('Pieter Bruegel the Younger')" >> %t/foo.bar + +# RUN: %lldb --script-language python -o 'command script import %t/foo.py' 2>&1 | FileCheck %s --check-prefix MAGRITTE +# MAGRITTE: Rene Magritte + +# RUN: %lldb --script-language python -o 'command script import %t/foo-bar.py' 2>&1 | FileCheck %s --check-prefix VANEYCK +# VANEYCK-NOT: Jan van Eyck +# VANEYCK: module importing failed: Python discourages dashes in module names: foo-bar + +# RUN: %lldb --script-language python -o 'command script import %t/foo.bar.py' 2>&1 | FileCheck %s --check-prefix BRUEGEL +# RUN: %lldb --script-language python -o 'command script import %t/foo.bar' 2>&1 | FileCheck %s --check-prefix BRUEGEL +# BRUEGEL-NOT: Pieter Bruegel the Elder +# BRUEGEL-NOT: Pieter Bruegel the Younger +# BRUEGEL: module importing failed: Python does not allow dots in module names: foo.bar