1
1
import java
2
2
private import semmle.code.java.dataflow.DataFlow
3
3
private import semmle.code.java.dataflow.internal.DataFlowImplSpecific
4
-
5
4
private import codeql.dataflowstack.DataFlowStack as DFS
6
5
private import DFS:: DataFlowStackMake< Location , JavaDataFlow > as DataFlowStackFactory
7
6
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 > >
10
29
}
11
30
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