Skip to content

Commit 6e2702c

Browse files
committed
Rust: Add some taint tests involving tuples.
1 parent 1a2f722 commit 6e2702c

File tree

3 files changed

+116
-0
lines changed

3 files changed

+116
-0
lines changed

rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,27 @@
1717
| main.rs:72:24:72:27 | s[1] [pre-dereferenced] | main.rs:72:24:72:27 | s[1] |
1818
| main.rs:77:9:77:12 | [post] arr2 [borrowed] | main.rs:77:9:77:12 | [post] arr2 |
1919
| main.rs:77:9:77:15 | arr2[1] [pre-dereferenced] | main.rs:77:9:77:15 | arr2[1] |
20+
| main.rs:98:14:98:47 | TupleExpr | main.rs:98:14:98:49 | ... .0 |
21+
| main.rs:99:14:99:47 | TupleExpr | main.rs:99:14:99:49 | ... .1 |
22+
| main.rs:102:14:102:28 | source_tuple(...) | main.rs:102:14:102:30 | ... .0 |
23+
| main.rs:103:14:103:28 | source_tuple(...) | main.rs:103:14:103:30 | ... .1 |
24+
| main.rs:106:14:106:83 | TupleExpr | main.rs:106:14:106:85 | ... .0 |
25+
| main.rs:107:14:107:83 | TupleExpr | main.rs:107:14:107:85 | ... .0 |
26+
| main.rs:107:14:107:85 | ... .0 | main.rs:107:14:107:87 | ... .0 |
27+
| main.rs:108:14:108:83 | TupleExpr | main.rs:108:14:108:85 | ... .0 |
28+
| main.rs:108:14:108:85 | ... .0 | main.rs:108:14:108:87 | ... .1 |
29+
| main.rs:109:14:109:83 | TupleExpr | main.rs:109:14:109:85 | ... .1 |
30+
| main.rs:110:14:110:83 | TupleExpr | main.rs:110:14:110:85 | ... .1 |
31+
| main.rs:110:14:110:85 | ... .1 | main.rs:110:14:110:87 | ... .0 |
32+
| main.rs:111:14:111:83 | TupleExpr | main.rs:111:14:111:85 | ... .1 |
33+
| main.rs:111:14:111:85 | ... .1 | main.rs:111:14:111:87 | ... .1 |
34+
| main.rs:114:14:114:64 | TupleExpr | main.rs:114:14:114:66 | ... .0 |
35+
| main.rs:115:14:115:64 | TupleExpr | main.rs:115:14:115:66 | ... .0 |
36+
| main.rs:115:14:115:66 | ... .0 | main.rs:115:14:115:68 | ... .0 |
37+
| main.rs:116:14:116:64 | TupleExpr | main.rs:116:14:116:66 | ... .0 |
38+
| main.rs:116:14:116:66 | ... .0 | main.rs:116:14:116:68 | ... .1 |
39+
| main.rs:117:14:117:64 | TupleExpr | main.rs:117:14:117:66 | ... .1 |
40+
| main.rs:118:14:118:64 | TupleExpr | main.rs:118:14:118:66 | ... .1 |
41+
| main.rs:118:14:118:66 | ... .1 | main.rs:118:14:118:68 | ... .0 |
42+
| main.rs:119:14:119:64 | TupleExpr | main.rs:119:14:119:66 | ... .1 |
43+
| main.rs:119:14:119:66 | ... .1 | main.rs:119:14:119:68 | ... .1 |

rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,22 @@ edges
3434
| main.rs:62:14:62:16 | arr | main.rs:62:14:62:19 | arr[1] | provenance | MaD:6 |
3535
| main.rs:77:9:77:12 | [post] arr2 [element] | main.rs:78:14:78:17 | arr2 | provenance | |
3636
| main.rs:77:19:77:28 | source(...) | main.rs:77:9:77:12 | [post] arr2 [element] | provenance | |
37+
| main.rs:98:14:98:47 | TupleExpr [tuple.0] | main.rs:98:14:98:49 | ... .0 | provenance | |
38+
| main.rs:98:15:98:30 | source_string(...) | main.rs:98:14:98:47 | TupleExpr [tuple.0] | provenance | |
39+
| main.rs:102:14:102:28 | source_tuple(...) | main.rs:102:14:102:30 | ... .0 | provenance | |
40+
| main.rs:103:14:103:28 | source_tuple(...) | main.rs:103:14:103:30 | ... .1 | provenance | |
41+
| main.rs:108:14:108:83 | TupleExpr [tuple.0, tuple.1] | main.rs:108:14:108:85 | ... .0 [tuple.1] | provenance | |
42+
| main.rs:108:14:108:85 | ... .0 [tuple.1] | main.rs:108:14:108:87 | ... .1 | provenance | |
43+
| main.rs:108:15:108:48 | TupleExpr [tuple.1] | main.rs:108:14:108:83 | TupleExpr [tuple.0, tuple.1] | provenance | |
44+
| main.rs:108:32:108:47 | source_string(...) | main.rs:108:15:108:48 | TupleExpr [tuple.1] | provenance | |
45+
| main.rs:114:14:114:64 | TupleExpr [tuple.0] | main.rs:114:14:114:66 | ... .0 | provenance | |
46+
| main.rs:114:15:114:29 | source_tuple(...) | main.rs:114:14:114:64 | TupleExpr [tuple.0] | provenance | |
47+
| main.rs:115:14:115:64 | TupleExpr [tuple.0] | main.rs:115:14:115:66 | ... .0 | provenance | |
48+
| main.rs:115:14:115:66 | ... .0 | main.rs:115:14:115:68 | ... .0 | provenance | |
49+
| main.rs:115:15:115:29 | source_tuple(...) | main.rs:115:14:115:64 | TupleExpr [tuple.0] | provenance | |
50+
| main.rs:116:14:116:64 | TupleExpr [tuple.0] | main.rs:116:14:116:66 | ... .0 | provenance | |
51+
| main.rs:116:14:116:66 | ... .0 | main.rs:116:14:116:68 | ... .1 | provenance | |
52+
| main.rs:116:15:116:29 | source_tuple(...) | main.rs:116:14:116:64 | TupleExpr [tuple.0] | provenance | |
3753
nodes
3854
| main.rs:12:9:12:9 | a | semmle.label | a |
3955
| main.rs:12:13:12:22 | source(...) | semmle.label | source(...) |
@@ -67,8 +83,36 @@ nodes
6783
| main.rs:77:9:77:12 | [post] arr2 [element] | semmle.label | [post] arr2 [element] |
6884
| main.rs:77:19:77:28 | source(...) | semmle.label | source(...) |
6985
| main.rs:78:14:78:17 | arr2 | semmle.label | arr2 |
86+
| main.rs:98:14:98:47 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] |
87+
| main.rs:98:14:98:49 | ... .0 | semmle.label | ... .0 |
88+
| main.rs:98:15:98:30 | source_string(...) | semmle.label | source_string(...) |
89+
| main.rs:101:14:101:28 | source_tuple(...) | semmle.label | source_tuple(...) |
90+
| main.rs:102:14:102:28 | source_tuple(...) | semmle.label | source_tuple(...) |
91+
| main.rs:102:14:102:30 | ... .0 | semmle.label | ... .0 |
92+
| main.rs:103:14:103:28 | source_tuple(...) | semmle.label | source_tuple(...) |
93+
| main.rs:103:14:103:30 | ... .1 | semmle.label | ... .1 |
94+
| main.rs:108:14:108:83 | TupleExpr [tuple.0, tuple.1] | semmle.label | TupleExpr [tuple.0, tuple.1] |
95+
| main.rs:108:14:108:85 | ... .0 [tuple.1] | semmle.label | ... .0 [tuple.1] |
96+
| main.rs:108:14:108:87 | ... .1 | semmle.label | ... .1 |
97+
| main.rs:108:15:108:48 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] |
98+
| main.rs:108:32:108:47 | source_string(...) | semmle.label | source_string(...) |
99+
| main.rs:114:14:114:64 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] |
100+
| main.rs:114:14:114:66 | ... .0 | semmle.label | ... .0 |
101+
| main.rs:114:15:114:29 | source_tuple(...) | semmle.label | source_tuple(...) |
102+
| main.rs:115:14:115:64 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] |
103+
| main.rs:115:14:115:66 | ... .0 | semmle.label | ... .0 |
104+
| main.rs:115:14:115:68 | ... .0 | semmle.label | ... .0 |
105+
| main.rs:115:15:115:29 | source_tuple(...) | semmle.label | source_tuple(...) |
106+
| main.rs:116:14:116:64 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] |
107+
| main.rs:116:14:116:66 | ... .0 | semmle.label | ... .0 |
108+
| main.rs:116:14:116:68 | ... .1 | semmle.label | ... .1 |
109+
| main.rs:116:15:116:29 | source_tuple(...) | semmle.label | source_tuple(...) |
70110
subpaths
71111
testFailures
112+
| main.rs:102:14:102:30 | ... .0 | Fixed missing result: hasTaintFlow=2 |
113+
| main.rs:103:14:103:30 | ... .1 | Fixed missing result: hasTaintFlow=2 |
114+
| main.rs:115:14:115:68 | ... .0 | Fixed missing result: hasTaintFlow=4 |
115+
| main.rs:116:14:116:68 | ... .1 | Fixed missing result: hasTaintFlow=4 |
72116
#select
73117
| main.rs:13:10:13:14 | ... + ... | main.rs:12:13:12:22 | source(...) | main.rs:13:10:13:14 | ... + ... | $@ | main.rs:12:13:12:22 | source(...) | source(...) |
74118
| main.rs:17:10:17:10 | b | main.rs:15:17:15:26 | source(...) | main.rs:17:10:17:10 | b | $@ | main.rs:15:17:15:26 | source(...) | source(...) |
@@ -78,3 +122,11 @@ testFailures
78122
| main.rs:47:14:47:19 | sliced | main.rs:45:17:45:26 | source(...) | main.rs:47:14:47:19 | sliced | $@ | main.rs:45:17:45:26 | source(...) | source(...) |
79123
| main.rs:62:14:62:19 | arr[1] | main.rs:61:19:61:28 | source(...) | main.rs:62:14:62:19 | arr[1] | $@ | main.rs:61:19:61:28 | source(...) | source(...) |
80124
| main.rs:78:14:78:17 | arr2 | main.rs:77:19:77:28 | source(...) | main.rs:78:14:78:17 | arr2 | $@ | main.rs:77:19:77:28 | source(...) | source(...) |
125+
| main.rs:98:14:98:49 | ... .0 | main.rs:98:15:98:30 | source_string(...) | main.rs:98:14:98:49 | ... .0 | $@ | main.rs:98:15:98:30 | source_string(...) | source_string(...) |
126+
| main.rs:101:14:101:28 | source_tuple(...) | main.rs:101:14:101:28 | source_tuple(...) | main.rs:101:14:101:28 | source_tuple(...) | $@ | main.rs:101:14:101:28 | source_tuple(...) | source_tuple(...) |
127+
| main.rs:102:14:102:30 | ... .0 | main.rs:102:14:102:28 | source_tuple(...) | main.rs:102:14:102:30 | ... .0 | $@ | main.rs:102:14:102:28 | source_tuple(...) | source_tuple(...) |
128+
| main.rs:103:14:103:30 | ... .1 | main.rs:103:14:103:28 | source_tuple(...) | main.rs:103:14:103:30 | ... .1 | $@ | main.rs:103:14:103:28 | source_tuple(...) | source_tuple(...) |
129+
| main.rs:108:14:108:87 | ... .1 | main.rs:108:32:108:47 | source_string(...) | main.rs:108:14:108:87 | ... .1 | $@ | main.rs:108:32:108:47 | source_string(...) | source_string(...) |
130+
| main.rs:114:14:114:66 | ... .0 | main.rs:114:15:114:29 | source_tuple(...) | main.rs:114:14:114:66 | ... .0 | $@ | main.rs:114:15:114:29 | source_tuple(...) | source_tuple(...) |
131+
| main.rs:115:14:115:68 | ... .0 | main.rs:115:15:115:29 | source_tuple(...) | main.rs:115:14:115:68 | ... .0 | $@ | main.rs:115:15:115:29 | source_tuple(...) | source_tuple(...) |
132+
| main.rs:116:14:116:68 | ... .1 | main.rs:116:15:116:29 | source_tuple(...) | main.rs:116:14:116:68 | ... .1 | $@ | main.rs:116:15:116:29 | source_tuple(...) | source_tuple(...) |

rust/ql/test/library-tests/dataflow/taint/main.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,51 @@ mod array_sink {
8181

8282
use string::*;
8383

84+
mod tuples {
85+
fn source_string(i: i64) -> String {
86+
"".to_string()
87+
}
88+
89+
fn source_tuple(i: i64) -> (String, String) {
90+
("".to_string(), "".to_string())
91+
}
92+
93+
fn sink<T>(t: T) {
94+
}
95+
96+
pub fn tuples() {
97+
sink((source_string(1), "".to_string()));
98+
sink((source_string(1), "".to_string()).0); // $ hasValueFlow=1
99+
sink((source_string(1), "".to_string()).1);
100+
101+
sink(source_tuple(2)); // $ hasValueFlow=2
102+
sink(source_tuple(2).0); // $ MISSING: hasTaintFlow=2
103+
sink(source_tuple(2).1); // $ MISSING: hasTaintFlow=2
104+
105+
sink((("".to_string(), source_string(3)), ("".to_string(), "".to_string())));
106+
sink((("".to_string(), source_string(3)), ("".to_string(), "".to_string())).0);
107+
sink((("".to_string(), source_string(3)), ("".to_string(), "".to_string())).0.0);
108+
sink((("".to_string(), source_string(3)), ("".to_string(), "".to_string())).0.1); // $ hasValueFlow=3
109+
sink((("".to_string(), source_string(3)), ("".to_string(), "".to_string())).1);
110+
sink((("".to_string(), source_string(3)), ("".to_string(), "".to_string())).1.0);
111+
sink((("".to_string(), source_string(3)), ("".to_string(), "".to_string())).1.1);
112+
113+
sink((source_tuple(4), ("".to_string(), "".to_string())));
114+
sink((source_tuple(4), ("".to_string(), "".to_string())).0); // $ hasValueFlow=4
115+
sink((source_tuple(4), ("".to_string(), "".to_string())).0.0); // $ MISSING: hasTaintFlow=4
116+
sink((source_tuple(4), ("".to_string(), "".to_string())).0.1); // $ MISSING: hasTaintFlow=4
117+
sink((source_tuple(4), ("".to_string(), "".to_string())).1);
118+
sink((source_tuple(4), ("".to_string(), "".to_string())).1.0);
119+
sink((source_tuple(4), ("".to_string(), "".to_string())).1.1);
120+
}
121+
}
122+
84123
fn main() {
85124
addition();
86125
negation();
87126
cast();
88127
string_slice();
89128
array_source::array_tainted();
90129
array_sink::array_with_taint();
130+
tuples::tuples();
91131
}

0 commit comments

Comments
 (0)