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