Skip to content

Commit 95fd5fa

Browse files
committed
Rust: Add trait models for try_from, try_into, as_mut, as_ref.
1 parent 78ea53b commit 95fd5fa

File tree

2 files changed

+49
-34
lines changed

2 files changed

+49
-34
lines changed

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,16 @@ extensions:
1818
- ["<_ as core::convert::Into>::into", "Argument[self].Reference", "ReturnValue", "taint", "manual"]
1919
- ["<_ as core::convert::Into>::into", "Argument[self].Element", "ReturnValue.Element", "taint", "manual"]
2020
- ["<_ as core::convert::Into>::into", "Argument[self].Reference.Element", "ReturnValue.Element", "taint", "manual"]
21+
- ["<_ as core::convert::TryFrom>::try_from", "Argument[0]", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"]
22+
- ["<_ as core::convert::TryFrom>::try_from", "Argument[0].Reference", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"]
23+
- ["<_ as core::convert::TryFrom>::try_from", "Argument[0].Element", "ReturnValue.Field[core::result::Result::Ok(0)].Element", "taint", "manual"]
24+
- ["<_ as core::convert::TryFrom>::try_from", "Argument[0].Reference.Element", "ReturnValue.Field[core::result::Result::Ok(0)].Element", "taint", "manual"]
25+
- ["<_ as core::convert::TryInto>::try_into", "Argument[self]", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"]
26+
- ["<_ as core::convert::TryInto>::try_into", "Argument[self].Reference", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"]
27+
- ["<_ as core::convert::TryInto>::try_into", "Argument[self].Element", "ReturnValue.Field[core::result::Result::Ok(0)].Element", "taint", "manual"]
28+
- ["<_ as core::convert::TryInto>::try_into", "Argument[self].Reference.Element", "ReturnValue.Field[core::result::Result::Ok(0)].Element", "taint", "manual"]
29+
- ["<_ as core::convert::AsMut>::as_mut", "Argument[self]", "ReturnValue", "value", "manual"]
30+
- ["<_ as core::convert::AsRef>::as_ref", "Argument[self]", "ReturnValue", "value", "manual"]
2131
# Iterator
2232
- ["<core::result::Result>::iter", "Argument[self].Element", "ReturnValue.Element", "value", "manual"]
2333
- ["<_ as value_trait::array::Array>::iter", "Argument[self].Element", "ReturnValue.Element", "value", "manual"]

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

Lines changed: 39 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
models
22
| 1 | Summary: <_ as alloc::string::ToString>::to_string; Argument[self]; ReturnValue; taint |
3-
| 2 | Summary: <_ as core::convert::From>::from; Argument[0].Element; ReturnValue.Element; taint |
4-
| 3 | Summary: <_ as core::convert::From>::from; Argument[0].Reference; ReturnValue; taint |
5-
| 4 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; taint |
6-
| 5 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint |
7-
| 6 | Summary: <_ as core::ops::arith::Add>::add; Argument[self]; ReturnValue; taint |
8-
| 7 | Summary: <alloc::string::String as core::convert::AsMut>::as_mut; Argument[self]; ReturnValue; value |
9-
| 8 | Summary: <alloc::string::String as core::convert::AsRef>::as_ref; Argument[self]; ReturnValue; value |
10-
| 9 | Summary: <alloc::string::String as core::convert::From>::from; Argument[0].Reference; ReturnValue; value |
11-
| 10 | Summary: <alloc::string::String as core::ops::arith::Add>::add; Argument[self]; ReturnValue; value |
12-
| 11 | Summary: <alloc::string::String>::as_str; Argument[self]; ReturnValue; value |
13-
| 12 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint |
14-
| 13 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value |
3+
| 2 | Summary: <_ as core::convert::AsMut>::as_mut; Argument[self]; ReturnValue; value |
4+
| 3 | Summary: <_ as core::convert::AsRef>::as_ref; Argument[self]; ReturnValue; value |
5+
| 4 | Summary: <_ as core::convert::From>::from; Argument[0].Element; ReturnValue.Element; taint |
6+
| 5 | Summary: <_ as core::convert::From>::from; Argument[0].Reference; ReturnValue; taint |
7+
| 6 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; taint |
8+
| 7 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint |
9+
| 8 | Summary: <_ as core::ops::arith::Add>::add; Argument[self]; ReturnValue; taint |
10+
| 9 | Summary: <alloc::string::String as core::convert::AsMut>::as_mut; Argument[self]; ReturnValue; value |
11+
| 10 | Summary: <alloc::string::String as core::convert::AsRef>::as_ref; Argument[self]; ReturnValue; value |
12+
| 11 | Summary: <alloc::string::String as core::convert::From>::from; Argument[0].Reference; ReturnValue; value |
13+
| 12 | Summary: <alloc::string::String as core::ops::arith::Add>::add; Argument[self]; ReturnValue; value |
14+
| 13 | Summary: <alloc::string::String>::as_str; Argument[self]; ReturnValue; value |
15+
| 14 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint |
16+
| 15 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value |
1517
edges
1618
| main.rs:30:9:30:9 | s | main.rs:31:19:31:25 | s[...] | provenance | |
1719
| main.rs:30:13:30:22 | source(...) | main.rs:30:9:30:9 | s | provenance | |
@@ -22,20 +24,20 @@ edges
2224
| main.rs:36:9:36:10 | s1 | main.rs:39:14:39:15 | s1 | provenance | |
2325
| main.rs:36:14:36:23 | source(...) | main.rs:36:9:36:10 | s1 | provenance | |
2426
| main.rs:39:9:39:10 | s4 | main.rs:42:10:42:11 | s4 | provenance | |
25-
| main.rs:39:14:39:15 | s1 | main.rs:39:14:39:20 | ... + ... | provenance | MaD:6 |
26-
| main.rs:39:14:39:15 | s1 | main.rs:39:14:39:20 | ... + ... | provenance | MaD:10 |
27+
| main.rs:39:14:39:15 | s1 | main.rs:39:14:39:20 | ... + ... | provenance | MaD:8 |
28+
| main.rs:39:14:39:15 | s1 | main.rs:39:14:39:20 | ... + ... | provenance | MaD:12 |
2729
| main.rs:39:14:39:20 | ... + ... | main.rs:39:9:39:10 | s4 | provenance | |
2830
| main.rs:47:9:47:10 | s1 | main.rs:50:34:50:35 | s1 | provenance | |
2931
| main.rs:47:14:47:23 | source(...) | main.rs:47:9:47:10 | s1 | provenance | |
30-
| main.rs:50:33:50:35 | &s1 [&ref] | main.rs:50:10:50:35 | ... + ... | provenance | MaD:5 |
32+
| main.rs:50:33:50:35 | &s1 [&ref] | main.rs:50:10:50:35 | ... + ... | provenance | MaD:7 |
3133
| main.rs:50:34:50:35 | s1 | main.rs:50:33:50:35 | &s1 [&ref] | provenance | |
3234
| main.rs:55:9:55:10 | s1 | main.rs:57:27:57:28 | s1 | provenance | |
3335
| main.rs:55:14:55:29 | source_slice(...) | main.rs:55:9:55:10 | s1 | provenance | |
3436
| main.rs:57:9:57:10 | s2 | main.rs:58:10:58:11 | s2 | provenance | |
3537
| main.rs:57:14:57:29 | ...::from(...) | main.rs:57:9:57:10 | s2 | provenance | |
36-
| main.rs:57:27:57:28 | s1 | main.rs:57:14:57:29 | ...::from(...) | provenance | MaD:3 |
37-
| main.rs:57:27:57:28 | s1 | main.rs:57:14:57:29 | ...::from(...) | provenance | MaD:4 |
38-
| main.rs:57:27:57:28 | s1 | main.rs:57:14:57:29 | ...::from(...) | provenance | MaD:9 |
38+
| main.rs:57:27:57:28 | s1 | main.rs:57:14:57:29 | ...::from(...) | provenance | MaD:5 |
39+
| main.rs:57:27:57:28 | s1 | main.rs:57:14:57:29 | ...::from(...) | provenance | MaD:6 |
40+
| main.rs:57:27:57:28 | s1 | main.rs:57:14:57:29 | ...::from(...) | provenance | MaD:11 |
3941
| main.rs:66:9:66:10 | ss [element] | main.rs:67:16:67:17 | ss [element] | provenance | |
4042
| main.rs:66:9:66:10 | ss [element] | main.rs:69:27:69:28 | ss [element] | provenance | |
4143
| main.rs:66:9:66:10 | ss [element] | main.rs:78:36:78:37 | ss [element] | provenance | |
@@ -46,54 +48,57 @@ edges
4648
| main.rs:69:9:69:10 | s5 | main.rs:70:10:70:11 | s5 | provenance | |
4749
| main.rs:69:14:69:32 | ...::from(...) | main.rs:69:9:69:10 | s5 | provenance | |
4850
| main.rs:69:27:69:28 | ss [element] | main.rs:69:27:69:31 | ss[0] | provenance | |
49-
| main.rs:69:27:69:31 | ss[0] | main.rs:69:14:69:32 | ...::from(...) | provenance | MaD:3 |
50-
| main.rs:69:27:69:31 | ss[0] | main.rs:69:14:69:32 | ...::from(...) | provenance | MaD:4 |
51-
| main.rs:69:27:69:31 | ss[0] | main.rs:69:14:69:32 | ...::from(...) | provenance | MaD:9 |
51+
| main.rs:69:27:69:31 | ss[0] | main.rs:69:14:69:32 | ...::from(...) | provenance | MaD:5 |
52+
| main.rs:69:27:69:31 | ss[0] | main.rs:69:14:69:32 | ...::from(...) | provenance | MaD:6 |
53+
| main.rs:69:27:69:31 | ss[0] | main.rs:69:14:69:32 | ...::from(...) | provenance | MaD:11 |
5254
| main.rs:78:9:78:11 | ss2 [element] | main.rs:79:16:79:18 | ss2 [element] | provenance | |
5355
| main.rs:78:26:78:38 | ...::from(...) [element] | main.rs:78:9:78:11 | ss2 [element] | provenance | |
54-
| main.rs:78:36:78:37 | ss [element] | main.rs:78:26:78:38 | ...::from(...) [element] | provenance | MaD:2 |
56+
| main.rs:78:36:78:37 | ss [element] | main.rs:78:26:78:38 | ...::from(...) [element] | provenance | MaD:4 |
5557
| main.rs:79:16:79:18 | ss2 [element] | main.rs:79:16:79:21 | ss2[0] | provenance | |
5658
| main.rs:89:9:89:10 | s1 | main.rs:90:14:90:27 | s1.to_string() | provenance | MaD:1 |
5759
| main.rs:89:14:89:29 | source_slice(...) | main.rs:89:9:89:10 | s1 | provenance | |
5860
| main.rs:90:9:90:10 | s2 | main.rs:91:10:91:11 | s2 | provenance | |
5961
| main.rs:90:14:90:27 | s1.to_string() | main.rs:90:9:90:10 | s2 | provenance | |
6062
| main.rs:95:9:95:9 | s | main.rs:96:16:96:16 | s | provenance | |
61-
| main.rs:95:9:95:9 | s | main.rs:96:16:96:25 | s.as_str() | provenance | MaD:11 |
63+
| main.rs:95:9:95:9 | s | main.rs:96:16:96:25 | s.as_str() | provenance | MaD:13 |
6264
| main.rs:95:13:95:22 | source(...) | main.rs:95:9:95:9 | s | provenance | |
63-
| main.rs:96:16:96:16 | s | main.rs:96:16:96:25 | s.as_str() | provenance | MaD:11 |
65+
| main.rs:96:16:96:16 | s | main.rs:96:16:96:25 | s.as_str() | provenance | MaD:13 |
6466
| main.rs:100:9:100:9 | s | main.rs:102:34:102:61 | MacroExpr | provenance | |
6567
| main.rs:100:9:100:9 | s | main.rs:105:34:105:59 | MacroExpr | provenance | |
6668
| main.rs:100:13:100:22 | source(...) | main.rs:100:9:100:9 | s | provenance | |
6769
| main.rs:102:9:102:18 | formatted1 | main.rs:103:10:103:19 | formatted1 | provenance | |
6870
| main.rs:102:22:102:62 | ...::format(...) | main.rs:102:9:102:18 | formatted1 | provenance | |
69-
| main.rs:102:34:102:61 | MacroExpr | main.rs:102:22:102:62 | ...::format(...) | provenance | MaD:12 |
71+
| main.rs:102:34:102:61 | MacroExpr | main.rs:102:22:102:62 | ...::format(...) | provenance | MaD:14 |
7072
| main.rs:105:9:105:18 | formatted2 | main.rs:106:10:106:19 | formatted2 | provenance | |
7173
| main.rs:105:22:105:60 | ...::format(...) | main.rs:105:9:105:18 | formatted2 | provenance | |
72-
| main.rs:105:34:105:59 | MacroExpr | main.rs:105:22:105:60 | ...::format(...) | provenance | MaD:12 |
74+
| main.rs:105:34:105:59 | MacroExpr | main.rs:105:22:105:60 | ...::format(...) | provenance | MaD:14 |
7375
| main.rs:108:9:108:13 | width | main.rs:109:34:109:74 | MacroExpr | provenance | |
7476
| main.rs:108:17:108:32 | source_usize(...) | main.rs:108:9:108:13 | width | provenance | |
7577
| main.rs:109:9:109:18 | formatted3 | main.rs:110:10:110:19 | formatted3 | provenance | |
7678
| main.rs:109:22:109:75 | ...::format(...) | main.rs:109:9:109:18 | formatted3 | provenance | |
77-
| main.rs:109:34:109:74 | MacroExpr | main.rs:109:22:109:75 | ...::format(...) | provenance | MaD:12 |
79+
| main.rs:109:34:109:74 | MacroExpr | main.rs:109:22:109:75 | ...::format(...) | provenance | MaD:14 |
7880
| main.rs:114:9:114:10 | s1 | main.rs:118:18:118:25 | MacroExpr | provenance | |
7981
| main.rs:114:9:114:10 | s1 | main.rs:119:18:119:32 | MacroExpr | provenance | |
8082
| main.rs:114:14:114:23 | source(...) | main.rs:114:9:114:10 | s1 | provenance | |
8183
| main.rs:118:18:118:25 | ...::format(...) | main.rs:118:18:118:25 | { ... } | provenance | |
8284
| main.rs:118:18:118:25 | ...::must_use(...) | main.rs:118:10:118:26 | MacroExpr | provenance | |
83-
| main.rs:118:18:118:25 | MacroExpr | main.rs:118:18:118:25 | ...::format(...) | provenance | MaD:12 |
84-
| main.rs:118:18:118:25 | { ... } | main.rs:118:18:118:25 | ...::must_use(...) | provenance | MaD:13 |
85+
| main.rs:118:18:118:25 | MacroExpr | main.rs:118:18:118:25 | ...::format(...) | provenance | MaD:14 |
86+
| main.rs:118:18:118:25 | { ... } | main.rs:118:18:118:25 | ...::must_use(...) | provenance | MaD:15 |
8587
| main.rs:119:18:119:32 | ...::format(...) | main.rs:119:18:119:32 | { ... } | provenance | |
8688
| main.rs:119:18:119:32 | ...::must_use(...) | main.rs:119:10:119:33 | MacroExpr | provenance | |
87-
| main.rs:119:18:119:32 | MacroExpr | main.rs:119:18:119:32 | ...::format(...) | provenance | MaD:12 |
88-
| main.rs:119:18:119:32 | { ... } | main.rs:119:18:119:32 | ...::must_use(...) | provenance | MaD:13 |
89+
| main.rs:119:18:119:32 | MacroExpr | main.rs:119:18:119:32 | ...::format(...) | provenance | MaD:14 |
90+
| main.rs:119:18:119:32 | { ... } | main.rs:119:18:119:32 | ...::must_use(...) | provenance | MaD:15 |
8991
| main.rs:124:9:124:14 | mut s1 | main.rs:126:15:126:16 | s1 | provenance | |
90-
| main.rs:124:9:124:14 | mut s1 | main.rs:127:14:127:24 | s1.as_ref() | provenance | MaD:8 |
92+
| main.rs:124:9:124:14 | mut s1 | main.rs:127:14:127:24 | s1.as_ref() | provenance | MaD:3 |
93+
| main.rs:124:9:124:14 | mut s1 | main.rs:127:14:127:24 | s1.as_ref() | provenance | MaD:10 |
9194
| main.rs:124:9:124:14 | mut s1 | main.rs:128:14:128:15 | s1 | provenance | |
92-
| main.rs:124:9:124:14 | mut s1 | main.rs:128:14:128:24 | s1.as_mut() | provenance | MaD:7 |
95+
| main.rs:124:9:124:14 | mut s1 | main.rs:128:14:128:24 | s1.as_mut() | provenance | MaD:2 |
96+
| main.rs:124:9:124:14 | mut s1 | main.rs:128:14:128:24 | s1.as_mut() | provenance | MaD:9 |
9397
| main.rs:124:18:124:27 | source(...) | main.rs:124:18:124:39 | ... .to_string() | provenance | MaD:1 |
9498
| main.rs:124:18:124:39 | ... .to_string() | main.rs:124:9:124:14 | mut s1 | provenance | |
9599
| main.rs:126:15:126:16 | s1 | main.rs:126:14:126:16 | &s1 | provenance | |
96-
| main.rs:128:14:128:15 | s1 | main.rs:128:14:128:24 | s1.as_mut() | provenance | MaD:7 |
100+
| main.rs:128:14:128:15 | s1 | main.rs:128:14:128:24 | s1.as_mut() | provenance | MaD:2 |
101+
| main.rs:128:14:128:15 | s1 | main.rs:128:14:128:24 | s1.as_mut() | provenance | MaD:9 |
97102
nodes
98103
| main.rs:30:9:30:9 | s | semmle.label | s |
99104
| main.rs:30:13:30:22 | source(...) | semmle.label | source(...) |

0 commit comments

Comments
 (0)