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