Skip to content

Commit bb70bfc

Browse files
committed
Rust: Tweak global data flow test and add inline flow test
1 parent 295626d commit bb70bfc

File tree

4 files changed

+52
-23
lines changed

4 files changed

+52
-23
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
models
2+
edges
3+
nodes
4+
subpaths
5+
testFailures
6+
#select
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/**
2+
* @kind path-problem
3+
*/
4+
5+
import rust
6+
import utils.InlineFlowTest
7+
import DefaultFlowTest
8+
import ValueFlow::PathGraph
9+
10+
from ValueFlow::PathNode source, ValueFlow::PathNode sink
11+
where ValueFlow::flowPath(source, sink)
12+
select sink, source, sink, "$@", source, source.toString()

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

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ fn get_data(n: i64) -> i64 {
1515

1616
fn data_out_of_call() {
1717
let a = get_data(7);
18-
sink(a); // $ hasValueFlow=n
18+
sink(a); // $ MISSING: hasValueFlow=n
1919
}
2020

2121
fn data_in(n: i64) {
22-
sink(n + 7); // $ hasValueFlow
22+
sink(n); // $ MISSING: hasValueFlow=3
2323
}
2424

2525
fn data_in_to_call() {
@@ -34,7 +34,15 @@ fn pass_through(i: i64) -> i64 {
3434
fn data_through_call() {
3535
let a = source(1);
3636
let b = pass_through(a);
37-
sink(b); // $ hasValueFlow=1
37+
sink(b); // $ MISSING: hasValueFlow=1
38+
}
39+
40+
fn block_expression_as_argument() {
41+
let a = pass_through({
42+
println!("Hello");
43+
source(14)
44+
});
45+
sink(a); // $ MISSING: hasValueFlow=14
3846
}
3947

4048
// -----------------------------------------------------------------------------
@@ -46,7 +54,7 @@ struct MyFlag {
4654

4755
impl MyFlag {
4856
fn data_in(&self, n: i64) {
49-
sink(n); // $ hasValueFlow=1
57+
sink(n); // $ MISSING: hasValueFlow=1
5058
}
5159
fn get_data(&self) -> i64 {
5260
if self.flag {
@@ -67,7 +75,7 @@ impl MyFlag {
6775
fn data_out_of_method() {
6876
let mn = MyFlag { flag: true };
6977
let a = mn.get_data();
70-
sink(a);
78+
sink(a); // $ MISSING: hasValueFlow=2
7179
}
7280

7381
fn data_in_to_method_call() {
@@ -79,8 +87,8 @@ fn data_in_to_method_call() {
7987
fn data_through_method() {
8088
let mn = MyFlag { flag: true };
8189
let a = source(4);
82-
mn.data_through(a);
83-
sink(a); // $ hasValueFlow=4
90+
let b = mn.data_through(a);
91+
sink(b); // $ MISSING: hasValueFlow=4
8492
}
8593

8694
fn main() {
Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,27 @@
11
| main.rs:13:5:13:13 | CallExpr | main.rs:1:1:3:1 | source |
22
| main.rs:17:13:17:23 | CallExpr | main.rs:12:1:14:1 | get_data |
33
| main.rs:18:5:18:11 | CallExpr | main.rs:5:1:7:1 | sink |
4-
| main.rs:22:5:22:15 | CallExpr | main.rs:5:1:7:1 | sink |
4+
| main.rs:22:5:22:11 | CallExpr | main.rs:5:1:7:1 | sink |
55
| main.rs:26:13:26:21 | CallExpr | main.rs:1:1:3:1 | source |
66
| main.rs:27:5:27:14 | CallExpr | main.rs:21:1:23:1 | data_in |
77
| main.rs:35:13:35:21 | CallExpr | main.rs:1:1:3:1 | source |
88
| main.rs:36:13:36:27 | CallExpr | main.rs:30:1:32:1 | pass_through |
99
| main.rs:37:5:37:11 | CallExpr | main.rs:5:1:7:1 | sink |
10-
| main.rs:49:9:49:15 | CallExpr | main.rs:5:1:7:1 | sink |
11-
| main.rs:55:13:55:21 | CallExpr | main.rs:1:1:3:1 | source |
12-
| main.rs:69:13:69:25 | ... .get_data(...) | main.rs:51:5:57:5 | get_data |
13-
| main.rs:70:5:70:11 | CallExpr | main.rs:5:1:7:1 | sink |
14-
| main.rs:75:13:75:21 | CallExpr | main.rs:1:1:3:1 | source |
15-
| main.rs:76:5:76:17 | ... .data_in(...) | main.rs:48:5:50:5 | data_in |
16-
| main.rs:81:13:81:21 | CallExpr | main.rs:1:1:3:1 | source |
17-
| main.rs:82:5:82:22 | ... .data_through(...) | main.rs:58:5:64:5 | data_through |
18-
| main.rs:83:5:83:11 | CallExpr | main.rs:5:1:7:1 | sink |
19-
| main.rs:87:5:87:22 | CallExpr | main.rs:16:1:19:1 | data_out_of_call |
20-
| main.rs:88:5:88:21 | CallExpr | main.rs:25:1:28:1 | data_in_to_call |
21-
| main.rs:89:5:89:23 | CallExpr | main.rs:34:1:38:1 | data_through_call |
22-
| main.rs:91:5:91:24 | CallExpr | main.rs:67:1:71:1 | data_out_of_method |
23-
| main.rs:92:5:92:28 | CallExpr | main.rs:73:1:77:1 | data_in_to_method_call |
24-
| main.rs:93:5:93:25 | CallExpr | main.rs:79:1:84:1 | data_through_method |
10+
| main.rs:41:13:44:6 | CallExpr | main.rs:30:1:32:1 | pass_through |
11+
| main.rs:43:9:43:18 | CallExpr | main.rs:1:1:3:1 | source |
12+
| main.rs:45:5:45:11 | CallExpr | main.rs:5:1:7:1 | sink |
13+
| main.rs:57:9:57:15 | CallExpr | main.rs:5:1:7:1 | sink |
14+
| main.rs:63:13:63:21 | CallExpr | main.rs:1:1:3:1 | source |
15+
| main.rs:77:13:77:25 | ... .get_data(...) | main.rs:59:5:65:5 | get_data |
16+
| main.rs:78:5:78:11 | CallExpr | main.rs:5:1:7:1 | sink |
17+
| main.rs:83:13:83:21 | CallExpr | main.rs:1:1:3:1 | source |
18+
| main.rs:84:5:84:17 | ... .data_in(...) | main.rs:56:5:58:5 | data_in |
19+
| main.rs:89:13:89:21 | CallExpr | main.rs:1:1:3:1 | source |
20+
| main.rs:90:13:90:30 | ... .data_through(...) | main.rs:66:5:72:5 | data_through |
21+
| main.rs:91:5:91:11 | CallExpr | main.rs:5:1:7:1 | sink |
22+
| main.rs:95:5:95:22 | CallExpr | main.rs:16:1:19:1 | data_out_of_call |
23+
| main.rs:96:5:96:21 | CallExpr | main.rs:25:1:28:1 | data_in_to_call |
24+
| main.rs:97:5:97:23 | CallExpr | main.rs:34:1:38:1 | data_through_call |
25+
| main.rs:99:5:99:24 | CallExpr | main.rs:75:1:79:1 | data_out_of_method |
26+
| main.rs:100:5:100:28 | CallExpr | main.rs:81:1:85:1 | data_in_to_method_call |
27+
| main.rs:101:5:101:25 | CallExpr | main.rs:87:1:92:1 | data_through_method |

0 commit comments

Comments
 (0)