Skip to content

Commit d28f9f4

Browse files
authored
Python: Fix bad join in import_star_read
Makes this ``` (21s) Tuple counts for DataFlowPublic::import_star_read#ff/2@fcd5e6nr after 8.5s: 9743 ~6% {3} r1 = SCAN num#DataFlowPublic::TModuleVariableNode#fff OUTPUT In.1, In.0, In.2 'result' 9743 ~1% {3} r2 = JOIN r1 WITH Variables::Variable::getId_dispred#ff ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2 'result' 390808917 ~3% {3} r3 = JOIN r2 WITH Flow::NameNode::getId_dispred#ff_10#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2 'result' 307 ~0% {2} r4 = JOIN r3 WITH ImportStar::ImportStar::importStarResolvesTo#ff ON FIRST 2 OUTPUT Lhs.0, Lhs.2 'result' 307 ~0% {2} r5 = JOIN r4 WITH num#DataFlowPublic::TCfgNode#ff ON FIRST 1 OUTPUT Rhs.1 'n', Lhs.1 'result' return r5 ``` become this ``` (17s) Tuple counts for DataFlowPublic::resolved_import_star_module#fff/3@f5e84aic after 0ms: 307 ~0% {3} r1 = JOIN ImportStar::ImportStar::importStarResolvesTo#ff WITH num#DataFlowPublic::TCfgNode#ff ON FIRST 1 OUTPUT Lhs.0, Lhs.1 'm', Rhs.1 'n' 307 ~0% {3} r2 = JOIN r1 WITH Flow::NameNode::getId_dispred#ff ON FIRST 1 OUTPUT Lhs.1 'm', Rhs.1 'name', Lhs.2 'n' return r2 (17s) Registering DataFlowPublic::resolved_import_star_module#fff/3@f5e84aic + with content f29281ig38r98icro4ege09mrva (17s) >>> Created relation DataFlowPublic::resolved_import_star_module#fff/3@f5e84aic with 307 rows. (17s) Starting to evaluate predicate DataFlowPublic::import_star_read#ff/2@57b0c06e (17s) Tuple counts for DataFlowPublic::import_star_read#ff/2@57b0c06e after 2ms: 9743 ~0% {3} r1 = SCAN num#DataFlowPublic::TModuleVariableNode#fff OUTPUT In.1, In.0, In.2 'result' 9743 ~0% {3} r2 = JOIN r1 WITH Variables::Variable::getId_dispred#ff ON FIRST 1 OUTPUT Lhs.1, Rhs.1, Lhs.2 'result' 307 ~0% {2} r3 = JOIN r2 WITH DataFlowPublic::resolved_import_star_module#fff ON FIRST 2 OUTPUT Rhs.2 'n', Lhs.2 'result' return r3 ```
1 parent 3c07ab5 commit d28f9f4

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -401,8 +401,15 @@ class ModuleVariableNode extends Node, TModuleVariableNode {
401401
private predicate isAccessedThroughImportStar(Module m) { m = ImportStar::getStarImported(_) }
402402

403403
private ModuleVariableNode import_star_read(Node n) {
404-
ImportStar::importStarResolvesTo(n.asCfgNode(), result.getModule()) and
405-
n.asCfgNode().(NameNode).getId() = result.getVariable().getId()
404+
resolved_import_star_module(result.getModule(), result.getVariable().getId(), n)
405+
}
406+
407+
pragma[nomagic]
408+
private predicate resolved_import_star_module(Module m, string name, Node n) {
409+
exists(NameNode nn | nn = n.asCfgNode() |
410+
ImportStar::importStarResolvesTo(pragma[only_bind_into](nn), m) and
411+
nn.getId() = name
412+
)
406413
}
407414

408415
/**

0 commit comments

Comments
 (0)