File tree Expand file tree Collapse file tree 3 files changed +68
-0
lines changed
cpp/ql/test/library-tests/controlflow/dereferenced Expand file tree Collapse file tree 3 files changed +68
-0
lines changed Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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 |
Original file line number Diff line number Diff line change 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
You can’t perform that action at this time.
0 commit comments