@@ -25,26 +25,24 @@ predicate callArgumentisSink(DataFlow::Node sink, DataFlow::CallNode call) {
2525 )
2626}
2727
28- class FlowConf extends TaintTracking :: Configuration {
29- FlowConf ( ) { this = "FlowConf" }
28+ module Config implements DataFlow :: ConfigSig {
29+ predicate isSource ( DataFlow :: Node source ) { callResultisSource ( source , _ ) }
3030
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 , _) }
3432}
3533
34+ module Flow = TaintTracking:: Global< Config > ;
35+
3636/**
3737 * True if the result of the provided sourceCall flows to the corresponding sink,
3838 * both marked by the same numeric first argument.
3939 */
4040predicate 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
4543 (
46- callResultisSource ( source . getNode ( ) , sourceCall ) and
47- callArgumentisSink ( sink . getNode ( ) , sinkCall ) and
44+ callResultisSource ( source , sourceCall ) and
45+ callArgumentisSink ( sink , sinkCall ) and
4846 sourceCall .getArgument ( 0 ) .getIntValue ( ) = sinkCall .getArgument ( 0 ) .getIntValue ( )
4947 )
5048 )
0 commit comments