Skip to content

Commit fd7093e

Browse files
authored
Merge pull request #21375 from geoffw0/mapfix
Rust: Add neutral models (map, from)
2 parents a6de855 + 370c515 commit fd7093e

File tree

9 files changed

+358
-139
lines changed

9 files changed

+358
-139
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: minorAnalysis
3+
---
4+
* Added neutral models to inhibit spurious generated sink models for `map` and `from`. This fixes some false positive query results.

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,9 @@ extensions:
102102
- ["<_ as core::iter::traits::iterator::Iterator>::chain", "Argument[self]", "ReturnValue", "taint", "manual"]
103103
- ["<_ as core::iter::traits::iterator::Iterator>::chain", "Argument[0]", "ReturnValue", "taint", "manual"]
104104
- ["<_ as core::iter::traits::iterator::Iterator>::take", "Argument[self]", "ReturnValue", "taint", "manual"]
105+
# Option
106+
- ["<core::option::Option>::map", "Argument[self].Field[core::option::Option::Some(0)]", "Argument[0].Parameter[0]", "value", "manual"]
107+
- ["<core::option::Option>::map", "Argument[0].ReturnValue", "ReturnValue.Field[core::option::Option::Some(0)]", "value", "manual"]
105108
# Pin
106109
- ["<core::pin::Pin>::new", "Argument[0]", "ReturnValue.Field[core::pin::Pin::pointer]", "value", "manual"]
107110
# This model is not precise, but helps in cases where a `Pin` is implicitly dereferenced.
@@ -157,6 +160,16 @@ extensions:
157160
- ["core::ptr::write_bytes", "Argument[0]", "pointer-access", "manual"]
158161
- ["core::ptr::write_unaligned", "Argument[0]", "pointer-access", "manual"]
159162
- ["core::ptr::write_volatile", "Argument[0]", "pointer-access", "manual"]
163+
- addsTo:
164+
pack: codeql/rust-all
165+
extensible: neutralModel
166+
data:
167+
- ["<core::option::Option>::map", "sink", "manual"]
168+
- ["<alloc::vec::Vec as core::convert::From>::from", "sink", "manual"]
169+
- ["<alloc::collections::vec_deque::VecDeque as core::convert::From>::from", "sink", "manual"]
170+
- ["<std::io::error::Error as core::convert::From>::from", "sink", "manual"]
171+
- ["<alloc::sync::Arc as core::convert::From>::from", "sink", "manual"]
172+
- ["<alloc::rc::Rc as core::convert::From>::from", "sink", "manual"]
160173
- addsTo:
161174
pack: codeql/rust-all
162175
extensible: excludeFieldTaintStep
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
multipleResolvedTargets
2+
| main.rs:123:28:123:48 | ...::from(...) |

rust/ql/test/query-tests/security/CWE-117/Cargo.lock

Lines changed: 125 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)