-
Notifications
You must be signed in to change notification settings - Fork 2k
Expand file tree
/
Copy pathImpliesDataflow.ql
More file actions
28 lines (22 loc) · 933 Bytes
/
Copy pathImpliesDataflow.ql
File metadata and controls
28 lines (22 loc) · 933 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
* Test that the new data-flow analysis can connect any two
* data-flow nodes that the points-to analysis can.
*/
private import python
private import LegacyPointsTo
import semmle.python.dataflow.new.DataFlow
predicate pointsToOrigin(DataFlow::CfgNode pointer, DataFlow::CfgNode origin) {
origin.getNode() = pointer.getNode().(ControlFlowNodeWithPointsTo).pointsTo().getOrigin()
}
module PointsToConfig implements DataFlow::ConfigSig {
predicate isSource(DataFlow::Node node) { pointsToOrigin(_, node) }
predicate isSink(DataFlow::Node node) { pointsToOrigin(node, _) }
}
module PointsToFlow = DataFlow::Global<PointsToConfig>;
from DataFlow::Node pointer, DataFlow::Node origin
where
exists(pointer.getLocation().getFile().getRelativePath()) and
exists(origin.getLocation().getFile().getRelativePath()) and
pointsToOrigin(pointer, origin) and
not PointsToFlow::flow(origin, pointer)
select origin, pointer