Skip to content

Commit d565cfc

Browse files
committed
C++: Add a test of default constructors etc.
1 parent c196ea2 commit d565cfc

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed

cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | p#0 | |
4646
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | p#0 | |
4747
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | p#0 | |
48+
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | p#0 | |
4849
| format.cpp:16:21:16:21 | s | format.cpp:22:22:22:22 | s | |
4950
| format.cpp:16:31:16:31 | n | format.cpp:22:25:22:25 | n | |
5051
| format.cpp:16:46:16:51 | format | format.cpp:22:28:22:33 | format | |
@@ -292,6 +293,37 @@
292293
| stl.cpp:173:8:173:28 | call to basic_string | stl.cpp:173:3:173:28 | ... = ... | |
293294
| stl.cpp:173:8:173:28 | call to basic_string | stl.cpp:176:8:176:9 | s2 | |
294295
| stl.cpp:173:20:173:25 | call to source | stl.cpp:173:8:173:28 | call to basic_string | TAINT |
296+
| structlikeclass.cpp:5:7:5:7 | Unknown literal | structlikeclass.cpp:5:7:5:7 | constructor init of field v | TAINT |
297+
| structlikeclass.cpp:5:7:5:7 | Unknown literal | structlikeclass.cpp:5:7:5:7 | constructor init of field v | TAINT |
298+
| structlikeclass.cpp:5:7:5:7 | this | structlikeclass.cpp:5:7:5:7 | constructor init of field v [pre-this] | |
299+
| structlikeclass.cpp:5:7:5:7 | this | structlikeclass.cpp:5:7:5:7 | constructor init of field v [pre-this] | |
300+
| structlikeclass.cpp:7:2:7:16 | this | structlikeclass.cpp:7:32:7:36 | constructor init of field v [pre-this] | |
301+
| structlikeclass.cpp:7:22:7:23 | _v | structlikeclass.cpp:7:34:7:35 | _v | |
302+
| structlikeclass.cpp:7:34:7:35 | _v | structlikeclass.cpp:7:32:7:36 | constructor init of field v | TAINT |
303+
| structlikeclass.cpp:15:22:15:23 | call to StructLikeClass | structlikeclass.cpp:17:22:17:23 | s1 | |
304+
| structlikeclass.cpp:15:22:15:23 | call to StructLikeClass | structlikeclass.cpp:21:8:21:9 | s1 | |
305+
| structlikeclass.cpp:16:23:16:24 | call to StructLikeClass | structlikeclass.cpp:22:8:22:9 | s2 | |
306+
| structlikeclass.cpp:17:22:17:23 | s1 | structlikeclass.cpp:23:8:23:9 | s3 | |
307+
| structlikeclass.cpp:19:8:19:8 | call to StructLikeClass | structlikeclass.cpp:19:3:19:8 | ... = ... | |
308+
| structlikeclass.cpp:19:8:19:8 | call to StructLikeClass | structlikeclass.cpp:24:8:24:9 | s4 | |
309+
| structlikeclass.cpp:28:22:28:30 | call to StructLikeClass | structlikeclass.cpp:30:22:30:23 | s1 | |
310+
| structlikeclass.cpp:28:22:28:30 | call to StructLikeClass | structlikeclass.cpp:34:8:34:9 | s1 | |
311+
| structlikeclass.cpp:29:23:29:31 | call to StructLikeClass | structlikeclass.cpp:35:8:35:9 | s2 | |
312+
| structlikeclass.cpp:30:22:30:23 | s1 | structlikeclass.cpp:36:8:36:9 | s3 | |
313+
| structlikeclass.cpp:32:8:32:15 | call to StructLikeClass | structlikeclass.cpp:32:3:32:15 | ... = ... | |
314+
| structlikeclass.cpp:32:8:32:15 | call to StructLikeClass | structlikeclass.cpp:37:8:37:9 | s4 | |
315+
| structlikeclass.cpp:41:19:41:20 | call to StructLikeClass | structlikeclass.cpp:42:24:42:25 | s1 | |
316+
| structlikeclass.cpp:41:19:41:20 | call to StructLikeClass | structlikeclass.cpp:43:22:43:23 | s1 | |
317+
| structlikeclass.cpp:41:19:41:20 | call to StructLikeClass | structlikeclass.cpp:45:8:45:9 | s1 | |
318+
| structlikeclass.cpp:41:19:41:20 | call to StructLikeClass | structlikeclass.cpp:47:8:47:9 | s1 | |
319+
| structlikeclass.cpp:42:24:42:25 | s1 | structlikeclass.cpp:48:8:48:9 | s2 | |
320+
| structlikeclass.cpp:43:22:43:23 | s1 | structlikeclass.cpp:49:8:49:9 | s3 | |
321+
| structlikeclass.cpp:45:8:45:9 | s1 | structlikeclass.cpp:45:3:45:9 | ... = ... | |
322+
| structlikeclass.cpp:45:8:45:9 | s1 | structlikeclass.cpp:50:8:50:9 | s4 | |
323+
| structlikeclass.cpp:54:23:54:48 | call to StructLikeClass | structlikeclass.cpp:59:8:59:9 | s1 | |
324+
| structlikeclass.cpp:57:8:57:32 | call to StructLikeClass | structlikeclass.cpp:57:3:57:32 | ... = ... | |
325+
| structlikeclass.cpp:57:8:57:32 | call to StructLikeClass | structlikeclass.cpp:60:8:60:9 | s2 | |
326+
| structlikeclass.cpp:61:13:61:20 | call to StructLikeClass | structlikeclass.cpp:61:8:61:20 | ... = ... | |
295327
| swap1.cpp:14:17:14:17 | t | swap1.cpp:14:17:14:17 | t | |
296328
| swap1.cpp:14:17:14:17 | t | swap1.cpp:14:17:14:17 | t | |
297329
| swap1.cpp:14:17:14:17 | t | swap1.cpp:14:56:14:56 | t | |
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
2+
int source();
3+
void sink(...) {};
4+
5+
class StructLikeClass {
6+
public:
7+
StructLikeClass(int _v = 0) : v(_v) {} // Constructor
8+
9+
int v;
10+
};
11+
12+
void test_structlikeclass()
13+
{
14+
{
15+
StructLikeClass s1(1);
16+
StructLikeClass s2 = 1;
17+
StructLikeClass s3(s1);
18+
StructLikeClass s4;
19+
s4 = 1;
20+
21+
sink(s1);
22+
sink(s2);
23+
sink(s3);
24+
sink(s4);
25+
}
26+
27+
{
28+
StructLikeClass s1(source());
29+
StructLikeClass s2 = source();
30+
StructLikeClass s3(s1);
31+
StructLikeClass s4;
32+
s4 = source();
33+
34+
sink(s1); // tainted [NOT DETECTED]
35+
sink(s2); // tainted [NOT DETECTED]
36+
sink(s3); // tainted [NOT DETECTED]
37+
sink(s4); // tainted [NOT DETECTED]
38+
}
39+
40+
{
41+
StructLikeClass s1;
42+
StructLikeClass s2 = s1;
43+
StructLikeClass s3(s1);
44+
StructLikeClass s4;
45+
s4 = s1;
46+
47+
sink(s1);
48+
sink(s2);
49+
sink(s3);
50+
sink(s4);
51+
}
52+
53+
{
54+
StructLikeClass s1 = StructLikeClass(source());
55+
StructLikeClass s2;
56+
StructLikeClass s3;
57+
s2 = StructLikeClass(source());
58+
59+
sink(s1); // tainted [NOT DETECTED]
60+
sink(s2); // tainted [NOT DETECTED]
61+
sink(s3 = source()); // tainted [NOT DETECTED]
62+
}
63+
}

0 commit comments

Comments
 (0)