mirror of
https://github.com/github/codeql.git
synced 2026-02-15 06:23:42 +01:00
Moves the existing points-to predicates to the newly added class `ControlFlowNodeWithPointsTo` which resides in the `LegacyPointsTo` module. (Existing code that uses these predicates should import this module, and references to `ControlFlowNode` should be changed to `ControlFlowNodeWithPointsTo`.) Also updates all existing points-to based code to do just this.
29 lines
933 B
Plaintext
29 lines
933 B
Plaintext
/**
|
|
* 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
|