Skip to content

Commit 1e6ef80

Browse files
committed
Rust: Add another captured varible flow test
1 parent e9bd698 commit 1e6ef80

3 files changed

Lines changed: 12 additions & 0 deletions

File tree

rust/ql/test/library-tests/dataflow/lambdas/external_file.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,9 @@ pub fn may_invoke_callback1<F: Fn(i64)>(f: F) {}
33
pub fn may_invoke_callback2<F: FnOnce(i64)>(f: F) {}
44

55
pub fn may_invoke_callback3(f: impl Fn(i64)) {}
6+
7+
pub fn may_invoke_callback4<T>(f: T)
8+
where
9+
T: for<'a> FnOnce(&'a mut i64),
10+
{
11+
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,11 @@ edges
5858
| main.rs:109:13:109:22 | source(...) | main.rs:110:26:110:36 | \|...\| ... : ... => .. [captured a] | provenance | |
5959
| main.rs:109:13:109:22 | source(...) | main.rs:111:26:111:36 | \|...\| ... : ... => .. [captured a] | provenance | |
6060
| main.rs:109:13:109:22 | source(...) | main.rs:112:26:112:36 | \|...\| ... : ... => .. [captured a] | provenance | |
61+
| main.rs:109:13:109:22 | source(...) | main.rs:113:26:113:36 | \|...\| ... : ... => .. [captured a] | provenance | |
6162
| main.rs:110:26:110:36 | \|...\| ... : ... => .. [captured a] | main.rs:110:35:110:35 | a | provenance | heuristic-callback |
6263
| main.rs:111:26:111:36 | \|...\| ... : ... => .. [captured a] | main.rs:111:35:111:35 | a | provenance | heuristic-callback |
6364
| main.rs:112:26:112:36 | \|...\| ... : ... => .. [captured a] | main.rs:112:35:112:35 | a | provenance | heuristic-callback |
65+
| main.rs:113:26:113:36 | \|...\| ... : ... => .. [captured a] | main.rs:113:35:113:35 | a | provenance | heuristic-callback |
6466
nodes
6567
| main.rs:10:20:10:52 | if cond {...} else {...} | semmle.label | if cond {...} else {...} |
6668
| main.rs:10:30:10:39 | source(...) | semmle.label | source(...) |
@@ -134,6 +136,8 @@ nodes
134136
| main.rs:111:35:111:35 | a | semmle.label | a |
135137
| main.rs:112:26:112:36 | \|...\| ... : ... => .. [captured a] | semmle.label | \|...\| ... : ... => .. [captured a] |
136138
| main.rs:112:35:112:35 | a | semmle.label | a |
139+
| main.rs:113:26:113:36 | \|...\| ... : ... => .. [captured a] | semmle.label | \|...\| ... : ... => .. [captured a] |
140+
| main.rs:113:35:113:35 | a | semmle.label | a |
137141
subpaths
138142
| main.rs:29:21:29:21 | a | main.rs:27:20:27:23 | ... | main.rs:27:26:27:52 | if cond {...} else {...} | main.rs:29:13:29:22 | f(...) |
139143
| main.rs:77:21:77:21 | a | main.rs:66:24:66:32 | ...: i64 | main.rs:66:42:72:1 | { ... } | main.rs:77:13:77:22 | f(...) |
@@ -156,3 +160,4 @@ testFailures
156160
| main.rs:110:35:110:35 | a | main.rs:109:13:109:22 | source(...) | main.rs:110:35:110:35 | a | $@ | main.rs:109:13:109:22 | source(...) | source(...) |
157161
| main.rs:111:35:111:35 | a | main.rs:109:13:109:22 | source(...) | main.rs:111:35:111:35 | a | $@ | main.rs:109:13:109:22 | source(...) | source(...) |
158162
| main.rs:112:35:112:35 | a | main.rs:109:13:109:22 | source(...) | main.rs:112:35:112:35 | a | $@ | main.rs:109:13:109:22 | source(...) | source(...) |
163+
| main.rs:113:35:113:35 | a | main.rs:109:13:109:22 | source(...) | main.rs:113:35:113:35 | a | $@ | main.rs:109:13:109:22 | source(...) | source(...) |

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ fn test_external_call() {
110110
may_invoke_callback1(|x| sink(a)); // $ hasValueFlow=81
111111
may_invoke_callback2(|x| sink(a)); // $ hasValueFlow=81
112112
may_invoke_callback3(|x| sink(a)); // $ hasValueFlow=81
113+
may_invoke_callback4(|x| sink(a)); // $ hasValueFlow=81
113114
}
114115

115116
fn main() {

0 commit comments

Comments
 (0)