Skip to content

Commit 1de0ff0

Browse files
authored
Merge pull request #22913 from hvitved/rust/try-in-closure-test
Rust: Add data flow test for `?` in a closure
2 parents c4d0804 + 540f85b commit 1de0ff0

2 files changed

Lines changed: 18 additions & 0 deletions

File tree

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
models
22
| 1 | Summary: <& as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value |
3+
| 2 | Summary: <core::option::Option>::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
34
edges
45
| main.rs:10:20:10:52 | if cond {...} else {...} | main.rs:11:10:11:16 | f(...) | provenance | |
56
| main.rs:10:30:10:39 | source(...) | main.rs:10:20:10:52 | if cond {...} else {...} | provenance | |
@@ -88,6 +89,11 @@ edges
8889
| main.rs:152:9:154:9 | [post] { ... } : ... => .. [captured captured] | main.rs:156:14:156:21 | captured | provenance | |
8990
| main.rs:153:13:153:20 | captured | main.rs:152:9:154:9 | [post] { ... } : ... => .. [captured captured] | provenance | |
9091
| main.rs:153:24:153:34 | source(...) | main.rs:153:13:153:20 | captured | provenance | |
92+
| main.rs:183:16:183:40 | TryExpr [Some] | main.rs:184:10:184:12 | f(...) [Some] | provenance | |
93+
| main.rs:183:17:183:38 | Some(...) [Some, Some] | main.rs:183:16:183:40 | TryExpr [Some] | provenance | |
94+
| main.rs:183:22:183:37 | Some(...) [Some] | main.rs:183:17:183:38 | Some(...) [Some, Some] | provenance | |
95+
| main.rs:183:27:183:36 | source(...) | main.rs:183:22:183:37 | Some(...) [Some] | provenance | |
96+
| main.rs:184:10:184:12 | f(...) [Some] | main.rs:184:10:184:21 | ... .unwrap() | provenance | MaD:2 |
9197
nodes
9298
| main.rs:10:20:10:52 | if cond {...} else {...} | semmle.label | if cond {...} else {...} |
9399
| main.rs:10:30:10:39 | source(...) | semmle.label | source(...) |
@@ -193,6 +199,12 @@ nodes
193199
| main.rs:153:13:153:20 | captured | semmle.label | captured |
194200
| main.rs:153:24:153:34 | source(...) | semmle.label | source(...) |
195201
| main.rs:156:14:156:21 | captured | semmle.label | captured |
202+
| main.rs:183:16:183:40 | TryExpr [Some] | semmle.label | TryExpr [Some] |
203+
| main.rs:183:17:183:38 | Some(...) [Some, Some] | semmle.label | Some(...) [Some, Some] |
204+
| main.rs:183:22:183:37 | Some(...) [Some] | semmle.label | Some(...) [Some] |
205+
| main.rs:183:27:183:36 | source(...) | semmle.label | source(...) |
206+
| main.rs:184:10:184:12 | f(...) [Some] | semmle.label | f(...) [Some] |
207+
| main.rs:184:10:184:21 | ... .unwrap() | semmle.label | ... .unwrap() |
196208
subpaths
197209
| main.rs:40:21:40:21 | a | main.rs:38:20:38:27 | ... | main.rs:38:30:38:56 | if cond {...} else {...} | main.rs:40:13:40:22 | f(...) |
198210
| main.rs:88:21:88:21 | a | main.rs:77:24:77:32 | ...: i64 | main.rs:77:42:83:1 | { ... } | main.rs:88:13:88:22 | f(...) |
@@ -223,3 +235,4 @@ testFailures
223235
| main.rs:138:18:138:21 | data | main.rs:136:20:136:30 | source(...) | main.rs:138:18:138:21 | data | $@ | main.rs:136:20:136:30 | source(...) | source(...) |
224236
| main.rs:146:14:146:25 | await future | main.rs:144:20:144:30 | source(...) | main.rs:146:14:146:25 | await future | $@ | main.rs:144:20:144:30 | source(...) | source(...) |
225237
| main.rs:156:14:156:21 | captured | main.rs:153:24:153:34 | source(...) | main.rs:156:14:156:21 | captured | $@ | main.rs:153:24:153:34 | source(...) | source(...) |
238+
| main.rs:184:10:184:21 | ... .unwrap() | main.rs:183:27:183:36 | source(...) | main.rs:184:10:184:21 | ... .unwrap() | $@ | main.rs:183:27:183:36 | source(...) | source(...) |

‎rust/ql/test/library-tests/dataflow/lambdas/main.rs‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,11 @@ mod async_blocks {
179179
}
180180
}
181181

182+
fn closure_flow_out_try() {
183+
let f = || (Some(Some(source(93))))?;
184+
sink(f().unwrap()); // $ hasValueFlow=93
185+
}
186+
182187
fn main() {
183188
closure_flow_out();
184189
closure_flow_in();

0 commit comments

Comments
 (0)