Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cpp/ql/lib/qlpack.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ dependencies:
codeql/tutorial: ${workspace}
codeql/util: ${workspace}
codeql/xml: ${workspace}
codeql/global-controlflow: ${workspace}
dataExtensions:
- ext/*.model.yml
- ext/generated/*.model.yml
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import cpp
*/
module ControlFlow {
private import internal.ControlFlowSpecific
private import shared.ControlFlow
private import codeql.globalcontrolflow.ControlFlow
import ControlFlowMake<Location, CppControlFlow>
import Public
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
*/

private import cpp
private import semmle.code.cpp.interproccontrolflow.shared.ControlFlow
private import codeql.globalcontrolflow.ControlFlow

module Private {
import ControlFlowPrivate
Expand Down
1 change: 1 addition & 0 deletions csharp/ql/lib/qlpack.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ dependencies:
codeql/tutorial: ${workspace}
codeql/util: ${workspace}
codeql/xml: ${workspace}
codeql/global-controlflow: ${workspace}
dataExtensions:
- ext/*.model.yml
- ext/generated/*.model.yml
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import csharp

/**
* Provides classes for performing global (inter-procedural) control flow analyses.
*/
module ControlFlow {
private import internal.ControlFlowSpecific
private import codeql.globalcontrolflow.ControlFlow
import ControlFlowMake<Location, CSharpControlFlow>
import Public
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
private import csharp as CS
private import ControlFlowPublic

predicate edge(Node n1, Node n2) { n1.getASuccessor() = n2 }

predicate callTarget(CallNode call, Callable target) { call.getARuntimeTarget() = target }

predicate flowEntry(Callable c, Node entry) {
entry.(CS::ControlFlow::Nodes::EntryNode).getCallable() = c
}

predicate flowExit(Callable c, Node exitNode) {
exitNode.(CS::ControlFlow::Nodes::ExitNode).getCallable() = c
}

Callable getEnclosingCallable(Node n) { n.getEnclosingCallable() = result }

predicate hiddenNode(Node n) { none() }

private newtype TSplit = TNone() { none() }

class Split extends TSplit {
abstract string toString();

abstract CS::Location getLocation();

abstract predicate entry(Node n1, Node n2);

abstract predicate exit(Node n1, Node n2);

abstract predicate blocked(Node n1, Node n2);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
private import csharp as CS

class Node extends CS::ControlFlow::Node { }

class CallNode extends Node {
CS::Call call;

CallNode() { call = super.getAstNode() }

Callable getARuntimeTarget() { result = call.getARuntimeTarget() }
}

class Callable = CS::Callable;
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/**
* Provides C#-specific definitions for use in the control-flow library.
*/

private import csharp
private import codeql.globalcontrolflow.ControlFlow

module Private {
import ControlFlowPrivate
}

module Public {
import ControlFlowPublic
}

module CSharpControlFlow implements InputSig<Location> {
import Private
import Public
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
private import codeql.util.Unit
private import codeql.util.Location
private import semmle.code.cpp.interproccontrolflow.shared.ControlFlow
private import codeql.globalcontrolflow.ControlFlow

module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
private import Lang
Expand Down
7 changes: 7 additions & 0 deletions shared/global-controlflow/qlpack.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
name: codeql/global-controlflow
version: 0.0.1
groups: shared
library: true
dependencies:
codeql/util: ${workspace}
warnOnImplicitThis: true