|
9 | 9 | // 3. if necessary, look at partial paths by (un)commenting appropriate lines |
10 | 10 | import python |
11 | 11 | import semmle.python.dataflow.new.DataFlow |
| 12 | +import semmle.python.dataflow.new.TaintTracking |
12 | 13 | import experimental.meta.InlineTaintTest::Conf |
13 | | -// import DataFlow::PartialPathGraph |
14 | | -import DataFlow::PathGraph |
15 | 14 |
|
16 | | -class Conf extends TestTaintTrackingConfiguration { |
17 | | - // override int explorationLimit() { result = 5 } |
| 15 | +module Config implements DataFlow::ConfigSig { |
| 16 | + predicate isSource(DataFlow::Node source) { |
| 17 | + any(TestTaintTrackingConfiguration c).isSource(source) |
| 18 | + } |
| 19 | + |
| 20 | + predicate isSink(DataFlow::Node source) { any(TestTaintTrackingConfiguration c).isSink(source) } |
18 | 21 | } |
19 | 22 |
|
20 | | -// from Conf config, DataFlow::PartialPathNode source, DataFlow::PartialPathNode sink |
21 | | -// where config.hasPartialFlow(source, sink, _) |
22 | | -from Conf config, DataFlow::PathNode source, DataFlow::PathNode sink |
23 | | -where config.hasFlowPath(source, sink) |
| 23 | +module Flows = TaintTracking::Global<Config>; |
| 24 | + |
| 25 | +import Flows::PathGraph |
| 26 | + |
| 27 | +// int explorationLimit() { result = 5 } |
| 28 | +// module FlowsPartial = Flows::FlowExploration<explorationLimit/0>; |
| 29 | +// import FlowsPartial::PartialPathGraph |
| 30 | +from Flows::PathNode source, Flows::PathNode sink |
| 31 | +where Flows::flowPath(source, sink) |
| 32 | +// from FlowsPartial::PartialPathNode source, FlowsPartial::PartialPathNode sink |
| 33 | +// where FlowsPartial::partialFlow(source, sink, _) |
24 | 34 | select sink.getNode(), source, sink, "This node receives taint from $@.", source.getNode(), |
25 | 35 | "this source" |
0 commit comments