Skip to content

Commit a8ed6ba

Browse files
authored
Merge pull request github#11188 from aschackmull/java/mad-gen-sinks-precision
Java: Improve sink model generation precision by excluding variable capture.
2 parents 24ba51d + 151f12e commit a8ed6ba

File tree

4 files changed

+15
-0
lines changed

4 files changed

+15
-0
lines changed

csharp/ql/src/utils/model-generator/internal/CaptureModels.qll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,8 @@ private class PropagateToSinkConfiguration extends TaintTracking::Configuration
272272

273273
override predicate isSink(DataFlow::Node sink) { ExternalFlow::sinkNode(sink, _) }
274274

275+
override predicate isSanitizer(DataFlow::Node node) { sinkModelSanitizer(node) }
276+
275277
override DataFlow::FlowFeature getAFeature() {
276278
result instanceof DataFlow::FeatureHasSourceCallContext
277279
}

csharp/ql/src/utils/model-generator/internal/CaptureModelsSpecific.qll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,8 @@ private predicate isRelevantMemberAccess(DataFlow::Node node) {
175175
)
176176
}
177177

178+
predicate sinkModelSanitizer(DataFlow::Node node) { none() }
179+
178180
/**
179181
* Holds if `source` is an api entrypoint relevant for creating sink models.
180182
*/

java/ql/src/utils/model-generator/internal/CaptureModels.qll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,8 @@ private class PropagateToSinkConfiguration extends TaintTracking::Configuration
272272

273273
override predicate isSink(DataFlow::Node sink) { ExternalFlow::sinkNode(sink, _) }
274274

275+
override predicate isSanitizer(DataFlow::Node node) { sinkModelSanitizer(node) }
276+
275277
override DataFlow::FlowFeature getAFeature() {
276278
result instanceof DataFlow::FeatureHasSourceCallContext
277279
}

java/ql/src/utils/model-generator/internal/CaptureModelsSpecific.qll

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ private import semmle.code.java.dataflow.internal.DataFlowNodes
77
private import semmle.code.java.dataflow.internal.DataFlowPrivate
88
private import semmle.code.java.dataflow.internal.ContainerFlow as ContainerFlow
99
private import semmle.code.java.dataflow.DataFlow as Df
10+
private import semmle.code.java.dataflow.SSA as Ssa
1011
private import semmle.code.java.dataflow.TaintTracking as Tt
1112
import semmle.code.java.dataflow.ExternalFlow as ExternalFlow
1213
import semmle.code.java.dataflow.internal.DataFlowImplCommon as DataFlowImplCommon
@@ -224,6 +225,14 @@ predicate isOwnInstanceAccessNode(ReturnNode node) {
224225
node.asExpr().(J::ThisAccess).isOwnInstanceAccess()
225226
}
226227

228+
predicate sinkModelSanitizer(DataFlow::Node node) {
229+
// exclude variable capture jump steps
230+
exists(Ssa::SsaImplicitInit closure |
231+
closure.captures(_) and
232+
node.asExpr() = closure.getAFirstUse()
233+
)
234+
}
235+
227236
/**
228237
* Holds if `source` is an api entrypoint relevant for creating sink models.
229238
*/

0 commit comments

Comments
 (0)