File tree Expand file tree Collapse file tree 2 files changed +13
-8
lines changed
java/ql/lib/semmle/code/java/security Expand file tree Collapse file tree 2 files changed +13
-8
lines changed Original file line number Diff line number Diff line change @@ -50,9 +50,16 @@ class TemplateInjectionAdditionalTaintStep extends Unit {
50
50
/**
51
51
* A sanitizer for server-side template injection (SST) vulnerabilities.
52
52
*/
53
- abstract class TemplateInjectionSanitizer extends DataFlow:: Node {
53
+ abstract class TemplateInjectionSanitizer extends DataFlow:: Node { }
54
+
55
+ /**
56
+ * A sanitizer for server-side template injection (SST) vulnerabilities.
57
+ * This sanitizer is only applicable when `TemplateInjectionSanitizerWithState::hasState`
58
+ * holds for the flow state.
59
+ */
60
+ abstract class TemplateInjectionSanitizerWithState extends DataFlow:: Node {
54
61
/** Holds if this sanitizer has the specified `state`. */
55
- predicate hasState ( DataFlow:: FlowState state ) { state instanceof DataFlow :: FlowStateEmpty }
62
+ abstract predicate hasState ( DataFlow:: FlowState state ) ;
56
63
}
57
64
58
65
private class DefaultTemplateInjectionSource extends TemplateInjectionSource instanceof RemoteFlowSource {
Original file line number Diff line number Diff line change @@ -9,22 +9,20 @@ import semmle.code.java.security.TemplateInjection
9
9
class TemplateInjectionFlowConfig extends TaintTracking:: Configuration {
10
10
TemplateInjectionFlowConfig ( ) { this = "TemplateInjectionFlowConfig" }
11
11
12
- override predicate isSource ( DataFlow:: Node source ) { this .isSource ( source , _) }
13
-
14
12
override predicate isSource ( DataFlow:: Node source , DataFlow:: FlowState state ) {
15
13
source .( TemplateInjectionSource ) .hasState ( state )
16
14
}
17
15
18
- override predicate isSink ( DataFlow:: Node sink ) { this .isSink ( sink , _) }
19
-
20
16
override predicate isSink ( DataFlow:: Node sink , DataFlow:: FlowState state ) {
21
17
sink .( TemplateInjectionSink ) .hasState ( state )
22
18
}
23
19
24
- override predicate isSanitizer ( DataFlow:: Node sanitizer ) { this .isSanitizer ( sanitizer , _) }
20
+ override predicate isSanitizer ( DataFlow:: Node sanitizer ) {
21
+ sanitizer instanceof TemplateInjectionSanitizer
22
+ }
25
23
26
24
override predicate isSanitizer ( DataFlow:: Node sanitizer , DataFlow:: FlowState state ) {
27
- sanitizer .( TemplateInjectionSanitizer ) .hasState ( state )
25
+ sanitizer .( TemplateInjectionSanitizerWithState ) .hasState ( state )
28
26
}
29
27
30
28
override predicate isAdditionalTaintStep ( DataFlow:: Node node1 , DataFlow:: Node node2 ) {
You can’t perform that action at this time.
0 commit comments