11import java
22private import semmle.code.java.dataflow.DataFlow
33private import semmle.code.java.dataflow.internal.DataFlowImplSpecific
4-
54private import codeql.dataflowstack.DataFlowStack as DFS
65private import DFS:: DataFlowStackMake< Location , JavaDataFlow > as DataFlowStackFactory
76
8- module DataFlowStackMake< DataFlowStackFactory:: DataFlow:: GlobalFlowSig Flow> {
9- import DataFlowStackFactory:: FlowStack< Flow >
7+ private module DataFlowStackInput< DataFlowStackFactory:: DataFlow:: ConfigSig Config> implements
8+ DFS:: DataFlowStackSig< Location , JavaDataFlow , Config >
9+ {
10+ private module Flow = DataFlow:: Global< Config > ;
11+
12+ JavaDataFlow:: Node getNode ( Flow:: PathNode n ) { result = n .getNode ( ) }
13+
14+ predicate isSource ( Flow:: PathNode n ) { n .isSource ( ) }
15+
16+ Flow:: PathNode getASuccessor ( Flow:: PathNode n ) { result = n .getASuccessor ( ) }
17+
18+ JavaDataFlow:: DataFlowCallable getARuntimeTarget ( JavaDataFlow:: DataFlowCall call ) {
19+ result .asCallable ( ) = call .asCall ( ) .getCallee ( )
20+ }
21+
22+ JavaDataFlow:: Node getAnArgumentNode ( JavaDataFlow:: DataFlowCall call ) {
23+ result = JavaDataFlow:: exprNode ( call .asCall ( ) .getAnArgument ( ) )
24+ }
25+ }
26+
27+ module DataFlowStackMake< DataFlowStackFactory:: DataFlow:: ConfigSig Config> {
28+ import DataFlowStackFactory:: FlowStack< Config , DataFlowStackInput< Config > >
1029}
1130
12- module BiStackAnalysisMake< DataFlowStackFactory:: DataFlow:: GlobalFlowSig FlowA, DataFlowStackFactory:: DataFlow:: GlobalFlowSig FlowB> {
13- import DataFlowStackFactory:: BiStackAnalysis< FlowA , FlowB >
14- }
31+ module BiStackAnalysisMake<
32+ DataFlowStackFactory:: DataFlow:: ConfigSig ConfigA,
33+ DataFlowStackFactory:: DataFlow:: ConfigSig ConfigB>
34+ {
35+ import DataFlowStackFactory:: BiStackAnalysis< ConfigA , DataFlowStackInput< ConfigA > , ConfigB , DataFlowStackInput< ConfigB > >
36+ }
0 commit comments