Skip to content

Commit 2f0b064

Browse files
authored
Merge pull request #234 from microsoft/share-global-cfg-library
C++/C#/Shared: Convert the global control-flow library to a shared parameterize module and make it available in C#
2 parents 198a594 + f00c370 commit 2f0b064

File tree

11 files changed

+87
-3
lines changed

11 files changed

+87
-3
lines changed

cpp/ql/lib/qlpack.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ dependencies:
1515
codeql/tutorial: ${workspace}
1616
codeql/util: ${workspace}
1717
codeql/xml: ${workspace}
18+
codeql/global-controlflow: ${workspace}
1819
dataExtensions:
1920
- ext/*.model.yml
2021
- ext/generated/*.model.yml

cpp/ql/lib/semmle/code/cpp/interproccontrolflow/ControlFlow.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import cpp
55
*/
66
module ControlFlow {
77
private import internal.ControlFlowSpecific
8-
private import shared.ControlFlow
8+
private import codeql.globalcontrolflow.ControlFlow
99
import ControlFlowMake<Location, CppControlFlow>
1010
import Public
1111
}

cpp/ql/lib/semmle/code/cpp/interproccontrolflow/internal/ControlFlowSpecific.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*/
44

55
private import cpp
6-
private import semmle.code.cpp.interproccontrolflow.shared.ControlFlow
6+
private import codeql.globalcontrolflow.ControlFlow
77

88
module Private {
99
import ControlFlowPrivate

csharp/ql/lib/qlpack.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ dependencies:
1515
codeql/tutorial: ${workspace}
1616
codeql/util: ${workspace}
1717
codeql/xml: ${workspace}
18+
codeql/global-controlflow: ${workspace}
1819
dataExtensions:
1920
- ext/*.model.yml
2021
- ext/generated/*.model.yml
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import csharp
2+
3+
/**
4+
* Provides classes for performing global (inter-procedural) control flow analyses.
5+
*/
6+
module ControlFlow {
7+
private import internal.ControlFlowSpecific
8+
private import codeql.globalcontrolflow.ControlFlow
9+
import ControlFlowMake<Location, CSharpControlFlow>
10+
import Public
11+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
private import csharp as CS
2+
private import ControlFlowPublic
3+
4+
predicate edge(Node n1, Node n2) { n1.getASuccessor() = n2 }
5+
6+
predicate callTarget(CallNode call, Callable target) { call.getARuntimeTarget() = target }
7+
8+
predicate flowEntry(Callable c, Node entry) {
9+
entry.(CS::ControlFlow::Nodes::EntryNode).getCallable() = c
10+
}
11+
12+
predicate flowExit(Callable c, Node exitNode) {
13+
exitNode.(CS::ControlFlow::Nodes::ExitNode).getCallable() = c
14+
}
15+
16+
Callable getEnclosingCallable(Node n) { n.getEnclosingCallable() = result }
17+
18+
predicate hiddenNode(Node n) { none() }
19+
20+
private newtype TSplit = TNone() { none() }
21+
22+
class Split extends TSplit {
23+
abstract string toString();
24+
25+
abstract CS::Location getLocation();
26+
27+
abstract predicate entry(Node n1, Node n2);
28+
29+
abstract predicate exit(Node n1, Node n2);
30+
31+
abstract predicate blocked(Node n1, Node n2);
32+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
private import csharp as CS
2+
3+
class Node extends CS::ControlFlow::Node { }
4+
5+
class CallNode extends Node {
6+
CS::Call call;
7+
8+
CallNode() { call = super.getAstNode() }
9+
10+
Callable getARuntimeTarget() { result = call.getARuntimeTarget() }
11+
}
12+
13+
class Callable = CS::Callable;
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* Provides C#-specific definitions for use in the control-flow library.
3+
*/
4+
5+
private import csharp
6+
private import codeql.globalcontrolflow.ControlFlow
7+
8+
module Private {
9+
import ControlFlowPrivate
10+
}
11+
12+
module Public {
13+
import ControlFlowPublic
14+
}
15+
16+
module CSharpControlFlow implements InputSig<Location> {
17+
import Private
18+
import Public
19+
}

cpp/ql/lib/semmle/code/cpp/interproccontrolflow/shared/internal/ControlFlowImpl.qll renamed to shared/global-controlflow/codeql/globalcontrolflow/internal/ControlFlowImpl.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
private import codeql.util.Unit
22
private import codeql.util.Location
3-
private import semmle.code.cpp.interproccontrolflow.shared.ControlFlow
3+
private import codeql.globalcontrolflow.ControlFlow
44

55
module MakeImpl<LocationSig Location, InputSig<Location> Lang> {
66
private import Lang

0 commit comments

Comments
 (0)