Skip to content

Commit 503a1b5

Browse files
authored
Merge pull request #21107 from geoffw0/rusttest
Rust: Additional test cases for tuple content.
2 parents 77b0c4b + 13df236 commit 503a1b5

File tree

3 files changed

+112
-0
lines changed

3 files changed

+112
-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: 48 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,6 +83,30 @@ 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
72112
#select
@@ -78,3 +118,11 @@ testFailures
78118
| 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(...) |
79119
| 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(...) |
80120
| 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(...) |
121+
| 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(...) |
122+
| 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(...) |
123+
| 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(...) |
124+
| 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(...) |
125+
| 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(...) |
126+
| 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(...) |
127+
| 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(...) |
128+
| 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); // $ hasTaintFlow=2
103+
sink(source_tuple(2).1); // $ 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); // $ hasTaintFlow=4
116+
sink((source_tuple(4), ("".to_string(), "".to_string())).0.1); // $ 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)