Skip to content

Commit 52e501c

Browse files
committed
C++: Extend the 'swap' taint tests with methods that do not have recognizable signatures (copy/move assignment).
1 parent fe0c5a9 commit 52e501c

File tree

6 files changed

+286
-232
lines changed

6 files changed

+286
-232
lines changed

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

Lines changed: 200 additions & 172 deletions
Large diffs are not rendered by default.

cpp/ql/test/library-tests/dataflow/taint-tests/swap1.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,19 @@ namespace IntWrapper
3737
return *this;
3838
}
3939

40+
Class &copy_assign(const Class &that) // copy assignment without the usual signature
41+
{
42+
auto tmp = that;
43+
swap(tmp);
44+
return *this;
45+
}
46+
47+
Class &move_assign(Class &&that) // move assignment without the usual signature
48+
{
49+
swap(that);
50+
return *this;
51+
}
52+
4053
void swap(Class &that) noexcept
4154
{
4255
using std::swap;

cpp/ql/test/library-tests/dataflow/taint-tests/swap2.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,19 @@ namespace IntWrapper
3737
return *this;
3838
}
3939

40+
Class &copy_assign(const Class &that) // copy assignment without the usual signature
41+
{
42+
auto tmp = that;
43+
swap(tmp);
44+
return *this;
45+
}
46+
47+
Class &move_assign(Class &&that) // move assignment without the usual signature
48+
{
49+
swap(that);
50+
return *this;
51+
}
52+
4053
void swap(Class &that) noexcept
4154
{
4255
using std::swap;

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

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -46,36 +46,36 @@
4646
| structlikeclass.cpp:60:8:60:9 | s1 | structlikeclass.cpp:55:40:55:45 | call to source |
4747
| structlikeclass.cpp:61:8:61:9 | s2 | structlikeclass.cpp:58:24:58:29 | call to source |
4848
| structlikeclass.cpp:62:8:62:20 | ... = ... | structlikeclass.cpp:62:13:62:18 | call to source |
49-
| swap1.cpp:60:12:60:16 | data1 | swap1.cpp:58:15:58:20 | call to source |
50-
| swap1.cpp:65:12:65:16 | data1 | swap1.cpp:56:23:56:23 | x |
51-
| swap1.cpp:65:12:65:16 | data1 | swap1.cpp:58:15:58:20 | call to source |
52-
| swap1.cpp:66:12:66:16 | data1 | swap1.cpp:58:15:58:20 | call to source |
53-
| swap1.cpp:70:13:70:17 | data1 | swap1.cpp:69:16:69:21 | call to source |
54-
| swap1.cpp:74:13:74:17 | data1 | swap1.cpp:69:16:69:21 | call to source |
55-
| swap1.cpp:75:13:75:17 | data1 | swap1.cpp:68:27:68:28 | z2 |
56-
| swap1.cpp:75:13:75:17 | data1 | swap1.cpp:69:16:69:21 | call to source |
57-
| swap1.cpp:84:12:84:16 | data1 | swap1.cpp:82:15:82:20 | call to source |
58-
| swap1.cpp:89:12:89:16 | data1 | swap1.cpp:80:23:80:23 | x |
59-
| swap1.cpp:89:12:89:16 | data1 | swap1.cpp:82:15:82:20 | call to source |
60-
| swap1.cpp:90:12:90:16 | data1 | swap1.cpp:82:15:82:20 | call to source |
61-
| swap1.cpp:98:20:98:24 | data1 | swap1.cpp:96:23:96:28 | call to source |
62-
| swap1.cpp:102:18:102:22 | data1 | swap1.cpp:95:23:95:31 | move_from |
63-
| swap1.cpp:102:18:102:22 | data1 | swap1.cpp:96:23:96:28 | call to source |
64-
| swap2.cpp:60:12:60:16 | data1 | swap2.cpp:58:15:58:20 | call to source |
65-
| swap2.cpp:65:12:65:16 | data1 | swap2.cpp:56:23:56:23 | x |
66-
| swap2.cpp:65:12:65:16 | data1 | swap2.cpp:58:15:58:20 | call to source |
67-
| swap2.cpp:66:12:66:16 | data1 | swap2.cpp:58:15:58:20 | call to source |
68-
| swap2.cpp:70:13:70:17 | data1 | swap2.cpp:69:16:69:21 | call to source |
69-
| swap2.cpp:74:13:74:17 | data1 | swap2.cpp:69:16:69:21 | call to source |
70-
| swap2.cpp:75:13:75:17 | data1 | swap2.cpp:68:27:68:28 | z2 |
71-
| swap2.cpp:75:13:75:17 | data1 | swap2.cpp:69:16:69:21 | call to source |
72-
| swap2.cpp:84:12:84:16 | data1 | swap2.cpp:82:15:82:20 | call to source |
73-
| swap2.cpp:89:12:89:16 | data1 | swap2.cpp:80:23:80:23 | x |
74-
| swap2.cpp:89:12:89:16 | data1 | swap2.cpp:82:15:82:20 | call to source |
75-
| swap2.cpp:90:12:90:16 | data1 | swap2.cpp:82:15:82:20 | call to source |
76-
| swap2.cpp:98:20:98:24 | data1 | swap2.cpp:96:23:96:28 | call to source |
77-
| swap2.cpp:102:18:102:22 | data1 | swap2.cpp:95:23:95:31 | move_from |
78-
| swap2.cpp:102:18:102:22 | data1 | swap2.cpp:96:23:96:28 | call to source |
49+
| swap1.cpp:73:12:73:16 | data1 | swap1.cpp:71:15:71:20 | call to source |
50+
| swap1.cpp:78:12:78:16 | data1 | swap1.cpp:69:23:69:23 | x |
51+
| swap1.cpp:78:12:78:16 | data1 | swap1.cpp:71:15:71:20 | call to source |
52+
| swap1.cpp:79:12:79:16 | data1 | swap1.cpp:71:15:71:20 | call to source |
53+
| swap1.cpp:83:13:83:17 | data1 | swap1.cpp:82:16:82:21 | call to source |
54+
| swap1.cpp:87:13:87:17 | data1 | swap1.cpp:82:16:82:21 | call to source |
55+
| swap1.cpp:88:13:88:17 | data1 | swap1.cpp:81:27:81:28 | z2 |
56+
| swap1.cpp:88:13:88:17 | data1 | swap1.cpp:82:16:82:21 | call to source |
57+
| swap1.cpp:97:12:97:16 | data1 | swap1.cpp:95:15:95:20 | call to source |
58+
| swap1.cpp:102:12:102:16 | data1 | swap1.cpp:93:23:93:23 | x |
59+
| swap1.cpp:102:12:102:16 | data1 | swap1.cpp:95:15:95:20 | call to source |
60+
| swap1.cpp:103:12:103:16 | data1 | swap1.cpp:95:15:95:20 | call to source |
61+
| swap1.cpp:111:20:111:24 | data1 | swap1.cpp:109:23:109:28 | call to source |
62+
| swap1.cpp:115:18:115:22 | data1 | swap1.cpp:108:23:108:31 | move_from |
63+
| swap1.cpp:115:18:115:22 | data1 | swap1.cpp:109:23:109:28 | call to source |
64+
| swap2.cpp:73:12:73:16 | data1 | swap2.cpp:71:15:71:20 | call to source |
65+
| swap2.cpp:78:12:78:16 | data1 | swap2.cpp:69:23:69:23 | x |
66+
| swap2.cpp:78:12:78:16 | data1 | swap2.cpp:71:15:71:20 | call to source |
67+
| swap2.cpp:79:12:79:16 | data1 | swap2.cpp:71:15:71:20 | call to source |
68+
| swap2.cpp:83:13:83:17 | data1 | swap2.cpp:82:16:82:21 | call to source |
69+
| swap2.cpp:87:13:87:17 | data1 | swap2.cpp:82:16:82:21 | call to source |
70+
| swap2.cpp:88:13:88:17 | data1 | swap2.cpp:81:27:81:28 | z2 |
71+
| swap2.cpp:88:13:88:17 | data1 | swap2.cpp:82:16:82:21 | call to source |
72+
| swap2.cpp:97:12:97:16 | data1 | swap2.cpp:95:15:95:20 | call to source |
73+
| swap2.cpp:102:12:102:16 | data1 | swap2.cpp:93:23:93:23 | x |
74+
| swap2.cpp:102:12:102:16 | data1 | swap2.cpp:95:15:95:20 | call to source |
75+
| swap2.cpp:103:12:103:16 | data1 | swap2.cpp:95:15:95:20 | call to source |
76+
| swap2.cpp:111:20:111:24 | data1 | swap2.cpp:109:23:109:28 | call to source |
77+
| swap2.cpp:115:18:115:22 | data1 | swap2.cpp:108:23:108:31 | move_from |
78+
| swap2.cpp:115:18:115:22 | data1 | swap2.cpp:109:23:109:28 | call to source |
7979
| taint.cpp:8:8:8:13 | clean1 | taint.cpp:4:27:4:33 | source1 |
8080
| taint.cpp:16:8:16:14 | source1 | taint.cpp:12:22:12:27 | call to source |
8181
| taint.cpp:17:8:17:16 | ++ ... | taint.cpp:12:22:12:27 | call to source |

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,16 @@
4040
| structlikeclass.cpp:36:8:36:9 | structlikeclass.cpp:30:24:30:29 | AST only |
4141
| structlikeclass.cpp:37:8:37:9 | structlikeclass.cpp:29:22:29:27 | AST only |
4242
| structlikeclass.cpp:60:8:60:9 | structlikeclass.cpp:55:40:55:45 | AST only |
43-
| swap1.cpp:65:12:65:16 | swap1.cpp:56:23:56:23 | AST only |
44-
| swap1.cpp:74:13:74:17 | swap1.cpp:69:16:69:21 | AST only |
45-
| swap1.cpp:75:13:75:17 | swap1.cpp:68:27:68:28 | AST only |
46-
| swap1.cpp:89:12:89:16 | swap1.cpp:80:23:80:23 | AST only |
47-
| swap1.cpp:102:18:102:22 | swap1.cpp:95:23:95:31 | AST only |
48-
| swap2.cpp:65:12:65:16 | swap2.cpp:56:23:56:23 | AST only |
49-
| swap2.cpp:74:13:74:17 | swap2.cpp:69:16:69:21 | AST only |
50-
| swap2.cpp:75:13:75:17 | swap2.cpp:68:27:68:28 | AST only |
51-
| swap2.cpp:89:12:89:16 | swap2.cpp:80:23:80:23 | AST only |
52-
| swap2.cpp:102:18:102:22 | swap2.cpp:95:23:95:31 | AST only |
43+
| swap1.cpp:78:12:78:16 | swap1.cpp:69:23:69:23 | AST only |
44+
| swap1.cpp:87:13:87:17 | swap1.cpp:82:16:82:21 | AST only |
45+
| swap1.cpp:88:13:88:17 | swap1.cpp:81:27:81:28 | AST only |
46+
| swap1.cpp:102:12:102:16 | swap1.cpp:93:23:93:23 | AST only |
47+
| swap1.cpp:115:18:115:22 | swap1.cpp:108:23:108:31 | AST only |
48+
| swap2.cpp:78:12:78:16 | swap2.cpp:69:23:69:23 | AST only |
49+
| swap2.cpp:87:13:87:17 | swap2.cpp:82:16:82:21 | AST only |
50+
| swap2.cpp:88:13:88:17 | swap2.cpp:81:27:81:28 | AST only |
51+
| swap2.cpp:102:12:102:16 | swap2.cpp:93:23:93:23 | AST only |
52+
| swap2.cpp:115:18:115:22 | swap2.cpp:108:23:108:31 | AST only |
5353
| taint.cpp:41:7:41:13 | taint.cpp:35:12:35:17 | AST only |
5454
| taint.cpp:42:7:42:13 | taint.cpp:35:12:35:17 | AST only |
5555
| taint.cpp:43:7:43:13 | taint.cpp:37:22:37:27 | AST only |

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

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,26 +8,26 @@
88
| structlikeclass.cpp:38:8:38:9 | s4 | structlikeclass.cpp:33:8:33:13 | call to source |
99
| structlikeclass.cpp:61:8:61:9 | s2 | structlikeclass.cpp:58:24:58:29 | call to source |
1010
| structlikeclass.cpp:62:8:62:20 | ... = ... | structlikeclass.cpp:62:13:62:18 | call to source |
11-
| swap1.cpp:60:12:60:16 | data1 | swap1.cpp:58:15:58:20 | call to source |
12-
| swap1.cpp:65:12:65:16 | data1 | swap1.cpp:58:15:58:20 | call to source |
13-
| swap1.cpp:66:12:66:16 | data1 | swap1.cpp:58:15:58:20 | call to source |
14-
| swap1.cpp:70:13:70:17 | data1 | swap1.cpp:69:16:69:21 | call to source |
15-
| swap1.cpp:75:13:75:17 | data1 | swap1.cpp:69:16:69:21 | call to source |
16-
| swap1.cpp:84:12:84:16 | data1 | swap1.cpp:82:15:82:20 | call to source |
17-
| swap1.cpp:89:12:89:16 | data1 | swap1.cpp:82:15:82:20 | call to source |
18-
| swap1.cpp:90:12:90:16 | data1 | swap1.cpp:82:15:82:20 | call to source |
19-
| swap1.cpp:98:20:98:24 | data1 | swap1.cpp:96:23:96:28 | call to source |
20-
| swap1.cpp:102:18:102:22 | data1 | swap1.cpp:96:23:96:28 | call to source |
21-
| swap2.cpp:60:12:60:16 | data1 | swap2.cpp:58:15:58:20 | call to source |
22-
| swap2.cpp:65:12:65:16 | data1 | swap2.cpp:58:15:58:20 | call to source |
23-
| swap2.cpp:66:12:66:16 | data1 | swap2.cpp:58:15:58:20 | call to source |
24-
| swap2.cpp:70:13:70:17 | data1 | swap2.cpp:69:16:69:21 | call to source |
25-
| swap2.cpp:75:13:75:17 | data1 | swap2.cpp:69:16:69:21 | call to source |
26-
| swap2.cpp:84:12:84:16 | data1 | swap2.cpp:82:15:82:20 | call to source |
27-
| swap2.cpp:89:12:89:16 | data1 | swap2.cpp:82:15:82:20 | call to source |
28-
| swap2.cpp:90:12:90:16 | data1 | swap2.cpp:82:15:82:20 | call to source |
29-
| swap2.cpp:98:20:98:24 | data1 | swap2.cpp:96:23:96:28 | call to source |
30-
| swap2.cpp:102:18:102:22 | data1 | swap2.cpp:96:23:96:28 | call to source |
11+
| swap1.cpp:73:12:73:16 | data1 | swap1.cpp:71:15:71:20 | call to source |
12+
| swap1.cpp:78:12:78:16 | data1 | swap1.cpp:71:15:71:20 | call to source |
13+
| swap1.cpp:79:12:79:16 | data1 | swap1.cpp:71:15:71:20 | call to source |
14+
| swap1.cpp:83:13:83:17 | data1 | swap1.cpp:82:16:82:21 | call to source |
15+
| swap1.cpp:88:13:88:17 | data1 | swap1.cpp:82:16:82:21 | call to source |
16+
| swap1.cpp:97:12:97:16 | data1 | swap1.cpp:95:15:95:20 | call to source |
17+
| swap1.cpp:102:12:102:16 | data1 | swap1.cpp:95:15:95:20 | call to source |
18+
| swap1.cpp:103:12:103:16 | data1 | swap1.cpp:95:15:95:20 | call to source |
19+
| swap1.cpp:111:20:111:24 | data1 | swap1.cpp:109:23:109:28 | call to source |
20+
| swap1.cpp:115:18:115:22 | data1 | swap1.cpp:109:23:109:28 | call to source |
21+
| swap2.cpp:73:12:73:16 | data1 | swap2.cpp:71:15:71:20 | call to source |
22+
| swap2.cpp:78:12:78:16 | data1 | swap2.cpp:71:15:71:20 | call to source |
23+
| swap2.cpp:79:12:79:16 | data1 | swap2.cpp:71:15:71:20 | call to source |
24+
| swap2.cpp:83:13:83:17 | data1 | swap2.cpp:82:16:82:21 | call to source |
25+
| swap2.cpp:88:13:88:17 | data1 | swap2.cpp:82:16:82:21 | call to source |
26+
| swap2.cpp:97:12:97:16 | data1 | swap2.cpp:95:15:95:20 | call to source |
27+
| swap2.cpp:102:12:102:16 | data1 | swap2.cpp:95:15:95:20 | call to source |
28+
| swap2.cpp:103:12:103:16 | data1 | swap2.cpp:95:15:95:20 | call to source |
29+
| swap2.cpp:111:20:111:24 | data1 | swap2.cpp:109:23:109:28 | call to source |
30+
| swap2.cpp:115:18:115:22 | data1 | swap2.cpp:109:23:109:28 | call to source |
3131
| taint.cpp:8:8:8:13 | clean1 | taint.cpp:4:27:4:33 | source1 |
3232
| taint.cpp:16:8:16:14 | source1 | taint.cpp:12:22:12:27 | call to source |
3333
| taint.cpp:17:8:17:16 | ++ ... | taint.cpp:12:22:12:27 | call to source |

0 commit comments

Comments
 (0)