Skip to content

Commit b7bdc55

Browse files
committed
Python: Show import resolution is a bit generous with exported value
1 parent 96c0d95 commit b7bdc55

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-0
lines changed

python/ql/test/experimental/import-resolution/ModuleExport.expected

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,20 @@
4747
| foo | exit | foo.py:14:1:14:4 | ControlFlowNode for exit |
4848
| foo | foo_attr | foo.py:5:1:5:8 | GSSA Variable foo_attr |
4949
| foo | globals | foo.py:12:71:12:77 | ControlFlowNode for globals |
50+
| generous_export | Exception | generous_export.py:16:11:16:19 | ControlFlowNode for Exception |
51+
| generous_export | SOURCE | generous_export.py:15:11:15:16 | ControlFlowNode for SOURCE |
52+
| generous_export | SOURCE | generous_export.py:20:25:20:30 | ControlFlowNode for SOURCE |
53+
| generous_export | __file__ | generous_export.py:22:6:22:13 | ControlFlowNode for __file__ |
54+
| generous_export | __name__ | generous_export.py:0:0:0:0 | GSSA Variable __name__ |
55+
| generous_export | __package__ | generous_export.py:0:0:0:0 | GSSA Variable __package__ |
56+
| generous_export | check | generous_export.py:20:1:20:5 | ControlFlowNode for check |
57+
| generous_export | enter | generous_export.py:2:1:2:5 | ControlFlowNode for enter |
58+
| generous_export | eval | generous_export.py:10:4:10:7 | ControlFlowNode for eval |
59+
| generous_export | exit | generous_export.py:22:1:22:4 | ControlFlowNode for exit |
60+
| generous_export | globals | generous_export.py:20:33:20:39 | ControlFlowNode for globals |
61+
| generous_export | object | generous_export.py:4:14:4:19 | ControlFlowNode for object |
62+
| generous_export | print | generous_export.py:15:5:15:9 | ControlFlowNode for print |
63+
| generous_export | staticmethod | generous_export.py:0:0:0:0 | GSSA Variable staticmethod |
5064
| has_defined_all | __all__ | has_defined_all.py:7:1:7:7 | GSSA Variable __all__ |
5165
| has_defined_all | __file__ | has_defined_all.py:9:6:9:13 | ControlFlowNode for __file__ |
5266
| has_defined_all | __name__ | has_defined_all.py:0:0:0:0 | GSSA Variable __name__ |
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from trace import *
2+
enter(__file__)
3+
4+
class SOURCE(object):
5+
@staticmethod
6+
def block_flow(): pass
7+
8+
check("SOURCE", SOURCE, SOURCE, globals()) #$ prints=SOURCE
9+
10+
if eval("False"):
11+
# With our current import resolution, this value for SOURCE will be considered to be
12+
# a valid value at the end of this module, because it's the end of a use-use flow.
13+
# This is clearly wrong, so our import resolution is a bit too generous on what is
14+
# exported
15+
print(SOURCE)
16+
raise Exception()
17+
18+
SOURCE.block_flow()
19+
20+
check("SOURCE", SOURCE, SOURCE, globals())
21+
22+
exit(__file__)

python/ql/test/experimental/import-resolution/main.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,10 @@ def local_import():
154154
import block_flow_check #$ imports=block_flow_check as=block_flow_check
155155
check("block_flow_check.SOURCE", block_flow_check.SOURCE, block_flow_check.SOURCE, globals())
156156

157+
# show that import resolution is a bit too generous with definitions
158+
import generous_export #$ imports=generous_export as=generous_export
159+
check("generous_export.SOURCE", generous_export.SOURCE, generous_export.SOURCE, globals()) #$ SPURIOUS: prints=SOURCE
160+
157161
exit(__file__)
158162

159163
print()

0 commit comments

Comments
 (0)