mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
C++/C#/Go: Use shared interpretModelForTest.
This commit is contained in:
@@ -101,9 +101,14 @@ private import internal.FlowSummaryImpl
|
|||||||
private import internal.FlowSummaryImpl::Public
|
private import internal.FlowSummaryImpl::Public
|
||||||
private import internal.FlowSummaryImpl::Private
|
private import internal.FlowSummaryImpl::Private
|
||||||
private import internal.FlowSummaryImpl::Private::External
|
private import internal.FlowSummaryImpl::Private::External
|
||||||
private import internal.ExternalFlowExtensions as Extensions
|
private import internal.ExternalFlowExtensions
|
||||||
private import codeql.mad.ModelValidation as SharedModelVal
|
private import codeql.mad.ModelValidation as SharedModelVal
|
||||||
private import codeql.util.Unit
|
private import codeql.util.Unit
|
||||||
|
private import codeql.mad.static.MaD as SharedMaD
|
||||||
|
|
||||||
|
private module MaD = SharedMaD::ModelsAsData<Extensions>;
|
||||||
|
|
||||||
|
import MaD
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A unit class for adding additional source model rows.
|
* A unit class for adding additional source model rows.
|
||||||
@@ -230,49 +235,6 @@ private predicate summaryModel0(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Holds if the given extension tuple `madId` should pretty-print as `model`.
|
|
||||||
*
|
|
||||||
* This predicate should only be used in tests.
|
|
||||||
*/
|
|
||||||
predicate interpretModelForTest(QlBuiltins::ExtensionId madId, string model) {
|
|
||||||
exists(
|
|
||||||
string namespace, string type, boolean subtypes, string name, string signature, string ext,
|
|
||||||
string output, string kind, string provenance
|
|
||||||
|
|
|
||||||
Extensions::sourceModel(namespace, type, subtypes, name, signature, ext, output, kind,
|
|
||||||
provenance, madId)
|
|
||||||
|
|
|
||||||
model =
|
|
||||||
"Source: " + namespace + "; " + type + "; " + subtypes + "; " + name + "; " + signature + "; "
|
|
||||||
+ ext + "; " + output + "; " + kind + "; " + provenance
|
|
||||||
)
|
|
||||||
or
|
|
||||||
exists(
|
|
||||||
string namespace, string type, boolean subtypes, string name, string signature, string ext,
|
|
||||||
string input, string kind, string provenance
|
|
||||||
|
|
|
||||||
Extensions::sinkModel(namespace, type, subtypes, name, signature, ext, input, kind, provenance,
|
|
||||||
madId)
|
|
||||||
|
|
|
||||||
model =
|
|
||||||
"Sink: " + namespace + "; " + type + "; " + subtypes + "; " + name + "; " + signature + "; " +
|
|
||||||
ext + "; " + input + "; " + kind + "; " + provenance
|
|
||||||
)
|
|
||||||
or
|
|
||||||
exists(
|
|
||||||
string namespace, string type, boolean subtypes, string name, string signature, string ext,
|
|
||||||
string input, string output, string kind, string provenance
|
|
||||||
|
|
|
||||||
Extensions::summaryModel(namespace, type, subtypes, name, signature, ext, input, output, kind,
|
|
||||||
provenance, madId)
|
|
||||||
|
|
|
||||||
model =
|
|
||||||
"Summary: " + namespace + "; " + type + "; " + subtypes + "; " + name + "; " + signature +
|
|
||||||
"; " + ext + "; " + input + "; " + output + "; " + kind + "; " + provenance
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds if `input` is `input0`, but with all occurrences of `@` replaced
|
* Holds if `input` is `input0`, but with all occurrences of `@` replaced
|
||||||
* by `n` repetitions of `*` (and similarly for `output` and `output0`).
|
* by `n` repetitions of `*` (and similarly for `output` and `output0`).
|
||||||
|
|||||||
@@ -101,44 +101,11 @@ private import semmle.code.csharp.dispatch.OverridableCallable
|
|||||||
private import semmle.code.csharp.frameworks.System
|
private import semmle.code.csharp.frameworks.System
|
||||||
private import codeql.dataflow.internal.AccessPathSyntax as AccessPathSyntax
|
private import codeql.dataflow.internal.AccessPathSyntax as AccessPathSyntax
|
||||||
private import codeql.mad.ModelValidation as SharedModelVal
|
private import codeql.mad.ModelValidation as SharedModelVal
|
||||||
|
private import codeql.mad.static.MaD as SharedMaD
|
||||||
|
|
||||||
/**
|
private module MaD = SharedMaD::ModelsAsData<Extensions>;
|
||||||
* Holds if the given extension tuple `madId` should pretty-print as `model`.
|
|
||||||
*
|
import MaD
|
||||||
* This predicate should only be used in tests.
|
|
||||||
*/
|
|
||||||
predicate interpretModelForTest(QlBuiltins::ExtensionId madId, string model) {
|
|
||||||
exists(
|
|
||||||
string namespace, string type, boolean subtypes, string name, string signature, string ext,
|
|
||||||
string output, string kind, string provenance
|
|
||||||
|
|
|
||||||
sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, provenance, madId) and
|
|
||||||
model =
|
|
||||||
"Source: " + namespace + "; " + type + "; " + subtypes + "; " + name + "; " + signature + "; "
|
|
||||||
+ ext + "; " + output + "; " + kind + "; " + provenance
|
|
||||||
)
|
|
||||||
or
|
|
||||||
exists(
|
|
||||||
string namespace, string type, boolean subtypes, string name, string signature, string ext,
|
|
||||||
string input, string kind, string provenance
|
|
||||||
|
|
|
||||||
sinkModel(namespace, type, subtypes, name, signature, ext, input, kind, provenance, madId) and
|
|
||||||
model =
|
|
||||||
"Sink: " + namespace + "; " + type + "; " + subtypes + "; " + name + "; " + signature + "; " +
|
|
||||||
ext + "; " + input + "; " + kind + "; " + provenance
|
|
||||||
)
|
|
||||||
or
|
|
||||||
exists(
|
|
||||||
string namespace, string type, boolean subtypes, string name, string signature, string ext,
|
|
||||||
string input, string output, string kind, string provenance
|
|
||||||
|
|
|
||||||
summaryModel(namespace, type, subtypes, name, signature, ext, input, output, kind, provenance,
|
|
||||||
madId) and
|
|
||||||
model =
|
|
||||||
"Summary: " + namespace + "; " + type + "; " + subtypes + "; " + name + "; " + signature +
|
|
||||||
"; " + ext + "; " + input + "; " + output + "; " + kind + "; " + provenance
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
private predicate relevantNamespace(string namespace) {
|
private predicate relevantNamespace(string namespace) {
|
||||||
sourceModel(namespace, _, _, _, _, _, _, _, _, _) or
|
sourceModel(namespace, _, _, _, _, _, _, _, _, _) or
|
||||||
|
|||||||
@@ -86,7 +86,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
private import go
|
private import go
|
||||||
import internal.ExternalFlowExtensions as FlowExtensions
|
private import internal.ExternalFlowExtensions
|
||||||
private import FlowSummary as FlowSummary
|
private import FlowSummary as FlowSummary
|
||||||
private import internal.DataFlowPrivate
|
private import internal.DataFlowPrivate
|
||||||
private import internal.FlowSummaryImpl
|
private import internal.FlowSummaryImpl
|
||||||
@@ -94,6 +94,13 @@ private import internal.FlowSummaryImpl::Public as Public
|
|||||||
private import internal.FlowSummaryImpl::Private
|
private import internal.FlowSummaryImpl::Private
|
||||||
private import internal.FlowSummaryImpl::Private::External
|
private import internal.FlowSummaryImpl::Private::External
|
||||||
private import codeql.mad.ModelValidation as SharedModelVal
|
private import codeql.mad.ModelValidation as SharedModelVal
|
||||||
|
private import codeql.mad.static.MaD as SharedMaD
|
||||||
|
|
||||||
|
private module MaD = SharedMaD::ModelsAsData<Extensions>;
|
||||||
|
|
||||||
|
import MaD
|
||||||
|
|
||||||
|
module FlowExtensions = Extensions;
|
||||||
|
|
||||||
/** Gets the prefix for a group of packages. */
|
/** Gets the prefix for a group of packages. */
|
||||||
private string groupPrefix() { result = "group:" }
|
private string groupPrefix() { result = "group:" }
|
||||||
@@ -178,46 +185,6 @@ predicate neutralModel(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Holds if the given extension tuple `madId` should pretty-print as `model`.
|
|
||||||
*
|
|
||||||
* This predicate should only be used in tests.
|
|
||||||
*/
|
|
||||||
predicate interpretModelForTest(QlBuiltins::ExtensionId madId, string model) {
|
|
||||||
exists(
|
|
||||||
string package, string type, boolean subtypes, string name, string signature, string ext,
|
|
||||||
string output, string kind, string provenance
|
|
||||||
|
|
|
||||||
FlowExtensions::sourceModel(package, type, subtypes, name, signature, ext, output, kind,
|
|
||||||
provenance, madId) and
|
|
||||||
model =
|
|
||||||
"Source: " + package + "; " + type + "; " + subtypes + "; " + name + "; " + signature + "; " +
|
|
||||||
ext + "; " + output + "; " + kind + "; " + provenance
|
|
||||||
)
|
|
||||||
or
|
|
||||||
exists(
|
|
||||||
string package, string type, boolean subtypes, string name, string signature, string ext,
|
|
||||||
string input, string kind, string provenance
|
|
||||||
|
|
|
||||||
FlowExtensions::sinkModel(package, type, subtypes, name, signature, ext, input, kind,
|
|
||||||
provenance, madId) and
|
|
||||||
model =
|
|
||||||
"Sink: " + package + "; " + type + "; " + subtypes + "; " + name + "; " + signature + "; " +
|
|
||||||
ext + "; " + input + "; " + kind + "; " + provenance
|
|
||||||
)
|
|
||||||
or
|
|
||||||
exists(
|
|
||||||
string package, string type, boolean subtypes, string name, string signature, string ext,
|
|
||||||
string input, string output, string kind, string provenance
|
|
||||||
|
|
|
||||||
FlowExtensions::summaryModel(package, type, subtypes, name, signature, ext, input, output, kind,
|
|
||||||
provenance, madId) and
|
|
||||||
model =
|
|
||||||
"Summary: " + package + "; " + type + "; " + subtypes + "; " + name + "; " + signature + "; " +
|
|
||||||
ext + "; " + input + "; " + output + "; " + kind + "; " + provenance
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
bindingset[p]
|
bindingset[p]
|
||||||
private string cleanPackage(string p) {
|
private string cleanPackage(string p) {
|
||||||
exists(string noPrefix |
|
exists(string noPrefix |
|
||||||
|
|||||||
Reference in New Issue
Block a user