mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Data flow: Cache known{Source,Sink}Model
This commit is contained in:
@@ -1014,19 +1014,19 @@ module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
|
||||
|
||||
private predicate sourceModel(NodeEx node, string model) {
|
||||
sourceNode(node, _) and
|
||||
exists(Node n | n = node.asNode() |
|
||||
knownSourceModel(n, model)
|
||||
(
|
||||
model = getSourceModel(node)
|
||||
or
|
||||
not knownSourceModel(n, _) and model = ""
|
||||
not exists(getSourceModel(node)) and model = ""
|
||||
)
|
||||
}
|
||||
|
||||
private predicate sinkModel(NodeEx node, string model) {
|
||||
sinkNode(node, _) and
|
||||
exists(Node n | n = node.asNodeOrImplicitRead() |
|
||||
knownSinkModel(n, model)
|
||||
(
|
||||
model = getSinkModel(node)
|
||||
or
|
||||
not knownSinkModel(n, _) and model = ""
|
||||
not exists(getSinkModel(node)) and model = ""
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -1063,6 +1063,12 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> {
|
||||
exists(n.asParamReturnNode())
|
||||
}
|
||||
|
||||
cached
|
||||
string getSourceModel(NodeEx node) { knownSourceModel(node.asNode(), result) }
|
||||
|
||||
cached
|
||||
string getSinkModel(NodeEx node) { knownSinkModel(node.asNodeOrImplicitRead(), result) }
|
||||
|
||||
cached
|
||||
predicate parameterNode(Node p, DataFlowCallable c, ParameterPosition pos) {
|
||||
isParameterNode(p, c, pos)
|
||||
|
||||
Reference in New Issue
Block a user