Skip to content

Commit c59c7cf

Browse files
committed
C#: Use manual sink callables as exclusion for extrapolated sinks.
1 parent d272d6a commit c59c7cf

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

csharp/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,13 +226,24 @@ private predicate isRelevantMemberAccess(DataFlow::Node node) {
226226

227227
predicate sinkModelSanitizer(DataFlow::Node node) { none() }
228228

229+
private class ManualNeutralSinkCallable extends Callable {
230+
ManualNeutralSinkCallable() {
231+
this =
232+
any(FlowSummaryImpl::Public::NeutralCallable nc |
233+
nc.hasManualModel() and nc.getKind() = "sink"
234+
)
235+
}
236+
}
237+
229238
/**
230239
* Holds if `source` is an api entrypoint relevant for creating sink models.
231240
*/
232241
predicate apiSource(DataFlow::Node source) {
233242
(isRelevantMemberAccess(source) or source instanceof DataFlow::ParameterNode) and
234-
relevant(source.getEnclosingCallable()) and
235-
not hasManualModel(source.getEnclosingCallable())
243+
exists(Callable enclosing | enclosing = source.getEnclosingCallable() |
244+
relevant(enclosing) and
245+
not enclosing instanceof ManualNeutralSinkCallable
246+
)
236247
}
237248

238249
/**

0 commit comments

Comments
 (0)