Skip to content

Commit 61ecec7

Browse files
authored
Merge pull request github#4467 from tausbn/python-fix-import-type-tracking
Python: Fix unwanted module type tracking
2 parents 27f474f + f3c07e3 commit 61ecec7

File tree

3 files changed

+10
-7
lines changed

3 files changed

+10
-7
lines changed

python/ql/src/experimental/dataflow/internal/DataFlowUtil.qll

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,5 +68,5 @@ Node importNode(string name) {
6868
// Because named imports are modelled as `AttrRead`s, the statement `from foo import bar as baz`
6969
// is interpreted as if it was an assignment `baz = foo.bar`, which means `baz` gets tracked as a
7070
// reference to `foo.bar`, as desired.
71-
result.asCfgNode().getNode() = any(ImportExpr i | i.getAnImportedModuleName() = name)
71+
result.asCfgNode().getNode() = any(ImportExpr i | i.getName() = name)
7272
}

python/ql/test/experimental/dataflow/import-helper/ImportHelper.expected

-6
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,11 @@
44
| test2.py:1:6:1:10 | ControlFlowNode for ImportExpr | mypkg |
55
| test2.py:1:19:1:21 | GSSA Variable foo | mypkg.foo |
66
| test2.py:1:24:1:26 | GSSA Variable bar | mypkg.bar |
7-
| test3.py:1:8:1:16 | ControlFlowNode for ImportExpr | mypkg |
87
| test3.py:1:8:1:16 | ControlFlowNode for ImportExpr | mypkg.foo |
9-
| test3.py:2:8:2:16 | ControlFlowNode for ImportExpr | mypkg |
108
| test3.py:2:8:2:16 | ControlFlowNode for ImportExpr | mypkg.bar |
119
| test3.py:2:8:2:16 | GSSA Variable mypkg | mypkg |
12-
| test4.py:1:8:1:16 | ControlFlowNode for ImportExpr | mypkg |
1310
| test4.py:1:8:1:16 | ControlFlowNode for ImportExpr | mypkg.foo |
1411
| test4.py:1:21:1:24 | GSSA Variable _foo | mypkg.foo |
15-
| test4.py:2:8:2:16 | ControlFlowNode for ImportExpr | mypkg |
1612
| test4.py:2:8:2:16 | ControlFlowNode for ImportExpr | mypkg.bar |
1713
| test4.py:2:21:2:24 | GSSA Variable _bar | mypkg.bar |
1814
| test5.py:1:8:1:12 | ControlFlowNode for ImportExpr | mypkg |
@@ -21,12 +17,10 @@
2117
| test5.py:9:26:9:29 | GSSA Variable _bar | mypkg.bar |
2218
| test6.py:1:8:1:12 | ControlFlowNode for ImportExpr | mypkg |
2319
| test6.py:1:8:1:12 | GSSA Variable mypkg | mypkg |
24-
| test6.py:5:8:5:16 | ControlFlowNode for ImportExpr | mypkg |
2520
| test6.py:5:8:5:16 | ControlFlowNode for ImportExpr | mypkg.foo |
2621
| test6.py:5:8:5:16 | GSSA Variable mypkg | mypkg |
2722
| test7.py:1:6:1:10 | ControlFlowNode for ImportExpr | mypkg |
2823
| test7.py:1:19:1:21 | GSSA Variable foo | mypkg.foo |
29-
| test7.py:5:8:5:16 | ControlFlowNode for ImportExpr | mypkg |
3024
| test7.py:5:8:5:16 | ControlFlowNode for ImportExpr | mypkg.foo |
3125
| test7.py:5:8:5:16 | GSSA Variable mypkg | mypkg |
3226
| test7.py:9:6:9:10 | ControlFlowNode for ImportExpr | mypkg |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import module.attr as attr_ref
2+
3+
x = attr_ref
4+
5+
def fun():
6+
y = attr_ref
7+
8+
# The following should _not_ be a reference to the above module, since we don't actually import it.
9+
z = module

0 commit comments

Comments
 (0)