Skip to content

Commit 9fbbe02

Browse files
committed
Rust: Compact these models a little.
1 parent fcce862 commit 9fbbe02

File tree

4 files changed

+43
-57
lines changed

4 files changed

+43
-57
lines changed

rust/ql/lib/codeql/rust/frameworks/asyncstd/fs.model.yml

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,10 @@ extensions:
1313
pack: codeql/rust-all
1414
extensible: sinkModel
1515
data:
16-
- ["async_std::fs::copy::copy", "Argument[0]", "path-injection", "manual"]
17-
- ["async_std::fs::copy::copy", "Argument[1]", "path-injection", "manual"]
16+
- ["async_std::fs::copy::copy", "Argument[0,1]", "path-injection", "manual"]
1817
- ["async_std::fs::create_dir::create_dir", "Argument[0]", "path-injection", "manual"]
1918
- ["async_std::fs::create_dir_all::create_dir_all", "Argument[0]", "path-injection", "manual"]
20-
- ["async_std::fs::hard_link::hard_link", "Argument[0]", "path-injection", "manual"]
21-
- ["async_std::fs::hard_link::hard_link", "Argument[1]", "path-injection", "manual"]
19+
- ["async_std::fs::hard_link::hard_link", "Argument[0,1]", "path-injection", "manual"]
2220
- ["async_std::fs::metadata::metadata", "Argument[0]", "path-injection", "manual"]
2321
- ["async_std::fs::read::read", "Argument[0]", "path-injection", "manual"]
2422
- ["async_std::fs::read_dir::read_dir", "Argument[0]", "path-injection", "manual"]
@@ -27,8 +25,7 @@ extensions:
2725
- ["async_std::fs::remove_dir::remove_dir", "Argument[0]", "path-injection", "manual"]
2826
- ["async_std::fs::remove_dir_all::remove_dir_all", "Argument[0]", "path-injection", "manual"]
2927
- ["async_std::fs::remove_file::remove_file", "Argument[0]", "path-injection", "manual"]
30-
- ["async_std::fs::rename::rename", "Argument[0]", "path-injection", "manual"]
31-
- ["async_std::fs::rename::rename", "Argument[1]", "path-injection", "manual"]
28+
- ["async_std::fs::rename::rename", "Argument[0,1]", "path-injection", "manual"]
3229
- ["async_std::fs::set_permissions::set_permissions", "Argument[0]", "path-injection", "manual"]
3330
- ["async_std::fs::symlink_metadata::symlink_metadata", "Argument[0]", "path-injection", "manual"]
3431
- ["async_std::fs::write::write", "Argument[0]", "path-injection", "manual"]

rust/ql/lib/codeql/rust/frameworks/stdlib/fs.model.yml

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,10 @@ extensions:
1414
pack: codeql/rust-all
1515
extensible: sinkModel
1616
data:
17-
- ["std::fs::copy", "Argument[0]", "path-injection", "manual"]
18-
- ["std::fs::copy", "Argument[1]", "path-injection", "manual"]
17+
- ["std::fs::copy", "Argument[0,1]", "path-injection", "manual"]
1918
- ["std::fs::create_dir", "Argument[0]", "path-injection", "manual"]
2019
- ["std::fs::create_dir_all", "Argument[0]", "path-injection", "manual"]
21-
- ["std::fs::hard_link", "Argument[0]", "path-injection", "manual"]
22-
- ["std::fs::hard_link", "Argument[1]", "path-injection", "manual"]
20+
- ["std::fs::hard_link", "Argument[0,1]", "path-injection", "manual"]
2321
- ["std::fs::metadata", "Argument[0]", "path-injection", "manual"]
2422
- ["std::fs::read", "Argument[0]", "path-injection", "manual"]
2523
- ["std::fs::read_dir", "Argument[0]", "path-injection", "manual"]
@@ -28,11 +26,9 @@ extensions:
2826
- ["std::fs::remove_dir", "Argument[0]", "path-injection", "manual"]
2927
- ["std::fs::remove_dir_all", "Argument[0]", "path-injection", "manual"]
3028
- ["std::fs::remove_file", "Argument[0]", "path-injection", "manual"]
31-
- ["std::fs::rename", "Argument[0]", "path-injection", "manual"]
32-
- ["std::fs::rename", "Argument[1]", "path-injection", "manual"]
29+
- ["std::fs::rename", "Argument[0,1]", "path-injection", "manual"]
3330
- ["std::fs::set_permissions", "Argument[0]", "path-injection", "manual"]
34-
- ["std::fs::soft_link", "Argument[0]", "path-injection", "manual"]
35-
- ["std::fs::soft_link", "Argument[1]", "path-injection", "manual"]
31+
- ["std::fs::soft_link", "Argument[0,1]", "path-injection", "manual"]
3632
- ["std::fs::symlink_metadata", "Argument[0]", "path-injection", "manual"]
3733
- ["std::fs::write", "Argument[0]", "path-injection", "manual"]
3834
- ["<std::fs::DirBuilder>::create", "Argument[0]", "path-injection", "manual"]

rust/ql/lib/codeql/rust/frameworks/tokio/fs.model.yml

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,10 @@ extensions:
1313
pack: codeql/rust-all
1414
extensible: sinkModel
1515
data:
16-
- ["tokio::fs::copy::copy", "Argument[0]", "path-injection", "manual"]
17-
- ["tokio::fs::copy::copy", "Argument[1]", "path-injection", "manual"]
16+
- ["tokio::fs::copy::copy", "Argument[0,1]", "path-injection", "manual"]
1817
- ["tokio::fs::create_dir::create_dir", "Argument[0]", "path-injection", "manual"]
1918
- ["tokio::fs::create_dir_all::create_dir_all", "Argument[0]", "path-injection", "manual"]
20-
- ["tokio::fs::hard_link::hard_link", "Argument[0]", "path-injection", "manual"]
21-
- ["tokio::fs::hard_link::hard_link", "Argument[1]", "path-injection", "manual"]
19+
- ["tokio::fs::hard_link::hard_link", "Argument[0,1]", "path-injection", "manual"]
2220
- ["tokio::fs::metadata::metadata", "Argument[0]", "path-injection", "manual"]
2321
- ["tokio::fs::read::read", "Argument[0]", "path-injection", "manual"]
2422
- ["tokio::fs::read_dir::read_dir", "Argument[0]", "path-injection", "manual"]
@@ -27,15 +25,11 @@ extensions:
2725
- ["tokio::fs::remove_dir::remove_dir", "Argument[0]", "path-injection", "manual"]
2826
- ["tokio::fs::remove_dir_all::remove_dir_all", "Argument[0]", "path-injection", "manual"]
2927
- ["tokio::fs::remove_file::remove_file", "Argument[0]", "path-injection", "manual"]
30-
- ["tokio::fs::rename::rename", "Argument[0]", "path-injection", "manual"]
31-
- ["tokio::fs::rename::rename", "Argument[1]", "path-injection", "manual"]
28+
- ["tokio::fs::rename::rename", "Argument[0,1]", "path-injection", "manual"]
3229
- ["tokio::fs::set_permissions::set_permissions", "Argument[0]", "path-injection", "manual"]
33-
- ["tokio::fs::symlink::symlink", "Argument[0]", "path-injection", "manual"]
34-
- ["tokio::fs::symlink::symlink", "Argument[1]", "path-injection", "manual"]
35-
- ["tokio::fs::symlink_dir::symlink_dir", "Argument[0]", "path-injection", "manual"]
36-
- ["tokio::fs::symlink_dir::symlink_dir", "Argument[1]", "path-injection", "manual"]
37-
- ["tokio::fs::symlink_file::symlink_file", "Argument[0]", "path-injection", "manual"]
38-
- ["tokio::fs::symlink_file::symlink_file", "Argument[1]", "path-injection", "manual"]
30+
- ["tokio::fs::symlink::symlink", "Argument[0,1]", "path-injection", "manual"]
31+
- ["tokio::fs::symlink_dir::symlink_dir", "Argument[0,1]", "path-injection", "manual"]
32+
- ["tokio::fs::symlink_file::symlink_file", "Argument[0,1]", "path-injection", "manual"]
3933
- ["tokio::fs::symlink_metadata::symlink_metadata", "Argument[0]", "path-injection", "manual"]
4034
- ["tokio::fs::try_exists::try_exists", "Argument[0]", "path-injection", "manual"]
4135
- ["tokio::fs::write::write", "Argument[0]", "path-injection", "manual"]

rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -10,61 +10,60 @@ edges
1010
| src/main.rs:7:11:7:19 | file_name | src/main.rs:9:35:9:43 | file_name | provenance | |
1111
| src/main.rs:9:9:9:17 | file_path | src/main.rs:11:24:11:32 | file_path | provenance | |
1212
| src/main.rs:9:21:9:44 | ...::from(...) | src/main.rs:9:9:9:17 | file_path | provenance | |
13-
| src/main.rs:9:35:9:43 | file_name | src/main.rs:9:21:9:44 | ...::from(...) | provenance | MaD:12 |
14-
| src/main.rs:9:35:9:43 | file_name | src/main.rs:9:21:9:44 | ...::from(...) | provenance | MaD:12 |
15-
| src/main.rs:11:24:11:32 | file_path | src/main.rs:11:5:11:22 | ...::read_to_string | provenance | MaD:6 Sink:MaD:6 |
13+
| src/main.rs:9:35:9:43 | file_name | src/main.rs:9:21:9:44 | ...::from(...) | provenance | MaD:11 |
14+
| src/main.rs:9:35:9:43 | file_name | src/main.rs:9:21:9:44 | ...::from(...) | provenance | MaD:11 |
15+
| src/main.rs:11:24:11:32 | file_path | src/main.rs:11:5:11:22 | ...::read_to_string | provenance | MaD:5 Sink:MaD:5 |
1616
| src/main.rs:103:9:103:13 | path1 | src/main.rs:104:33:104:37 | path1 | provenance | |
1717
| src/main.rs:103:9:103:13 | path1 | src/main.rs:106:39:106:43 | path1 | provenance | |
1818
| src/main.rs:103:9:103:13 | path1 | src/main.rs:109:41:109:45 | path1 | provenance | |
1919
| src/main.rs:103:9:103:13 | path1 | src/main.rs:112:45:112:49 | path1 | provenance | |
2020
| src/main.rs:103:9:103:13 | path1 | src/main.rs:122:27:122:31 | path1 | provenance | |
2121
| src/main.rs:103:9:103:13 | path1 | src/main.rs:123:37:123:41 | path1 | provenance | |
22-
| src/main.rs:103:17:103:30 | ...::args | src/main.rs:103:17:103:32 | ...::args(...) [element] | provenance | Src:MaD:7 |
23-
| src/main.rs:103:17:103:32 | ...::args(...) [element] | src/main.rs:103:17:103:39 | ... .nth(...) [Some] | provenance | MaD:9 |
24-
| src/main.rs:103:17:103:39 | ... .nth(...) [Some] | src/main.rs:103:17:103:48 | ... .unwrap() | provenance | MaD:10 |
22+
| src/main.rs:103:17:103:30 | ...::args | src/main.rs:103:17:103:32 | ...::args(...) [element] | provenance | Src:MaD:6 |
23+
| src/main.rs:103:17:103:32 | ...::args(...) [element] | src/main.rs:103:17:103:39 | ... .nth(...) [Some] | provenance | MaD:8 |
24+
| src/main.rs:103:17:103:39 | ... .nth(...) [Some] | src/main.rs:103:17:103:48 | ... .unwrap() | provenance | MaD:9 |
2525
| src/main.rs:103:17:103:48 | ... .unwrap() | src/main.rs:103:9:103:13 | path1 | provenance | |
26-
| src/main.rs:104:33:104:37 | path1 | src/main.rs:104:33:104:45 | path1.clone() | provenance | MaD:8 |
26+
| src/main.rs:104:33:104:37 | path1 | src/main.rs:104:33:104:45 | path1.clone() | provenance | MaD:7 |
2727
| src/main.rs:104:33:104:45 | path1.clone() | src/main.rs:104:13:104:31 | ...::open | provenance | MaD:2 Sink:MaD:2 |
2828
| src/main.rs:106:9:106:13 | path2 | src/main.rs:107:33:107:37 | path2 | provenance | |
29-
| src/main.rs:106:17:106:52 | ...::canonicalize(...) [Ok] | src/main.rs:106:17:106:61 | ... .unwrap() | provenance | MaD:11 |
29+
| src/main.rs:106:17:106:52 | ...::canonicalize(...) [Ok] | src/main.rs:106:17:106:61 | ... .unwrap() | provenance | MaD:10 |
3030
| src/main.rs:106:17:106:61 | ... .unwrap() | src/main.rs:106:9:106:13 | path2 | provenance | |
31-
| src/main.rs:106:39:106:43 | path1 | src/main.rs:106:39:106:51 | path1.clone() | provenance | MaD:8 |
32-
| src/main.rs:106:39:106:51 | path1.clone() | src/main.rs:106:17:106:52 | ...::canonicalize(...) [Ok] | provenance | MaD:14 |
31+
| src/main.rs:106:39:106:43 | path1 | src/main.rs:106:39:106:51 | path1.clone() | provenance | MaD:7 |
32+
| src/main.rs:106:39:106:51 | path1.clone() | src/main.rs:106:17:106:52 | ...::canonicalize(...) [Ok] | provenance | MaD:13 |
3333
| src/main.rs:107:33:107:37 | path2 | src/main.rs:107:13:107:31 | ...::open | provenance | MaD:2 Sink:MaD:2 |
3434
| src/main.rs:109:9:109:13 | path3 | src/main.rs:110:35:110:39 | path3 | provenance | |
3535
| src/main.rs:109:17:109:54 | ...::canonicalize(...) [future, Ok] | src/main.rs:109:17:109:60 | await ... [Ok] | provenance | |
36-
| src/main.rs:109:17:109:60 | await ... [Ok] | src/main.rs:109:17:109:69 | ... .unwrap() | provenance | MaD:11 |
36+
| src/main.rs:109:17:109:60 | await ... [Ok] | src/main.rs:109:17:109:69 | ... .unwrap() | provenance | MaD:10 |
3737
| src/main.rs:109:17:109:69 | ... .unwrap() | src/main.rs:109:9:109:13 | path3 | provenance | |
38-
| src/main.rs:109:41:109:45 | path1 | src/main.rs:109:41:109:53 | path1.clone() | provenance | MaD:8 |
39-
| src/main.rs:109:41:109:53 | path1.clone() | src/main.rs:109:17:109:54 | ...::canonicalize(...) [future, Ok] | provenance | MaD:15 |
38+
| src/main.rs:109:41:109:45 | path1 | src/main.rs:109:41:109:53 | path1.clone() | provenance | MaD:7 |
39+
| src/main.rs:109:41:109:53 | path1.clone() | src/main.rs:109:17:109:54 | ...::canonicalize(...) [future, Ok] | provenance | MaD:14 |
4040
| src/main.rs:110:35:110:39 | path3 | src/main.rs:110:13:110:33 | ...::open | provenance | MaD:3 Sink:MaD:3 |
4141
| src/main.rs:112:9:112:13 | path4 | src/main.rs:113:39:113:43 | path4 | provenance | |
4242
| src/main.rs:112:17:112:58 | ...::canonicalize(...) [future, Ok] | src/main.rs:112:17:112:64 | await ... [Ok] | provenance | |
43-
| src/main.rs:112:17:112:64 | await ... [Ok] | src/main.rs:112:17:112:73 | ... .unwrap() | provenance | MaD:11 |
43+
| src/main.rs:112:17:112:64 | await ... [Ok] | src/main.rs:112:17:112:73 | ... .unwrap() | provenance | MaD:10 |
4444
| src/main.rs:112:17:112:73 | ... .unwrap() | src/main.rs:112:9:112:13 | path4 | provenance | |
45-
| src/main.rs:112:45:112:49 | path1 | src/main.rs:112:45:112:57 | path1.clone() | provenance | MaD:8 |
46-
| src/main.rs:112:45:112:57 | path1.clone() | src/main.rs:112:17:112:58 | ...::canonicalize(...) [future, Ok] | provenance | MaD:13 |
45+
| src/main.rs:112:45:112:49 | path1 | src/main.rs:112:45:112:57 | path1.clone() | provenance | MaD:7 |
46+
| src/main.rs:112:45:112:57 | path1.clone() | src/main.rs:112:17:112:58 | ...::canonicalize(...) [future, Ok] | provenance | MaD:12 |
4747
| src/main.rs:113:39:113:43 | path4 | src/main.rs:113:13:113:37 | ...::open | provenance | MaD:1 Sink:MaD:1 |
48-
| src/main.rs:122:27:122:31 | path1 | src/main.rs:122:27:122:39 | path1.clone() | provenance | MaD:8 |
48+
| src/main.rs:122:27:122:31 | path1 | src/main.rs:122:27:122:39 | path1.clone() | provenance | MaD:7 |
4949
| src/main.rs:122:27:122:39 | path1.clone() | src/main.rs:122:13:122:25 | ...::copy | provenance | MaD:4 Sink:MaD:4 |
50-
| src/main.rs:123:37:123:41 | path1 | src/main.rs:123:37:123:49 | path1.clone() | provenance | MaD:8 |
51-
| src/main.rs:123:37:123:49 | path1.clone() | src/main.rs:123:13:123:25 | ...::copy | provenance | MaD:5 Sink:MaD:5 |
50+
| src/main.rs:123:37:123:41 | path1 | src/main.rs:123:37:123:49 | path1.clone() | provenance | MaD:7 |
51+
| src/main.rs:123:37:123:49 | path1.clone() | src/main.rs:123:13:123:25 | ...::copy | provenance | MaD:4 Sink:MaD:4 |
5252
models
5353
| 1 | Sink: <async_std::fs::file::File>::open; Argument[0]; path-injection |
5454
| 2 | Sink: <std::fs::File>::open; Argument[0]; path-injection |
5555
| 3 | Sink: <tokio::fs::file::File>::open; Argument[0]; path-injection |
56-
| 4 | Sink: std::fs::copy; Argument[0]; path-injection |
57-
| 5 | Sink: std::fs::copy; Argument[1]; path-injection |
58-
| 6 | Sink: std::fs::read_to_string; Argument[0]; path-injection |
59-
| 7 | Source: std::env::args; ReturnValue.Element; commandargs |
60-
| 8 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value |
61-
| 9 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value |
62-
| 10 | Summary: <core::option::Option>::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
63-
| 11 | Summary: <core::result::Result>::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
64-
| 12 | Summary: <std::path::PathBuf as core::convert::From>::from; Argument[0]; ReturnValue; taint |
65-
| 13 | Summary: async_std::fs::canonicalize::canonicalize; Argument[0]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
66-
| 14 | Summary: std::fs::canonicalize; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
67-
| 15 | Summary: tokio::fs::canonicalize::canonicalize; Argument[0]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
56+
| 4 | Sink: std::fs::copy; Argument[0,1]; path-injection |
57+
| 5 | Sink: std::fs::read_to_string; Argument[0]; path-injection |
58+
| 6 | Source: std::env::args; ReturnValue.Element; commandargs |
59+
| 7 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value |
60+
| 8 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value |
61+
| 9 | Summary: <core::option::Option>::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
62+
| 10 | Summary: <core::result::Result>::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
63+
| 11 | Summary: <std::path::PathBuf as core::convert::From>::from; Argument[0]; ReturnValue; taint |
64+
| 12 | Summary: async_std::fs::canonicalize::canonicalize; Argument[0]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
65+
| 13 | Summary: std::fs::canonicalize; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
66+
| 14 | Summary: tokio::fs::canonicalize::canonicalize; Argument[0]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
6867
nodes
6968
| src/main.rs:7:11:7:19 | file_name | semmle.label | file_name |
7069
| src/main.rs:9:9:9:17 | file_path | semmle.label | file_path |

0 commit comments

Comments
 (0)