Skip to content

Commit b693ef5

Browse files
committed
C++: Put a little bit of content in the StackVariableReachability test.
1 parent 166be06 commit b693ef5

File tree

5 files changed

+90
-2
lines changed

5 files changed

+90
-2
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
| stackVariableReachability.c:11:2:11:2 | a | ... + ... |
2+
| stackVariableReachability.c:11:6:11:6 | a | 10 |
3+
| stackVariableReachability.c:12:2:12:2 | a | 40 |
4+
| stackVariableReachability.c:13:2:13:2 | a | 40 |
5+
| stackVariableReachability.c:14:4:14:4 | a | 40 |
6+
| stackVariableReachability.c:15:2:15:2 | a | call to f |
7+
| stackVariableReachability.c:15:8:15:8 | a | 40 |
8+
| stackVariableReachability.c:16:2:16:2 | a | call to f |
9+
| stackVariableReachability.c:19:3:19:3 | b | 50 |
10+
| stackVariableReachability.c:21:3:21:3 | b | 60 |
11+
| stackVariableReachability.c:23:2:23:2 | c | b |
12+
| stackVariableReachability.c:23:6:23:6 | b | 50, 60 |
13+
| stackVariableReachability.c:24:2:24:2 | c | 50, 60, b |
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import cpp
2+
import semmle.code.cpp.controlflow.StackVariableReachability
3+
4+
class MyStackVariableReachability extends StackVariableReachabilityWithReassignment {
5+
MyStackVariableReachability() { this = "MyStackVariableReachability" }
6+
7+
override predicate isSourceActual(ControlFlowNode node, StackVariable v) {
8+
exprDefinition(v, _, node)
9+
}
10+
11+
override predicate isSinkActual(ControlFlowNode node, StackVariable v) {
12+
node.(VariableAccess).getTarget() = v
13+
}
14+
15+
override predicate isBarrier(ControlFlowNode node, StackVariable v) {
16+
exprDefinition(v, _, node)
17+
}
18+
}
19+
20+
from MyStackVariableReachability svr, ControlFlowNode sink
21+
select sink, strictconcat(Expr source | svr.reaches(source, _, sink) | source.toString(), ", ")
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
2+
int cond();
3+
int f(int x);
4+
5+
void test(int p)
6+
{
7+
int a = 10;
8+
int b = 20;
9+
int c = 30;
10+
11+
a = a + 1;
12+
a = 40;
13+
a++;
14+
++a;
15+
a = f(a);
16+
a;
17+
18+
if (cond()) {
19+
b = 50;
20+
} else {
21+
b = 60;
22+
}
23+
c = b;
24+
c;
25+
}
Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,13 @@
1-
| Test for deprecated library StackVariableReachability. |
1+
| stackVariableReachability.c:11:2:11:2 | a | ... + ... |
2+
| stackVariableReachability.c:11:6:11:6 | a | 10 |
3+
| stackVariableReachability.c:12:2:12:2 | a | 40 |
4+
| stackVariableReachability.c:13:2:13:2 | a | 40 |
5+
| stackVariableReachability.c:14:4:14:4 | a | 40 |
6+
| stackVariableReachability.c:15:2:15:2 | a | call to f |
7+
| stackVariableReachability.c:15:8:15:8 | a | 40 |
8+
| stackVariableReachability.c:16:2:16:2 | a | call to f |
9+
| stackVariableReachability.c:19:3:19:3 | b | 50 |
10+
| stackVariableReachability.c:21:3:21:3 | b | 60 |
11+
| stackVariableReachability.c:23:2:23:2 | c | b |
12+
| stackVariableReachability.c:23:6:23:6 | b | 50, 60 |
13+
| stackVariableReachability.c:24:2:24:2 | c | b |
Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,21 @@
11
import cpp
22
import semmle.code.cpp.controlflow.StackVariableReachability
33

4-
select "Test for deprecated library StackVariableReachability."
4+
class MyStackVariableReachability extends StackVariableReachability {
5+
MyStackVariableReachability() { this = "MyStackVariableReachability" }
6+
7+
override predicate isSource(ControlFlowNode node, StackVariable v) {
8+
exprDefinition(v, _, node)
9+
}
10+
11+
override predicate isSink(ControlFlowNode node, StackVariable v) {
12+
node.(VariableAccess).getTarget() = v
13+
}
14+
15+
override predicate isBarrier(ControlFlowNode node, StackVariable v) {
16+
exprDefinition(v, _, node)
17+
}
18+
}
19+
20+
from MyStackVariableReachability svr, ControlFlowNode sink
21+
select sink, strictconcat(Expr source | svr.reaches(source, _, sink) | source.toString(), ", ")

0 commit comments

Comments
 (0)