Skip to content

Commit 810dd55

Browse files
committed
Rust: Add test cases for flow through async / await.
1 parent ff53d42 commit 810dd55

File tree

4 files changed

+60
-8
lines changed

4 files changed

+60
-8
lines changed

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ edges
4242
| main.rs:101:13:101:30 | mn.data_through(...) | main.rs:101:9:101:9 | b | provenance | |
4343
| main.rs:101:29:101:29 | a | main.rs:77:28:77:33 | ...: i64 | provenance | |
4444
| main.rs:101:29:101:29 | a | main.rs:101:13:101:30 | mn.data_through(...) | provenance | |
45+
| main.rs:138:9:138:9 | a | main.rs:139:10:139:10 | a | provenance | |
46+
| main.rs:138:13:138:21 | source(...) | main.rs:138:9:138:9 | a | provenance | |
47+
| main.rs:148:13:148:13 | c | main.rs:149:14:149:14 | c | provenance | |
48+
| main.rs:148:17:148:25 | source(...) | main.rs:148:13:148:13 | c | provenance | |
4549
nodes
4650
| main.rs:12:28:14:1 | { ... } | semmle.label | { ... } |
4751
| main.rs:13:5:13:13 | source(...) | semmle.label | source(...) |
@@ -92,6 +96,12 @@ nodes
9296
| main.rs:101:13:101:30 | mn.data_through(...) | semmle.label | mn.data_through(...) |
9397
| main.rs:101:29:101:29 | a | semmle.label | a |
9498
| main.rs:102:10:102:10 | b | semmle.label | b |
99+
| main.rs:138:9:138:9 | a | semmle.label | a |
100+
| main.rs:138:13:138:21 | source(...) | semmle.label | source(...) |
101+
| main.rs:139:10:139:10 | a | semmle.label | a |
102+
| main.rs:148:13:148:13 | c | semmle.label | c |
103+
| main.rs:148:17:148:25 | source(...) | semmle.label | source(...) |
104+
| main.rs:149:14:149:14 | c | semmle.label | c |
95105
subpaths
96106
| main.rs:36:26:36:26 | a | main.rs:30:17:30:22 | ...: i64 | main.rs:30:32:32:1 | { ... } | main.rs:36:13:36:27 | pass_through(...) |
97107
| main.rs:41:26:44:5 | { ... } | main.rs:30:17:30:22 | ...: i64 | main.rs:30:32:32:1 | { ... } | main.rs:41:13:44:6 | pass_through(...) |
@@ -107,3 +117,5 @@ testFailures
107117
| main.rs:68:14:68:14 | n | main.rs:94:13:94:21 | source(...) | main.rs:68:14:68:14 | n | $@ | main.rs:94:13:94:21 | source(...) | source(...) |
108118
| main.rs:89:10:89:10 | a | main.rs:74:13:74:21 | source(...) | main.rs:89:10:89:10 | a | $@ | main.rs:74:13:74:21 | source(...) | source(...) |
109119
| main.rs:102:10:102:10 | b | main.rs:100:13:100:21 | source(...) | main.rs:102:10:102:10 | b | $@ | main.rs:100:13:100:21 | source(...) | source(...) |
120+
| main.rs:139:10:139:10 | a | main.rs:138:13:138:21 | source(...) | main.rs:139:10:139:10 | a | $@ | main.rs:138:13:138:21 | source(...) | source(...) |
121+
| main.rs:149:14:149:14 | c | main.rs:148:17:148:25 | source(...) | main.rs:149:14:149:14 | c | $@ | main.rs:148:17:148:25 | source(...) | source(...) |

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,31 @@ pub fn test_operator_overloading() {
134134
sink(d.value); // $ MISSING: hasValueFlow=7
135135
}
136136

137+
async fn async_source() -> i64 {
138+
let a = source(1);
139+
sink(a); // $ hasValueFlow=1
140+
a
141+
}
142+
143+
async fn test_async_await_async_part() {
144+
let a = async_source().await;
145+
sink(a); // $ MISSING: hasValueFlow=1
146+
147+
let b = async {
148+
let c = source(2);
149+
sink(c); // $ hasValueFlow=2
150+
c
151+
};
152+
sink(b.await); // $ MISSING: hasValueFlow=2
153+
}
154+
155+
fn test_async_await() {
156+
let a = futures::executor::block_on(async_source());
157+
sink(a); // $ MISSING: hasValueFlow=1
158+
159+
futures::executor::block_on(test_async_await_async_part());
160+
}
161+
137162
fn main() {
138163
data_out_of_call();
139164
data_in_to_call();
@@ -145,4 +170,5 @@ fn main() {
145170
data_through_method();
146171

147172
test_operator_overloading();
173+
test_async_await();
148174
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
qltest_cargo_check: true
2+
qltest_dependencies:
3+
- futures = { version = "0.3" }

rust/ql/test/library-tests/dataflow/global/viableCallable.expected

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,22 @@
2929
| main.rs:131:28:131:36 | source(...) | main.rs:1:1:3:1 | fn source |
3030
| main.rs:133:13:133:20 | a.add(...) | main.rs:114:5:117:5 | fn add |
3131
| main.rs:134:5:134:17 | sink(...) | main.rs:5:1:7:1 | fn sink |
32-
| main.rs:138:5:138:22 | data_out_of_call(...) | main.rs:16:1:19:1 | fn data_out_of_call |
33-
| main.rs:139:5:139:21 | data_in_to_call(...) | main.rs:25:1:28:1 | fn data_in_to_call |
34-
| main.rs:140:5:140:23 | data_through_call(...) | main.rs:34:1:38:1 | fn data_through_call |
35-
| main.rs:141:5:141:34 | data_through_nested_function(...) | main.rs:48:1:57:1 | fn data_through_nested_function |
36-
| main.rs:143:5:143:24 | data_out_of_method(...) | main.rs:86:1:90:1 | fn data_out_of_method |
37-
| main.rs:144:5:144:28 | data_in_to_method_call(...) | main.rs:92:1:96:1 | fn data_in_to_method_call |
38-
| main.rs:145:5:145:25 | data_through_method(...) | main.rs:98:1:103:1 | fn data_through_method |
39-
| main.rs:147:5:147:31 | test_operator_overloading(...) | main.rs:120:1:135:1 | fn test_operator_overloading |
32+
| main.rs:138:13:138:21 | source(...) | main.rs:1:1:3:1 | fn source |
33+
| main.rs:139:5:139:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
34+
| main.rs:144:13:144:26 | async_source(...) | main.rs:137:1:141:1 | fn async_source |
35+
| main.rs:145:5:145:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
36+
| main.rs:148:17:148:25 | source(...) | main.rs:1:1:3:1 | fn source |
37+
| main.rs:149:9:149:15 | sink(...) | main.rs:5:1:7:1 | fn sink |
38+
| main.rs:152:5:152:17 | sink(...) | main.rs:5:1:7:1 | fn sink |
39+
| main.rs:156:41:156:54 | async_source(...) | main.rs:137:1:141:1 | fn async_source |
40+
| main.rs:157:5:157:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
41+
| main.rs:159:33:159:61 | test_async_await_async_part(...) | main.rs:143:1:153:1 | fn test_async_await_async_part |
42+
| main.rs:163:5:163:22 | data_out_of_call(...) | main.rs:16:1:19:1 | fn data_out_of_call |
43+
| main.rs:164:5:164:21 | data_in_to_call(...) | main.rs:25:1:28:1 | fn data_in_to_call |
44+
| main.rs:165:5:165:23 | data_through_call(...) | main.rs:34:1:38:1 | fn data_through_call |
45+
| main.rs:166:5:166:34 | data_through_nested_function(...) | main.rs:48:1:57:1 | fn data_through_nested_function |
46+
| main.rs:168:5:168:24 | data_out_of_method(...) | main.rs:86:1:90:1 | fn data_out_of_method |
47+
| main.rs:169:5:169:28 | data_in_to_method_call(...) | main.rs:92:1:96:1 | fn data_in_to_method_call |
48+
| main.rs:170:5:170:25 | data_through_method(...) | main.rs:98:1:103:1 | fn data_through_method |
49+
| main.rs:172:5:172:31 | test_operator_overloading(...) | main.rs:120:1:135:1 | fn test_operator_overloading |
50+
| main.rs:173:5:173:22 | test_async_await(...) | main.rs:155:1:160:1 | fn test_async_await |

0 commit comments

Comments
 (0)