1
+ import java
2
+ private import semmle.code.java.dataflow.DataFlow
3
+ private import semmle.code.java.dataflow.TaintTracking
4
+ private import semmle.code.java.dataflow.internal.DataFlowImplSpecific
5
+ private import semmle.code.java.dataflow.internal.TaintTrackingImplSpecific
6
+ private import codeql.dataflowstack.TaintTrackingStack as TTS
7
+ private import TTS:: TaintTrackingStackMake< Location , JavaDataFlow , JavaTaintTracking > as TaintTrackingStackFactory
8
+
9
+ private module TaintTrackingStackInput< TaintTrackingStackFactory:: DataFlow:: ConfigSig Config>
10
+ implements TTS:: TaintTrackingStackSig< Location , JavaDataFlow , JavaTaintTracking , Config >
11
+ {
12
+ private module Flow = TaintTracking:: Global< Config > ;
13
+
14
+ JavaDataFlow:: Node getNode ( Flow:: PathNode n ) { result = n .getNode ( ) }
15
+
16
+ predicate isSource ( Flow:: PathNode n ) { n .isSource ( ) }
17
+
18
+ Flow:: PathNode getASuccessor ( Flow:: PathNode n ) { result = n .getASuccessor ( ) }
19
+
20
+ JavaDataFlow:: DataFlowCallable getARuntimeTarget ( JavaDataFlow:: DataFlowCall call ) {
21
+ result .asCallable ( ) = call .asCall ( ) .getCallee ( )
22
+ }
23
+
24
+ JavaDataFlow:: Node getAnArgumentNode ( JavaDataFlow:: DataFlowCall call ) {
25
+ result = JavaDataFlow:: exprNode ( call .asCall ( ) .getAnArgument ( ) )
26
+ }
27
+ }
28
+
29
+ module DataFlowStackMake< TaintTrackingStackFactory:: DataFlow:: ConfigSig Config> {
30
+ import TaintTrackingStackFactory:: FlowStack< Config , TaintTrackingStackInput< Config > >
31
+ }
32
+
33
+ module BiStackAnalysisMake<
34
+ TaintTrackingStackFactory:: DataFlow:: ConfigSig ConfigA,
35
+ TaintTrackingStackFactory:: DataFlow:: ConfigSig ConfigB>
36
+ {
37
+ import TaintTrackingStackFactory:: BiStackAnalysis< ConfigA , TaintTrackingStackInput< ConfigA > , ConfigB , TaintTrackingStackInput< ConfigB > >
38
+ }
0 commit comments