Skip to content

Commit fceea04

Browse files
authored
Merge pull request #9550 from geoffw0/deref
C++: Add test for Dereferenced.qll.
2 parents a1c0048 + 2683d01 commit fceea04

File tree

3 files changed

+68
-0
lines changed

3 files changed

+68
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
2+
int *global_ptr;
3+
const char *global_string = "hello, world";
4+
5+
void test1(int *ptr, int &ref)
6+
{
7+
const char *str;
8+
int v, *p;
9+
char c;
10+
11+
v = *ptr; // `ptr` dereferenced
12+
v = ptr[0]; // `ptr` dereferenced
13+
p = ptr;
14+
15+
*ptr = 0; // `ptr` dereferenced
16+
ptr[0] = 0; // `ptr` dereferenced
17+
ptr = 0;
18+
19+
(*ptr)++; // `ptr`, `*ptr` dereferenced
20+
*(ptr++); // `ptr++` dereferenced
21+
ptr++;
22+
23+
v = ref; // (`ref` implicitly dereferenced, not detected)
24+
p = &ref;
25+
ref = 0; // (`ref` implicitly dereferenced, not detected)
26+
ref++; // (`ref` implicitly dereferenced, not detected)
27+
28+
*global_ptr; // `global_ptr` dereferenced
29+
str = global_string;
30+
c = global_string[5]; // `global_string` dereferenced
31+
}
32+
33+
struct myStruct
34+
{
35+
int x;
36+
void f() {};
37+
void (*g)();
38+
};
39+
40+
void test1(myStruct *ms)
41+
{
42+
void (*h)();
43+
44+
ms;
45+
ms->x; // `ms` dereferenced
46+
ms->f(); // `ms` dereferenced
47+
ms->g(); // `ms` dereferenced
48+
h = ms->g; // `ms` dereferenced
49+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
| dereferenced.cpp:11:6:11:9 | * ... | dereferenced.cpp:11:7:11:9 | ptr |
2+
| dereferenced.cpp:12:6:12:11 | access to array | dereferenced.cpp:12:6:12:8 | ptr |
3+
| dereferenced.cpp:15:2:15:5 | * ... | dereferenced.cpp:15:3:15:5 | ptr |
4+
| dereferenced.cpp:16:2:16:7 | access to array | dereferenced.cpp:16:2:16:4 | ptr |
5+
| dereferenced.cpp:19:3:19:6 | * ... | dereferenced.cpp:19:4:19:6 | ptr |
6+
| dereferenced.cpp:19:4:19:6 | ptr | dereferenced.cpp:19:3:19:6 | * ... |
7+
| dereferenced.cpp:20:2:20:9 | * ... | dereferenced.cpp:20:4:20:8 | ... ++ |
8+
| dereferenced.cpp:28:2:28:12 | * ... | dereferenced.cpp:28:3:28:12 | global_ptr |
9+
| dereferenced.cpp:30:6:30:21 | access to array | dereferenced.cpp:30:6:30:18 | global_string |
10+
| dereferenced.cpp:45:6:45:6 | x | dereferenced.cpp:45:2:45:3 | ms |
11+
| dereferenced.cpp:46:6:46:6 | call to f | dereferenced.cpp:46:2:46:3 | ms |
12+
| dereferenced.cpp:47:6:47:6 | g | dereferenced.cpp:47:2:47:3 | ms |
13+
| dereferenced.cpp:48:10:48:10 | g | dereferenced.cpp:48:6:48:7 | ms |
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import cpp
2+
import semmle.code.cpp.controlflow.Dereferenced
3+
4+
from Expr op, Expr e
5+
where dereferencedByOperation(op, e) // => dereferenced(e)
6+
select op, e

0 commit comments

Comments
 (0)