Skip to content

Commit

Permalink
Go: Skeleton implementation of import paths grouping for models.
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelnebel committed Jul 3, 2024
1 parent 25b2018 commit d5d8abd
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 1 deletion.
4 changes: 4 additions & 0 deletions go/ql/lib/ext/empty.model.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,7 @@ extensions:
pack: codeql/go-all
extensible: neutralModel
data: []
- addsTo:
pack: codeql/go-all
extensible: importPaths
data: []
41 changes: 40 additions & 1 deletion go/ql/lib/semmle/go/dataflow/ExternalFlow.qll
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@
*/

private import go
import internal.ExternalFlowExtensions
import internal.ExternalFlowExtensions as FlowExtensions
private import FlowSummary as FlowSummary
private import internal.DataFlowPrivate
private import internal.FlowSummaryImpl
Expand All @@ -87,6 +87,45 @@ private import internal.FlowSummaryImpl::Private
private import internal.FlowSummaryImpl::Private::External
private import codeql.mad.ModelValidation as SharedModelVal

private predicate importPath(string package1, string package2) {
exists(string group |
FlowExtensions::importPaths(group, package1) and
FlowExtensions::importPaths(group, package2)
)
}

/**
* TODO: Also implement using aliases.
*/
predicate sourceModel = FlowExtensions::sourceModel/10;

/**
* TODO: Also implement using aliases.
*/
predicate sinkModel = FlowExtensions::sinkModel/10;

/**
* TODO: Also implement using aliases.
*/
predicate summaryModel(
string package, string type, boolean subtypes, string name, string signature, string ext,
string input, string output, string kind, string provenance, QlBuiltins::ExtensionId madId
) {
FlowExtensions::summaryModel(package, type, subtypes, name, signature, ext, input, output, kind,
provenance, madId)
or
exists(string alternative |
importPath(package, alternative) and
FlowExtensions::summaryModel(alternative, type, subtypes, name, signature, ext, input, output,
kind, provenance, madId)
)
}

/**
* TODO: Also implement using aliases.
*/
predicate neutralModel = FlowExtensions::neutralModel/6;

/**
* Holds if the given extension tuple `madId` should pretty-print as `model`.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,8 @@ extensible predicate summaryModel(
extensible predicate neutralModel(
string package, string type, string name, string signature, string kind, string provenance
);

/**
* Holds if the package `package` is part of the group `group`.
*/
extensible predicate importPaths(string group, string package);

0 comments on commit d5d8abd

Please sign in to comment.