C#: Add isRelevant predicates.

This commit is contained in:
Michael Nebel
2022-03-03 15:22:51 +01:00
parent 81c8cac77e
commit 2b90b5ff62

View File

@@ -1,5 +1,6 @@
import csharp
private import semmle.code.csharp.commons.Util
private import semmle.code.csharp.dataflow.internal.DataFlowPrivate
private predicate isRelevantForModels(Callable api) { not api instanceof MainMethod }
@@ -49,3 +50,24 @@ string asPartialModel(TargetAPI api) {
+ /* ext + */ ";" //
)
}
predicate isRelevantType(Type t) { not t instanceof Enum }
predicate isRelevantTaintStep(DataFlow::Node node1, DataFlow::Node node2) {
exists(DataFlow::Content f |
readStep(node1, f, node2) and
if f instanceof DataFlow::FieldContent
then isRelevantType(f.(DataFlow::FieldContent).getField().getType())
else
if f instanceof DataFlow::SyntheticFieldContent
then isRelevantType(f.(DataFlow::SyntheticFieldContent).getField().getType())
else any()
)
or
exists(DataFlow::Content f | storeStep(node1, f, node2) | f instanceof DataFlow::ElementContent)
}
predicate isRelevantContent(DataFlow::Content f) {
isRelevantType(f.(DataFlow::FieldContent).getField().getType()) or
f instanceof DataFlow::ElementContent
}