From 92e0e195a4d1e009e2902ea34386b45f1e848d34 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Sat, 27 Mar 2021 18:08:20 +0100 Subject: [PATCH] Revert "Merge pull request #5506 from tausbn/python-allow-absolute-imports-from-source-directory" This reverts commit 8d15680af4a6d1361d19b8c328c389263c06c902, reversing changes made to 63831cc62b65559f7028d1a35559a796e97efb62. This PR caused performance problems, so reverting now to clear up immediate problems. --- python/ql/src/semmle/python/Files.qll | 30 ------------------- python/ql/src/semmle/python/Module.qll | 7 +---- .../modules/entry_point/hash_bang/main.py | 7 ----- .../modules/entry_point/hash_bang/module.py | 2 -- .../namespace_package_main.py | 2 -- .../namespace_package_module.py | 1 - .../entry_point/hash_bang/package/__init__.py | 2 -- .../hash_bang/package/package_main.py | 2 -- .../hash_bang/package/package_module.py | 1 - .../modules/entry_point/modules.expected | 16 ---------- .../modules/entry_point/modules.ql | 4 --- .../modules/entry_point/name_main/main.py | 8 ----- .../modules/entry_point/name_main/module.py | 2 -- .../namespace_package_main.py | 2 -- .../namespace_package_module.py | 1 - .../entry_point/name_main/package/__init__.py | 2 -- .../name_main/package/package_main.py | 2 -- .../name_main/package/package_module.py | 1 - .../entry_point/no_py_extension/main.secretpy | 6 ---- .../entry_point/no_py_extension/module.py | 2 -- .../namespace_package_main.py | 2 -- .../namespace_package_module.py | 1 - .../no_py_extension/package/__init__.py | 2 -- .../no_py_extension/package/package_main.py | 2 -- .../no_py_extension/package/package_module.py | 1 - .../library-tests/modules/entry_point/options | 1 - 26 files changed, 1 insertion(+), 108 deletions(-) delete mode 100755 python/ql/test/3/library-tests/modules/entry_point/hash_bang/main.py delete mode 100644 python/ql/test/3/library-tests/modules/entry_point/hash_bang/module.py delete mode 100644 python/ql/test/3/library-tests/modules/entry_point/hash_bang/namespace_package/namespace_package_main.py delete mode 100644 python/ql/test/3/library-tests/modules/entry_point/hash_bang/namespace_package/namespace_package_module.py delete mode 100644 python/ql/test/3/library-tests/modules/entry_point/hash_bang/package/__init__.py delete mode 100644 python/ql/test/3/library-tests/modules/entry_point/hash_bang/package/package_main.py delete mode 100644 python/ql/test/3/library-tests/modules/entry_point/hash_bang/package/package_module.py delete mode 100644 python/ql/test/3/library-tests/modules/entry_point/modules.expected delete mode 100644 python/ql/test/3/library-tests/modules/entry_point/modules.ql delete mode 100755 python/ql/test/3/library-tests/modules/entry_point/name_main/main.py delete mode 100644 python/ql/test/3/library-tests/modules/entry_point/name_main/module.py delete mode 100644 python/ql/test/3/library-tests/modules/entry_point/name_main/namespace_package/namespace_package_main.py delete mode 100644 python/ql/test/3/library-tests/modules/entry_point/name_main/namespace_package/namespace_package_module.py delete mode 100644 python/ql/test/3/library-tests/modules/entry_point/name_main/package/__init__.py delete mode 100644 python/ql/test/3/library-tests/modules/entry_point/name_main/package/package_main.py delete mode 100644 python/ql/test/3/library-tests/modules/entry_point/name_main/package/package_module.py delete mode 100755 python/ql/test/3/library-tests/modules/entry_point/no_py_extension/main.secretpy delete mode 100644 python/ql/test/3/library-tests/modules/entry_point/no_py_extension/module.py delete mode 100644 python/ql/test/3/library-tests/modules/entry_point/no_py_extension/namespace_package/namespace_package_main.py delete mode 100644 python/ql/test/3/library-tests/modules/entry_point/no_py_extension/namespace_package/namespace_package_module.py delete mode 100644 python/ql/test/3/library-tests/modules/entry_point/no_py_extension/package/__init__.py delete mode 100644 python/ql/test/3/library-tests/modules/entry_point/no_py_extension/package/package_main.py delete mode 100644 python/ql/test/3/library-tests/modules/entry_point/no_py_extension/package/package_module.py delete mode 100644 python/ql/test/3/library-tests/modules/entry_point/options diff --git a/python/ql/src/semmle/python/Files.qll b/python/ql/src/semmle/python/Files.qll index 83ba92f0abcc..ef6484fbdc6e 100644 --- a/python/ql/src/semmle/python/Files.qll +++ b/python/ql/src/semmle/python/Files.qll @@ -72,33 +72,6 @@ class File extends Container { * are specified to be extracted. */ string getContents() { file_contents(this, result) } - - /** Holds if this file is likely to get executed directly, and thus act as an entry point for execution. */ - predicate maybeExecutedDirectly() { - // Only consider files in the source code, and not things like the standard library - exists(this.getRelativePath()) and - ( - // The file doesn't have the extension `.py` but still contains Python statements - not this.getExtension().matches("py%") and - exists(Stmt s | s.getLocation().getFile() = this) - or - // The file contains the usual `if __name__ == '__main__':` construction - exists(If i, Name name, StrConst main, Cmpop op | - i.getScope().(Module).getFile() = this and - op instanceof Eq and - i.getTest().(Compare).compares(name, op, main) and - name.getId() = "__name__" and - main.getText() = "__main__" - ) - or - // The file contains a `#!` line referencing the python interpreter - exists(Comment c | - c.getLocation().getFile() = this and - c.getLocation().getStartLine() = 1 and - c.getText().regexpMatch("^#! */.*python(2|3)?[ \\\\t]*$") - ) - ) - } } private predicate occupied_line(File f, int n) { @@ -148,9 +121,6 @@ class Folder extends Container { this.getBaseName().regexpMatch("[^\\d\\W]\\w*") and result = this.getParent().getImportRoot(n) } - - /** Holds if execution may start in a file in this directory. */ - predicate mayContainEntryPoint() { any(File f | f.getParent() = this).maybeExecutedDirectly() } } /** diff --git a/python/ql/src/semmle/python/Module.qll b/python/ql/src/semmle/python/Module.qll index 8a420a800ea6..fcf1c0b29252 100644 --- a/python/ql/src/semmle/python/Module.qll +++ b/python/ql/src/semmle/python/Module.qll @@ -204,13 +204,8 @@ private string moduleNameFromBase(Container file) { string moduleNameFromFile(Container file) { exists(string basename | basename = moduleNameFromBase(file) and - legalShortName(basename) - | + legalShortName(basename) and result = moduleNameFromFile(file.getParent()) + "." + basename - or - // If execution can start in the folder containing this module, then we will assume `file` can - // be imported as an absolute import, and hence return `basename` as a possible name. - file.getParent().(Folder).mayContainEntryPoint() and result = basename ) or isPotentialSourcePackage(file) and diff --git a/python/ql/test/3/library-tests/modules/entry_point/hash_bang/main.py b/python/ql/test/3/library-tests/modules/entry_point/hash_bang/main.py deleted file mode 100755 index ad619e5cbd83..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/hash_bang/main.py +++ /dev/null @@ -1,7 +0,0 @@ -#! /usr/bin/python3 -print(__file__) -import module -import package -import namespace_package -import namespace_package.namespace_package_main -print(module.message) diff --git a/python/ql/test/3/library-tests/modules/entry_point/hash_bang/module.py b/python/ql/test/3/library-tests/modules/entry_point/hash_bang/module.py deleted file mode 100644 index 36206ca60b75..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/hash_bang/module.py +++ /dev/null @@ -1,2 +0,0 @@ -print(__file__.split("entry_point")[1]) -message = "Hello world!" diff --git a/python/ql/test/3/library-tests/modules/entry_point/hash_bang/namespace_package/namespace_package_main.py b/python/ql/test/3/library-tests/modules/entry_point/hash_bang/namespace_package/namespace_package_main.py deleted file mode 100644 index 5db80f18a278..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/hash_bang/namespace_package/namespace_package_main.py +++ /dev/null @@ -1,2 +0,0 @@ -print(__file__.split("entry_point")[1]) -import namespace_package.namespace_package_module diff --git a/python/ql/test/3/library-tests/modules/entry_point/hash_bang/namespace_package/namespace_package_module.py b/python/ql/test/3/library-tests/modules/entry_point/hash_bang/namespace_package/namespace_package_module.py deleted file mode 100644 index 567a23d59ce3..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/hash_bang/namespace_package/namespace_package_module.py +++ /dev/null @@ -1 +0,0 @@ -print(__file__.split("entry_point")[1]) diff --git a/python/ql/test/3/library-tests/modules/entry_point/hash_bang/package/__init__.py b/python/ql/test/3/library-tests/modules/entry_point/hash_bang/package/__init__.py deleted file mode 100644 index ca14a9f5804e..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/hash_bang/package/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -print(__file__.split("entry_point")[1]) -from . import package_main diff --git a/python/ql/test/3/library-tests/modules/entry_point/hash_bang/package/package_main.py b/python/ql/test/3/library-tests/modules/entry_point/hash_bang/package/package_main.py deleted file mode 100644 index 158b12678e3b..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/hash_bang/package/package_main.py +++ /dev/null @@ -1,2 +0,0 @@ -print(__file__.split("entry_point")[1]) -from . import package_module diff --git a/python/ql/test/3/library-tests/modules/entry_point/hash_bang/package/package_module.py b/python/ql/test/3/library-tests/modules/entry_point/hash_bang/package/package_module.py deleted file mode 100644 index 567a23d59ce3..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/hash_bang/package/package_module.py +++ /dev/null @@ -1 +0,0 @@ -print(__file__.split("entry_point")[1]) diff --git a/python/ql/test/3/library-tests/modules/entry_point/modules.expected b/python/ql/test/3/library-tests/modules/entry_point/modules.expected deleted file mode 100644 index e5f6b300074c..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/modules.expected +++ /dev/null @@ -1,16 +0,0 @@ -| main | hash_bang/main.py:0:0:0:0 | Script main | -| main | name_main/main.py:0:0:0:0 | Module main | -| module | hash_bang/module.py:0:0:0:0 | Module module | -| module | name_main/module.py:0:0:0:0 | Module module | -| package | hash_bang/package:0:0:0:0 | Package package | -| package | name_main/package:0:0:0:0 | Package package | -| package | no_py_extension/package:0:0:0:0 | Package package | -| package.__init__ | hash_bang/package/__init__.py:0:0:0:0 | Module package.__init__ | -| package.__init__ | name_main/package/__init__.py:0:0:0:0 | Module package.__init__ | -| package.__init__ | no_py_extension/package/__init__.py:0:0:0:0 | Module package.__init__ | -| package.package_main | hash_bang/package/package_main.py:0:0:0:0 | Module package.package_main | -| package.package_main | name_main/package/package_main.py:0:0:0:0 | Module package.package_main | -| package.package_main | no_py_extension/package/package_main.py:0:0:0:0 | Module package.package_main | -| package.package_module | hash_bang/package/package_module.py:0:0:0:0 | Module package.package_module | -| package.package_module | name_main/package/package_module.py:0:0:0:0 | Module package.package_module | -| package.package_module | no_py_extension/package/package_module.py:0:0:0:0 | Module package.package_module | diff --git a/python/ql/test/3/library-tests/modules/entry_point/modules.ql b/python/ql/test/3/library-tests/modules/entry_point/modules.ql deleted file mode 100644 index 10c390e8616c..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/modules.ql +++ /dev/null @@ -1,4 +0,0 @@ -import python - -from Module m -select m.getName(), m diff --git a/python/ql/test/3/library-tests/modules/entry_point/name_main/main.py b/python/ql/test/3/library-tests/modules/entry_point/name_main/main.py deleted file mode 100755 index 08ec212383bb..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/name_main/main.py +++ /dev/null @@ -1,8 +0,0 @@ -print(__file__) -import module -import package -import namespace_package -import namespace_package.namespace_package_main - -if __name__ == '__main__': - print(module.message) diff --git a/python/ql/test/3/library-tests/modules/entry_point/name_main/module.py b/python/ql/test/3/library-tests/modules/entry_point/name_main/module.py deleted file mode 100644 index 36206ca60b75..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/name_main/module.py +++ /dev/null @@ -1,2 +0,0 @@ -print(__file__.split("entry_point")[1]) -message = "Hello world!" diff --git a/python/ql/test/3/library-tests/modules/entry_point/name_main/namespace_package/namespace_package_main.py b/python/ql/test/3/library-tests/modules/entry_point/name_main/namespace_package/namespace_package_main.py deleted file mode 100644 index 5db80f18a278..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/name_main/namespace_package/namespace_package_main.py +++ /dev/null @@ -1,2 +0,0 @@ -print(__file__.split("entry_point")[1]) -import namespace_package.namespace_package_module diff --git a/python/ql/test/3/library-tests/modules/entry_point/name_main/namespace_package/namespace_package_module.py b/python/ql/test/3/library-tests/modules/entry_point/name_main/namespace_package/namespace_package_module.py deleted file mode 100644 index 567a23d59ce3..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/name_main/namespace_package/namespace_package_module.py +++ /dev/null @@ -1 +0,0 @@ -print(__file__.split("entry_point")[1]) diff --git a/python/ql/test/3/library-tests/modules/entry_point/name_main/package/__init__.py b/python/ql/test/3/library-tests/modules/entry_point/name_main/package/__init__.py deleted file mode 100644 index ca14a9f5804e..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/name_main/package/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -print(__file__.split("entry_point")[1]) -from . import package_main diff --git a/python/ql/test/3/library-tests/modules/entry_point/name_main/package/package_main.py b/python/ql/test/3/library-tests/modules/entry_point/name_main/package/package_main.py deleted file mode 100644 index 158b12678e3b..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/name_main/package/package_main.py +++ /dev/null @@ -1,2 +0,0 @@ -print(__file__.split("entry_point")[1]) -from . import package_module diff --git a/python/ql/test/3/library-tests/modules/entry_point/name_main/package/package_module.py b/python/ql/test/3/library-tests/modules/entry_point/name_main/package/package_module.py deleted file mode 100644 index 567a23d59ce3..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/name_main/package/package_module.py +++ /dev/null @@ -1 +0,0 @@ -print(__file__.split("entry_point")[1]) diff --git a/python/ql/test/3/library-tests/modules/entry_point/no_py_extension/main.secretpy b/python/ql/test/3/library-tests/modules/entry_point/no_py_extension/main.secretpy deleted file mode 100755 index e2673d4da786..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/no_py_extension/main.secretpy +++ /dev/null @@ -1,6 +0,0 @@ -print(__file__) -import module -import package -import namespace_package -import namespace_package.namespace_package_main -print(module.message) diff --git a/python/ql/test/3/library-tests/modules/entry_point/no_py_extension/module.py b/python/ql/test/3/library-tests/modules/entry_point/no_py_extension/module.py deleted file mode 100644 index 36206ca60b75..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/no_py_extension/module.py +++ /dev/null @@ -1,2 +0,0 @@ -print(__file__.split("entry_point")[1]) -message = "Hello world!" diff --git a/python/ql/test/3/library-tests/modules/entry_point/no_py_extension/namespace_package/namespace_package_main.py b/python/ql/test/3/library-tests/modules/entry_point/no_py_extension/namespace_package/namespace_package_main.py deleted file mode 100644 index 5db80f18a278..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/no_py_extension/namespace_package/namespace_package_main.py +++ /dev/null @@ -1,2 +0,0 @@ -print(__file__.split("entry_point")[1]) -import namespace_package.namespace_package_module diff --git a/python/ql/test/3/library-tests/modules/entry_point/no_py_extension/namespace_package/namespace_package_module.py b/python/ql/test/3/library-tests/modules/entry_point/no_py_extension/namespace_package/namespace_package_module.py deleted file mode 100644 index 567a23d59ce3..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/no_py_extension/namespace_package/namespace_package_module.py +++ /dev/null @@ -1 +0,0 @@ -print(__file__.split("entry_point")[1]) diff --git a/python/ql/test/3/library-tests/modules/entry_point/no_py_extension/package/__init__.py b/python/ql/test/3/library-tests/modules/entry_point/no_py_extension/package/__init__.py deleted file mode 100644 index ca14a9f5804e..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/no_py_extension/package/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -print(__file__.split("entry_point")[1]) -from . import package_main diff --git a/python/ql/test/3/library-tests/modules/entry_point/no_py_extension/package/package_main.py b/python/ql/test/3/library-tests/modules/entry_point/no_py_extension/package/package_main.py deleted file mode 100644 index 158b12678e3b..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/no_py_extension/package/package_main.py +++ /dev/null @@ -1,2 +0,0 @@ -print(__file__.split("entry_point")[1]) -from . import package_module diff --git a/python/ql/test/3/library-tests/modules/entry_point/no_py_extension/package/package_module.py b/python/ql/test/3/library-tests/modules/entry_point/no_py_extension/package/package_module.py deleted file mode 100644 index 567a23d59ce3..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/no_py_extension/package/package_module.py +++ /dev/null @@ -1 +0,0 @@ -print(__file__.split("entry_point")[1]) diff --git a/python/ql/test/3/library-tests/modules/entry_point/options b/python/ql/test/3/library-tests/modules/entry_point/options deleted file mode 100644 index 6beceeb08ed0..000000000000 --- a/python/ql/test/3/library-tests/modules/entry_point/options +++ /dev/null @@ -1 +0,0 @@ -semmle-extractor-options: --lang=3 --path bogus -R . --filter=include:**/*.secretpy