C#: Avoid recomputing flowThroughCallableLibraryOutRef() between queries

This commit is contained in:
Tom Hvitved
2019-03-01 11:53:40 +01:00
parent 397ff84898
commit 738d1117f2
2 changed files with 6 additions and 8 deletions

View File

@@ -996,6 +996,8 @@ module DataFlow {
or
Internal::flowOutOfDelegateLibraryCall(nodeFrom, nodeTo, true)
or
flowThroughCallableLibraryOutRef(_, nodeFrom, nodeTo, true)
or
localFlowStepCil(nodeFrom, nodeTo)
}
@@ -1079,17 +1081,12 @@ module DataFlow {
(isSuccessor = true or isSuccessor = false)
}
predicate localFlowStepNoConfig(Node pred, Node succ) {
localFlowStep(pred, succ) or
flowThroughCallableLibraryOutRef(_, pred, succ, true)
}
/**
* Holds if data may flow in one local step from `pred` to `succ`.
*/
bindingset[config]
predicate localFlowStep(Node pred, Node succ, Configuration config) {
localFlowStepNoConfig(pred, succ) or
localFlowStep(pred, succ) or
config.isAdditionalFlowStep(pred, succ)
}

View File

@@ -81,8 +81,7 @@ module TaintTracking {
final override predicate isAdditionalFlowStep(DataFlow::Node pred, DataFlow::Node succ) {
isAdditionalTaintStep(pred, succ) or
localAdditionalTaintStep(pred, succ) or
DataFlow::Internal::flowThroughCallableLibraryOutRef(_, pred, succ, false)
localAdditionalTaintStep(pred, succ)
}
final override predicate isAdditionalFlowStepIntoCall(
@@ -257,6 +256,8 @@ module TaintTracking {
or
access.(PropertyRead).getQualifier() = nodeFrom.asExpr()
)
or
DataFlow::Internal::flowThroughCallableLibraryOutRef(_, nodeFrom, nodeTo, false)
}
}
import Cached