mirror of
https://github.com/github/codeql.git
synced 2026-04-25 16:55:19 +02:00
Rust: Adapt tests and existing models to account for generated models
This commit is contained in:
@@ -14,7 +14,7 @@
|
||||
| Macro calls - resolved | 2 |
|
||||
| Macro calls - total | 2 |
|
||||
| Macro calls - unresolved | 0 |
|
||||
| Taint edges - number of edges | 4 |
|
||||
| Taint edges - number of edges | 1465 |
|
||||
| Taint reach - nodes tainted | 0 |
|
||||
| Taint reach - per million nodes | 0 |
|
||||
| Taint sinks - cryptographic operations | 0 |
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
| Macro calls - resolved | 2 |
|
||||
| Macro calls - total | 2 |
|
||||
| Macro calls - unresolved | 0 |
|
||||
| Taint edges - number of edges | 4 |
|
||||
| Taint edges - number of edges | 1465 |
|
||||
| Taint reach - nodes tainted | 0 |
|
||||
| Taint reach - per million nodes | 0 |
|
||||
| Taint sinks - cryptographic operations | 0 |
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
| Macro calls - resolved | 2 |
|
||||
| Macro calls - total | 2 |
|
||||
| Macro calls - unresolved | 0 |
|
||||
| Taint edges - number of edges | 4 |
|
||||
| Taint edges - number of edges | 1465 |
|
||||
| Taint reach - nodes tainted | 0 |
|
||||
| Taint reach - per million nodes | 0 |
|
||||
| Taint sinks - cryptographic operations | 0 |
|
||||
|
||||
@@ -11,6 +11,8 @@ private module Input implements InputSig<Location, RustDataFlow> {
|
||||
not exists(n.asExpr().getLocation())
|
||||
}
|
||||
|
||||
predicate postWithInFlowExclude(RustDataFlow::Node n) { n instanceof Node::FlowSummaryNode }
|
||||
|
||||
predicate missingLocationExclude(RustDataFlow::Node n) { not exists(n.asExpr().getLocation()) }
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,12 @@ final class CloneCallable extends SummarizedCallable::Range {
|
||||
)
|
||||
}
|
||||
|
||||
final override predicate propagatesFlow(string input, string output, boolean preservesValue) {
|
||||
input = "Argument[self]" and output = "ReturnValue" and preservesValue = true
|
||||
final override predicate propagatesFlow(
|
||||
string input, string output, boolean preservesValue, string model
|
||||
) {
|
||||
input = "Argument[self]" and
|
||||
output = "ReturnValue" and
|
||||
preservesValue = true and
|
||||
model = "generated"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,8 +5,6 @@ extensions:
|
||||
data:
|
||||
# Fmt
|
||||
- ["lang:alloc", "crate::fmt::format", "Argument[0]", "ReturnValue", "taint", "manual"]
|
||||
# Hint
|
||||
- ["lang:core", "crate::hint::must_use", "Argument[0]", "ReturnValue", "value", "manual"]
|
||||
# Iterator
|
||||
- ["lang:core", "crate::iter::traits::iterator::Iterator::nth", "Argument[self].Element", "ReturnValue.Field[crate::option::Option::Some(0)]", "value", "manual"]
|
||||
- ["lang:core", "crate::iter::traits::iterator::Iterator::collect", "Argument[self].Element", "ReturnValue.Element", "value", "manual"]
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,11 +8,9 @@ private module Tm = TranslateModels<provenance/1>;
|
||||
|
||||
query predicate models = Tm::models/2;
|
||||
|
||||
query predicate localStep(Node nodeFrom, Node nodeTo, string model) {
|
||||
exists(string madId |
|
||||
RustDataFlow::simpleLocalFlowStep(nodeFrom, nodeTo, madId) and
|
||||
Tm::translateModels(madId, model)
|
||||
)
|
||||
query predicate localStep(Node nodeFrom, Node nodeTo) {
|
||||
// Local flow steps that don't originate from a flow summary.
|
||||
RustDataFlow::simpleLocalFlowStep(nodeFrom, nodeTo, "")
|
||||
}
|
||||
|
||||
query predicate storeStep = RustDataFlow::storeStep/3;
|
||||
|
||||
@@ -2,7 +2,8 @@ models
|
||||
| 1 | Summary: lang:core; <crate::option::Option as crate::clone::Clone>::clone; Argument[self].Field[crate::option::Option::Some(0)]; ReturnValue.Field[crate::option::Option::Some(0)]; value |
|
||||
| 2 | Summary: lang:core; <crate::option::Option>::unwrap; Argument[self].Field[crate::option::Option::Some(0)]; ReturnValue; value |
|
||||
| 3 | Summary: lang:core; <crate::option::Option>::zip; Argument[0].Field[crate::option::Option::Some(0)]; ReturnValue.Field[crate::option::Option::Some(0)].Field[1]; value |
|
||||
| 4 | Summary: lang:core; <crate::result::Result>::unwrap; Argument[self].Field[crate::result::Result::Ok(0)]; ReturnValue; value |
|
||||
| 4 | Summary: lang:core; <crate::result::Result as crate::clone::Clone>::clone; Argument[self].Field[crate::result::Result::Ok(0)]; ReturnValue.Field[crate::result::Result::Ok(0)]; value |
|
||||
| 5 | Summary: lang:core; <crate::result::Result>::unwrap; Argument[self].Field[crate::result::Result::Ok(0)]; ReturnValue; value |
|
||||
edges
|
||||
| main.rs:13:9:13:9 | a [Some] | main.rs:14:10:14:10 | a [Some] | provenance | |
|
||||
| main.rs:13:9:13:9 | a [Some] | main.rs:15:13:15:13 | a [Some] | provenance | |
|
||||
@@ -11,22 +12,24 @@ edges
|
||||
| main.rs:14:10:14:10 | a [Some] | main.rs:14:10:14:19 | a.unwrap(...) | provenance | MaD:2 |
|
||||
| main.rs:15:9:15:9 | b [Some] | main.rs:16:10:16:10 | b [Some] | provenance | |
|
||||
| main.rs:15:13:15:13 | a [Some] | main.rs:15:13:15:21 | a.clone(...) [Some] | provenance | MaD:1 |
|
||||
| main.rs:15:13:15:13 | a [Some] | main.rs:15:13:15:21 | a.clone(...) [Some] | provenance | generated |
|
||||
| main.rs:15:13:15:21 | a.clone(...) [Some] | main.rs:15:9:15:9 | b [Some] | provenance | |
|
||||
| main.rs:16:10:16:10 | b [Some] | main.rs:16:10:16:19 | b.unwrap(...) | provenance | MaD:2 |
|
||||
| main.rs:20:9:20:9 | a [Ok] | main.rs:21:10:21:10 | a [Ok] | provenance | |
|
||||
| main.rs:20:9:20:9 | a [Ok] | main.rs:22:13:22:13 | a [Ok] | provenance | |
|
||||
| main.rs:20:31:20:44 | Ok(...) [Ok] | main.rs:20:9:20:9 | a [Ok] | provenance | |
|
||||
| main.rs:20:34:20:43 | source(...) | main.rs:20:31:20:44 | Ok(...) [Ok] | provenance | |
|
||||
| main.rs:21:10:21:10 | a [Ok] | main.rs:21:10:21:19 | a.unwrap(...) | provenance | MaD:4 |
|
||||
| main.rs:21:10:21:10 | a [Ok] | main.rs:21:10:21:19 | a.unwrap(...) | provenance | MaD:5 |
|
||||
| main.rs:22:9:22:9 | b [Ok] | main.rs:23:10:23:10 | b [Ok] | provenance | |
|
||||
| main.rs:22:13:22:13 | a [Ok] | main.rs:22:13:22:21 | a.clone(...) [Ok] | provenance | |
|
||||
| main.rs:22:13:22:13 | a [Ok] | main.rs:22:13:22:21 | a.clone(...) [Ok] | provenance | MaD:4 |
|
||||
| main.rs:22:13:22:13 | a [Ok] | main.rs:22:13:22:21 | a.clone(...) [Ok] | provenance | generated |
|
||||
| main.rs:22:13:22:21 | a.clone(...) [Ok] | main.rs:22:9:22:9 | b [Ok] | provenance | |
|
||||
| main.rs:23:10:23:10 | b [Ok] | main.rs:23:10:23:19 | b.unwrap(...) | provenance | MaD:4 |
|
||||
| main.rs:23:10:23:10 | b [Ok] | main.rs:23:10:23:19 | b.unwrap(...) | provenance | MaD:5 |
|
||||
| main.rs:27:9:27:9 | a | main.rs:28:10:28:10 | a | provenance | |
|
||||
| main.rs:27:9:27:9 | a | main.rs:29:13:29:13 | a | provenance | |
|
||||
| main.rs:27:13:27:22 | source(...) | main.rs:27:9:27:9 | a | provenance | |
|
||||
| main.rs:29:9:29:9 | b | main.rs:30:10:30:10 | b | provenance | |
|
||||
| main.rs:29:13:29:13 | a | main.rs:29:13:29:21 | a.clone(...) | provenance | |
|
||||
| main.rs:29:13:29:13 | a | main.rs:29:13:29:21 | a.clone(...) | provenance | generated |
|
||||
| main.rs:29:13:29:21 | a.clone(...) | main.rs:29:9:29:9 | b | provenance | |
|
||||
| main.rs:42:13:42:13 | w [Wrapper] | main.rs:43:15:43:15 | w [Wrapper] | provenance | |
|
||||
| main.rs:42:17:42:41 | Wrapper {...} [Wrapper] | main.rs:42:13:42:13 | w [Wrapper] | provenance | |
|
||||
@@ -36,7 +39,7 @@ edges
|
||||
| main.rs:44:13:44:28 | Wrapper {...} [Wrapper] | main.rs:44:26:44:26 | n | provenance | |
|
||||
| main.rs:44:26:44:26 | n | main.rs:44:38:44:38 | n | provenance | |
|
||||
| main.rs:46:13:46:13 | u [Wrapper] | main.rs:47:15:47:15 | u [Wrapper] | provenance | |
|
||||
| main.rs:46:17:46:17 | w [Wrapper] | main.rs:46:17:46:25 | w.clone(...) [Wrapper] | provenance | |
|
||||
| main.rs:46:17:46:17 | w [Wrapper] | main.rs:46:17:46:25 | w.clone(...) [Wrapper] | provenance | generated |
|
||||
| main.rs:46:17:46:25 | w.clone(...) [Wrapper] | main.rs:46:13:46:13 | u [Wrapper] | provenance | |
|
||||
| main.rs:47:15:47:15 | u [Wrapper] | main.rs:48:13:48:28 | Wrapper {...} [Wrapper] | provenance | |
|
||||
| main.rs:48:13:48:28 | Wrapper {...} [Wrapper] | main.rs:48:26:48:26 | n | provenance | |
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
models
|
||||
| 1 | Summary: lang:alloc; <crate::string::String>::as_str; Argument[self]; ReturnValue; taint |
|
||||
| 2 | Summary: lang:alloc; crate::fmt::format; Argument[0]; ReturnValue; taint |
|
||||
| 3 | Summary: lang:core; crate::hint::must_use; Argument[0]; ReturnValue; value |
|
||||
| 1 | Summary: lang:alloc; <crate::string::String as crate::convert::From>::from; Argument[0]; ReturnValue; value |
|
||||
| 2 | Summary: lang:alloc; <crate::string::String>::as_str; Argument[self]; ReturnValue; taint |
|
||||
| 3 | Summary: lang:alloc; crate::fmt::format; Argument[0]; ReturnValue; taint |
|
||||
| 4 | Summary: lang:core; crate::hint::must_use; Argument[0]; ReturnValue; value |
|
||||
edges
|
||||
| main.rs:26:9:26:9 | s | main.rs:27:19:27:25 | s[...] | provenance | |
|
||||
| main.rs:26:13:26:22 | source(...) | main.rs:26:9:26:9 | s | provenance | |
|
||||
@@ -11,36 +12,41 @@ edges
|
||||
| main.rs:32:9:32:10 | s1 | main.rs:35:9:35:10 | s4 | provenance | |
|
||||
| main.rs:32:14:32:23 | source(...) | main.rs:32:9:32:10 | s1 | provenance | |
|
||||
| main.rs:35:9:35:10 | s4 | main.rs:38:10:38:11 | s4 | provenance | |
|
||||
| main.rs:51:9:51:10 | s1 | main.rs:52:27:52:28 | s1 | provenance | |
|
||||
| main.rs:51:14:51:29 | source_slice(...) | main.rs:51:9:51:10 | s1 | provenance | |
|
||||
| main.rs:52:9:52:10 | s2 | main.rs:53:10:53:11 | s2 | provenance | |
|
||||
| main.rs:52:14:52:29 | ...::from(...) | main.rs:52:9:52:10 | s2 | provenance | |
|
||||
| main.rs:52:27:52:28 | s1 | main.rs:52:14:52:29 | ...::from(...) | provenance | MaD:1 |
|
||||
| main.rs:63:9:63:9 | s | main.rs:64:16:64:16 | s | provenance | |
|
||||
| main.rs:63:13:63:22 | source(...) | main.rs:63:9:63:9 | s | provenance | |
|
||||
| main.rs:64:16:64:16 | s | main.rs:64:16:64:25 | s.as_str(...) | provenance | MaD:1 |
|
||||
| main.rs:64:16:64:16 | s | main.rs:64:16:64:25 | s.as_str(...) | provenance | MaD:2 |
|
||||
| main.rs:68:9:68:9 | s | main.rs:70:34:70:61 | MacroExpr | provenance | |
|
||||
| main.rs:68:9:68:9 | s | main.rs:73:34:73:59 | MacroExpr | provenance | |
|
||||
| main.rs:68:13:68:22 | source(...) | main.rs:68:9:68:9 | s | provenance | |
|
||||
| main.rs:70:9:70:18 | formatted1 | main.rs:71:10:71:19 | formatted1 | provenance | |
|
||||
| main.rs:70:22:70:62 | ...::format(...) | main.rs:70:9:70:18 | formatted1 | provenance | |
|
||||
| main.rs:70:34:70:61 | MacroExpr | main.rs:70:22:70:62 | ...::format(...) | provenance | MaD:2 |
|
||||
| main.rs:70:34:70:61 | MacroExpr | main.rs:70:22:70:62 | ...::format(...) | provenance | MaD:3 |
|
||||
| main.rs:73:9:73:18 | formatted2 | main.rs:74:10:74:19 | formatted2 | provenance | |
|
||||
| main.rs:73:22:73:60 | ...::format(...) | main.rs:73:9:73:18 | formatted2 | provenance | |
|
||||
| main.rs:73:34:73:59 | MacroExpr | main.rs:73:22:73:60 | ...::format(...) | provenance | MaD:2 |
|
||||
| main.rs:73:34:73:59 | MacroExpr | main.rs:73:22:73:60 | ...::format(...) | provenance | MaD:3 |
|
||||
| main.rs:76:9:76:13 | width | main.rs:77:34:77:74 | MacroExpr | provenance | |
|
||||
| main.rs:76:17:76:32 | source_usize(...) | main.rs:76:9:76:13 | width | provenance | |
|
||||
| main.rs:77:9:77:18 | formatted3 | main.rs:78:10:78:19 | formatted3 | provenance | |
|
||||
| main.rs:77:22:77:75 | ...::format(...) | main.rs:77:9:77:18 | formatted3 | provenance | |
|
||||
| main.rs:77:34:77:74 | MacroExpr | main.rs:77:22:77:75 | ...::format(...) | provenance | MaD:2 |
|
||||
| main.rs:77:34:77:74 | MacroExpr | main.rs:77:22:77:75 | ...::format(...) | provenance | MaD:3 |
|
||||
| main.rs:82:9:82:10 | s1 | main.rs:86:18:86:25 | MacroExpr | provenance | |
|
||||
| main.rs:82:9:82:10 | s1 | main.rs:87:18:87:32 | MacroExpr | provenance | |
|
||||
| main.rs:82:14:82:23 | source(...) | main.rs:82:9:82:10 | s1 | provenance | |
|
||||
| main.rs:86:10:86:26 | res | main.rs:86:18:86:25 | { ... } | provenance | |
|
||||
| main.rs:86:18:86:25 | ...::format(...) | main.rs:86:10:86:26 | res | provenance | |
|
||||
| main.rs:86:18:86:25 | ...::must_use(...) | main.rs:86:10:86:26 | MacroExpr | provenance | |
|
||||
| main.rs:86:18:86:25 | MacroExpr | main.rs:86:18:86:25 | ...::format(...) | provenance | MaD:2 |
|
||||
| main.rs:86:18:86:25 | { ... } | main.rs:86:18:86:25 | ...::must_use(...) | provenance | MaD:3 |
|
||||
| main.rs:86:18:86:25 | MacroExpr | main.rs:86:18:86:25 | ...::format(...) | provenance | MaD:3 |
|
||||
| main.rs:86:18:86:25 | { ... } | main.rs:86:18:86:25 | ...::must_use(...) | provenance | MaD:4 |
|
||||
| main.rs:87:10:87:33 | res | main.rs:87:18:87:32 | { ... } | provenance | |
|
||||
| main.rs:87:18:87:32 | ...::format(...) | main.rs:87:10:87:33 | res | provenance | |
|
||||
| main.rs:87:18:87:32 | ...::must_use(...) | main.rs:87:10:87:33 | MacroExpr | provenance | |
|
||||
| main.rs:87:18:87:32 | MacroExpr | main.rs:87:18:87:32 | ...::format(...) | provenance | MaD:2 |
|
||||
| main.rs:87:18:87:32 | { ... } | main.rs:87:18:87:32 | ...::must_use(...) | provenance | MaD:3 |
|
||||
| main.rs:87:18:87:32 | MacroExpr | main.rs:87:18:87:32 | ...::format(...) | provenance | MaD:3 |
|
||||
| main.rs:87:18:87:32 | { ... } | main.rs:87:18:87:32 | ...::must_use(...) | provenance | MaD:4 |
|
||||
nodes
|
||||
| main.rs:26:9:26:9 | s | semmle.label | s |
|
||||
| main.rs:26:13:26:22 | source(...) | semmle.label | source(...) |
|
||||
@@ -52,6 +58,12 @@ nodes
|
||||
| main.rs:32:14:32:23 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:35:9:35:10 | s4 | semmle.label | s4 |
|
||||
| main.rs:38:10:38:11 | s4 | semmle.label | s4 |
|
||||
| main.rs:51:9:51:10 | s1 | semmle.label | s1 |
|
||||
| main.rs:51:14:51:29 | source_slice(...) | semmle.label | source_slice(...) |
|
||||
| main.rs:52:9:52:10 | s2 | semmle.label | s2 |
|
||||
| main.rs:52:14:52:29 | ...::from(...) | semmle.label | ...::from(...) |
|
||||
| main.rs:52:27:52:28 | s1 | semmle.label | s1 |
|
||||
| main.rs:53:10:53:11 | s2 | semmle.label | s2 |
|
||||
| main.rs:63:9:63:9 | s | semmle.label | s |
|
||||
| main.rs:63:13:63:22 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:64:16:64:16 | s | semmle.label | s |
|
||||
@@ -91,6 +103,7 @@ testFailures
|
||||
#select
|
||||
| main.rs:28:16:28:21 | sliced | main.rs:26:13:26:22 | source(...) | main.rs:28:16:28:21 | sliced | $@ | main.rs:26:13:26:22 | source(...) | source(...) |
|
||||
| main.rs:38:10:38:11 | s4 | main.rs:32:14:32:23 | source(...) | main.rs:38:10:38:11 | s4 | $@ | main.rs:32:14:32:23 | source(...) | source(...) |
|
||||
| main.rs:53:10:53:11 | s2 | main.rs:51:14:51:29 | source_slice(...) | main.rs:53:10:53:11 | s2 | $@ | main.rs:51:14:51:29 | source_slice(...) | source_slice(...) |
|
||||
| main.rs:64:16:64:25 | s.as_str(...) | main.rs:63:13:63:22 | source(...) | main.rs:64:16:64:25 | s.as_str(...) | $@ | main.rs:63:13:63:22 | source(...) | source(...) |
|
||||
| main.rs:71:10:71:19 | formatted1 | main.rs:68:13:68:22 | source(...) | main.rs:71:10:71:19 | formatted1 | $@ | main.rs:68:13:68:22 | source(...) | source(...) |
|
||||
| main.rs:74:10:74:19 | formatted2 | main.rs:68:13:68:22 | source(...) | main.rs:74:10:74:19 | formatted2 | $@ | main.rs:68:13:68:22 | source(...) | source(...) |
|
||||
|
||||
@@ -50,7 +50,7 @@ fn string_add_reference() {
|
||||
fn string_from() {
|
||||
let s1 = source_slice(36);
|
||||
let s2 = String::from(s1);
|
||||
sink(s2); // $ MISSING: hasTaintFlow=36
|
||||
sink(s2); // $ hasValueFlow=36
|
||||
}
|
||||
|
||||
fn string_to_string() {
|
||||
|
||||
@@ -1,40 +1,16 @@
|
||||
additionalTaintStep
|
||||
| file://:0:0:0:0 | [summary param] 0 in lang:alloc::_::crate::fmt::format | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::crate::fmt::format | MaD:3 |
|
||||
| file://:0:0:0:0 | [summary param] self in lang:alloc::_::<crate::string::String>::as_bytes | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::<crate::string::String>::as_bytes | MaD:1 |
|
||||
| file://:0:0:0:0 | [summary param] self in lang:alloc::_::<crate::string::String>::as_str | file://:0:0:0:0 | [summary] to write: ReturnValue in lang:alloc::_::<crate::string::String>::as_str | MaD:2 |
|
||||
| file://:0:0:0:0 | [summary param] self in lang:core::_::crate::iter::traits::iterator::Iterator::collect | file://:0:0:0:0 | [summary] read: Argument[self].Element in lang:core::_::crate::iter::traits::iterator::Iterator::collect | |
|
||||
| file://:0:0:0:0 | [summary param] self in lang:core::_::crate::iter::traits::iterator::Iterator::nth | file://:0:0:0:0 | [summary] read: Argument[self].Element in lang:core::_::crate::iter::traits::iterator::Iterator::nth | |
|
||||
| file://:0:0:0:0 | [summary param] self in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::blocking::response::Response>::bytes | file://:0:0:0:0 | [summary] to write: ReturnValue.Field[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::blocking::response::Response>::bytes | MaD:4 |
|
||||
| file://:0:0:0:0 | [summary param] self in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::blocking::response::Response>::text | file://:0:0:0:0 | [summary] to write: ReturnValue.Field[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::blocking::response::Response>::text | MaD:5 |
|
||||
| file://:0:0:0:0 | [summary param] self in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::blocking::response::Response>::text_with_charset | file://:0:0:0:0 | [summary] to write: ReturnValue.Field[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::blocking::response::Response>::text_with_charset | MaD:6 |
|
||||
| file://:0:0:0:0 | [summary param] self in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::response::Response>::bytes | file://:0:0:0:0 | [summary] to write: ReturnValue.Field[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::response::Response>::bytes | MaD:7 |
|
||||
| file://:0:0:0:0 | [summary param] self in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::response::Response>::chunk | file://:0:0:0:0 | [summary] to write: ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::option::Option::Some(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::response::Response>::chunk | MaD:8 |
|
||||
| file://:0:0:0:0 | [summary param] self in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::response::Response>::text | file://:0:0:0:0 | [summary] to write: ReturnValue.Field[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::response::Response>::text | MaD:9 |
|
||||
| file://:0:0:0:0 | [summary param] self in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::response::Response>::text_with_charset | file://:0:0:0:0 | [summary] to write: ReturnValue.Field[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::response::Response>::text_with_charset | MaD:10 |
|
||||
| main.rs:4:5:4:8 | 1000 | main.rs:4:5:4:12 | ... + ... | |
|
||||
| main.rs:4:12:4:12 | i | main.rs:4:5:4:12 | ... + ... | |
|
||||
| main.rs:8:20:8:20 | s | main.rs:8:14:8:20 | FormatArgsExpr | |
|
||||
| main.rs:13:10:13:10 | a | main.rs:13:10:13:14 | ... + ... | |
|
||||
| main.rs:13:14:13:14 | 1 | main.rs:13:10:13:14 | ... + ... | |
|
||||
| main.rs:18:11:18:11 | a | main.rs:18:10:18:11 | - ... | |
|
||||
| main.rs:23:13:23:13 | a | main.rs:23:13:23:19 | a as u8 | |
|
||||
| main.rs:24:10:24:10 | b | main.rs:24:10:24:17 | b as i64 | |
|
||||
| main.rs:29:23:29:23 | i | main.rs:29:17:29:23 | FormatArgsExpr | |
|
||||
| main.rs:33:24:33:24 | s | main.rs:33:18:33:24 | FormatArgsExpr | |
|
||||
| main.rs:38:23:38:23 | s | main.rs:38:23:38:29 | s[...] | |
|
||||
| main.rs:49:24:49:24 | i | main.rs:49:18:49:24 | FormatArgsExpr | |
|
||||
| main.rs:54:14:54:16 | arr | main.rs:54:14:54:19 | arr[1] | |
|
||||
| main.rs:64:24:64:24 | s | main.rs:64:24:64:27 | s[1] | |
|
||||
| main.rs:64:24:64:27 | s[1] | main.rs:64:18:64:27 | FormatArgsExpr | |
|
||||
| main.rs:69:9:69:12 | arr2 | main.rs:69:9:69:15 | arr2[1] | |
|
||||
models
|
||||
| 1 | Summary: lang:alloc; <crate::string::String>::as_bytes; Argument[self]; ReturnValue; taint |
|
||||
| 2 | Summary: lang:alloc; <crate::string::String>::as_str; Argument[self]; ReturnValue; taint |
|
||||
| 3 | Summary: lang:alloc; crate::fmt::format; Argument[0]; ReturnValue; taint |
|
||||
| 4 | Summary: repo:https://github.com/seanmonstar/reqwest:reqwest; <crate::blocking::response::Response>::bytes; Argument[self]; ReturnValue.Field[crate::result::Result::Ok(0)]; taint |
|
||||
| 5 | Summary: repo:https://github.com/seanmonstar/reqwest:reqwest; <crate::blocking::response::Response>::text; Argument[self]; ReturnValue.Field[crate::result::Result::Ok(0)]; taint |
|
||||
| 6 | Summary: repo:https://github.com/seanmonstar/reqwest:reqwest; <crate::blocking::response::Response>::text_with_charset; Argument[self]; ReturnValue.Field[crate::result::Result::Ok(0)]; taint |
|
||||
| 7 | Summary: repo:https://github.com/seanmonstar/reqwest:reqwest; <crate::response::Response>::bytes; Argument[self]; ReturnValue.Field[crate::result::Result::Ok(0)]; taint |
|
||||
| 8 | Summary: repo:https://github.com/seanmonstar/reqwest:reqwest; <crate::response::Response>::chunk; Argument[self]; ReturnValue.Field[crate::result::Result::Ok(0)].Field[crate::option::Option::Some(0)]; taint |
|
||||
| 9 | Summary: repo:https://github.com/seanmonstar/reqwest:reqwest; <crate::response::Response>::text; Argument[self]; ReturnValue.Field[crate::result::Result::Ok(0)]; taint |
|
||||
| 10 | Summary: repo:https://github.com/seanmonstar/reqwest:reqwest; <crate::response::Response>::text_with_charset; Argument[self]; ReturnValue.Field[crate::result::Result::Ok(0)]; taint |
|
||||
| main.rs:4:5:4:8 | 1000 | main.rs:4:5:4:12 | ... + ... |
|
||||
| main.rs:4:12:4:12 | i | main.rs:4:5:4:12 | ... + ... |
|
||||
| main.rs:8:20:8:20 | s | main.rs:8:14:8:20 | FormatArgsExpr |
|
||||
| main.rs:13:10:13:10 | a | main.rs:13:10:13:14 | ... + ... |
|
||||
| main.rs:13:14:13:14 | 1 | main.rs:13:10:13:14 | ... + ... |
|
||||
| main.rs:18:11:18:11 | a | main.rs:18:10:18:11 | - ... |
|
||||
| main.rs:23:13:23:13 | a | main.rs:23:13:23:19 | a as u8 |
|
||||
| main.rs:24:10:24:10 | b | main.rs:24:10:24:17 | b as i64 |
|
||||
| main.rs:29:23:29:23 | i | main.rs:29:17:29:23 | FormatArgsExpr |
|
||||
| main.rs:33:24:33:24 | s | main.rs:33:18:33:24 | FormatArgsExpr |
|
||||
| main.rs:38:23:38:23 | s | main.rs:38:23:38:29 | s[...] |
|
||||
| main.rs:49:24:49:24 | i | main.rs:49:18:49:24 | FormatArgsExpr |
|
||||
| main.rs:54:14:54:16 | arr | main.rs:54:14:54:19 | arr[1] |
|
||||
| main.rs:64:24:64:24 | s | main.rs:64:24:64:27 | s[1] |
|
||||
| main.rs:64:24:64:27 | s[1] | main.rs:64:18:64:27 | FormatArgsExpr |
|
||||
| main.rs:69:9:69:12 | arr2 | main.rs:69:9:69:15 | arr2[1] |
|
||||
|
||||
@@ -1,18 +1,10 @@
|
||||
import codeql.rust.dataflow.DataFlow
|
||||
import codeql.rust.dataflow.internal.DataFlowImpl
|
||||
import codeql.rust.dataflow.internal.TaintTrackingImpl
|
||||
import utils.test.TranslateModels
|
||||
|
||||
private predicate provenance(string model) {
|
||||
RustTaintTracking::defaultAdditionalTaintStep(_, _, model)
|
||||
}
|
||||
|
||||
private module Tm = TranslateModels<provenance/1>;
|
||||
|
||||
query predicate models = Tm::models/2;
|
||||
|
||||
query predicate additionalTaintStep(DataFlow::Node pred, DataFlow::Node succ, string model) {
|
||||
exists(string madId |
|
||||
RustTaintTracking::defaultAdditionalTaintStep(pred, succ, madId) and
|
||||
Tm::translateModels(madId, model)
|
||||
)
|
||||
query predicate additionalTaintStep(DataFlow::Node pred, DataFlow::Node succ) {
|
||||
// Taint steps that don't originate from a flow summary.
|
||||
RustTaintTracking::defaultAdditionalTaintStep(pred, succ, "") and
|
||||
not pred instanceof Node::FlowSummaryNode
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
| Macro calls - resolved | 8 |
|
||||
| Macro calls - total | 9 |
|
||||
| Macro calls - unresolved | 1 |
|
||||
| Taint edges - number of edges | 4 |
|
||||
| Taint edges - number of edges | 1465 |
|
||||
| Taint reach - nodes tainted | 0 |
|
||||
| Taint reach - per million nodes | 0 |
|
||||
| Taint sinks - cryptographic operations | 0 |
|
||||
|
||||
Reference in New Issue
Block a user