@@ -25,26 +25,24 @@ predicate callArgumentisSink(DataFlow::Node sink, DataFlow::CallNode call) {
25
25
)
26
26
}
27
27
28
- class FlowConf extends TaintTracking :: Configuration {
29
- FlowConf ( ) { this = "FlowConf" }
28
+ module Config implements DataFlow :: ConfigSig {
29
+ predicate isSource ( DataFlow :: Node source ) { callResultisSource ( source , _ ) }
30
30
31
- override predicate isSource ( DataFlow:: Node source ) { callResultisSource ( source , _) }
32
-
33
- override predicate isSink ( DataFlow:: Node sink ) { callArgumentisSink ( sink , _) }
31
+ predicate isSink ( DataFlow:: Node sink ) { callArgumentisSink ( sink , _) }
34
32
}
35
33
34
+ module Flow = TaintTracking:: Global< Config > ;
35
+
36
36
/**
37
37
* True if the result of the provided sourceCall flows to the corresponding sink,
38
38
* both marked by the same numeric first argument.
39
39
*/
40
40
predicate flowsToSink ( DataFlow:: CallNode sourceCall ) {
41
- exists (
42
- FlowConf cfg , DataFlow:: PathNode source , DataFlow:: PathNode sink , DataFlow:: CallNode sinkCall
43
- |
44
- cfg .hasFlowPath ( source , sink ) and
41
+ exists ( DataFlow:: Node source , DataFlow:: Node sink , DataFlow:: CallNode sinkCall |
42
+ Flow:: flow ( source , sink ) and
45
43
(
46
- callResultisSource ( source . getNode ( ) , sourceCall ) and
47
- callArgumentisSink ( sink . getNode ( ) , sinkCall ) and
44
+ callResultisSource ( source , sourceCall ) and
45
+ callArgumentisSink ( sink , sinkCall ) and
48
46
sourceCall .getArgument ( 0 ) .getIntValue ( ) = sinkCall .getArgument ( 0 ) .getIntValue ( )
49
47
)
50
48
)
0 commit comments