diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml b/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml index e92ae4defa34..94aae55a60e7 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml @@ -12,68 +12,75 @@ extensions: - ["<_ as core::ops::index::IndexMut>::index_mut", "Argument[self].Reference.Element", "ReturnValue.Reference", "value", "manual"] # Unary operators - ["<_ as core::ops::arith::Neg>::neg", "Argument[self]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Neg>::neg", "Argument[self].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::Not>::not", "Argument[self].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] # Arithmetic operators - - ["<_ as core::ops::arith::Add>::add", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Add>::add", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Add>::add", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Sub>::sub", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Sub>::sub", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Sub>::sub", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Mul>::mul", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Mul>::mul", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Mul>::mul", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Div>::div", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Div>::div", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Div>::div", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Rem>::rem", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Rem>::rem", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Rem>::rem", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Add>::add", "Argument[self,0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Add>::add", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::Sub>::sub", "Argument[self,0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Sub>::sub", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::Mul>::mul", "Argument[self,0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Mul>::mul", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::Div>::div", "Argument[self,0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Div>::div", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::Rem>::rem", "Argument[self,0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Rem>::rem", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] # Arithmetic assignment expressions - ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] # Bitwise operators - - ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::BitOr>::bitor", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::BitOr>::bitor", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::BitOr>::bitor", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[self,0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::BitOr>::bitor", "Argument[self,0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::BitOr>::bitor", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[self,0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] # Bitwise assignment operators + - ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] # Shift operators - - ["<_ as core::ops::bit::Shl>::shl", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::Shl>::shl", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::Shl>::shl", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::Shr>::shr", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::Shr>::shr", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::Shr>::shr", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::Shl>::shl", "Argument[self,0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::Shl>::shl", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::Shr>::shr", "Argument[self,0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::Shr>::shr", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] # Shift assignment operators + - ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::ShrAssign>::shr_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::bit::ShrAssign>::shr_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::bit::ShrAssign>::shr_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::bit::ShrAssign>::shr_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::ShrAssign>::shr_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] # Clone - ["<_ as core::clone::Clone>::clone", "Argument[self].Reference", "ReturnValue", "value", "manual"] # Conversions @@ -156,4 +163,4 @@ extensions: data: - ["core::ops::range::RangeInclusive::start"] - ["core::ops::range::RangeInclusive::end"] - - ["core::result::Result::Err(0)"] \ No newline at end of file + - ["core::result::Result::Err(0)"] diff --git a/rust/ql/lib/utils/test/InlineFlowTest.qll b/rust/ql/lib/utils/test/InlineFlowTest.qll index aad06087d283..704172b95bd9 100644 --- a/rust/ql/lib/utils/test/InlineFlowTest.qll +++ b/rust/ql/lib/utils/test/InlineFlowTest.qll @@ -19,7 +19,7 @@ private import internal.InlineExpectationsTestImpl as InlineExpectationsTestImpl */ bindingset[name] private predicate callTargetName(CallExpr call, string name) { - call.getFunction().(PathExpr).toString().matches(name + "%") + call.getFunction().(PathExpr).getPath().getText().matches(name + "%") } private module FlowTestImpl implements InputSig { diff --git a/rust/ql/test/library-tests/dataflow/collections/inline-flow.expected b/rust/ql/test/library-tests/dataflow/collections/inline-flow.expected index c0e096f98f0b..e3eba23d036a 100644 --- a/rust/ql/test/library-tests/dataflow/collections/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/collections/inline-flow.expected @@ -1,8 +1,7 @@ models | 1 | Summary: <& as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value | -| 2 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0].Reference; Argument[self].Reference; taint | -| 3 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0]; Argument[self].Reference; taint | -| 4 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 2 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0]; Argument[self].Reference; taint | +| 3 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | edges | main.rs:15:13:15:13 | s | main.rs:16:20:16:20 | s | provenance | | | main.rs:15:17:15:25 | source(...) | main.rs:15:13:15:13 | s | provenance | | @@ -10,14 +9,14 @@ edges | main.rs:16:13:16:15 | arr [element] | main.rs:18:15:18:17 | arr [element] | provenance | | | main.rs:16:19:16:24 | [s; 5] [element] | main.rs:16:13:16:15 | arr [element] | provenance | | | main.rs:16:20:16:20 | s | main.rs:16:19:16:24 | [s; 5] [element] | provenance | | -| main.rs:17:14:17:16 | arr [element] | main.rs:17:14:17:19 | arr[2] | provenance | MaD:4 | -| main.rs:18:15:18:17 | arr [element] | main.rs:18:15:18:26 | arr.index(...) [&ref] | provenance | MaD:4 | +| main.rs:17:14:17:16 | arr [element] | main.rs:17:14:17:19 | arr[2] | provenance | MaD:3 | +| main.rs:18:15:18:17 | arr [element] | main.rs:18:15:18:26 | arr.index(...) [&ref] | provenance | MaD:3 | | main.rs:18:15:18:26 | arr.index(...) [&ref] | main.rs:18:14:18:26 | * ... | provenance | MaD:1 | | main.rs:20:13:20:19 | mut arr | main.rs:21:14:21:16 | arr | provenance | | | main.rs:20:13:20:19 | mut arr | main.rs:22:15:22:17 | arr | provenance | | | main.rs:20:23:20:33 | source(...) | main.rs:20:13:20:19 | mut arr | provenance | | -| main.rs:21:14:21:16 | arr | main.rs:21:14:21:19 | arr[0] | provenance | MaD:4 | -| main.rs:22:15:22:17 | arr | main.rs:22:15:22:26 | arr.index(...) [&ref] | provenance | MaD:4 | +| main.rs:21:14:21:16 | arr | main.rs:21:14:21:19 | arr[0] | provenance | MaD:3 | +| main.rs:22:15:22:17 | arr | main.rs:22:15:22:26 | arr.index(...) [&ref] | provenance | MaD:3 | | main.rs:22:15:22:26 | arr.index(...) [&ref] | main.rs:22:14:22:26 | * ... | provenance | MaD:1 | | main.rs:24:13:24:13 | s | main.rs:25:20:25:20 | s | provenance | | | main.rs:24:17:24:25 | source(...) | main.rs:24:13:24:13 | s | provenance | | @@ -30,17 +29,15 @@ edges | main.rs:30:19:30:29 | source(...) | main.rs:30:13:30:15 | arr | provenance | | | main.rs:37:9:37:11 | [post] arr [element] | main.rs:38:14:38:16 | arr [element] | provenance | | | main.rs:37:18:37:26 | source(...) | main.rs:37:9:37:11 | [post] arr [element] | provenance | | -| main.rs:38:14:38:16 | arr [element] | main.rs:38:14:38:19 | arr[0] | provenance | MaD:4 | +| main.rs:38:14:38:16 | arr [element] | main.rs:38:14:38:19 | arr[0] | provenance | MaD:3 | | main.rs:46:9:46:14 | [post] arr[0] | main.rs:47:14:47:16 | arr | provenance | | | main.rs:46:19:46:27 | source(...) | main.rs:46:9:46:14 | [post] arr[0] | provenance | MaD:2 | -| main.rs:46:19:46:27 | source(...) | main.rs:46:9:46:14 | [post] arr[0] | provenance | MaD:3 | -| main.rs:47:14:47:16 | arr | main.rs:47:14:47:19 | arr[0] | provenance | MaD:4 | +| main.rs:47:14:47:16 | arr | main.rs:47:14:47:19 | arr[0] | provenance | MaD:3 | | main.rs:63:18:63:22 | SelfParam [&ref, S] | main.rs:63:56:65:9 | { ... } [&ref, S] | provenance | | | main.rs:76:34:76:44 | ...: Self [S] | main.rs:77:23:77:27 | other [S] | provenance | | | main.rs:77:13:77:18 | [post] self.0 | main.rs:76:23:76:31 | SelfParam [Return] [&ref, S] | provenance | | | main.rs:77:23:77:27 | other [S] | main.rs:77:23:77:29 | other.0 | provenance | | | main.rs:77:23:77:29 | other.0 | main.rs:77:13:77:18 | [post] self.0 | provenance | MaD:2 | -| main.rs:77:23:77:29 | other.0 | main.rs:77:13:77:18 | [post] self.0 | provenance | MaD:3 | | main.rs:82:13:82:13 | s | main.rs:83:19:83:19 | s | provenance | | | main.rs:82:17:82:25 | source(...) | main.rs:82:13:82:13 | s | provenance | | | main.rs:83:13:83:13 | s [S] | main.rs:84:14:84:14 | s [S] | provenance | | @@ -67,7 +64,6 @@ edges | main.rs:99:9:99:12 | [post] s[0] [S] | main.rs:99:9:99:9 | [post] s [S] | provenance | | | main.rs:99:17:99:28 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | provenance | | | main.rs:99:17:99:28 | S(...) [S] | main.rs:99:9:99:12 | [post] s[0] [S] | provenance | MaD:2 | -| main.rs:99:17:99:28 | S(...) [S] | main.rs:99:9:99:12 | [post] s[0] [S] | provenance | MaD:3 | | main.rs:99:19:99:27 | source(...) | main.rs:99:17:99:28 | S(...) [S] | provenance | | | main.rs:100:14:100:14 | s [S] | main.rs:100:14:100:16 | s.0 | provenance | | | main.rs:104:9:104:23 | [post] * ... [S] | main.rs:104:10:104:23 | [post] s.index_mut(...) [&ref, S] | provenance | | @@ -75,13 +71,11 @@ edges | main.rs:104:10:104:23 | [post] s.index_mut(...) [&ref, S] | main.rs:104:10:104:10 | [post] s [S] | provenance | | | main.rs:104:28:104:39 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | provenance | | | main.rs:104:28:104:39 | S(...) [S] | main.rs:104:9:104:23 | [post] * ... [S] | provenance | MaD:2 | -| main.rs:104:28:104:39 | S(...) [S] | main.rs:104:9:104:23 | [post] * ... [S] | provenance | MaD:3 | | main.rs:104:30:104:38 | source(...) | main.rs:104:28:104:39 | S(...) [S] | provenance | | | main.rs:105:9:105:9 | [post] s [S] | main.rs:106:14:106:14 | s [S] | provenance | | | main.rs:105:9:105:12 | [post] s[0] [S] | main.rs:105:9:105:9 | [post] s [S] | provenance | | | main.rs:105:17:105:28 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | provenance | | | main.rs:105:17:105:28 | S(...) [S] | main.rs:105:9:105:12 | [post] s[0] [S] | provenance | MaD:2 | -| main.rs:105:17:105:28 | S(...) [S] | main.rs:105:9:105:12 | [post] s[0] [S] | provenance | MaD:3 | | main.rs:105:19:105:27 | source(...) | main.rs:105:17:105:28 | S(...) [S] | provenance | | | main.rs:106:14:106:14 | s [S] | main.rs:106:14:106:16 | s.0 | provenance | | | main.rs:110:10:110:24 | [post] * ... [S] | main.rs:110:11:110:24 | [post] s.index_mut(...) [&ref, S] | provenance | | @@ -89,7 +83,6 @@ edges | main.rs:110:11:110:24 | [post] s.index_mut(...) [&ref, S] | main.rs:110:11:110:11 | [post] s [S] | provenance | | | main.rs:110:38:110:49 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | provenance | | | main.rs:110:38:110:49 | S(...) [S] | main.rs:110:10:110:24 | [post] * ... [S] | provenance | MaD:2 | -| main.rs:110:38:110:49 | S(...) [S] | main.rs:110:10:110:24 | [post] * ... [S] | provenance | MaD:3 | | main.rs:110:40:110:48 | source(...) | main.rs:110:38:110:49 | S(...) [S] | provenance | | | main.rs:111:14:111:14 | s [S] | main.rs:111:14:111:16 | s.0 | provenance | | nodes diff --git a/rust/ql/test/library-tests/dataflow/global/inline-flow.expected b/rust/ql/test/library-tests/dataflow/global/inline-flow.expected index f4db29396539..5caa5c1c3ed9 100644 --- a/rust/ql/test/library-tests/dataflow/global/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/global/inline-flow.expected @@ -1,6 +1,6 @@ models | 1 | Summary: <& as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value | -| 2 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self]; ReturnValue; taint | +| 2 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self,0]; ReturnValue; taint | | 3 | Summary: futures_executor::local_pool::block_on; Argument[0]; ReturnValue; value | edges | main.rs:12:28:14:1 | { ... } | main.rs:17:13:17:23 | get_data(...) | provenance | | diff --git a/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected b/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected index 14244fff454a..58a421b4d3f7 100644 --- a/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected @@ -4,53 +4,52 @@ models | 3 | Summary: <_ as core::cmp::Ord>::clamp; Argument[self,0,1]; ReturnValue; value | | 4 | Summary: <_ as core::cmp::Ord>::max; Argument[self,0]; ReturnValue; value | | 5 | Summary: <_ as core::cmp::Ord>::min; Argument[self,0]; ReturnValue; value | -| 6 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint | -| 7 | Summary: <_ as core::ops::arith::Add>::add; Argument[0]; ReturnValue; taint | -| 8 | Summary: ::into_pin; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value | -| 9 | Summary: ::new; Argument[0]; ReturnValue.Field[alloc::boxed::Box(0)]; value | -| 10 | Summary: ::pin; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer].Field[alloc::boxed::Box(0)]; value | -| 11 | Summary: ::clone; Argument[self].Reference; ReturnValue; value | -| 12 | Summary: ::clone; Argument[self]; ReturnValue; value | -| 13 | Summary: ::map_or; Argument[1].ReturnValue; ReturnValue; value | -| 14 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 15 | Summary: ::zip; Argument[0].Field[core::option::Option::Some(0)]; ReturnValue.Field[core::option::Option::Some(0)].Field[1]; value | -| 16 | Summary: ::deref; Argument[self].Reference.Field[core::pin::Pin::pointer].Field[alloc::boxed::Box(0)]; ReturnValue.Reference; value | -| 17 | Summary: ::deref; Argument[self].Reference.Field[core::pin::Pin::pointer].Reference; ReturnValue.Reference; value | -| 18 | Summary: ::into_inner; Argument[0].Field[core::pin::Pin::pointer]; ReturnValue; value | -| 19 | Summary: ::into_inner_unchecked; Argument[0].Field[core::pin::Pin::pointer]; ReturnValue; value | -| 20 | Summary: ::new; Argument[0].Reference; ReturnValue; value | -| 21 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value | -| 22 | Summary: ::new_unchecked; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value | -| 23 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 24 | Summary: core::ptr::read; Argument[0].Reference; ReturnValue; value | -| 25 | Summary: core::ptr::write; Argument[1]; Argument[0].Reference; value | +| 6 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0]; ReturnValue; taint | +| 7 | Summary: ::into_pin; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value | +| 8 | Summary: ::new; Argument[0]; ReturnValue.Field[alloc::boxed::Box(0)]; value | +| 9 | Summary: ::pin; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer].Field[alloc::boxed::Box(0)]; value | +| 10 | Summary: ::clone; Argument[self].Reference; ReturnValue; value | +| 11 | Summary: ::clone; Argument[self]; ReturnValue; value | +| 12 | Summary: ::map_or; Argument[1].ReturnValue; ReturnValue; value | +| 13 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 14 | Summary: ::zip; Argument[0].Field[core::option::Option::Some(0)]; ReturnValue.Field[core::option::Option::Some(0)].Field[1]; value | +| 15 | Summary: ::deref; Argument[self].Reference.Field[core::pin::Pin::pointer].Field[alloc::boxed::Box(0)]; ReturnValue.Reference; value | +| 16 | Summary: ::deref; Argument[self].Reference.Field[core::pin::Pin::pointer].Reference; ReturnValue.Reference; value | +| 17 | Summary: ::into_inner; Argument[0].Field[core::pin::Pin::pointer]; ReturnValue; value | +| 18 | Summary: ::into_inner_unchecked; Argument[0].Field[core::pin::Pin::pointer]; ReturnValue; value | +| 19 | Summary: ::new; Argument[0].Reference; ReturnValue; value | +| 20 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value | +| 21 | Summary: ::new_unchecked; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value | +| 22 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 23 | Summary: core::ptr::read; Argument[0].Reference; ReturnValue; value | +| 24 | Summary: core::ptr::write; Argument[1]; Argument[0].Reference; value | edges | main.rs:12:9:12:9 | a [Some] | main.rs:13:10:13:10 | a [Some] | provenance | | | main.rs:12:9:12:9 | a [Some] | main.rs:14:13:14:13 | a [Some] | provenance | | | main.rs:12:13:12:28 | Some(...) [Some] | main.rs:12:9:12:9 | a [Some] | provenance | | | main.rs:12:18:12:27 | source(...) | main.rs:12:13:12:28 | Some(...) [Some] | provenance | | -| main.rs:13:10:13:10 | a [Some] | main.rs:13:10:13:19 | a.unwrap() | provenance | MaD:14 | +| main.rs:13:10:13:10 | a [Some] | main.rs:13:10:13:19 | a.unwrap() | provenance | MaD:13 | | main.rs:14:9:14:9 | b [Some] | main.rs:15:10:15:10 | b [Some] | provenance | | | main.rs:14:13:14:13 | a [Some] | main.rs:14:13:14:21 | a.clone() [Some] | provenance | MaD:2 | | main.rs:14:13:14:21 | a.clone() [Some] | main.rs:14:9:14:9 | b [Some] | provenance | | -| main.rs:15:10:15:10 | b [Some] | main.rs:15:10:15:19 | b.unwrap() | provenance | MaD:14 | +| main.rs:15:10:15:10 | b [Some] | main.rs:15:10:15:19 | b.unwrap() | provenance | MaD:13 | | main.rs:19:9:19:9 | a [Ok] | main.rs:20:10:20:10 | a [Ok] | provenance | | | main.rs:19:9:19:9 | a [Ok] | main.rs:21:13:21:13 | a [Ok] | provenance | | | main.rs:19:31:19:44 | Ok(...) [Ok] | main.rs:19:9:19:9 | a [Ok] | provenance | | | main.rs:19:34:19:43 | source(...) | main.rs:19:31:19:44 | Ok(...) [Ok] | provenance | | -| main.rs:20:10:20:10 | a [Ok] | main.rs:20:10:20:19 | a.unwrap() | provenance | MaD:23 | +| main.rs:20:10:20:10 | a [Ok] | main.rs:20:10:20:19 | a.unwrap() | provenance | MaD:22 | | main.rs:21:9:21:9 | b [Ok] | main.rs:22:10:22:10 | b [Ok] | provenance | | | main.rs:21:13:21:13 | a [Ok] | main.rs:21:13:21:21 | a.clone() [Ok] | provenance | MaD:2 | | main.rs:21:13:21:21 | a.clone() [Ok] | main.rs:21:9:21:9 | b [Ok] | provenance | | -| main.rs:22:10:22:10 | b [Ok] | main.rs:22:10:22:19 | b.unwrap() | provenance | MaD:23 | +| main.rs:22:10:22:10 | b [Ok] | main.rs:22:10:22:19 | b.unwrap() | provenance | MaD:22 | | main.rs:26:9:26:9 | a | main.rs:27:10:27:10 | a | provenance | | | main.rs:26:9:26:9 | a | main.rs:28:13:28:13 | a | provenance | | | main.rs:26:13:26:22 | source(...) | main.rs:26:9:26:9 | a | provenance | | | main.rs:28:9:28:9 | b | main.rs:29:10:29:10 | b | provenance | | | main.rs:28:9:28:9 | b [&ref] | main.rs:29:10:29:10 | b | provenance | | | main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() | provenance | MaD:2 | -| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() | provenance | MaD:11 | -| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() [&ref] | provenance | MaD:12 | +| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() | provenance | MaD:10 | +| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() [&ref] | provenance | MaD:11 | | main.rs:28:13:28:21 | a.clone() | main.rs:28:9:28:9 | b | provenance | | | main.rs:28:13:28:21 | a.clone() [&ref] | main.rs:28:9:28:9 | b [&ref] | provenance | | | main.rs:43:18:43:22 | SelfParam [&ref, Wrapper] | main.rs:44:26:44:31 | self.n | provenance | | @@ -75,19 +74,18 @@ edges | main.rs:66:22:66:31 | source(...) | main.rs:66:17:66:32 | Some(...) [Some] | provenance | | | main.rs:67:13:67:13 | z [Some, tuple.1] | main.rs:68:15:68:15 | z [Some, tuple.1] | provenance | | | main.rs:67:17:67:24 | a.zip(...) [Some, tuple.1] | main.rs:67:13:67:13 | z [Some, tuple.1] | provenance | | -| main.rs:67:23:67:23 | b [Some] | main.rs:67:17:67:24 | a.zip(...) [Some, tuple.1] | provenance | MaD:15 | +| main.rs:67:23:67:23 | b [Some] | main.rs:67:17:67:24 | a.zip(...) [Some, tuple.1] | provenance | MaD:14 | | main.rs:68:15:68:15 | z [Some, tuple.1] | main.rs:69:13:69:24 | Some(...) [Some, tuple.1] | provenance | | | main.rs:69:13:69:24 | Some(...) [Some, tuple.1] | main.rs:69:18:69:23 | TuplePat [tuple.1] | provenance | | | main.rs:69:18:69:23 | TuplePat [tuple.1] | main.rs:69:22:69:22 | m | provenance | | | main.rs:69:22:69:22 | m | main.rs:71:22:71:22 | m | provenance | | | main.rs:79:13:79:13 | b | main.rs:80:14:80:14 | b | provenance | | | main.rs:79:17:79:47 | a.map_or(...) | main.rs:79:13:79:13 | b | provenance | | -| main.rs:79:33:79:46 | ... + ... | main.rs:79:17:79:47 | a.map_or(...) | provenance | MaD:13 | +| main.rs:79:33:79:46 | ... + ... | main.rs:79:17:79:47 | a.map_or(...) | provenance | MaD:12 | | main.rs:79:37:79:46 | source(...) | main.rs:79:33:79:46 | ... + ... | provenance | MaD:6 | -| main.rs:79:37:79:46 | source(...) | main.rs:79:33:79:46 | ... + ... | provenance | MaD:7 | | main.rs:92:29:92:29 | [post] y [&ref] | main.rs:93:33:93:33 | y [&ref] | provenance | | -| main.rs:92:32:92:41 | source(...) | main.rs:92:29:92:29 | [post] y [&ref] | provenance | MaD:25 | -| main.rs:93:33:93:33 | y [&ref] | main.rs:93:18:93:34 | ...::read(...) | provenance | MaD:24 | +| main.rs:92:32:92:41 | source(...) | main.rs:92:29:92:29 | [post] y [&ref] | provenance | MaD:24 | +| main.rs:93:33:93:33 | y [&ref] | main.rs:93:18:93:34 | ...::read(...) | provenance | MaD:23 | | main.rs:108:13:108:17 | mut i | main.rs:109:34:109:34 | i | provenance | | | main.rs:108:13:108:17 | mut i | main.rs:110:33:110:33 | i | provenance | | | main.rs:108:13:108:17 | mut i | main.rs:111:47:111:47 | i | provenance | | @@ -100,51 +98,51 @@ edges | main.rs:109:13:109:20 | mut pin1 [Pin, &ref] | main.rs:115:31:115:34 | pin1 [Pin, &ref] | provenance | | | main.rs:109:24:109:35 | ...::new(...) | main.rs:109:13:109:20 | mut pin1 | provenance | | | main.rs:109:24:109:35 | ...::new(...) [Pin, &ref] | main.rs:109:13:109:20 | mut pin1 [Pin, &ref] | provenance | | -| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) | provenance | MaD:20 | -| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) [Pin, &ref] | provenance | MaD:21 | +| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) | provenance | MaD:19 | +| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) [Pin, &ref] | provenance | MaD:20 | | main.rs:109:34:109:34 | i | main.rs:109:33:109:34 | &i [&ref] | provenance | | | main.rs:110:13:110:20 | mut pin2 [Pin, Box(0)] | main.rs:116:15:116:18 | pin2 [Pin, Box(0)] | provenance | | | main.rs:110:24:110:34 | ...::pin(...) [Pin, Box(0)] | main.rs:110:13:110:20 | mut pin2 [Pin, Box(0)] | provenance | | -| main.rs:110:33:110:33 | i | main.rs:110:24:110:34 | ...::pin(...) [Pin, Box(0)] | provenance | MaD:10 | +| main.rs:110:33:110:33 | i | main.rs:110:24:110:34 | ...::pin(...) [Pin, Box(0)] | provenance | MaD:9 | | main.rs:111:13:111:20 | mut pin3 [Pin, Box(0)] | main.rs:117:15:117:18 | pin3 [Pin, Box(0)] | provenance | | | main.rs:111:24:111:49 | ...::into_pin(...) [Pin, Box(0)] | main.rs:111:13:111:20 | mut pin3 [Pin, Box(0)] | provenance | | -| main.rs:111:38:111:48 | ...::new(...) [Box(0)] | main.rs:111:24:111:49 | ...::into_pin(...) [Pin, Box(0)] | provenance | MaD:8 | -| main.rs:111:47:111:47 | i | main.rs:111:38:111:48 | ...::new(...) [Box(0)] | provenance | MaD:9 | +| main.rs:111:38:111:48 | ...::new(...) [Box(0)] | main.rs:111:24:111:49 | ...::into_pin(...) [Pin, Box(0)] | provenance | MaD:7 | +| main.rs:111:47:111:47 | i | main.rs:111:38:111:48 | ...::new(...) [Box(0)] | provenance | MaD:8 | | main.rs:112:13:112:20 | mut pin4 [Pin, &ref] | main.rs:118:15:118:18 | pin4 [Pin, &ref] | provenance | | -| main.rs:112:24:112:27 | &mut pinned [&ref] | main.rs:112:24:112:27 | ...::new_unchecked(...) [Pin, &ref] | provenance | MaD:22 | +| main.rs:112:24:112:27 | &mut pinned [&ref] | main.rs:112:24:112:27 | ...::new_unchecked(...) [Pin, &ref] | provenance | MaD:21 | | main.rs:112:24:112:27 | ...::new_unchecked(...) [Pin, &ref] | main.rs:112:13:112:20 | mut pin4 [Pin, &ref] | provenance | | | main.rs:112:24:112:27 | mut pinned | main.rs:112:24:112:27 | pinned | provenance | | | main.rs:112:24:112:27 | pinned | main.rs:112:24:112:27 | &mut pinned [&ref] | provenance | | +| main.rs:114:15:114:18 | pin1 | main.rs:114:14:114:18 | * ... | provenance | MaD:15 | | main.rs:114:15:114:18 | pin1 | main.rs:114:14:114:18 | * ... | provenance | MaD:16 | -| main.rs:114:15:114:18 | pin1 | main.rs:114:14:114:18 | * ... | provenance | MaD:17 | -| main.rs:114:15:114:18 | pin1 [Pin, &ref] | main.rs:114:14:114:18 | * ... | provenance | MaD:17 | +| main.rs:114:15:114:18 | pin1 [Pin, &ref] | main.rs:114:14:114:18 | * ... | provenance | MaD:16 | | main.rs:115:15:115:35 | ...::into_inner(...) | main.rs:115:14:115:35 | * ... | provenance | MaD:1 | | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | main.rs:115:14:115:35 | * ... | provenance | MaD:1 | -| main.rs:115:31:115:34 | pin1 | main.rs:115:15:115:35 | ...::into_inner(...) | provenance | MaD:18 | -| main.rs:115:31:115:34 | pin1 [Pin, &ref] | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | provenance | MaD:18 | -| main.rs:116:15:116:18 | pin2 [Pin, Box(0)] | main.rs:116:14:116:18 | * ... | provenance | MaD:16 | -| main.rs:117:15:117:18 | pin3 [Pin, Box(0)] | main.rs:117:14:117:18 | * ... | provenance | MaD:16 | -| main.rs:118:15:118:18 | pin4 [Pin, &ref] | main.rs:118:14:118:18 | * ... | provenance | MaD:17 | +| main.rs:115:31:115:34 | pin1 | main.rs:115:15:115:35 | ...::into_inner(...) | provenance | MaD:17 | +| main.rs:115:31:115:34 | pin1 [Pin, &ref] | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | provenance | MaD:17 | +| main.rs:116:15:116:18 | pin2 [Pin, Box(0)] | main.rs:116:14:116:18 | * ... | provenance | MaD:15 | +| main.rs:117:15:117:18 | pin3 [Pin, Box(0)] | main.rs:117:14:117:18 | * ... | provenance | MaD:15 | +| main.rs:118:15:118:18 | pin4 [Pin, &ref] | main.rs:118:14:118:18 | * ... | provenance | MaD:16 | | main.rs:122:13:122:18 | mut ms [MyStruct] | main.rs:123:34:123:35 | ms [MyStruct] | provenance | | | main.rs:122:13:122:18 | mut ms [MyStruct] | main.rs:127:14:127:15 | ms [MyStruct] | provenance | | | main.rs:122:22:122:49 | MyStruct {...} [MyStruct] | main.rs:122:13:122:18 | mut ms [MyStruct] | provenance | | | main.rs:122:38:122:47 | source(...) | main.rs:122:22:122:49 | MyStruct {...} [MyStruct] | provenance | | | main.rs:123:13:123:20 | mut pin1 [Pin, &ref, MyStruct] | main.rs:129:30:129:33 | pin1 [Pin, &ref, MyStruct] | provenance | | | main.rs:123:24:123:36 | ...::new(...) [Pin, &ref, MyStruct] | main.rs:123:13:123:20 | mut pin1 [Pin, &ref, MyStruct] | provenance | | -| main.rs:123:33:123:35 | &ms [&ref, MyStruct] | main.rs:123:24:123:36 | ...::new(...) [Pin, &ref, MyStruct] | provenance | MaD:21 | +| main.rs:123:33:123:35 | &ms [&ref, MyStruct] | main.rs:123:24:123:36 | ...::new(...) [Pin, &ref, MyStruct] | provenance | MaD:20 | | main.rs:123:34:123:35 | ms [MyStruct] | main.rs:123:33:123:35 | &ms [&ref, MyStruct] | provenance | | | main.rs:127:14:127:15 | ms [MyStruct] | main.rs:127:14:127:19 | ms.val | provenance | | | main.rs:129:14:129:34 | ...::into_inner(...) [&ref, MyStruct] | main.rs:129:14:129:38 | ... .val | provenance | | -| main.rs:129:30:129:33 | pin1 [Pin, &ref, MyStruct] | main.rs:129:14:129:34 | ...::into_inner(...) [&ref, MyStruct] | provenance | MaD:18 | +| main.rs:129:30:129:33 | pin1 [Pin, &ref, MyStruct] | main.rs:129:14:129:34 | ...::into_inner(...) [&ref, MyStruct] | provenance | MaD:17 | | main.rs:136:13:136:18 | mut ms [MyStruct] | main.rs:137:44:137:45 | ms [MyStruct] | provenance | | | main.rs:136:22:136:49 | MyStruct {...} [MyStruct] | main.rs:136:13:136:18 | mut ms [MyStruct] | provenance | | | main.rs:136:38:136:47 | source(...) | main.rs:136:22:136:49 | MyStruct {...} [MyStruct] | provenance | | | main.rs:137:13:137:20 | mut pin5 [Pin, &ref, MyStruct] | main.rs:139:40:139:43 | pin5 [Pin, &ref, MyStruct] | provenance | | | main.rs:137:24:137:46 | ...::new_unchecked(...) [Pin, &ref, MyStruct] | main.rs:137:13:137:20 | mut pin5 [Pin, &ref, MyStruct] | provenance | | -| main.rs:137:43:137:45 | &ms [&ref, MyStruct] | main.rs:137:24:137:46 | ...::new_unchecked(...) [Pin, &ref, MyStruct] | provenance | MaD:22 | +| main.rs:137:43:137:45 | &ms [&ref, MyStruct] | main.rs:137:24:137:46 | ...::new_unchecked(...) [Pin, &ref, MyStruct] | provenance | MaD:21 | | main.rs:137:44:137:45 | ms [MyStruct] | main.rs:137:43:137:45 | &ms [&ref, MyStruct] | provenance | | | main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [&ref, MyStruct] | main.rs:139:14:139:48 | ... .val | provenance | | -| main.rs:139:40:139:43 | pin5 [Pin, &ref, MyStruct] | main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [&ref, MyStruct] | provenance | MaD:19 | +| main.rs:139:40:139:43 | pin5 [Pin, &ref, MyStruct] | main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [&ref, MyStruct] | provenance | MaD:18 | | main.rs:153:9:153:9 | a | main.rs:155:13:155:13 | a | provenance | | | main.rs:153:13:153:22 | source(...) | main.rs:153:9:153:9 | a | provenance | | | main.rs:154:9:154:9 | b | main.rs:155:19:155:19 | b | provenance | | diff --git a/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.expected index f01253fb4939..5b3e890545b3 100644 --- a/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.expected @@ -9,8 +9,8 @@ models | 8 | Source: ::get_opt; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; database | | 9 | Source: ::take; ReturnValue.Field[core::option::Option::Some(0)]; database | | 10 | Source: ::take_opt; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; database | -| 11 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint | -| 12 | Summary: <_ as core::ops::arith::Add>::add; Argument[0]; ReturnValue; taint | +| 11 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | +| 12 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0]; ReturnValue; taint | | 13 | Summary: <_ as mysql::conn::queryable::Queryable>::query_fold; Argument[2].ReturnValue; ReturnValue.Field[core::result::Result::Ok(0)]; value | | 14 | Summary: <_ as mysql_async::queryable::Queryable>::query_fold; Argument[2].ReturnValue; ReturnValue.Future.Field[core::result::Result::Ok(0)]; value | | 15 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | @@ -54,15 +54,20 @@ edges | test.rs:57:14:57:39 | ...: ... | test.rs:59:22:59:29 | values.1 | provenance | | | test.rs:57:14:57:39 | ...: ... | test.rs:60:22:60:29 | values.2 | provenance | | | test.rs:64:13:64:17 | total | test.rs:68:14:68:18 | total | provenance | | +| test.rs:64:13:64:17 | total [Wrapping] | test.rs:68:14:68:18 | total | provenance | | +| test.rs:64:21:67:10 | conn.query_fold(...) [Ok, Wrapping] | test.rs:64:21:67:11 | TryExpr [Wrapping] | provenance | | | test.rs:64:21:67:10 | conn.query_fold(...) [Ok] | test.rs:64:21:67:11 | TryExpr | provenance | | | test.rs:64:21:67:11 | TryExpr | test.rs:64:13:64:17 | total | provenance | | +| test.rs:64:21:67:11 | TryExpr [Wrapping] | test.rs:64:13:64:17 | total [Wrapping] | provenance | | | test.rs:64:26:64:35 | query_fold | test.rs:64:76:64:83 | ...: i64 | provenance | Src:MaD:2 | | test.rs:64:76:64:83 | ...: i64 | test.rs:65:18:65:20 | row | provenance | | | test.rs:64:76:64:83 | ...: i64 | test.rs:66:19:66:21 | row | provenance | | | test.rs:64:86:67:9 | { ... } | test.rs:64:21:67:10 | conn.query_fold(...) [Ok] | provenance | MaD:13 | +| test.rs:64:86:67:9 | { ... } [Wrapping] | test.rs:64:21:67:10 | conn.query_fold(...) [Ok, Wrapping] | provenance | MaD:13 | | test.rs:66:13:66:21 | ... + ... | test.rs:64:86:67:9 | { ... } | provenance | | -| test.rs:66:19:66:21 | row | test.rs:66:13:66:21 | ... + ... | provenance | MaD:11 | +| test.rs:66:13:66:21 | ... + ... [Wrapping] | test.rs:64:86:67:9 | { ... } [Wrapping] | provenance | | | test.rs:66:19:66:21 | row | test.rs:66:13:66:21 | ... + ... | provenance | MaD:12 | +| test.rs:66:19:66:21 | row | test.rs:66:13:66:21 | ... + ... [Wrapping] | provenance | MaD:11 | | test.rs:70:22:70:31 | query_fold | test.rs:70:83:70:105 | ...: ... | provenance | Src:MaD:2 | | test.rs:70:83:70:105 | ...: ... | test.rs:71:17:71:18 | id | provenance | | | test.rs:70:83:70:105 | ...: ... | test.rs:72:17:72:20 | name | provenance | | @@ -95,16 +100,22 @@ edges | test.rs:144:14:144:39 | ...: ... | test.rs:146:22:146:29 | values.1 | provenance | | | test.rs:144:14:144:39 | ...: ... | test.rs:147:22:147:29 | values.2 | provenance | | | test.rs:151:13:151:17 | total | test.rs:155:14:155:18 | total | provenance | | +| test.rs:151:13:151:17 | total [Wrapping] | test.rs:155:14:155:18 | total | provenance | | +| test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok, Wrapping] | test.rs:151:21:154:16 | await ... [Ok, Wrapping] | provenance | | | test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok] | test.rs:151:21:154:16 | await ... [Ok] | provenance | | +| test.rs:151:21:154:16 | await ... [Ok, Wrapping] | test.rs:151:21:154:17 | TryExpr [Wrapping] | provenance | | | test.rs:151:21:154:16 | await ... [Ok] | test.rs:151:21:154:17 | TryExpr | provenance | | | test.rs:151:21:154:17 | TryExpr | test.rs:151:13:151:17 | total | provenance | | +| test.rs:151:21:154:17 | TryExpr [Wrapping] | test.rs:151:13:151:17 | total [Wrapping] | provenance | | | test.rs:151:26:151:35 | query_fold | test.rs:151:76:151:83 | ...: i64 | provenance | Src:MaD:4 | | test.rs:151:76:151:83 | ...: i64 | test.rs:152:18:152:20 | row | provenance | | | test.rs:151:76:151:83 | ...: i64 | test.rs:153:19:153:21 | row | provenance | | | test.rs:151:86:154:9 | { ... } | test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok] | provenance | MaD:14 | +| test.rs:151:86:154:9 | { ... } [Wrapping] | test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok, Wrapping] | provenance | MaD:14 | | test.rs:153:13:153:21 | ... + ... | test.rs:151:86:154:9 | { ... } | provenance | | -| test.rs:153:19:153:21 | row | test.rs:153:13:153:21 | ... + ... | provenance | MaD:11 | +| test.rs:153:13:153:21 | ... + ... [Wrapping] | test.rs:151:86:154:9 | { ... } [Wrapping] | provenance | | | test.rs:153:19:153:21 | row | test.rs:153:13:153:21 | ... + ... | provenance | MaD:12 | +| test.rs:153:19:153:21 | row | test.rs:153:13:153:21 | ... + ... [Wrapping] | provenance | MaD:11 | | test.rs:157:22:157:31 | query_fold | test.rs:157:83:157:105 | ...: ... | provenance | Src:MaD:4 | | test.rs:157:83:157:105 | ...: ... | test.rs:158:17:158:18 | id | provenance | | | test.rs:157:83:157:105 | ...: ... | test.rs:159:17:159:20 | name | provenance | | @@ -160,13 +171,18 @@ nodes | test.rs:59:22:59:29 | values.1 | semmle.label | values.1 | | test.rs:60:22:60:29 | values.2 | semmle.label | values.2 | | test.rs:64:13:64:17 | total | semmle.label | total | +| test.rs:64:13:64:17 | total [Wrapping] | semmle.label | total [Wrapping] | +| test.rs:64:21:67:10 | conn.query_fold(...) [Ok, Wrapping] | semmle.label | conn.query_fold(...) [Ok, Wrapping] | | test.rs:64:21:67:10 | conn.query_fold(...) [Ok] | semmle.label | conn.query_fold(...) [Ok] | | test.rs:64:21:67:11 | TryExpr | semmle.label | TryExpr | +| test.rs:64:21:67:11 | TryExpr [Wrapping] | semmle.label | TryExpr [Wrapping] | | test.rs:64:26:64:35 | query_fold | semmle.label | query_fold | | test.rs:64:76:64:83 | ...: i64 | semmle.label | ...: i64 | | test.rs:64:86:67:9 | { ... } | semmle.label | { ... } | +| test.rs:64:86:67:9 | { ... } [Wrapping] | semmle.label | { ... } [Wrapping] | | test.rs:65:18:65:20 | row | semmle.label | row | | test.rs:66:13:66:21 | ... + ... | semmle.label | ... + ... | +| test.rs:66:13:66:21 | ... + ... [Wrapping] | semmle.label | ... + ... [Wrapping] | | test.rs:66:19:66:21 | row | semmle.label | row | | test.rs:68:14:68:18 | total | semmle.label | total | | test.rs:70:22:70:31 | query_fold | semmle.label | query_fold | @@ -208,14 +224,20 @@ nodes | test.rs:146:22:146:29 | values.1 | semmle.label | values.1 | | test.rs:147:22:147:29 | values.2 | semmle.label | values.2 | | test.rs:151:13:151:17 | total | semmle.label | total | +| test.rs:151:13:151:17 | total [Wrapping] | semmle.label | total [Wrapping] | +| test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok, Wrapping] | semmle.label | conn.query_fold(...) [future, Ok, Wrapping] | | test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok] | semmle.label | conn.query_fold(...) [future, Ok] | +| test.rs:151:21:154:16 | await ... [Ok, Wrapping] | semmle.label | await ... [Ok, Wrapping] | | test.rs:151:21:154:16 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:151:21:154:17 | TryExpr | semmle.label | TryExpr | +| test.rs:151:21:154:17 | TryExpr [Wrapping] | semmle.label | TryExpr [Wrapping] | | test.rs:151:26:151:35 | query_fold | semmle.label | query_fold | | test.rs:151:76:151:83 | ...: i64 | semmle.label | ...: i64 | | test.rs:151:86:154:9 | { ... } | semmle.label | { ... } | +| test.rs:151:86:154:9 | { ... } [Wrapping] | semmle.label | { ... } [Wrapping] | | test.rs:152:18:152:20 | row | semmle.label | row | | test.rs:153:13:153:21 | ... + ... | semmle.label | ... + ... | +| test.rs:153:13:153:21 | ... + ... [Wrapping] | semmle.label | ... + ... [Wrapping] | | test.rs:153:19:153:21 | row | semmle.label | row | | test.rs:155:14:155:18 | total | semmle.label | total | | test.rs:157:22:157:31 | query_fold | semmle.label | query_fold | diff --git a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected index dfd91b81506c..316b532b0656 100644 --- a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected @@ -1,43 +1,71 @@ | main.rs:8:20:8:20 | s | main.rs:8:14:8:20 | FormatArgsExpr | -| main.rs:16:5:16:5 | [post] b [implicit borrow] | main.rs:16:5:16:5 | [SSA] b | -| main.rs:20:5:20:5 | [post] c [implicit borrow] | main.rs:20:5:20:5 | [SSA] c | -| main.rs:31:13:31:13 | a | main.rs:31:13:31:19 | a as u8 | -| main.rs:32:10:32:10 | b | main.rs:32:10:32:17 | b as i64 | -| main.rs:32:10:32:17 | [post] b as i64 | main.rs:32:10:32:10 | [post] b | -| main.rs:37:23:37:23 | i | main.rs:37:17:37:23 | FormatArgsExpr | -| main.rs:41:24:41:24 | s | main.rs:41:18:41:24 | FormatArgsExpr | -| main.rs:46:23:46:23 | [post] s [implicit borrow] | main.rs:46:23:46:23 | [post] s | -| main.rs:46:23:46:23 | s | main.rs:46:23:46:29 | s[...] | -| main.rs:46:23:46:29 | s[...] [pre-dereferenced] | main.rs:46:23:46:29 | s[...] | -| main.rs:57:24:57:24 | i | main.rs:57:18:57:24 | FormatArgsExpr | -| main.rs:62:14:62:16 | [post] arr [implicit borrow] | main.rs:62:14:62:16 | [post] arr | -| main.rs:62:14:62:19 | arr[1] [pre-dereferenced] | main.rs:62:14:62:19 | arr[1] | -| main.rs:72:24:72:24 | [post] s [implicit borrow] | main.rs:72:24:72:24 | [post] s | -| main.rs:72:24:72:27 | s[1] | main.rs:72:18:72:27 | FormatArgsExpr | -| main.rs:72:24:72:27 | s[1] [pre-dereferenced] | main.rs:72:24:72:27 | s[1] | -| main.rs:77:9:77:12 | [post] arr2 [implicit borrow] | main.rs:77:9:77:12 | [post] arr2 | -| main.rs:77:9:77:15 | arr2[1] [pre-dereferenced] | main.rs:77:9:77:15 | arr2[1] | -| main.rs:98:14:98:47 | TupleExpr | main.rs:98:14:98:49 | ... .0 | -| main.rs:99:14:99:47 | TupleExpr | main.rs:99:14:99:49 | ... .1 | -| main.rs:102:14:102:28 | source_tuple(...) | main.rs:102:14:102:30 | ... .0 | -| main.rs:103:14:103:28 | source_tuple(...) | main.rs:103:14:103:30 | ... .1 | -| main.rs:106:14:106:83 | TupleExpr | main.rs:106:14:106:85 | ... .0 | -| main.rs:107:14:107:83 | TupleExpr | main.rs:107:14:107:85 | ... .0 | -| main.rs:107:14:107:85 | ... .0 | main.rs:107:14:107:87 | ... .0 | -| main.rs:108:14:108:83 | TupleExpr | main.rs:108:14:108:85 | ... .0 | -| main.rs:108:14:108:85 | ... .0 | main.rs:108:14:108:87 | ... .1 | -| main.rs:109:14:109:83 | TupleExpr | main.rs:109:14:109:85 | ... .1 | -| main.rs:110:14:110:83 | TupleExpr | main.rs:110:14:110:85 | ... .1 | -| main.rs:110:14:110:85 | ... .1 | main.rs:110:14:110:87 | ... .0 | -| main.rs:111:14:111:83 | TupleExpr | main.rs:111:14:111:85 | ... .1 | -| main.rs:111:14:111:85 | ... .1 | main.rs:111:14:111:87 | ... .1 | -| main.rs:114:14:114:64 | TupleExpr | main.rs:114:14:114:66 | ... .0 | -| main.rs:115:14:115:64 | TupleExpr | main.rs:115:14:115:66 | ... .0 | -| main.rs:115:14:115:66 | ... .0 | main.rs:115:14:115:68 | ... .0 | -| main.rs:116:14:116:64 | TupleExpr | main.rs:116:14:116:66 | ... .0 | -| main.rs:116:14:116:66 | ... .0 | main.rs:116:14:116:68 | ... .1 | -| main.rs:117:14:117:64 | TupleExpr | main.rs:117:14:117:66 | ... .1 | -| main.rs:118:14:118:64 | TupleExpr | main.rs:118:14:118:66 | ... .1 | -| main.rs:118:14:118:66 | ... .1 | main.rs:118:14:118:68 | ... .0 | -| main.rs:119:14:119:64 | TupleExpr | main.rs:119:14:119:66 | ... .1 | -| main.rs:119:14:119:66 | ... .1 | main.rs:119:14:119:68 | ... .1 | +| main.rs:17:5:17:5 | [post] b [implicit borrow] | main.rs:17:5:17:5 | [SSA] b | +| main.rs:21:5:21:5 | [post] c [implicit borrow] | main.rs:21:5:21:5 | [SSA] c | +| main.rs:46:13:46:13 | a | main.rs:46:13:46:19 | a as u8 | +| main.rs:47:10:47:10 | b | main.rs:47:10:47:17 | b as i64 | +| main.rs:47:10:47:17 | [post] b as i64 | main.rs:47:10:47:10 | [post] b | +| main.rs:52:23:52:23 | i | main.rs:52:17:52:23 | FormatArgsExpr | +| main.rs:56:24:56:24 | s | main.rs:56:18:56:24 | FormatArgsExpr | +| main.rs:61:23:61:23 | [post] s [implicit borrow] | main.rs:61:23:61:23 | [post] s | +| main.rs:61:23:61:23 | s | main.rs:61:23:61:29 | s[...] | +| main.rs:61:23:61:29 | s[...] [pre-dereferenced] | main.rs:61:23:61:29 | s[...] | +| main.rs:72:24:72:24 | i | main.rs:72:18:72:24 | FormatArgsExpr | +| main.rs:77:14:77:16 | [post] arr [implicit borrow] | main.rs:77:14:77:16 | [post] arr | +| main.rs:77:14:77:19 | arr[1] [pre-dereferenced] | main.rs:77:14:77:19 | arr[1] | +| main.rs:87:24:87:24 | [post] s [implicit borrow] | main.rs:87:24:87:24 | [post] s | +| main.rs:87:24:87:27 | s[1] | main.rs:87:18:87:27 | FormatArgsExpr | +| main.rs:87:24:87:27 | s[1] [pre-dereferenced] | main.rs:87:24:87:27 | s[1] | +| main.rs:92:9:92:12 | [post] arr2 [implicit borrow] | main.rs:92:9:92:12 | [post] arr2 | +| main.rs:92:9:92:15 | arr2[1] [pre-dereferenced] | main.rs:92:9:92:15 | arr2[1] | +| main.rs:113:14:113:47 | TupleExpr | main.rs:113:14:113:49 | ... .0 | +| main.rs:114:14:114:47 | TupleExpr | main.rs:114:14:114:49 | ... .1 | +| main.rs:117:14:117:28 | source_tuple(...) | main.rs:117:14:117:30 | ... .0 | +| main.rs:118:14:118:28 | source_tuple(...) | main.rs:118:14:118:30 | ... .1 | +| main.rs:121:14:121:83 | TupleExpr | main.rs:121:14:121:85 | ... .0 | +| main.rs:122:14:122:83 | TupleExpr | main.rs:122:14:122:85 | ... .0 | +| main.rs:122:14:122:85 | ... .0 | main.rs:122:14:122:87 | ... .0 | +| main.rs:123:14:123:83 | TupleExpr | main.rs:123:14:123:85 | ... .0 | +| main.rs:123:14:123:85 | ... .0 | main.rs:123:14:123:87 | ... .1 | +| main.rs:124:14:124:83 | TupleExpr | main.rs:124:14:124:85 | ... .1 | +| main.rs:125:14:125:83 | TupleExpr | main.rs:125:14:125:85 | ... .1 | +| main.rs:125:14:125:85 | ... .1 | main.rs:125:14:125:87 | ... .0 | +| main.rs:126:14:126:83 | TupleExpr | main.rs:126:14:126:85 | ... .1 | +| main.rs:126:14:126:85 | ... .1 | main.rs:126:14:126:87 | ... .1 | +| main.rs:129:14:129:64 | TupleExpr | main.rs:129:14:129:66 | ... .0 | +| main.rs:130:14:130:64 | TupleExpr | main.rs:130:14:130:66 | ... .0 | +| main.rs:130:14:130:66 | ... .0 | main.rs:130:14:130:68 | ... .0 | +| main.rs:131:14:131:64 | TupleExpr | main.rs:131:14:131:66 | ... .0 | +| main.rs:131:14:131:66 | ... .0 | main.rs:131:14:131:68 | ... .1 | +| main.rs:132:14:132:64 | TupleExpr | main.rs:132:14:132:66 | ... .1 | +| main.rs:133:14:133:64 | TupleExpr | main.rs:133:14:133:66 | ... .1 | +| main.rs:133:14:133:66 | ... .1 | main.rs:133:14:133:68 | ... .0 | +| main.rs:134:14:134:64 | TupleExpr | main.rs:134:14:134:66 | ... .1 | +| main.rs:134:14:134:66 | ... .1 | main.rs:134:14:134:68 | ... .1 | +| main.rs:170:5:170:5 | [post] a [implicit borrow] | main.rs:170:5:170:5 | [post] a | +| main.rs:171:5:171:5 | [post] a [implicit borrow] | main.rs:171:5:171:5 | [post] a | +| main.rs:172:5:172:5 | [post] a [implicit borrow] | main.rs:172:5:172:5 | [post] a | +| main.rs:173:5:173:5 | [post] a [implicit borrow] | main.rs:173:5:173:5 | [post] a | +| main.rs:174:5:174:5 | [post] a [implicit borrow] | main.rs:174:5:174:5 | [post] a | +| main.rs:175:5:175:5 | [post] a [implicit borrow] | main.rs:175:5:175:5 | [post] a | +| main.rs:191:9:191:9 | i | main.rs:191:9:191:18 | i as usize | +| main.rs:195:24:195:24 | s | main.rs:195:18:195:24 | FormatArgsExpr | +| main.rs:201:21:201:21 | a | main.rs:201:21:201:23 | a.0 | +| main.rs:203:9:203:9 | [post] a [implicit borrow] | main.rs:203:9:203:9 | [post] a | +| main.rs:204:9:204:9 | [post] a [implicit borrow] | main.rs:204:9:204:9 | [post] a | +| main.rs:206:21:206:21 | a | main.rs:206:21:206:23 | a.0 | +| main.rs:209:9:209:9 | [post] a [implicit borrow] | main.rs:209:9:209:9 | [SSA] a | +| main.rs:210:9:210:9 | [post] a [implicit borrow] | main.rs:210:9:210:9 | [SSA] a | +| main.rs:212:21:212:21 | a | main.rs:212:21:212:23 | a.0 | +| main.rs:215:9:215:9 | [post] a [implicit borrow] | main.rs:215:9:215:9 | [SSA] a | +| main.rs:216:9:216:9 | [post] a [implicit borrow] | main.rs:216:9:216:9 | [SSA] a | +| main.rs:218:21:218:21 | a | main.rs:218:21:218:23 | a.0 | +| main.rs:221:9:221:9 | [post] a [implicit borrow] | main.rs:221:9:221:9 | [SSA] a | +| main.rs:223:21:223:21 | a | main.rs:223:21:223:23 | a.0 | +| main.rs:228:21:228:22 | v1 | main.rs:228:21:228:24 | v1.0 | +| main.rs:230:21:230:22 | v2 | main.rs:230:21:230:24 | v2.0 | +| main.rs:232:21:232:22 | v3 | main.rs:232:21:232:24 | v3.0 | +| main.rs:234:21:234:22 | v4 | main.rs:234:21:234:24 | v4.0 | +| main.rs:236:21:236:22 | v5 | main.rs:236:21:236:24 | v5.0 | +| main.rs:238:21:238:22 | v6 | main.rs:238:21:238:24 | v6.0 | +| main.rs:240:21:240:22 | v7 | main.rs:240:21:240:24 | v7.0 | +| main.rs:242:21:242:22 | v8 | main.rs:242:21:242:24 | v8.0 | diff --git a/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected b/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected index 53a6a4e01a0c..221de45702b5 100644 --- a/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected +++ b/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected @@ -1,126 +1,558 @@ models -| 1 | Summary: <_ as core::ops::arith::Add>::add; Argument[self]; ReturnValue; taint | -| 2 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0].Reference; Argument[self].Reference; taint | -| 3 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0]; Argument[self].Reference; taint | -| 4 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[self].Reference; Argument[self].Reference; taint | -| 5 | Summary: <_ as core::ops::arith::Neg>::neg; Argument[self]; ReturnValue; taint | -| 6 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 1 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | +| 2 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0]; ReturnValue; taint | +| 3 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0].Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | +| 4 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0]; Argument[self].Reference; taint | +| 5 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | +| 6 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[self].Reference; Argument[self].Reference; taint | +| 7 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self,0]; ReturnValue; taint | +| 8 | Summary: <_ as core::ops::arith::MulAssign>::mul_assign; Argument[0]; Argument[self].Reference; taint | +| 9 | Summary: <_ as core::ops::arith::MulAssign>::mul_assign; Argument[self].Reference; Argument[self].Reference; taint | +| 10 | Summary: <_ as core::ops::arith::Neg>::neg; Argument[self].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | +| 11 | Summary: <_ as core::ops::arith::Neg>::neg; Argument[self]; ReturnValue; taint | +| 12 | Summary: <_ as core::ops::arith::Sub>::sub; Argument[self,0]; ReturnValue; taint | +| 13 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[0]; Argument[self].Reference; taint | +| 14 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[self].Reference; Argument[self].Reference; taint | +| 15 | Summary: <_ as core::ops::bit::BitAnd>::bitand; Argument[self,0].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | +| 16 | Summary: <_ as core::ops::bit::BitAndAssign>::bitand_assign; Argument[0].Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | +| 17 | Summary: <_ as core::ops::bit::BitAndAssign>::bitand_assign; Argument[0]; Argument[self].Reference; taint | +| 18 | Summary: <_ as core::ops::bit::BitAndAssign>::bitand_assign; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | +| 19 | Summary: <_ as core::ops::bit::BitAndAssign>::bitand_assign; Argument[self].Reference; Argument[self].Reference; taint | +| 20 | Summary: <_ as core::ops::bit::BitOr>::bitor; Argument[self,0]; ReturnValue; taint | +| 21 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[self,0]; ReturnValue; taint | +| 22 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[0]; Argument[self].Reference; taint | +| 23 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[self].Reference; Argument[self].Reference; taint | +| 24 | Summary: <_ as core::ops::bit::Not>::not; Argument[self].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | +| 25 | Summary: <_ as core::ops::bit::Not>::not; Argument[self]; ReturnValue; taint | +| 26 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[self,0].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | +| 27 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[self,0]; ReturnValue; taint | +| 28 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0].Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | +| 29 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0]; Argument[self].Reference; taint | +| 30 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | +| 31 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[self].Reference; Argument[self].Reference; taint | +| 32 | Summary: <_ as core::ops::bit::Shr>::shr; Argument[self,0]; ReturnValue; taint | +| 33 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[0]; Argument[self].Reference; taint | +| 34 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[self].Reference; Argument[self].Reference; taint | +| 35 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | edges | main.rs:12:9:12:9 | a | main.rs:13:10:13:10 | a | provenance | | +| main.rs:12:9:12:9 | a | main.rs:14:14:14:14 | a | provenance | | | main.rs:12:13:12:22 | source(...) | main.rs:12:9:12:9 | a | provenance | | -| main.rs:13:10:13:10 | a | main.rs:13:10:13:14 | ... + ... | provenance | MaD:1 | -| main.rs:15:9:15:13 | mut b | main.rs:16:5:16:5 | b | provenance | | -| main.rs:15:17:15:26 | source(...) | main.rs:15:9:15:13 | mut b | provenance | | -| main.rs:16:5:16:5 | b | main.rs:17:10:17:10 | b | provenance | MaD:4 | -| main.rs:20:10:20:19 | source(...) | main.rs:21:10:21:10 | c | provenance | MaD:2 | -| main.rs:20:10:20:19 | source(...) | main.rs:21:10:21:10 | c | provenance | MaD:3 | -| main.rs:25:9:25:9 | a | main.rs:26:11:26:11 | a | provenance | | -| main.rs:25:13:25:22 | source(...) | main.rs:25:9:25:9 | a | provenance | | -| main.rs:26:11:26:11 | a | main.rs:26:10:26:11 | - ... | provenance | MaD:5 | -| main.rs:30:9:30:9 | a | main.rs:31:9:31:9 | b | provenance | | -| main.rs:30:13:30:22 | source(...) | main.rs:30:9:30:9 | a | provenance | | -| main.rs:31:9:31:9 | b | main.rs:32:10:32:17 | b as i64 | provenance | | -| main.rs:45:13:45:13 | s | main.rs:46:23:46:23 | s | provenance | | -| main.rs:45:13:45:13 | s | main.rs:46:23:46:29 | s[...] | provenance | | -| main.rs:45:17:45:26 | source(...) | main.rs:45:13:45:13 | s | provenance | | -| main.rs:46:13:46:18 | sliced [&ref] | main.rs:47:14:47:19 | sliced | provenance | | -| main.rs:46:22:46:29 | &... [&ref] | main.rs:46:13:46:18 | sliced [&ref] | provenance | | -| main.rs:46:23:46:23 | s | main.rs:46:23:46:29 | s[...] | provenance | MaD:6 | -| main.rs:46:23:46:29 | s[...] | main.rs:46:22:46:29 | &... [&ref] | provenance | | -| main.rs:61:13:61:15 | arr | main.rs:62:14:62:16 | arr | provenance | | -| main.rs:61:19:61:28 | source(...) | main.rs:61:13:61:15 | arr | provenance | | -| main.rs:62:14:62:16 | arr | main.rs:62:14:62:19 | arr[1] | provenance | MaD:6 | -| main.rs:77:9:77:12 | [post] arr2 [element] | main.rs:78:14:78:17 | arr2 | provenance | | -| main.rs:77:19:77:28 | source(...) | main.rs:77:9:77:12 | [post] arr2 [element] | provenance | | -| main.rs:98:14:98:47 | TupleExpr [tuple.0] | main.rs:98:14:98:49 | ... .0 | provenance | | -| main.rs:98:15:98:30 | source_string(...) | main.rs:98:14:98:47 | TupleExpr [tuple.0] | provenance | | -| main.rs:102:14:102:28 | source_tuple(...) | main.rs:102:14:102:30 | ... .0 | provenance | | -| main.rs:103:14:103:28 | source_tuple(...) | main.rs:103:14:103:30 | ... .1 | provenance | | -| main.rs:108:14:108:83 | TupleExpr [tuple.0, tuple.1] | main.rs:108:14:108:85 | ... .0 [tuple.1] | provenance | | -| main.rs:108:14:108:85 | ... .0 [tuple.1] | main.rs:108:14:108:87 | ... .1 | provenance | | -| main.rs:108:15:108:48 | TupleExpr [tuple.1] | main.rs:108:14:108:83 | TupleExpr [tuple.0, tuple.1] | provenance | | -| main.rs:108:32:108:47 | source_string(...) | main.rs:108:15:108:48 | TupleExpr [tuple.1] | provenance | | -| main.rs:114:14:114:64 | TupleExpr [tuple.0] | main.rs:114:14:114:66 | ... .0 | provenance | | -| main.rs:114:15:114:29 | source_tuple(...) | main.rs:114:14:114:64 | TupleExpr [tuple.0] | provenance | | -| main.rs:115:14:115:64 | TupleExpr [tuple.0] | main.rs:115:14:115:66 | ... .0 | provenance | | -| main.rs:115:14:115:66 | ... .0 | main.rs:115:14:115:68 | ... .0 | provenance | | -| main.rs:115:15:115:29 | source_tuple(...) | main.rs:115:14:115:64 | TupleExpr [tuple.0] | provenance | | -| main.rs:116:14:116:64 | TupleExpr [tuple.0] | main.rs:116:14:116:66 | ... .0 | provenance | | -| main.rs:116:14:116:66 | ... .0 | main.rs:116:14:116:68 | ... .1 | provenance | | -| main.rs:116:15:116:29 | source_tuple(...) | main.rs:116:14:116:64 | TupleExpr [tuple.0] | provenance | | +| main.rs:13:10:13:10 | a | main.rs:13:10:13:14 | ... + ... | provenance | MaD:2 | +| main.rs:14:14:14:14 | a | main.rs:14:10:14:14 | ... + ... | provenance | MaD:2 | +| main.rs:16:9:16:13 | mut b | main.rs:17:5:17:5 | b | provenance | | +| main.rs:16:17:16:26 | source(...) | main.rs:16:9:16:13 | mut b | provenance | | +| main.rs:17:5:17:5 | b | main.rs:18:10:18:10 | b | provenance | MaD:6 | +| main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | provenance | MaD:4 | +| main.rs:26:9:26:9 | a | main.rs:27:11:27:11 | a | provenance | | +| main.rs:26:13:26:21 | source(...) | main.rs:26:9:26:9 | a | provenance | | +| main.rs:27:11:27:11 | a | main.rs:27:10:27:11 | - ... | provenance | MaD:11 | +| main.rs:29:11:29:19 | source(...) | main.rs:29:10:29:19 | ! ... | provenance | MaD:25 | +| main.rs:31:10:31:18 | source(...) | main.rs:31:10:31:22 | ... - ... | provenance | MaD:12 | +| main.rs:32:17:32:25 | source(...) | main.rs:32:10:32:25 | ... - ... | provenance | MaD:12 | +| main.rs:34:10:34:18 | source(...) | main.rs:34:10:34:22 | ... * ... | provenance | MaD:7 | +| main.rs:35:17:35:25 | source(...) | main.rs:35:10:35:25 | ... * ... | provenance | MaD:7 | +| main.rs:37:10:37:18 | source(...) | main.rs:37:10:37:23 | ... << ... | provenance | MaD:27 | +| main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | provenance | MaD:27 | +| main.rs:40:10:40:18 | source(...) | main.rs:40:10:40:22 | ... ^ ... | provenance | MaD:21 | +| main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | provenance | MaD:21 | +| main.rs:45:9:45:9 | a | main.rs:46:9:46:9 | b | provenance | | +| main.rs:45:13:45:22 | source(...) | main.rs:45:9:45:9 | a | provenance | | +| main.rs:46:9:46:9 | b | main.rs:47:10:47:17 | b as i64 | provenance | | +| main.rs:60:13:60:13 | s | main.rs:61:23:61:23 | s | provenance | | +| main.rs:60:13:60:13 | s | main.rs:61:23:61:29 | s[...] | provenance | | +| main.rs:60:17:60:26 | source(...) | main.rs:60:13:60:13 | s | provenance | | +| main.rs:61:13:61:18 | sliced [&ref] | main.rs:62:14:62:19 | sliced | provenance | | +| main.rs:61:22:61:29 | &... [&ref] | main.rs:61:13:61:18 | sliced [&ref] | provenance | | +| main.rs:61:23:61:23 | s | main.rs:61:23:61:29 | s[...] | provenance | MaD:35 | +| main.rs:61:23:61:29 | s[...] | main.rs:61:22:61:29 | &... [&ref] | provenance | | +| main.rs:76:13:76:15 | arr | main.rs:77:14:77:16 | arr | provenance | | +| main.rs:76:19:76:28 | source(...) | main.rs:76:13:76:15 | arr | provenance | | +| main.rs:77:14:77:16 | arr | main.rs:77:14:77:19 | arr[1] | provenance | MaD:35 | +| main.rs:92:9:92:12 | [post] arr2 [element] | main.rs:93:14:93:17 | arr2 | provenance | | +| main.rs:92:19:92:28 | source(...) | main.rs:92:9:92:12 | [post] arr2 [element] | provenance | | +| main.rs:113:14:113:47 | TupleExpr [tuple.0] | main.rs:113:14:113:49 | ... .0 | provenance | | +| main.rs:113:15:113:30 | source_string(...) | main.rs:113:14:113:47 | TupleExpr [tuple.0] | provenance | | +| main.rs:117:14:117:28 | source_tuple(...) | main.rs:117:14:117:30 | ... .0 | provenance | | +| main.rs:118:14:118:28 | source_tuple(...) | main.rs:118:14:118:30 | ... .1 | provenance | | +| main.rs:123:14:123:83 | TupleExpr [tuple.0, tuple.1] | main.rs:123:14:123:85 | ... .0 [tuple.1] | provenance | | +| main.rs:123:14:123:85 | ... .0 [tuple.1] | main.rs:123:14:123:87 | ... .1 | provenance | | +| main.rs:123:15:123:48 | TupleExpr [tuple.1] | main.rs:123:14:123:83 | TupleExpr [tuple.0, tuple.1] | provenance | | +| main.rs:123:32:123:47 | source_string(...) | main.rs:123:15:123:48 | TupleExpr [tuple.1] | provenance | | +| main.rs:129:14:129:64 | TupleExpr [tuple.0] | main.rs:129:14:129:66 | ... .0 | provenance | | +| main.rs:129:15:129:29 | source_tuple(...) | main.rs:129:14:129:64 | TupleExpr [tuple.0] | provenance | | +| main.rs:130:14:130:64 | TupleExpr [tuple.0] | main.rs:130:14:130:66 | ... .0 | provenance | | +| main.rs:130:14:130:66 | ... .0 | main.rs:130:14:130:68 | ... .0 | provenance | | +| main.rs:130:15:130:29 | source_tuple(...) | main.rs:130:14:130:64 | TupleExpr [tuple.0] | provenance | | +| main.rs:131:14:131:64 | TupleExpr [tuple.0] | main.rs:131:14:131:66 | ... .0 | provenance | | +| main.rs:131:14:131:66 | ... .0 | main.rs:131:14:131:68 | ... .1 | provenance | | +| main.rs:131:15:131:29 | source_tuple(...) | main.rs:131:14:131:64 | TupleExpr [tuple.0] | provenance | | +| main.rs:141:10:141:18 | source(...) | main.rs:141:10:141:28 | ... .add(...) | provenance | MaD:2 | +| main.rs:143:19:143:27 | source(...) | main.rs:143:10:143:28 | 1i64.add(...) | provenance | MaD:2 | +| main.rs:146:10:146:18 | source(...) | main.rs:146:10:146:28 | ... .sub(...) | provenance | MaD:12 | +| main.rs:148:19:148:27 | source(...) | main.rs:148:10:148:28 | 1i64.sub(...) | provenance | MaD:12 | +| main.rs:151:10:151:18 | source(...) | main.rs:151:10:151:28 | ... .mul(...) | provenance | MaD:7 | +| main.rs:153:19:153:27 | source(...) | main.rs:153:10:153:28 | 1i64.mul(...) | provenance | MaD:7 | +| main.rs:156:10:156:18 | source(...) | main.rs:156:10:156:28 | ... .shl(...) | provenance | MaD:27 | +| main.rs:157:10:157:18 | source(...) | main.rs:157:10:157:25 | ... .shl(...) | provenance | MaD:27 | +| main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | provenance | MaD:27 | +| main.rs:160:10:160:18 | source(...) | main.rs:160:10:160:28 | ... .shr(...) | provenance | MaD:32 | +| main.rs:161:10:161:18 | source(...) | main.rs:161:10:161:25 | ... .shr(...) | provenance | MaD:32 | +| main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | provenance | MaD:32 | +| main.rs:164:10:164:18 | source(...) | main.rs:164:10:164:30 | ... .bitor(...) | provenance | MaD:20 | +| main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | provenance | MaD:20 | +| main.rs:170:5:170:5 | [post] a | main.rs:171:5:171:5 | a | provenance | | +| main.rs:170:5:170:5 | [post] a | main.rs:172:5:172:5 | a | provenance | | +| main.rs:170:5:170:5 | [post] a | main.rs:173:5:173:5 | a | provenance | | +| main.rs:170:5:170:5 | [post] a | main.rs:174:5:174:5 | a | provenance | | +| main.rs:170:5:170:5 | [post] a | main.rs:175:5:175:5 | a | provenance | | +| main.rs:170:5:170:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | +| main.rs:170:18:170:26 | source(...) | main.rs:170:5:170:5 | [post] a | provenance | MaD:4 | +| main.rs:171:5:171:5 | [post] a | main.rs:172:5:172:5 | a | provenance | | +| main.rs:171:5:171:5 | [post] a | main.rs:173:5:173:5 | a | provenance | | +| main.rs:171:5:171:5 | [post] a | main.rs:174:5:174:5 | a | provenance | | +| main.rs:171:5:171:5 | [post] a | main.rs:175:5:175:5 | a | provenance | | +| main.rs:171:5:171:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | +| main.rs:171:5:171:5 | a | main.rs:171:5:171:5 | [post] a | provenance | MaD:14 | +| main.rs:171:18:171:26 | source(...) | main.rs:171:5:171:5 | [post] a | provenance | MaD:13 | +| main.rs:172:5:172:5 | [post] a | main.rs:173:5:173:5 | a | provenance | | +| main.rs:172:5:172:5 | [post] a | main.rs:174:5:174:5 | a | provenance | | +| main.rs:172:5:172:5 | [post] a | main.rs:175:5:175:5 | a | provenance | | +| main.rs:172:5:172:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | +| main.rs:172:5:172:5 | a | main.rs:172:5:172:5 | [post] a | provenance | MaD:9 | +| main.rs:172:18:172:26 | source(...) | main.rs:172:5:172:5 | [post] a | provenance | MaD:8 | +| main.rs:173:5:173:5 | [post] a | main.rs:174:5:174:5 | a | provenance | | +| main.rs:173:5:173:5 | [post] a | main.rs:175:5:175:5 | a | provenance | | +| main.rs:173:5:173:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | +| main.rs:173:5:173:5 | a | main.rs:173:5:173:5 | [post] a | provenance | MaD:31 | +| main.rs:173:18:173:26 | source(...) | main.rs:173:5:173:5 | [post] a | provenance | MaD:29 | +| main.rs:174:5:174:5 | [post] a | main.rs:175:5:175:5 | a | provenance | | +| main.rs:174:5:174:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | +| main.rs:174:5:174:5 | a | main.rs:174:5:174:5 | [post] a | provenance | MaD:34 | +| main.rs:174:18:174:26 | source(...) | main.rs:174:5:174:5 | [post] a | provenance | MaD:33 | +| main.rs:175:5:175:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | +| main.rs:175:5:175:5 | a | main.rs:175:5:175:5 | [post] a | provenance | MaD:23 | +| main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:22 | +| main.rs:178:10:178:18 | source(...) | main.rs:178:10:178:24 | ... .neg() | provenance | MaD:11 | +| main.rs:179:10:179:18 | source(...) | main.rs:179:10:179:24 | ... .not() | provenance | MaD:25 | +| main.rs:199:13:199:17 | mut a [Wrapping] | main.rs:201:21:201:21 | a [Wrapping] | provenance | | +| main.rs:199:13:199:17 | mut a [Wrapping] | main.rs:203:9:203:9 | a [Wrapping] | provenance | | +| main.rs:199:13:199:17 | mut a [Wrapping] | main.rs:204:9:204:9 | a [Wrapping] | provenance | | +| main.rs:199:13:199:17 | mut a [Wrapping] | main.rs:206:21:206:21 | a [Wrapping] | provenance | | +| main.rs:199:36:199:61 | Wrapping(...) [Wrapping] | main.rs:199:13:199:17 | mut a [Wrapping] | provenance | | +| main.rs:199:45:199:60 | ...::source(...) | main.rs:199:36:199:61 | Wrapping(...) [Wrapping] | provenance | | +| main.rs:201:21:201:21 | a [Wrapping] | main.rs:201:21:201:23 | a.0 | provenance | | +| main.rs:203:9:203:9 | [post] a | main.rs:204:9:204:9 | a | provenance | | +| main.rs:203:9:203:9 | [post] a | main.rs:205:14:205:14 | a | provenance | | +| main.rs:203:9:203:9 | [post] a | main.rs:206:21:206:23 | a.0 | provenance | | +| main.rs:203:9:203:9 | [post] a [Wrapping] | main.rs:204:9:204:9 | a [Wrapping] | provenance | | +| main.rs:203:9:203:9 | [post] a [Wrapping] | main.rs:206:21:206:21 | a [Wrapping] | provenance | | +| main.rs:203:9:203:9 | a [Wrapping] | main.rs:203:9:203:9 | [post] a [Wrapping] | provenance | MaD:5 | +| main.rs:203:22:203:30 | source(...) | main.rs:203:9:203:9 | [post] a | provenance | MaD:4 | +| main.rs:203:22:203:30 | source(...) | main.rs:203:9:203:9 | [post] a [Wrapping] | provenance | MaD:3 | +| main.rs:204:9:204:9 | [post] a | main.rs:205:14:205:14 | a | provenance | | +| main.rs:204:9:204:9 | [post] a | main.rs:206:21:206:23 | a.0 | provenance | | +| main.rs:204:9:204:9 | [post] a [Wrapping] | main.rs:206:21:206:21 | a [Wrapping] | provenance | | +| main.rs:204:9:204:9 | a | main.rs:204:9:204:9 | [post] a | provenance | MaD:6 | +| main.rs:204:9:204:9 | a | main.rs:204:9:204:9 | [post] a [Wrapping] | provenance | MaD:5 | +| main.rs:204:9:204:9 | a [Wrapping] | main.rs:204:9:204:9 | [post] a [Wrapping] | provenance | MaD:5 | +| main.rs:204:22:204:47 | Wrapping(...) [Wrapping] | main.rs:204:9:204:9 | [post] a [Wrapping] | provenance | MaD:3 | +| main.rs:204:31:204:46 | ...::source(...) | main.rs:204:22:204:47 | Wrapping(...) [Wrapping] | provenance | | +| main.rs:206:21:206:21 | a [Wrapping] | main.rs:206:21:206:23 | a.0 | provenance | | +| main.rs:208:9:208:9 | a | main.rs:209:9:209:9 | a | provenance | | +| main.rs:208:13:208:21 | source(...) | main.rs:208:9:208:9 | a | provenance | | +| main.rs:209:9:209:9 | a | main.rs:210:9:210:9 | a | provenance | MaD:6 | +| main.rs:209:9:209:9 | a | main.rs:210:9:210:9 | a [Wrapping] | provenance | MaD:5 | +| main.rs:209:14:209:22 | source(...) | main.rs:210:9:210:9 | a | provenance | MaD:4 | +| main.rs:209:14:209:22 | source(...) | main.rs:210:9:210:9 | a [Wrapping] | provenance | MaD:3 | +| main.rs:210:9:210:9 | a | main.rs:211:14:211:14 | a | provenance | MaD:6 | +| main.rs:210:9:210:9 | a | main.rs:212:21:212:21 | a [Wrapping] | provenance | MaD:5 | +| main.rs:210:9:210:9 | a | main.rs:212:21:212:23 | a.0 | provenance | MaD:6 | +| main.rs:210:9:210:9 | a [Wrapping] | main.rs:212:21:212:21 | a [Wrapping] | provenance | MaD:5 | +| main.rs:210:14:210:49 | ...::Wrapping(...) [Wrapping] | main.rs:212:21:212:21 | a [Wrapping] | provenance | MaD:3 | +| main.rs:210:33:210:48 | ...::source(...) | main.rs:210:14:210:49 | ...::Wrapping(...) [Wrapping] | provenance | | +| main.rs:212:21:212:21 | a [Wrapping] | main.rs:212:21:212:23 | a.0 | provenance | | +| main.rs:214:9:214:9 | a | main.rs:215:9:215:9 | a | provenance | | +| main.rs:214:13:214:21 | source(...) | main.rs:214:9:214:9 | a | provenance | | +| main.rs:215:9:215:9 | a | main.rs:216:9:216:9 | a | provenance | MaD:19 | +| main.rs:215:9:215:9 | a | main.rs:216:9:216:9 | a [Wrapping] | provenance | MaD:18 | +| main.rs:215:14:215:22 | source(...) | main.rs:216:9:216:9 | a | provenance | MaD:17 | +| main.rs:215:14:215:22 | source(...) | main.rs:216:9:216:9 | a [Wrapping] | provenance | MaD:16 | +| main.rs:216:9:216:9 | a | main.rs:217:14:217:14 | a | provenance | MaD:19 | +| main.rs:216:9:216:9 | a | main.rs:218:21:218:21 | a [Wrapping] | provenance | MaD:18 | +| main.rs:216:9:216:9 | a | main.rs:218:21:218:23 | a.0 | provenance | MaD:19 | +| main.rs:216:9:216:9 | a [Wrapping] | main.rs:218:21:218:21 | a [Wrapping] | provenance | MaD:18 | +| main.rs:216:14:216:39 | Wrapping(...) [Wrapping] | main.rs:218:21:218:21 | a [Wrapping] | provenance | MaD:16 | +| main.rs:216:23:216:38 | ...::source(...) | main.rs:216:14:216:39 | Wrapping(...) [Wrapping] | provenance | | +| main.rs:218:21:218:21 | a [Wrapping] | main.rs:218:21:218:23 | a.0 | provenance | | +| main.rs:220:9:220:9 | a | main.rs:221:9:221:9 | a | provenance | | +| main.rs:220:13:220:22 | source(...) | main.rs:220:9:220:9 | a | provenance | | +| main.rs:221:9:221:9 | a | main.rs:222:14:222:14 | a | provenance | MaD:31 | +| main.rs:221:9:221:9 | a | main.rs:223:21:223:21 | a [Wrapping] | provenance | MaD:30 | +| main.rs:221:9:221:9 | a | main.rs:223:21:223:23 | a.0 | provenance | MaD:31 | +| main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | provenance | MaD:29 | +| main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:21 | a [Wrapping] | provenance | MaD:28 | +| main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:23 | a.0 | provenance | MaD:29 | +| main.rs:223:21:223:21 | a [Wrapping] | main.rs:223:21:223:23 | a.0 | provenance | | +| main.rs:225:13:225:13 | b [Wrapping] | main.rs:227:18:227:18 | b [Wrapping] | provenance | | +| main.rs:225:13:225:13 | b [Wrapping] | main.rs:229:18:229:18 | b [Wrapping] | provenance | | +| main.rs:225:13:225:13 | b [Wrapping] | main.rs:231:19:231:19 | b [Wrapping] | provenance | | +| main.rs:225:13:225:13 | b [Wrapping] | main.rs:233:18:233:18 | b [Wrapping] | provenance | | +| main.rs:225:13:225:13 | b [Wrapping] | main.rs:235:19:235:19 | b [Wrapping] | provenance | | +| main.rs:225:13:225:13 | b [Wrapping] | main.rs:237:18:237:18 | b [Wrapping] | provenance | | +| main.rs:225:13:225:13 | b [Wrapping] | main.rs:239:18:239:18 | b [Wrapping] | provenance | | +| main.rs:225:13:225:13 | b [Wrapping] | main.rs:241:18:241:18 | b [Wrapping] | provenance | | +| main.rs:225:32:225:57 | Wrapping(...) [Wrapping] | main.rs:225:13:225:13 | b [Wrapping] | provenance | | +| main.rs:225:41:225:56 | ...::source(...) | main.rs:225:32:225:57 | Wrapping(...) [Wrapping] | provenance | | +| main.rs:226:13:226:13 | c [Wrapping] | main.rs:227:22:227:22 | c [Wrapping] | provenance | | +| main.rs:226:13:226:13 | c [Wrapping] | main.rs:229:24:229:24 | c [Wrapping] | provenance | | +| main.rs:226:13:226:13 | c [Wrapping] | main.rs:239:22:239:22 | c [Wrapping] | provenance | | +| main.rs:226:32:226:57 | Wrapping(...) [Wrapping] | main.rs:226:13:226:13 | c [Wrapping] | provenance | | +| main.rs:226:41:226:56 | ...::source(...) | main.rs:226:32:226:57 | Wrapping(...) [Wrapping] | provenance | | +| main.rs:227:13:227:14 | v1 [Wrapping] | main.rs:228:21:228:22 | v1 [Wrapping] | provenance | | +| main.rs:227:18:227:18 | b [Wrapping] | main.rs:227:18:227:22 | ... + ... [Wrapping] | provenance | MaD:1 | +| main.rs:227:18:227:22 | ... + ... [Wrapping] | main.rs:227:13:227:14 | v1 [Wrapping] | provenance | | +| main.rs:227:22:227:22 | c [Wrapping] | main.rs:227:18:227:22 | ... + ... [Wrapping] | provenance | MaD:1 | +| main.rs:228:21:228:22 | v1 [Wrapping] | main.rs:228:21:228:24 | v1.0 | provenance | | +| main.rs:229:13:229:14 | v2 [Wrapping] | main.rs:230:21:230:22 | v2 [Wrapping] | provenance | | +| main.rs:229:18:229:18 | b [Wrapping] | main.rs:229:18:229:25 | b.add(...) [Wrapping] | provenance | MaD:1 | +| main.rs:229:18:229:25 | b.add(...) [Wrapping] | main.rs:229:13:229:14 | v2 [Wrapping] | provenance | | +| main.rs:229:24:229:24 | c [Wrapping] | main.rs:229:18:229:25 | b.add(...) [Wrapping] | provenance | MaD:1 | +| main.rs:230:21:230:22 | v2 [Wrapping] | main.rs:230:21:230:24 | v2.0 | provenance | | +| main.rs:231:13:231:14 | v3 [Wrapping] | main.rs:232:21:232:22 | v3 [Wrapping] | provenance | | +| main.rs:231:18:231:19 | - ... [Wrapping] | main.rs:231:13:231:14 | v3 [Wrapping] | provenance | | +| main.rs:231:19:231:19 | b [Wrapping] | main.rs:231:18:231:19 | - ... [Wrapping] | provenance | MaD:10 | +| main.rs:232:21:232:22 | v3 [Wrapping] | main.rs:232:21:232:24 | v3.0 | provenance | | +| main.rs:233:13:233:14 | v4 [Wrapping] | main.rs:234:21:234:22 | v4 [Wrapping] | provenance | | +| main.rs:233:18:233:18 | b [Wrapping] | main.rs:233:18:233:24 | b.neg() [Wrapping] | provenance | MaD:10 | +| main.rs:233:18:233:24 | b.neg() [Wrapping] | main.rs:233:13:233:14 | v4 [Wrapping] | provenance | | +| main.rs:234:21:234:22 | v4 [Wrapping] | main.rs:234:21:234:24 | v4.0 | provenance | | +| main.rs:235:13:235:14 | v5 [Wrapping] | main.rs:236:21:236:22 | v5 [Wrapping] | provenance | | +| main.rs:235:18:235:19 | ! ... [Wrapping] | main.rs:235:13:235:14 | v5 [Wrapping] | provenance | | +| main.rs:235:19:235:19 | b [Wrapping] | main.rs:235:18:235:19 | ! ... [Wrapping] | provenance | MaD:24 | +| main.rs:236:21:236:22 | v5 [Wrapping] | main.rs:236:21:236:24 | v5.0 | provenance | | +| main.rs:237:13:237:14 | v6 [Wrapping] | main.rs:238:21:238:22 | v6 [Wrapping] | provenance | | +| main.rs:237:18:237:18 | b [Wrapping] | main.rs:237:18:237:24 | b.not() [Wrapping] | provenance | MaD:24 | +| main.rs:237:18:237:24 | b.not() [Wrapping] | main.rs:237:13:237:14 | v6 [Wrapping] | provenance | | +| main.rs:238:21:238:22 | v6 [Wrapping] | main.rs:238:21:238:24 | v6.0 | provenance | | +| main.rs:239:13:239:14 | v7 [Wrapping] | main.rs:240:21:240:22 | v7 [Wrapping] | provenance | | +| main.rs:239:18:239:18 | b [Wrapping] | main.rs:239:18:239:22 | ... & ... [Wrapping] | provenance | MaD:15 | +| main.rs:239:18:239:22 | ... & ... [Wrapping] | main.rs:239:13:239:14 | v7 [Wrapping] | provenance | | +| main.rs:239:22:239:22 | c [Wrapping] | main.rs:239:18:239:22 | ... & ... [Wrapping] | provenance | MaD:15 | +| main.rs:240:21:240:22 | v7 [Wrapping] | main.rs:240:21:240:24 | v7.0 | provenance | | +| main.rs:241:13:241:14 | v8 | main.rs:242:21:242:24 | v8.0 | provenance | | +| main.rs:241:13:241:14 | v8 [Wrapping] | main.rs:242:21:242:22 | v8 [Wrapping] | provenance | | +| main.rs:241:18:241:18 | b [Wrapping] | main.rs:241:18:241:37 | ... << ... [Wrapping] | provenance | MaD:26 | +| main.rs:241:18:241:37 | ... << ... | main.rs:241:13:241:14 | v8 | provenance | | +| main.rs:241:18:241:37 | ... << ... [Wrapping] | main.rs:241:13:241:14 | v8 [Wrapping] | provenance | | +| main.rs:241:23:241:37 | source_usize(...) | main.rs:241:18:241:37 | ... << ... | provenance | MaD:27 | +| main.rs:241:23:241:37 | source_usize(...) | main.rs:241:18:241:37 | ... << ... [Wrapping] | provenance | MaD:26 | +| main.rs:242:21:242:22 | v8 [Wrapping] | main.rs:242:21:242:24 | v8.0 | provenance | | nodes | main.rs:12:9:12:9 | a | semmle.label | a | | main.rs:12:13:12:22 | source(...) | semmle.label | source(...) | | main.rs:13:10:13:10 | a | semmle.label | a | | main.rs:13:10:13:14 | ... + ... | semmle.label | ... + ... | -| main.rs:15:9:15:13 | mut b | semmle.label | mut b | -| main.rs:15:17:15:26 | source(...) | semmle.label | source(...) | -| main.rs:16:5:16:5 | b | semmle.label | b | -| main.rs:17:10:17:10 | b | semmle.label | b | -| main.rs:20:10:20:19 | source(...) | semmle.label | source(...) | -| main.rs:21:10:21:10 | c | semmle.label | c | -| main.rs:25:9:25:9 | a | semmle.label | a | -| main.rs:25:13:25:22 | source(...) | semmle.label | source(...) | -| main.rs:26:10:26:11 | - ... | semmle.label | - ... | -| main.rs:26:11:26:11 | a | semmle.label | a | -| main.rs:30:9:30:9 | a | semmle.label | a | -| main.rs:30:13:30:22 | source(...) | semmle.label | source(...) | -| main.rs:31:9:31:9 | b | semmle.label | b | -| main.rs:32:10:32:17 | b as i64 | semmle.label | b as i64 | -| main.rs:45:13:45:13 | s | semmle.label | s | -| main.rs:45:17:45:26 | source(...) | semmle.label | source(...) | -| main.rs:46:13:46:18 | sliced [&ref] | semmle.label | sliced [&ref] | -| main.rs:46:22:46:29 | &... [&ref] | semmle.label | &... [&ref] | -| main.rs:46:23:46:23 | s | semmle.label | s | -| main.rs:46:23:46:29 | s[...] | semmle.label | s[...] | -| main.rs:47:14:47:19 | sliced | semmle.label | sliced | -| main.rs:61:13:61:15 | arr | semmle.label | arr | -| main.rs:61:19:61:28 | source(...) | semmle.label | source(...) | -| main.rs:62:14:62:16 | arr | semmle.label | arr | -| main.rs:62:14:62:19 | arr[1] | semmle.label | arr[1] | -| main.rs:77:9:77:12 | [post] arr2 [element] | semmle.label | [post] arr2 [element] | -| main.rs:77:19:77:28 | source(...) | semmle.label | source(...) | -| main.rs:78:14:78:17 | arr2 | semmle.label | arr2 | -| main.rs:98:14:98:47 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| main.rs:98:14:98:49 | ... .0 | semmle.label | ... .0 | -| main.rs:98:15:98:30 | source_string(...) | semmle.label | source_string(...) | -| main.rs:101:14:101:28 | source_tuple(...) | semmle.label | source_tuple(...) | -| main.rs:102:14:102:28 | source_tuple(...) | semmle.label | source_tuple(...) | -| main.rs:102:14:102:30 | ... .0 | semmle.label | ... .0 | -| main.rs:103:14:103:28 | source_tuple(...) | semmle.label | source_tuple(...) | -| main.rs:103:14:103:30 | ... .1 | semmle.label | ... .1 | -| main.rs:108:14:108:83 | TupleExpr [tuple.0, tuple.1] | semmle.label | TupleExpr [tuple.0, tuple.1] | -| main.rs:108:14:108:85 | ... .0 [tuple.1] | semmle.label | ... .0 [tuple.1] | -| main.rs:108:14:108:87 | ... .1 | semmle.label | ... .1 | -| main.rs:108:15:108:48 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] | -| main.rs:108:32:108:47 | source_string(...) | semmle.label | source_string(...) | -| main.rs:114:14:114:64 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| main.rs:114:14:114:66 | ... .0 | semmle.label | ... .0 | -| main.rs:114:15:114:29 | source_tuple(...) | semmle.label | source_tuple(...) | -| main.rs:115:14:115:64 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| main.rs:115:14:115:66 | ... .0 | semmle.label | ... .0 | -| main.rs:115:14:115:68 | ... .0 | semmle.label | ... .0 | -| main.rs:115:15:115:29 | source_tuple(...) | semmle.label | source_tuple(...) | -| main.rs:116:14:116:64 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| main.rs:116:14:116:66 | ... .0 | semmle.label | ... .0 | -| main.rs:116:14:116:68 | ... .1 | semmle.label | ... .1 | -| main.rs:116:15:116:29 | source_tuple(...) | semmle.label | source_tuple(...) | +| main.rs:14:10:14:14 | ... + ... | semmle.label | ... + ... | +| main.rs:14:14:14:14 | a | semmle.label | a | +| main.rs:16:9:16:13 | mut b | semmle.label | mut b | +| main.rs:16:17:16:26 | source(...) | semmle.label | source(...) | +| main.rs:17:5:17:5 | b | semmle.label | b | +| main.rs:18:10:18:10 | b | semmle.label | b | +| main.rs:21:10:21:19 | source(...) | semmle.label | source(...) | +| main.rs:22:10:22:10 | c | semmle.label | c | +| main.rs:26:9:26:9 | a | semmle.label | a | +| main.rs:26:13:26:21 | source(...) | semmle.label | source(...) | +| main.rs:27:10:27:11 | - ... | semmle.label | - ... | +| main.rs:27:11:27:11 | a | semmle.label | a | +| main.rs:29:10:29:19 | ! ... | semmle.label | ! ... | +| main.rs:29:11:29:19 | source(...) | semmle.label | source(...) | +| main.rs:31:10:31:18 | source(...) | semmle.label | source(...) | +| main.rs:31:10:31:22 | ... - ... | semmle.label | ... - ... | +| main.rs:32:10:32:25 | ... - ... | semmle.label | ... - ... | +| main.rs:32:17:32:25 | source(...) | semmle.label | source(...) | +| main.rs:34:10:34:18 | source(...) | semmle.label | source(...) | +| main.rs:34:10:34:22 | ... * ... | semmle.label | ... * ... | +| main.rs:35:10:35:25 | ... * ... | semmle.label | ... * ... | +| main.rs:35:17:35:25 | source(...) | semmle.label | source(...) | +| main.rs:37:10:37:18 | source(...) | semmle.label | source(...) | +| main.rs:37:10:37:23 | ... << ... | semmle.label | ... << ... | +| main.rs:38:10:38:26 | ... << ... | semmle.label | ... << ... | +| main.rs:38:18:38:26 | source(...) | semmle.label | source(...) | +| main.rs:40:10:40:18 | source(...) | semmle.label | source(...) | +| main.rs:40:10:40:22 | ... ^ ... | semmle.label | ... ^ ... | +| main.rs:41:10:41:27 | ... ^ ... | semmle.label | ... ^ ... | +| main.rs:41:18:41:27 | source(...) | semmle.label | source(...) | +| main.rs:45:9:45:9 | a | semmle.label | a | +| main.rs:45:13:45:22 | source(...) | semmle.label | source(...) | +| main.rs:46:9:46:9 | b | semmle.label | b | +| main.rs:47:10:47:17 | b as i64 | semmle.label | b as i64 | +| main.rs:60:13:60:13 | s | semmle.label | s | +| main.rs:60:17:60:26 | source(...) | semmle.label | source(...) | +| main.rs:61:13:61:18 | sliced [&ref] | semmle.label | sliced [&ref] | +| main.rs:61:22:61:29 | &... [&ref] | semmle.label | &... [&ref] | +| main.rs:61:23:61:23 | s | semmle.label | s | +| main.rs:61:23:61:29 | s[...] | semmle.label | s[...] | +| main.rs:62:14:62:19 | sliced | semmle.label | sliced | +| main.rs:76:13:76:15 | arr | semmle.label | arr | +| main.rs:76:19:76:28 | source(...) | semmle.label | source(...) | +| main.rs:77:14:77:16 | arr | semmle.label | arr | +| main.rs:77:14:77:19 | arr[1] | semmle.label | arr[1] | +| main.rs:92:9:92:12 | [post] arr2 [element] | semmle.label | [post] arr2 [element] | +| main.rs:92:19:92:28 | source(...) | semmle.label | source(...) | +| main.rs:93:14:93:17 | arr2 | semmle.label | arr2 | +| main.rs:113:14:113:47 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| main.rs:113:14:113:49 | ... .0 | semmle.label | ... .0 | +| main.rs:113:15:113:30 | source_string(...) | semmle.label | source_string(...) | +| main.rs:116:14:116:28 | source_tuple(...) | semmle.label | source_tuple(...) | +| main.rs:117:14:117:28 | source_tuple(...) | semmle.label | source_tuple(...) | +| main.rs:117:14:117:30 | ... .0 | semmle.label | ... .0 | +| main.rs:118:14:118:28 | source_tuple(...) | semmle.label | source_tuple(...) | +| main.rs:118:14:118:30 | ... .1 | semmle.label | ... .1 | +| main.rs:123:14:123:83 | TupleExpr [tuple.0, tuple.1] | semmle.label | TupleExpr [tuple.0, tuple.1] | +| main.rs:123:14:123:85 | ... .0 [tuple.1] | semmle.label | ... .0 [tuple.1] | +| main.rs:123:14:123:87 | ... .1 | semmle.label | ... .1 | +| main.rs:123:15:123:48 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] | +| main.rs:123:32:123:47 | source_string(...) | semmle.label | source_string(...) | +| main.rs:129:14:129:64 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| main.rs:129:14:129:66 | ... .0 | semmle.label | ... .0 | +| main.rs:129:15:129:29 | source_tuple(...) | semmle.label | source_tuple(...) | +| main.rs:130:14:130:64 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| main.rs:130:14:130:66 | ... .0 | semmle.label | ... .0 | +| main.rs:130:14:130:68 | ... .0 | semmle.label | ... .0 | +| main.rs:130:15:130:29 | source_tuple(...) | semmle.label | source_tuple(...) | +| main.rs:131:14:131:64 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| main.rs:131:14:131:66 | ... .0 | semmle.label | ... .0 | +| main.rs:131:14:131:68 | ... .1 | semmle.label | ... .1 | +| main.rs:131:15:131:29 | source_tuple(...) | semmle.label | source_tuple(...) | +| main.rs:141:10:141:18 | source(...) | semmle.label | source(...) | +| main.rs:141:10:141:28 | ... .add(...) | semmle.label | ... .add(...) | +| main.rs:143:10:143:28 | 1i64.add(...) | semmle.label | 1i64.add(...) | +| main.rs:143:19:143:27 | source(...) | semmle.label | source(...) | +| main.rs:146:10:146:18 | source(...) | semmle.label | source(...) | +| main.rs:146:10:146:28 | ... .sub(...) | semmle.label | ... .sub(...) | +| main.rs:148:10:148:28 | 1i64.sub(...) | semmle.label | 1i64.sub(...) | +| main.rs:148:19:148:27 | source(...) | semmle.label | source(...) | +| main.rs:151:10:151:18 | source(...) | semmle.label | source(...) | +| main.rs:151:10:151:28 | ... .mul(...) | semmle.label | ... .mul(...) | +| main.rs:153:10:153:28 | 1i64.mul(...) | semmle.label | 1i64.mul(...) | +| main.rs:153:19:153:27 | source(...) | semmle.label | source(...) | +| main.rs:156:10:156:18 | source(...) | semmle.label | source(...) | +| main.rs:156:10:156:28 | ... .shl(...) | semmle.label | ... .shl(...) | +| main.rs:157:10:157:18 | source(...) | semmle.label | source(...) | +| main.rs:157:10:157:25 | ... .shl(...) | semmle.label | ... .shl(...) | +| main.rs:158:10:158:28 | 1i64.shl(...) | semmle.label | 1i64.shl(...) | +| main.rs:158:19:158:27 | source(...) | semmle.label | source(...) | +| main.rs:160:10:160:18 | source(...) | semmle.label | source(...) | +| main.rs:160:10:160:28 | ... .shr(...) | semmle.label | ... .shr(...) | +| main.rs:161:10:161:18 | source(...) | semmle.label | source(...) | +| main.rs:161:10:161:25 | ... .shr(...) | semmle.label | ... .shr(...) | +| main.rs:162:10:162:28 | 1i64.shr(...) | semmle.label | 1i64.shr(...) | +| main.rs:162:19:162:27 | source(...) | semmle.label | source(...) | +| main.rs:164:10:164:18 | source(...) | semmle.label | source(...) | +| main.rs:164:10:164:30 | ... .bitor(...) | semmle.label | ... .bitor(...) | +| main.rs:166:10:166:30 | 1i64.bitor(...) | semmle.label | 1i64.bitor(...) | +| main.rs:166:21:166:29 | source(...) | semmle.label | source(...) | +| main.rs:170:5:170:5 | [post] a | semmle.label | [post] a | +| main.rs:170:18:170:26 | source(...) | semmle.label | source(...) | +| main.rs:171:5:171:5 | [post] a | semmle.label | [post] a | +| main.rs:171:5:171:5 | a | semmle.label | a | +| main.rs:171:18:171:26 | source(...) | semmle.label | source(...) | +| main.rs:172:5:172:5 | [post] a | semmle.label | [post] a | +| main.rs:172:5:172:5 | a | semmle.label | a | +| main.rs:172:18:172:26 | source(...) | semmle.label | source(...) | +| main.rs:173:5:173:5 | [post] a | semmle.label | [post] a | +| main.rs:173:5:173:5 | a | semmle.label | a | +| main.rs:173:18:173:26 | source(...) | semmle.label | source(...) | +| main.rs:174:5:174:5 | [post] a | semmle.label | [post] a | +| main.rs:174:5:174:5 | a | semmle.label | a | +| main.rs:174:18:174:26 | source(...) | semmle.label | source(...) | +| main.rs:175:5:175:5 | [post] a | semmle.label | [post] a | +| main.rs:175:5:175:5 | a | semmle.label | a | +| main.rs:175:21:175:29 | source(...) | semmle.label | source(...) | +| main.rs:176:10:176:10 | a | semmle.label | a | +| main.rs:178:10:178:18 | source(...) | semmle.label | source(...) | +| main.rs:178:10:178:24 | ... .neg() | semmle.label | ... .neg() | +| main.rs:179:10:179:18 | source(...) | semmle.label | source(...) | +| main.rs:179:10:179:24 | ... .not() | semmle.label | ... .not() | +| main.rs:199:13:199:17 | mut a [Wrapping] | semmle.label | mut a [Wrapping] | +| main.rs:199:36:199:61 | Wrapping(...) [Wrapping] | semmle.label | Wrapping(...) [Wrapping] | +| main.rs:199:45:199:60 | ...::source(...) | semmle.label | ...::source(...) | +| main.rs:201:21:201:21 | a [Wrapping] | semmle.label | a [Wrapping] | +| main.rs:201:21:201:23 | a.0 | semmle.label | a.0 | +| main.rs:203:9:203:9 | [post] a | semmle.label | [post] a | +| main.rs:203:9:203:9 | [post] a [Wrapping] | semmle.label | [post] a [Wrapping] | +| main.rs:203:9:203:9 | a [Wrapping] | semmle.label | a [Wrapping] | +| main.rs:203:22:203:30 | source(...) | semmle.label | source(...) | +| main.rs:204:9:204:9 | [post] a | semmle.label | [post] a | +| main.rs:204:9:204:9 | [post] a [Wrapping] | semmle.label | [post] a [Wrapping] | +| main.rs:204:9:204:9 | a | semmle.label | a | +| main.rs:204:9:204:9 | a [Wrapping] | semmle.label | a [Wrapping] | +| main.rs:204:22:204:47 | Wrapping(...) [Wrapping] | semmle.label | Wrapping(...) [Wrapping] | +| main.rs:204:31:204:46 | ...::source(...) | semmle.label | ...::source(...) | +| main.rs:205:14:205:14 | a | semmle.label | a | +| main.rs:206:21:206:21 | a [Wrapping] | semmle.label | a [Wrapping] | +| main.rs:206:21:206:23 | a.0 | semmle.label | a.0 | +| main.rs:208:9:208:9 | a | semmle.label | a | +| main.rs:208:13:208:21 | source(...) | semmle.label | source(...) | +| main.rs:209:9:209:9 | a | semmle.label | a | +| main.rs:209:14:209:22 | source(...) | semmle.label | source(...) | +| main.rs:210:9:210:9 | a | semmle.label | a | +| main.rs:210:9:210:9 | a [Wrapping] | semmle.label | a [Wrapping] | +| main.rs:210:14:210:49 | ...::Wrapping(...) [Wrapping] | semmle.label | ...::Wrapping(...) [Wrapping] | +| main.rs:210:33:210:48 | ...::source(...) | semmle.label | ...::source(...) | +| main.rs:211:14:211:14 | a | semmle.label | a | +| main.rs:212:21:212:21 | a [Wrapping] | semmle.label | a [Wrapping] | +| main.rs:212:21:212:23 | a.0 | semmle.label | a.0 | +| main.rs:214:9:214:9 | a | semmle.label | a | +| main.rs:214:13:214:21 | source(...) | semmle.label | source(...) | +| main.rs:215:9:215:9 | a | semmle.label | a | +| main.rs:215:14:215:22 | source(...) | semmle.label | source(...) | +| main.rs:216:9:216:9 | a | semmle.label | a | +| main.rs:216:9:216:9 | a [Wrapping] | semmle.label | a [Wrapping] | +| main.rs:216:14:216:39 | Wrapping(...) [Wrapping] | semmle.label | Wrapping(...) [Wrapping] | +| main.rs:216:23:216:38 | ...::source(...) | semmle.label | ...::source(...) | +| main.rs:217:14:217:14 | a | semmle.label | a | +| main.rs:218:21:218:21 | a [Wrapping] | semmle.label | a [Wrapping] | +| main.rs:218:21:218:23 | a.0 | semmle.label | a.0 | +| main.rs:220:9:220:9 | a | semmle.label | a | +| main.rs:220:13:220:22 | source(...) | semmle.label | source(...) | +| main.rs:221:9:221:9 | a | semmle.label | a | +| main.rs:221:15:221:30 | source_usize(...) | semmle.label | source_usize(...) | +| main.rs:222:14:222:14 | a | semmle.label | a | +| main.rs:223:21:223:21 | a [Wrapping] | semmle.label | a [Wrapping] | +| main.rs:223:21:223:23 | a.0 | semmle.label | a.0 | +| main.rs:225:13:225:13 | b [Wrapping] | semmle.label | b [Wrapping] | +| main.rs:225:32:225:57 | Wrapping(...) [Wrapping] | semmle.label | Wrapping(...) [Wrapping] | +| main.rs:225:41:225:56 | ...::source(...) | semmle.label | ...::source(...) | +| main.rs:226:13:226:13 | c [Wrapping] | semmle.label | c [Wrapping] | +| main.rs:226:32:226:57 | Wrapping(...) [Wrapping] | semmle.label | Wrapping(...) [Wrapping] | +| main.rs:226:41:226:56 | ...::source(...) | semmle.label | ...::source(...) | +| main.rs:227:13:227:14 | v1 [Wrapping] | semmle.label | v1 [Wrapping] | +| main.rs:227:18:227:18 | b [Wrapping] | semmle.label | b [Wrapping] | +| main.rs:227:18:227:22 | ... + ... [Wrapping] | semmle.label | ... + ... [Wrapping] | +| main.rs:227:22:227:22 | c [Wrapping] | semmle.label | c [Wrapping] | +| main.rs:228:21:228:22 | v1 [Wrapping] | semmle.label | v1 [Wrapping] | +| main.rs:228:21:228:24 | v1.0 | semmle.label | v1.0 | +| main.rs:229:13:229:14 | v2 [Wrapping] | semmle.label | v2 [Wrapping] | +| main.rs:229:18:229:18 | b [Wrapping] | semmle.label | b [Wrapping] | +| main.rs:229:18:229:25 | b.add(...) [Wrapping] | semmle.label | b.add(...) [Wrapping] | +| main.rs:229:24:229:24 | c [Wrapping] | semmle.label | c [Wrapping] | +| main.rs:230:21:230:22 | v2 [Wrapping] | semmle.label | v2 [Wrapping] | +| main.rs:230:21:230:24 | v2.0 | semmle.label | v2.0 | +| main.rs:231:13:231:14 | v3 [Wrapping] | semmle.label | v3 [Wrapping] | +| main.rs:231:18:231:19 | - ... [Wrapping] | semmle.label | - ... [Wrapping] | +| main.rs:231:19:231:19 | b [Wrapping] | semmle.label | b [Wrapping] | +| main.rs:232:21:232:22 | v3 [Wrapping] | semmle.label | v3 [Wrapping] | +| main.rs:232:21:232:24 | v3.0 | semmle.label | v3.0 | +| main.rs:233:13:233:14 | v4 [Wrapping] | semmle.label | v4 [Wrapping] | +| main.rs:233:18:233:18 | b [Wrapping] | semmle.label | b [Wrapping] | +| main.rs:233:18:233:24 | b.neg() [Wrapping] | semmle.label | b.neg() [Wrapping] | +| main.rs:234:21:234:22 | v4 [Wrapping] | semmle.label | v4 [Wrapping] | +| main.rs:234:21:234:24 | v4.0 | semmle.label | v4.0 | +| main.rs:235:13:235:14 | v5 [Wrapping] | semmle.label | v5 [Wrapping] | +| main.rs:235:18:235:19 | ! ... [Wrapping] | semmle.label | ! ... [Wrapping] | +| main.rs:235:19:235:19 | b [Wrapping] | semmle.label | b [Wrapping] | +| main.rs:236:21:236:22 | v5 [Wrapping] | semmle.label | v5 [Wrapping] | +| main.rs:236:21:236:24 | v5.0 | semmle.label | v5.0 | +| main.rs:237:13:237:14 | v6 [Wrapping] | semmle.label | v6 [Wrapping] | +| main.rs:237:18:237:18 | b [Wrapping] | semmle.label | b [Wrapping] | +| main.rs:237:18:237:24 | b.not() [Wrapping] | semmle.label | b.not() [Wrapping] | +| main.rs:238:21:238:22 | v6 [Wrapping] | semmle.label | v6 [Wrapping] | +| main.rs:238:21:238:24 | v6.0 | semmle.label | v6.0 | +| main.rs:239:13:239:14 | v7 [Wrapping] | semmle.label | v7 [Wrapping] | +| main.rs:239:18:239:18 | b [Wrapping] | semmle.label | b [Wrapping] | +| main.rs:239:18:239:22 | ... & ... [Wrapping] | semmle.label | ... & ... [Wrapping] | +| main.rs:239:22:239:22 | c [Wrapping] | semmle.label | c [Wrapping] | +| main.rs:240:21:240:22 | v7 [Wrapping] | semmle.label | v7 [Wrapping] | +| main.rs:240:21:240:24 | v7.0 | semmle.label | v7.0 | +| main.rs:241:13:241:14 | v8 | semmle.label | v8 | +| main.rs:241:13:241:14 | v8 [Wrapping] | semmle.label | v8 [Wrapping] | +| main.rs:241:18:241:18 | b [Wrapping] | semmle.label | b [Wrapping] | +| main.rs:241:18:241:37 | ... << ... | semmle.label | ... << ... | +| main.rs:241:18:241:37 | ... << ... [Wrapping] | semmle.label | ... << ... [Wrapping] | +| main.rs:241:23:241:37 | source_usize(...) | semmle.label | source_usize(...) | +| main.rs:242:21:242:22 | v8 [Wrapping] | semmle.label | v8 [Wrapping] | +| main.rs:242:21:242:24 | v8.0 | semmle.label | v8.0 | subpaths testFailures #select | main.rs:13:10:13:14 | ... + ... | main.rs:12:13:12:22 | source(...) | main.rs:13:10:13:14 | ... + ... | $@ | main.rs:12:13:12:22 | source(...) | source(...) | -| main.rs:17:10:17:10 | b | main.rs:15:17:15:26 | source(...) | main.rs:17:10:17:10 | b | $@ | main.rs:15:17:15:26 | source(...) | source(...) | -| main.rs:21:10:21:10 | c | main.rs:20:10:20:19 | source(...) | main.rs:21:10:21:10 | c | $@ | main.rs:20:10:20:19 | source(...) | source(...) | -| main.rs:26:10:26:11 | - ... | main.rs:25:13:25:22 | source(...) | main.rs:26:10:26:11 | - ... | $@ | main.rs:25:13:25:22 | source(...) | source(...) | -| main.rs:32:10:32:17 | b as i64 | main.rs:30:13:30:22 | source(...) | main.rs:32:10:32:17 | b as i64 | $@ | main.rs:30:13:30:22 | source(...) | source(...) | -| main.rs:47:14:47:19 | sliced | main.rs:45:17:45:26 | source(...) | main.rs:47:14:47:19 | sliced | $@ | main.rs:45:17:45:26 | source(...) | source(...) | -| main.rs:62:14:62:19 | arr[1] | main.rs:61:19:61:28 | source(...) | main.rs:62:14:62:19 | arr[1] | $@ | main.rs:61:19:61:28 | source(...) | source(...) | -| main.rs:78:14:78:17 | arr2 | main.rs:77:19:77:28 | source(...) | main.rs:78:14:78:17 | arr2 | $@ | main.rs:77:19:77:28 | source(...) | source(...) | -| main.rs:98:14:98:49 | ... .0 | main.rs:98:15:98:30 | source_string(...) | main.rs:98:14:98:49 | ... .0 | $@ | main.rs:98:15:98:30 | source_string(...) | source_string(...) | -| main.rs:101:14:101:28 | source_tuple(...) | main.rs:101:14:101:28 | source_tuple(...) | main.rs:101:14:101:28 | source_tuple(...) | $@ | main.rs:101:14:101:28 | source_tuple(...) | source_tuple(...) | -| main.rs:102:14:102:30 | ... .0 | main.rs:102:14:102:28 | source_tuple(...) | main.rs:102:14:102:30 | ... .0 | $@ | main.rs:102:14:102:28 | source_tuple(...) | source_tuple(...) | -| main.rs:103:14:103:30 | ... .1 | main.rs:103:14:103:28 | source_tuple(...) | main.rs:103:14:103:30 | ... .1 | $@ | main.rs:103:14:103:28 | source_tuple(...) | source_tuple(...) | -| main.rs:108:14:108:87 | ... .1 | main.rs:108:32:108:47 | source_string(...) | main.rs:108:14:108:87 | ... .1 | $@ | main.rs:108:32:108:47 | source_string(...) | source_string(...) | -| main.rs:114:14:114:66 | ... .0 | main.rs:114:15:114:29 | source_tuple(...) | main.rs:114:14:114:66 | ... .0 | $@ | main.rs:114:15:114:29 | source_tuple(...) | source_tuple(...) | -| main.rs:115:14:115:68 | ... .0 | main.rs:115:15:115:29 | source_tuple(...) | main.rs:115:14:115:68 | ... .0 | $@ | main.rs:115:15:115:29 | source_tuple(...) | source_tuple(...) | -| main.rs:116:14:116:68 | ... .1 | main.rs:116:15:116:29 | source_tuple(...) | main.rs:116:14:116:68 | ... .1 | $@ | main.rs:116:15:116:29 | source_tuple(...) | source_tuple(...) | +| main.rs:14:10:14:14 | ... + ... | main.rs:12:13:12:22 | source(...) | main.rs:14:10:14:14 | ... + ... | $@ | main.rs:12:13:12:22 | source(...) | source(...) | +| main.rs:18:10:18:10 | b | main.rs:16:17:16:26 | source(...) | main.rs:18:10:18:10 | b | $@ | main.rs:16:17:16:26 | source(...) | source(...) | +| main.rs:22:10:22:10 | c | main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | $@ | main.rs:21:10:21:19 | source(...) | source(...) | +| main.rs:27:10:27:11 | - ... | main.rs:26:13:26:21 | source(...) | main.rs:27:10:27:11 | - ... | $@ | main.rs:26:13:26:21 | source(...) | source(...) | +| main.rs:29:10:29:19 | ! ... | main.rs:29:11:29:19 | source(...) | main.rs:29:10:29:19 | ! ... | $@ | main.rs:29:11:29:19 | source(...) | source(...) | +| main.rs:31:10:31:22 | ... - ... | main.rs:31:10:31:18 | source(...) | main.rs:31:10:31:22 | ... - ... | $@ | main.rs:31:10:31:18 | source(...) | source(...) | +| main.rs:32:10:32:25 | ... - ... | main.rs:32:17:32:25 | source(...) | main.rs:32:10:32:25 | ... - ... | $@ | main.rs:32:17:32:25 | source(...) | source(...) | +| main.rs:34:10:34:22 | ... * ... | main.rs:34:10:34:18 | source(...) | main.rs:34:10:34:22 | ... * ... | $@ | main.rs:34:10:34:18 | source(...) | source(...) | +| main.rs:35:10:35:25 | ... * ... | main.rs:35:17:35:25 | source(...) | main.rs:35:10:35:25 | ... * ... | $@ | main.rs:35:17:35:25 | source(...) | source(...) | +| main.rs:37:10:37:23 | ... << ... | main.rs:37:10:37:18 | source(...) | main.rs:37:10:37:23 | ... << ... | $@ | main.rs:37:10:37:18 | source(...) | source(...) | +| main.rs:38:10:38:26 | ... << ... | main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | $@ | main.rs:38:18:38:26 | source(...) | source(...) | +| main.rs:40:10:40:22 | ... ^ ... | main.rs:40:10:40:18 | source(...) | main.rs:40:10:40:22 | ... ^ ... | $@ | main.rs:40:10:40:18 | source(...) | source(...) | +| main.rs:41:10:41:27 | ... ^ ... | main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | $@ | main.rs:41:18:41:27 | source(...) | source(...) | +| main.rs:47:10:47:17 | b as i64 | main.rs:45:13:45:22 | source(...) | main.rs:47:10:47:17 | b as i64 | $@ | main.rs:45:13:45:22 | source(...) | source(...) | +| main.rs:62:14:62:19 | sliced | main.rs:60:17:60:26 | source(...) | main.rs:62:14:62:19 | sliced | $@ | main.rs:60:17:60:26 | source(...) | source(...) | +| main.rs:77:14:77:19 | arr[1] | main.rs:76:19:76:28 | source(...) | main.rs:77:14:77:19 | arr[1] | $@ | main.rs:76:19:76:28 | source(...) | source(...) | +| main.rs:93:14:93:17 | arr2 | main.rs:92:19:92:28 | source(...) | main.rs:93:14:93:17 | arr2 | $@ | main.rs:92:19:92:28 | source(...) | source(...) | +| main.rs:113:14:113:49 | ... .0 | main.rs:113:15:113:30 | source_string(...) | main.rs:113:14:113:49 | ... .0 | $@ | main.rs:113:15:113:30 | source_string(...) | source_string(...) | +| main.rs:116:14:116:28 | source_tuple(...) | main.rs:116:14:116:28 | source_tuple(...) | main.rs:116:14:116:28 | source_tuple(...) | $@ | main.rs:116:14:116:28 | source_tuple(...) | source_tuple(...) | +| main.rs:117:14:117:30 | ... .0 | main.rs:117:14:117:28 | source_tuple(...) | main.rs:117:14:117:30 | ... .0 | $@ | main.rs:117:14:117:28 | source_tuple(...) | source_tuple(...) | +| main.rs:118:14:118:30 | ... .1 | main.rs:118:14:118:28 | source_tuple(...) | main.rs:118:14:118:30 | ... .1 | $@ | main.rs:118:14:118:28 | source_tuple(...) | source_tuple(...) | +| main.rs:123:14:123:87 | ... .1 | main.rs:123:32:123:47 | source_string(...) | main.rs:123:14:123:87 | ... .1 | $@ | main.rs:123:32:123:47 | source_string(...) | source_string(...) | +| main.rs:129:14:129:66 | ... .0 | main.rs:129:15:129:29 | source_tuple(...) | main.rs:129:14:129:66 | ... .0 | $@ | main.rs:129:15:129:29 | source_tuple(...) | source_tuple(...) | +| main.rs:130:14:130:68 | ... .0 | main.rs:130:15:130:29 | source_tuple(...) | main.rs:130:14:130:68 | ... .0 | $@ | main.rs:130:15:130:29 | source_tuple(...) | source_tuple(...) | +| main.rs:131:14:131:68 | ... .1 | main.rs:131:15:131:29 | source_tuple(...) | main.rs:131:14:131:68 | ... .1 | $@ | main.rs:131:15:131:29 | source_tuple(...) | source_tuple(...) | +| main.rs:141:10:141:28 | ... .add(...) | main.rs:141:10:141:18 | source(...) | main.rs:141:10:141:28 | ... .add(...) | $@ | main.rs:141:10:141:18 | source(...) | source(...) | +| main.rs:143:10:143:28 | 1i64.add(...) | main.rs:143:19:143:27 | source(...) | main.rs:143:10:143:28 | 1i64.add(...) | $@ | main.rs:143:19:143:27 | source(...) | source(...) | +| main.rs:146:10:146:28 | ... .sub(...) | main.rs:146:10:146:18 | source(...) | main.rs:146:10:146:28 | ... .sub(...) | $@ | main.rs:146:10:146:18 | source(...) | source(...) | +| main.rs:148:10:148:28 | 1i64.sub(...) | main.rs:148:19:148:27 | source(...) | main.rs:148:10:148:28 | 1i64.sub(...) | $@ | main.rs:148:19:148:27 | source(...) | source(...) | +| main.rs:151:10:151:28 | ... .mul(...) | main.rs:151:10:151:18 | source(...) | main.rs:151:10:151:28 | ... .mul(...) | $@ | main.rs:151:10:151:18 | source(...) | source(...) | +| main.rs:153:10:153:28 | 1i64.mul(...) | main.rs:153:19:153:27 | source(...) | main.rs:153:10:153:28 | 1i64.mul(...) | $@ | main.rs:153:19:153:27 | source(...) | source(...) | +| main.rs:156:10:156:28 | ... .shl(...) | main.rs:156:10:156:18 | source(...) | main.rs:156:10:156:28 | ... .shl(...) | $@ | main.rs:156:10:156:18 | source(...) | source(...) | +| main.rs:157:10:157:25 | ... .shl(...) | main.rs:157:10:157:18 | source(...) | main.rs:157:10:157:25 | ... .shl(...) | $@ | main.rs:157:10:157:18 | source(...) | source(...) | +| main.rs:158:10:158:28 | 1i64.shl(...) | main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | $@ | main.rs:158:19:158:27 | source(...) | source(...) | +| main.rs:160:10:160:28 | ... .shr(...) | main.rs:160:10:160:18 | source(...) | main.rs:160:10:160:28 | ... .shr(...) | $@ | main.rs:160:10:160:18 | source(...) | source(...) | +| main.rs:161:10:161:25 | ... .shr(...) | main.rs:161:10:161:18 | source(...) | main.rs:161:10:161:25 | ... .shr(...) | $@ | main.rs:161:10:161:18 | source(...) | source(...) | +| main.rs:162:10:162:28 | 1i64.shr(...) | main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | $@ | main.rs:162:19:162:27 | source(...) | source(...) | +| main.rs:164:10:164:30 | ... .bitor(...) | main.rs:164:10:164:18 | source(...) | main.rs:164:10:164:30 | ... .bitor(...) | $@ | main.rs:164:10:164:18 | source(...) | source(...) | +| main.rs:166:10:166:30 | 1i64.bitor(...) | main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | $@ | main.rs:166:21:166:29 | source(...) | source(...) | +| main.rs:176:10:176:10 | a | main.rs:170:18:170:26 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:170:18:170:26 | source(...) | source(...) | +| main.rs:176:10:176:10 | a | main.rs:171:18:171:26 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:171:18:171:26 | source(...) | source(...) | +| main.rs:176:10:176:10 | a | main.rs:172:18:172:26 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:172:18:172:26 | source(...) | source(...) | +| main.rs:176:10:176:10 | a | main.rs:173:18:173:26 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:173:18:173:26 | source(...) | source(...) | +| main.rs:176:10:176:10 | a | main.rs:174:18:174:26 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:174:18:174:26 | source(...) | source(...) | +| main.rs:176:10:176:10 | a | main.rs:175:21:175:29 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:175:21:175:29 | source(...) | source(...) | +| main.rs:178:10:178:24 | ... .neg() | main.rs:178:10:178:18 | source(...) | main.rs:178:10:178:24 | ... .neg() | $@ | main.rs:178:10:178:18 | source(...) | source(...) | +| main.rs:179:10:179:24 | ... .not() | main.rs:179:10:179:18 | source(...) | main.rs:179:10:179:24 | ... .not() | $@ | main.rs:179:10:179:18 | source(...) | source(...) | +| main.rs:201:21:201:23 | a.0 | main.rs:199:45:199:60 | ...::source(...) | main.rs:201:21:201:23 | a.0 | $@ | main.rs:199:45:199:60 | ...::source(...) | ...::source(...) | +| main.rs:205:14:205:14 | a | main.rs:203:22:203:30 | source(...) | main.rs:205:14:205:14 | a | $@ | main.rs:203:22:203:30 | source(...) | source(...) | +| main.rs:206:21:206:23 | a.0 | main.rs:199:45:199:60 | ...::source(...) | main.rs:206:21:206:23 | a.0 | $@ | main.rs:199:45:199:60 | ...::source(...) | ...::source(...) | +| main.rs:206:21:206:23 | a.0 | main.rs:203:22:203:30 | source(...) | main.rs:206:21:206:23 | a.0 | $@ | main.rs:203:22:203:30 | source(...) | source(...) | +| main.rs:206:21:206:23 | a.0 | main.rs:204:31:204:46 | ...::source(...) | main.rs:206:21:206:23 | a.0 | $@ | main.rs:204:31:204:46 | ...::source(...) | ...::source(...) | +| main.rs:211:14:211:14 | a | main.rs:208:13:208:21 | source(...) | main.rs:211:14:211:14 | a | $@ | main.rs:208:13:208:21 | source(...) | source(...) | +| main.rs:211:14:211:14 | a | main.rs:209:14:209:22 | source(...) | main.rs:211:14:211:14 | a | $@ | main.rs:209:14:209:22 | source(...) | source(...) | +| main.rs:212:21:212:23 | a.0 | main.rs:208:13:208:21 | source(...) | main.rs:212:21:212:23 | a.0 | $@ | main.rs:208:13:208:21 | source(...) | source(...) | +| main.rs:212:21:212:23 | a.0 | main.rs:209:14:209:22 | source(...) | main.rs:212:21:212:23 | a.0 | $@ | main.rs:209:14:209:22 | source(...) | source(...) | +| main.rs:212:21:212:23 | a.0 | main.rs:210:33:210:48 | ...::source(...) | main.rs:212:21:212:23 | a.0 | $@ | main.rs:210:33:210:48 | ...::source(...) | ...::source(...) | +| main.rs:217:14:217:14 | a | main.rs:214:13:214:21 | source(...) | main.rs:217:14:217:14 | a | $@ | main.rs:214:13:214:21 | source(...) | source(...) | +| main.rs:217:14:217:14 | a | main.rs:215:14:215:22 | source(...) | main.rs:217:14:217:14 | a | $@ | main.rs:215:14:215:22 | source(...) | source(...) | +| main.rs:218:21:218:23 | a.0 | main.rs:214:13:214:21 | source(...) | main.rs:218:21:218:23 | a.0 | $@ | main.rs:214:13:214:21 | source(...) | source(...) | +| main.rs:218:21:218:23 | a.0 | main.rs:215:14:215:22 | source(...) | main.rs:218:21:218:23 | a.0 | $@ | main.rs:215:14:215:22 | source(...) | source(...) | +| main.rs:218:21:218:23 | a.0 | main.rs:216:23:216:38 | ...::source(...) | main.rs:218:21:218:23 | a.0 | $@ | main.rs:216:23:216:38 | ...::source(...) | ...::source(...) | +| main.rs:222:14:222:14 | a | main.rs:220:13:220:22 | source(...) | main.rs:222:14:222:14 | a | $@ | main.rs:220:13:220:22 | source(...) | source(...) | +| main.rs:222:14:222:14 | a | main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | $@ | main.rs:221:15:221:30 | source_usize(...) | source_usize(...) | +| main.rs:223:21:223:23 | a.0 | main.rs:220:13:220:22 | source(...) | main.rs:223:21:223:23 | a.0 | $@ | main.rs:220:13:220:22 | source(...) | source(...) | +| main.rs:223:21:223:23 | a.0 | main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:23 | a.0 | $@ | main.rs:221:15:221:30 | source_usize(...) | source_usize(...) | +| main.rs:228:21:228:24 | v1.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:228:21:228:24 | v1.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) | +| main.rs:228:21:228:24 | v1.0 | main.rs:226:41:226:56 | ...::source(...) | main.rs:228:21:228:24 | v1.0 | $@ | main.rs:226:41:226:56 | ...::source(...) | ...::source(...) | +| main.rs:230:21:230:24 | v2.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:230:21:230:24 | v2.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) | +| main.rs:230:21:230:24 | v2.0 | main.rs:226:41:226:56 | ...::source(...) | main.rs:230:21:230:24 | v2.0 | $@ | main.rs:226:41:226:56 | ...::source(...) | ...::source(...) | +| main.rs:232:21:232:24 | v3.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:232:21:232:24 | v3.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) | +| main.rs:234:21:234:24 | v4.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:234:21:234:24 | v4.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) | +| main.rs:236:21:236:24 | v5.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:236:21:236:24 | v5.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) | +| main.rs:238:21:238:24 | v6.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:238:21:238:24 | v6.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) | +| main.rs:240:21:240:24 | v7.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:240:21:240:24 | v7.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) | +| main.rs:240:21:240:24 | v7.0 | main.rs:226:41:226:56 | ...::source(...) | main.rs:240:21:240:24 | v7.0 | $@ | main.rs:226:41:226:56 | ...::source(...) | ...::source(...) | +| main.rs:242:21:242:24 | v8.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:242:21:242:24 | v8.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) | +| main.rs:242:21:242:24 | v8.0 | main.rs:241:23:241:37 | source_usize(...) | main.rs:242:21:242:24 | v8.0 | $@ | main.rs:241:23:241:37 | source_usize(...) | source_usize(...) | diff --git a/rust/ql/test/library-tests/dataflow/taint/main.rs b/rust/ql/test/library-tests/dataflow/taint/main.rs index e7c23d38e98d..07770cc71189 100644 --- a/rust/ql/test/library-tests/dataflow/taint/main.rs +++ b/rust/ql/test/library-tests/dataflow/taint/main.rs @@ -11,6 +11,7 @@ fn sink(s: i64) { fn addition() { let a = source(42); sink(a + 1); // $ hasTaintFlow=42 + sink(1 + a); // $ hasTaintFlow=42 let mut b = source(58); b += 2; @@ -21,9 +22,23 @@ fn addition() { sink(c); // $ hasTaintFlow=99 } -fn negation() { - let a = source(17); - sink(-a); // $ hasTaintFlow=17 +fn more_ops() { + let a = source(1); + sink(-a); // $ hasTaintFlow=1 + + sink(!source(2)); // $ hasTaintFlow=2 + + sink(source(3) - 3); // $ hasTaintFlow=3 + sink(4i64 - source(4)); // $ hasTaintFlow=4 + + sink(source(5) * 5); // $ hasTaintFlow=5 + sink(6i64 * source(6)); // $ hasTaintFlow=6 + + sink(source(7) << 7); // $ hasTaintFlow=7 + sink(8i64 << source(8)); // $ hasTaintFlow=8 + + sink(source(9) ^ 9); // $ hasTaintFlow=9 + sink(10i64 ^ source(10)); // $ hasTaintFlow=10 } fn cast() { @@ -120,12 +135,122 @@ mod tuples { } } +use std::ops::{Add, Sub, Mul, Shl, Shr, BitOr, AddAssign, SubAssign, MulAssign, ShlAssign, ShrAssign, BitXorAssign, Neg, Not}; + +fn std_ops() { + sink(source(1).add(2i64)); // $ hasTaintFlow=1 + sink(source(1).add(2)); // $ MISSING: hasTaintFlow=1 --- the missing results here are due to failing to resolve targets for `add` etc where there's no explicit type + sink(1i64.add(source(2))); // $ hasTaintFlow=2 + sink(1.add(source(2))); // $ MISSING: hasTaintFlow=2 + + sink(source(1).sub(2i64)); // $ hasTaintFlow=1 + sink(source(1).sub(2)); // $ MISSING: hasTaintFlow=1 + sink(1i64.sub(source(2))); // $ hasTaintFlow=2 + sink(1.sub(source(2))); // $ MISSING: hasTaintFlow=2 + + sink(source(1).mul(2i64)); // $ hasTaintFlow=1 + sink(source(1).mul(2)); // $ MISSING: hasTaintFlow=1 + sink(1i64.mul(source(2))); // $ hasTaintFlow=2 + sink(1.mul(source(2))); // $ MISSING: hasTaintFlow=2 + + sink(source(1).shl(2i64)); // $ hasTaintFlow=1 + sink(source(1).shl(2)); // $ hasTaintFlow=1 + sink(1i64.shl(source(2))); // $ hasTaintFlow=2 + + sink(source(1).shr(2i64)); // $ hasTaintFlow=1 + sink(source(1).shr(2)); // $ hasTaintFlow=1 + sink(1i64.shr(source(2))); // $ hasTaintFlow=2 + + sink(source(1).bitor(2i64)); // $ hasTaintFlow=1 + sink(source(1).bitor(2)); // $ MISSING: hasTaintFlow=1 + sink(1i64.bitor(source(2))); // $ hasTaintFlow=2 + sink(1.bitor(source(2))); // $ MISSING: hasTaintFlow=2 + + let mut a: i64 = 1; + a.add_assign(source(2)); + a.sub_assign(source(3)); + a.mul_assign(source(4)); + a.shl_assign(source(5)); + a.shr_assign(source(6)); + a.bitxor_assign(source(7)); + sink(a); // $ hasTaintFlow=2 hasTaintFlow=3 hasTaintFlow=4 hasTaintFlow=5 hasTaintFlow=6 hasTaintFlow=7 + + sink(source(1).neg()); // $ hasTaintFlow=1 + sink(source(1).not()); // $ hasTaintFlow=1 +} + +mod wrapping { + use std::num::Wrapping; + use std::ops::{Add, AddAssign, Neg, Not}; + + fn source(i: i64) -> Wrapping { + Wrapping(i) + } + + fn source_usize(i: i64) -> usize { + i as usize + } + + fn sink(s: Wrapping) { + println!("{}", s); + } + + pub fn wrapping() { + let mut a: Wrapping = Wrapping(crate::source(1)); + sink(a); // $ MISSING: hasTaintFlow=1 + crate::sink(a.0); // $ hasValueFlow=1 + + a.add_assign(source(2)); + a.add_assign(Wrapping(crate::source(3))); + sink(a); // $ hasTaintFlow=2 MISSING: hasTaintFlow=1 hasTaintFlow=3 + crate::sink(a.0); // $ hasValueFlow=1 hasTaintFlow=2 hasTaintFlow=3 + + a = source(4); + a += source(5); + a += std::num::Wrapping(crate::source(6)); + sink(a); // $ hasTaintFlow=4 hasTaintFlow=5 MISSING: hasTaintFlow=6 + crate::sink(a.0); // $ hasTaintFlow=4 hasTaintFlow=5 hasTaintFlow=6 + + a = source(7); + a &= source(8); + a &= Wrapping(crate::source(9)); + sink(a); // $ hasTaintFlow=7 hasTaintFlow=8 MISSING: hasTaintFlow=9 + crate::sink(a.0); // $ hasTaintFlow=7 hasTaintFlow=8 hasTaintFlow=9 + + a = source(10); + a <<= source_usize(11); + sink(a); // $ hasTaintFlow=11 hasTaintFlow=10 + crate::sink(a.0); // $ hasTaintFlow=11 hasTaintFlow=10 + + let b: Wrapping = Wrapping(crate::source(1)); + let c: Wrapping = Wrapping(crate::source(2)); + let v1 = b + c; + crate::sink(v1.0); // $ hasTaintFlow=1 hasTaintFlow=2 + let v2 = b.add(c); + crate::sink(v2.0); // $ hasTaintFlow=1 hasTaintFlow=2 + let v3 = -b; + crate::sink(v3.0); // $ hasTaintFlow=1 + let v4 = b.neg(); + crate::sink(v4.0); // $ hasTaintFlow=1 + let v5 = !b; + crate::sink(v5.0); // $ hasTaintFlow=1 + let v6 = b.not(); + crate::sink(v6.0); // $ hasTaintFlow=1 + let v7 = b & c; + crate::sink(v7.0); // $ hasTaintFlow=1 hasTaintFlow=2 + let v8 = b << source_usize(3); + crate::sink(v8.0); // $ hasTaintFlow=1 hasTaintFlow=3 + } +} + fn main() { addition(); - negation(); + more_ops(); cast(); string_slice(); array_source::array_tainted(); array_sink::array_with_taint(); tuples::tuples(); + std_ops(); + wrapping::wrapping(); } diff --git a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected index a38f1b82f36f..907ac816ea97 100644 --- a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected +++ b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected @@ -59,44 +59,43 @@ edges | main.rs:18:41:18:41 | v | main.rs:32:60:32:60 | v | provenance | | | main.rs:18:41:18:41 | v | main.rs:35:49:35:49 | v | provenance | | | main.rs:20:9:20:10 | l2 | main.rs:21:31:21:32 | l2 | provenance | | -| main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | main.rs:20:14:20:63 | ... .unwrap() | provenance | MaD:44 | +| main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | main.rs:20:14:20:63 | ... .unwrap() | provenance | MaD:42 | | main.rs:20:14:20:63 | ... .unwrap() | main.rs:20:9:20:10 | l2 | provenance | | -| main.rs:20:50:20:50 | v | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | provenance | MaD:36 | +| main.rs:20:50:20:50 | v | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | provenance | MaD:34 | | main.rs:21:31:21:32 | l2 | main.rs:21:13:21:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:21:31:21:32 | l2 | main.rs:22:31:22:32 | l2 | provenance | | | main.rs:21:31:21:32 | l2 | main.rs:23:31:23:32 | l2 | provenance | | | main.rs:21:31:21:32 | l2 | main.rs:24:38:24:39 | l2 | provenance | | -| main.rs:22:31:22:32 | l2 | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | provenance | MaD:30 | -| main.rs:22:31:22:44 | l2.align_to(...) [Ok] | main.rs:22:31:22:53 | ... .unwrap() | provenance | MaD:44 | +| main.rs:22:31:22:32 | l2 | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | provenance | MaD:28 | +| main.rs:22:31:22:44 | l2.align_to(...) [Ok] | main.rs:22:31:22:53 | ... .unwrap() | provenance | MaD:42 | | main.rs:22:31:22:53 | ... .unwrap() | main.rs:22:13:22:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:23:31:23:32 | l2 | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | provenance | MaD:30 | -| main.rs:23:31:23:44 | l2.align_to(...) [Ok] | main.rs:23:31:23:53 | ... .unwrap() | provenance | MaD:44 | -| main.rs:23:31:23:53 | ... .unwrap() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | MaD:38 | +| main.rs:23:31:23:32 | l2 | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | provenance | MaD:28 | +| main.rs:23:31:23:44 | l2.align_to(...) [Ok] | main.rs:23:31:23:53 | ... .unwrap() | provenance | MaD:42 | +| main.rs:23:31:23:53 | ... .unwrap() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | MaD:36 | | main.rs:23:31:23:68 | ... .pad_to_align() | main.rs:23:13:23:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:24:38:24:39 | l2 | main.rs:24:13:24:36 | ...::alloc_zeroed | provenance | MaD:16 Sink:MaD:16 | | main.rs:29:9:29:10 | l4 | main.rs:30:31:30:32 | l4 | provenance | | | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | main.rs:29:9:29:10 | l4 | provenance | | -| main.rs:29:60:29:60 | v | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | provenance | MaD:37 | +| main.rs:29:60:29:60 | v | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | provenance | MaD:35 | | main.rs:30:31:30:32 | l4 | main.rs:30:13:30:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:32:9:32:10 | l5 | main.rs:33:31:33:32 | l5 | provenance | | | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | main.rs:32:9:32:10 | l5 | provenance | | -| main.rs:32:60:32:60 | v | main.rs:32:60:32:89 | ... * ... | provenance | MaD:27 | -| main.rs:32:60:32:89 | ... * ... | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | provenance | MaD:37 | +| main.rs:32:60:32:60 | v | main.rs:32:60:32:89 | ... * ... | provenance | MaD:25 | +| main.rs:32:60:32:89 | ... * ... | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | provenance | MaD:35 | | main.rs:33:31:33:32 | l5 | main.rs:33:13:33:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:35:9:35:10 | s6 | main.rs:36:60:36:61 | s6 | provenance | | | main.rs:35:14:35:54 | ... + ... | main.rs:35:9:35:10 | s6 | provenance | | | main.rs:35:15:35:49 | ... * ... | main.rs:35:14:35:54 | ... + ... | provenance | MaD:24 | -| main.rs:35:49:35:49 | v | main.rs:35:15:35:49 | ... * ... | provenance | MaD:26 | | main.rs:35:49:35:49 | v | main.rs:35:15:35:49 | ... * ... | provenance | MaD:25 | | main.rs:36:9:36:10 | l6 | main.rs:37:31:37:32 | l6 | provenance | | | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | main.rs:36:9:36:10 | l6 | provenance | | -| main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | provenance | MaD:37 | +| main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | provenance | MaD:35 | | main.rs:37:31:37:32 | l6 | main.rs:37:13:37:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:37:31:37:32 | l6 | main.rs:39:60:39:61 | l6 | provenance | | | main.rs:39:9:39:10 | l7 | main.rs:40:31:40:32 | l7 | provenance | | | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | main.rs:39:9:39:10 | l7 | provenance | | -| main.rs:39:60:39:61 | l6 | main.rs:39:60:39:68 | l6.size() | provenance | MaD:41 | -| main.rs:39:60:39:68 | l6.size() | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | provenance | MaD:37 | +| main.rs:39:60:39:61 | l6 | main.rs:39:60:39:68 | l6.size() | provenance | MaD:39 | +| main.rs:39:60:39:68 | l6.size() | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | provenance | MaD:35 | | main.rs:40:31:40:32 | l7 | main.rs:40:13:40:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:43:44:43:51 | ...: usize | main.rs:50:41:50:41 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:51:41:51:41 | v | provenance | | @@ -104,27 +103,27 @@ edges | main.rs:43:44:43:51 | ...: usize | main.rs:54:48:54:48 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:58:34:58:34 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:67:46:67:46 | v | provenance | | -| main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | provenance | MaD:44 | +| main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | provenance | MaD:42 | | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | main.rs:50:31:50:53 | ... .0 | provenance | | | main.rs:50:31:50:53 | ... .0 | main.rs:50:13:50:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:50:41:50:41 | v | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:39 | -| main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | provenance | MaD:44 | +| main.rs:50:41:50:41 | v | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:37 | +| main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | provenance | MaD:42 | | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | main.rs:51:31:51:57 | ... .0 | provenance | | | main.rs:51:31:51:57 | ... .0 | main.rs:51:13:51:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:51:41:51:41 | v | main.rs:51:41:51:45 | ... + ... | provenance | MaD:24 | -| main.rs:51:41:51:45 | ... + ... | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:39 | -| main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | main.rs:53:31:53:58 | ... .unwrap() | provenance | MaD:44 | +| main.rs:51:41:51:45 | ... + ... | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:37 | +| main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | main.rs:53:31:53:58 | ... .unwrap() | provenance | MaD:42 | | main.rs:53:31:53:58 | ... .unwrap() | main.rs:53:13:53:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:53:48:53:48 | v | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | provenance | MaD:40 | -| main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | main.rs:54:31:54:63 | ... .unwrap() | provenance | MaD:44 | +| main.rs:53:48:53:48 | v | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | provenance | MaD:38 | +| main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | main.rs:54:31:54:63 | ... .unwrap() | provenance | MaD:42 | | main.rs:54:31:54:63 | ... .unwrap() | main.rs:54:13:54:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:54:48:54:48 | v | main.rs:54:48:54:53 | ... * ... | provenance | MaD:27 | -| main.rs:54:48:54:53 | ... * ... | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | provenance | MaD:40 | +| main.rs:54:48:54:48 | v | main.rs:54:48:54:53 | ... * ... | provenance | MaD:25 | +| main.rs:54:48:54:53 | ... * ... | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | provenance | MaD:38 | | main.rs:58:9:58:20 | TuplePat [tuple.0] | main.rs:58:10:58:11 | k1 | provenance | | | main.rs:58:10:58:11 | k1 | main.rs:59:31:59:32 | k1 | provenance | | -| main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | provenance | MaD:43 | +| main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | provenance | MaD:41 | | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | main.rs:58:9:58:20 | TuplePat [tuple.0] | provenance | | -| main.rs:58:34:58:34 | v | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | provenance | MaD:39 | +| main.rs:58:34:58:34 | v | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | provenance | MaD:37 | | main.rs:59:31:59:32 | k1 | main.rs:59:13:59:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:59:31:59:32 | k1 | main.rs:60:34:60:35 | k1 | provenance | | | main.rs:59:31:59:32 | k1 | main.rs:62:24:62:25 | k1 | provenance | | @@ -132,32 +131,32 @@ edges | main.rs:59:31:59:32 | k1 | main.rs:65:31:65:32 | k1 | provenance | | | main.rs:60:9:60:20 | TuplePat [tuple.0] | main.rs:60:10:60:11 | k2 | provenance | | | main.rs:60:10:60:11 | k2 | main.rs:61:31:61:32 | k2 | provenance | | -| main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | provenance | MaD:44 | +| main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | provenance | MaD:42 | | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | main.rs:60:9:60:20 | TuplePat [tuple.0] | provenance | | -| main.rs:60:34:60:35 | k1 | main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | provenance | MaD:32 | +| main.rs:60:34:60:35 | k1 | main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | provenance | MaD:30 | | main.rs:61:31:61:32 | k2 | main.rs:61:13:61:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:62:9:62:20 | TuplePat [tuple.0] | main.rs:62:10:62:11 | k3 | provenance | | | main.rs:62:10:62:11 | k3 | main.rs:63:31:63:32 | k3 | provenance | | -| main.rs:62:24:62:25 | k1 | main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | provenance | MaD:33 | -| main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | provenance | MaD:44 | +| main.rs:62:24:62:25 | k1 | main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | provenance | MaD:31 | +| main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | provenance | MaD:42 | | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | main.rs:62:9:62:20 | TuplePat [tuple.0] | provenance | | | main.rs:63:31:63:32 | k3 | main.rs:63:13:63:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | main.rs:64:31:64:59 | ... .unwrap() | provenance | MaD:44 | +| main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | main.rs:64:31:64:59 | ... .unwrap() | provenance | MaD:42 | | main.rs:64:31:64:59 | ... .unwrap() | main.rs:64:13:64:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:64:48:64:49 | k1 | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | provenance | MaD:34 | -| main.rs:65:31:65:32 | k1 | main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | provenance | MaD:35 | -| main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | main.rs:65:31:65:59 | ... .unwrap() | provenance | MaD:44 | +| main.rs:64:48:64:49 | k1 | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | provenance | MaD:32 | +| main.rs:65:31:65:32 | k1 | main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | provenance | MaD:33 | +| main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | main.rs:65:31:65:59 | ... .unwrap() | provenance | MaD:42 | | main.rs:65:31:65:59 | ... .unwrap() | main.rs:65:13:65:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:67:9:67:10 | l4 | main.rs:68:31:68:32 | l4 | provenance | | -| main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | main.rs:67:14:67:56 | ... .unwrap() | provenance | MaD:44 | +| main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | main.rs:67:14:67:56 | ... .unwrap() | provenance | MaD:42 | | main.rs:67:14:67:56 | ... .unwrap() | main.rs:67:9:67:10 | l4 | provenance | | -| main.rs:67:46:67:46 | v | main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | provenance | MaD:31 | +| main.rs:67:46:67:46 | v | main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | provenance | MaD:29 | | main.rs:68:31:68:32 | l4 | main.rs:68:13:68:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:86:35:86:42 | ...: usize | main.rs:87:54:87:54 | v | provenance | | | main.rs:87:9:87:14 | layout | main.rs:88:31:88:36 | layout | provenance | | -| main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | main.rs:87:18:87:67 | ... .unwrap() | provenance | MaD:44 | +| main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | main.rs:87:18:87:67 | ... .unwrap() | provenance | MaD:42 | | main.rs:87:18:87:67 | ... .unwrap() | main.rs:87:9:87:14 | layout | provenance | | -| main.rs:87:54:87:54 | v | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | provenance | MaD:36 | +| main.rs:87:54:87:54 | v | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | provenance | MaD:34 | | main.rs:88:31:88:36 | layout | main.rs:88:13:88:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:91:38:91:45 | ...: usize | main.rs:92:47:92:47 | v | provenance | | | main.rs:91:38:91:45 | ...: usize | main.rs:101:51:101:51 | v | provenance | | @@ -168,16 +167,16 @@ edges | main.rs:91:38:91:45 | ...: usize | main.rs:161:55:161:55 | v | provenance | | | main.rs:92:9:92:10 | l1 | main.rs:96:35:96:36 | l1 | provenance | | | main.rs:92:9:92:10 | l1 | main.rs:102:35:102:36 | l1 | provenance | | -| main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | main.rs:92:14:92:57 | ... .unwrap() | provenance | MaD:44 | +| main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | main.rs:92:14:92:57 | ... .unwrap() | provenance | MaD:42 | | main.rs:92:14:92:57 | ... .unwrap() | main.rs:92:9:92:10 | l1 | provenance | | -| main.rs:92:47:92:47 | v | main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | provenance | MaD:31 | +| main.rs:92:47:92:47 | v | main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | provenance | MaD:29 | | main.rs:96:35:96:36 | l1 | main.rs:96:17:96:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:96:35:96:36 | l1 | main.rs:109:35:109:36 | l1 | provenance | | | main.rs:96:35:96:36 | l1 | main.rs:111:35:111:36 | l1 | provenance | | | main.rs:101:13:101:14 | l3 | main.rs:103:35:103:36 | l3 | provenance | | -| main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | main.rs:101:18:101:61 | ... .unwrap() | provenance | MaD:44 | +| main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | main.rs:101:18:101:61 | ... .unwrap() | provenance | MaD:42 | | main.rs:101:18:101:61 | ... .unwrap() | main.rs:101:13:101:14 | l3 | provenance | | -| main.rs:101:51:101:51 | v | main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | provenance | MaD:31 | +| main.rs:101:51:101:51 | v | main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | provenance | MaD:29 | | main.rs:102:35:102:36 | l1 | main.rs:102:17:102:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:102:35:102:36 | l1 | main.rs:109:35:109:36 | l1 | provenance | | | main.rs:102:35:102:36 | l1 | main.rs:111:35:111:36 | l1 | provenance | | @@ -188,28 +187,28 @@ edges | main.rs:111:35:111:36 | l1 | main.rs:111:17:111:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:111:35:111:36 | l1 | main.rs:146:35:146:36 | l1 | provenance | | | main.rs:145:13:145:14 | l9 | main.rs:148:35:148:36 | l9 | provenance | | -| main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | main.rs:145:18:145:61 | ... .unwrap() | provenance | MaD:44 | +| main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | main.rs:145:18:145:61 | ... .unwrap() | provenance | MaD:42 | | main.rs:145:18:145:61 | ... .unwrap() | main.rs:145:13:145:14 | l9 | provenance | | -| main.rs:145:51:145:51 | v | main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | provenance | MaD:31 | +| main.rs:145:51:145:51 | v | main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | provenance | MaD:29 | | main.rs:146:35:146:36 | l1 | main.rs:146:17:146:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:146:35:146:36 | l1 | main.rs:177:31:177:32 | l1 | provenance | | | main.rs:148:35:148:36 | l9 | main.rs:148:17:148:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:151:9:151:11 | l10 | main.rs:152:31:152:33 | l10 | provenance | | -| main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | main.rs:151:15:151:78 | ... .unwrap() | provenance | MaD:44 | +| main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | main.rs:151:15:151:78 | ... .unwrap() | provenance | MaD:42 | | main.rs:151:15:151:78 | ... .unwrap() | main.rs:151:9:151:11 | l10 | provenance | | -| main.rs:151:48:151:68 | ...::min(...) | main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | provenance | MaD:31 | -| main.rs:151:62:151:62 | v | main.rs:151:48:151:68 | ...::min(...) | provenance | MaD:46 | +| main.rs:151:48:151:68 | ...::min(...) | main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | provenance | MaD:29 | +| main.rs:151:62:151:62 | v | main.rs:151:48:151:68 | ...::min(...) | provenance | MaD:44 | | main.rs:152:31:152:33 | l10 | main.rs:152:13:152:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:154:9:154:11 | l11 | main.rs:155:31:155:33 | l11 | provenance | | -| main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | main.rs:154:15:154:78 | ... .unwrap() | provenance | MaD:44 | +| main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | main.rs:154:15:154:78 | ... .unwrap() | provenance | MaD:42 | | main.rs:154:15:154:78 | ... .unwrap() | main.rs:154:9:154:11 | l11 | provenance | | -| main.rs:154:48:154:68 | ...::max(...) | main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | provenance | MaD:31 | -| main.rs:154:62:154:62 | v | main.rs:154:48:154:68 | ...::max(...) | provenance | MaD:45 | +| main.rs:154:48:154:68 | ...::max(...) | main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | provenance | MaD:29 | +| main.rs:154:62:154:62 | v | main.rs:154:48:154:68 | ...::max(...) | provenance | MaD:43 | | main.rs:155:31:155:33 | l11 | main.rs:155:13:155:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:161:13:161:15 | l13 | main.rs:162:35:162:37 | l13 | provenance | | -| main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | main.rs:161:19:161:68 | ... .unwrap() | provenance | MaD:44 | +| main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | main.rs:161:19:161:68 | ... .unwrap() | provenance | MaD:42 | | main.rs:161:19:161:68 | ... .unwrap() | main.rs:161:13:161:15 | l13 | provenance | | -| main.rs:161:55:161:55 | v | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | provenance | MaD:36 | +| main.rs:161:55:161:55 | v | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | provenance | MaD:34 | | main.rs:162:35:162:37 | l13 | main.rs:162:17:162:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:162:35:162:37 | l13 | main.rs:169:35:169:37 | l13 | provenance | | | main.rs:169:35:169:37 | l13 | main.rs:169:17:169:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | @@ -217,9 +216,9 @@ edges | main.rs:183:29:183:36 | ...: usize | main.rs:192:46:192:46 | v | provenance | | | main.rs:183:29:183:36 | ...: usize | main.rs:202:48:202:48 | v | provenance | | | main.rs:192:9:192:10 | l2 | main.rs:193:38:193:39 | l2 | provenance | | -| main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | main.rs:192:14:192:56 | ... .unwrap() | provenance | MaD:44 | +| main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | main.rs:192:14:192:56 | ... .unwrap() | provenance | MaD:42 | | main.rs:192:14:192:56 | ... .unwrap() | main.rs:192:9:192:10 | l2 | provenance | | -| main.rs:192:46:192:46 | v | main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | provenance | MaD:31 | +| main.rs:192:46:192:46 | v | main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | provenance | MaD:29 | | main.rs:193:38:193:39 | l2 | main.rs:193:32:193:36 | alloc | provenance | MaD:12 Sink:MaD:12 | | main.rs:193:38:193:39 | l2 | main.rs:194:45:194:46 | l2 | provenance | | | main.rs:194:45:194:46 | l2 | main.rs:194:32:194:43 | alloc_zeroed | provenance | MaD:13 Sink:MaD:13 | @@ -258,19 +257,19 @@ edges | main.rs:231:42:231:42 | v | main.rs:231:13:231:40 | ...::with_capacity_in | provenance | MaD:6 Sink:MaD:6 | | main.rs:282:24:282:41 | ...: String | main.rs:283:21:283:30 | user_input | provenance | | | main.rs:283:9:283:17 | num_bytes | main.rs:285:54:285:62 | num_bytes | provenance | | -| main.rs:283:21:283:30 | user_input | main.rs:283:21:283:47 | user_input.parse() [Ok] | provenance | MaD:28 | -| main.rs:283:21:283:30 | user_input | main.rs:283:21:283:47 | user_input.parse() [Ok] | provenance | MaD:29 | +| main.rs:283:21:283:30 | user_input | main.rs:283:21:283:47 | user_input.parse() [Ok] | provenance | MaD:26 | +| main.rs:283:21:283:30 | user_input | main.rs:283:21:283:47 | user_input.parse() [Ok] | provenance | MaD:27 | | main.rs:283:21:283:47 | user_input.parse() [Ok] | main.rs:283:21:283:48 | TryExpr | provenance | | -| main.rs:283:21:283:48 | TryExpr | main.rs:283:21:283:77 | ... * ... | provenance | MaD:27 | +| main.rs:283:21:283:48 | TryExpr | main.rs:283:21:283:77 | ... * ... | provenance | MaD:25 | | main.rs:283:21:283:77 | ... * ... | main.rs:283:9:283:17 | num_bytes | provenance | | | main.rs:285:9:285:14 | layout | main.rs:287:40:287:45 | layout | provenance | | -| main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | main.rs:285:18:285:75 | ... .unwrap() | provenance | MaD:44 | +| main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | main.rs:285:18:285:75 | ... .unwrap() | provenance | MaD:42 | | main.rs:285:18:285:75 | ... .unwrap() | main.rs:285:9:285:14 | layout | provenance | | -| main.rs:285:54:285:62 | num_bytes | main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | provenance | MaD:36 | +| main.rs:285:54:285:62 | num_bytes | main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | provenance | MaD:34 | | main.rs:287:40:287:45 | layout | main.rs:287:22:287:38 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:311:25:311:38 | ...::args | main.rs:311:25:311:40 | ...::args(...) [element] | provenance | Src:MaD:22 | | main.rs:311:25:311:40 | ...::args(...) [element] | main.rs:311:25:311:47 | ... .nth(...) [Some] | provenance | MaD:23 | -| main.rs:311:25:311:47 | ... .nth(...) [Some] | main.rs:311:25:311:74 | ... .unwrap_or(...) | provenance | MaD:42 | +| main.rs:311:25:311:47 | ... .nth(...) [Some] | main.rs:311:25:311:74 | ... .unwrap_or(...) | provenance | MaD:40 | | main.rs:311:25:311:74 | ... .unwrap_or(...) | main.rs:282:24:282:41 | ...: String | provenance | | | main.rs:320:9:320:9 | v | main.rs:323:34:323:34 | v | provenance | | | main.rs:320:9:320:9 | v | main.rs:324:42:324:42 | v | provenance | | @@ -280,10 +279,10 @@ edges | main.rs:320:9:320:9 | v | main.rs:328:22:328:22 | v | provenance | | | main.rs:320:13:320:26 | ...::args | main.rs:320:13:320:28 | ...::args(...) [element] | provenance | Src:MaD:22 | | main.rs:320:13:320:28 | ...::args(...) [element] | main.rs:320:13:320:35 | ... .nth(...) [Some] | provenance | MaD:23 | -| main.rs:320:13:320:35 | ... .nth(...) [Some] | main.rs:320:13:320:65 | ... .unwrap_or(...) | provenance | MaD:42 | -| main.rs:320:13:320:65 | ... .unwrap_or(...) | main.rs:320:13:320:82 | ... .parse() [Ok] | provenance | MaD:28 | -| main.rs:320:13:320:65 | ... .unwrap_or(...) | main.rs:320:13:320:82 | ... .parse() [Ok] | provenance | MaD:29 | -| main.rs:320:13:320:82 | ... .parse() [Ok] | main.rs:320:13:320:91 | ... .unwrap() | provenance | MaD:44 | +| main.rs:320:13:320:35 | ... .nth(...) [Some] | main.rs:320:13:320:65 | ... .unwrap_or(...) | provenance | MaD:40 | +| main.rs:320:13:320:65 | ... .unwrap_or(...) | main.rs:320:13:320:82 | ... .parse() [Ok] | provenance | MaD:26 | +| main.rs:320:13:320:65 | ... .unwrap_or(...) | main.rs:320:13:320:82 | ... .parse() [Ok] | provenance | MaD:27 | +| main.rs:320:13:320:82 | ... .parse() [Ok] | main.rs:320:13:320:91 | ... .unwrap() | provenance | MaD:42 | | main.rs:320:13:320:91 | ... .unwrap() | main.rs:320:9:320:9 | v | provenance | | | main.rs:323:34:323:34 | v | main.rs:12:36:12:43 | ...: usize | provenance | | | main.rs:324:42:324:42 | v | main.rs:43:44:43:51 | ...: usize | provenance | | @@ -315,29 +314,27 @@ models | 21 | Sink: libc::unix::realloc; Argument[1]; alloc-size | | 22 | Source: std::env::args; ReturnValue.Element; commandargs | | 23 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Reference.Element; ReturnValue.Field[core::option::Option::Some(0)]; value | -| 24 | Summary: <_ as core::ops::arith::Add>::add; Argument[self]; ReturnValue; taint | -| 25 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[0].Reference; ReturnValue; taint | -| 26 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[0]; ReturnValue; taint | -| 27 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self]; ReturnValue; taint | -| 28 | Summary: <_ as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue.Reference; taint | -| 29 | Summary: ::deref; Argument[self]; ReturnValue; value | -| 30 | Summary: ::align_to; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 31 | Summary: ::array; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 32 | Summary: ::extend; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | -| 33 | Summary: ::extend; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | -| 34 | Summary: ::extend_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 35 | Summary: ::extend_packed; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 36 | Summary: ::from_size_align; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 37 | Summary: ::from_size_align_unchecked; Argument[0]; ReturnValue; taint | -| 38 | Summary: ::pad_to_align; Argument[self].Reference; ReturnValue; taint | -| 39 | Summary: ::repeat; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | -| 40 | Summary: ::repeat_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 41 | Summary: ::size; Argument[self].Reference; ReturnValue; taint | -| 42 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 43 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 44 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 45 | Summary: core::cmp::max; Argument[0]; ReturnValue; value | -| 46 | Summary: core::cmp::min; Argument[0]; ReturnValue; value | +| 24 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0]; ReturnValue; taint | +| 25 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self,0]; ReturnValue; taint | +| 26 | Summary: <_ as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue.Reference; taint | +| 27 | Summary: ::deref; Argument[self]; ReturnValue; value | +| 28 | Summary: ::align_to; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 29 | Summary: ::array; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 30 | Summary: ::extend; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | +| 31 | Summary: ::extend; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | +| 32 | Summary: ::extend_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 33 | Summary: ::extend_packed; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 34 | Summary: ::from_size_align; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 35 | Summary: ::from_size_align_unchecked; Argument[0]; ReturnValue; taint | +| 36 | Summary: ::pad_to_align; Argument[self].Reference; ReturnValue; taint | +| 37 | Summary: ::repeat; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | +| 38 | Summary: ::repeat_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 39 | Summary: ::size; Argument[self].Reference; ReturnValue; taint | +| 40 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 41 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 42 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 43 | Summary: core::cmp::max; Argument[0]; ReturnValue; value | +| 44 | Summary: core::cmp::min; Argument[0]; ReturnValue; value | nodes | main.rs:12:36:12:43 | ...: usize | semmle.label | ...: usize | | main.rs:18:13:18:31 | ...::realloc | semmle.label | ...::realloc | diff --git a/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected b/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected index 1d9837feafe2..5423999d7c3f 100644 --- a/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected +++ b/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected @@ -23,32 +23,32 @@ edges | test_cipher.rs:18:28:18:36 | &... [&ref] | test_cipher.rs:18:9:18:14 | const1 [&ref] | provenance | | | test_cipher.rs:18:29:18:36 | [0u8; 16] | test_cipher.rs:18:28:18:36 | &... [&ref] | provenance | | | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref] | test_cipher.rs:19:30:19:47 | ...::new | provenance | MaD:3 Sink:MaD:3 | -| test_cipher.rs:19:73:19:78 | const1 [&ref] | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref] | provenance | MaD:23 | +| test_cipher.rs:19:73:19:78 | const1 [&ref] | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref] | provenance | MaD:18 | | test_cipher.rs:25:9:25:14 | const4 [&ref] | test_cipher.rs:26:66:26:71 | const4 [&ref] | provenance | | | test_cipher.rs:25:28:25:36 | &... [&ref] | test_cipher.rs:25:9:25:14 | const4 [&ref] | provenance | | | test_cipher.rs:25:29:25:36 | [0u8; 16] | test_cipher.rs:25:28:25:36 | &... [&ref] | provenance | | | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref] | test_cipher.rs:26:30:26:40 | ...::new | provenance | MaD:4 Sink:MaD:4 | -| test_cipher.rs:26:66:26:71 | const4 [&ref] | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref] | provenance | MaD:23 | +| test_cipher.rs:26:66:26:71 | const4 [&ref] | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref] | provenance | MaD:18 | | test_cipher.rs:29:9:29:14 | const5 [&ref] | test_cipher.rs:30:95:30:100 | const5 [&ref] | provenance | | | test_cipher.rs:29:28:29:36 | &... [&ref] | test_cipher.rs:29:9:29:14 | const5 [&ref] | provenance | | | test_cipher.rs:29:29:29:36 | [0u8; 16] | test_cipher.rs:29:28:29:36 | &... [&ref] | provenance | | | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref] | test_cipher.rs:30:30:30:40 | ...::new | provenance | MaD:5 Sink:MaD:5 | -| test_cipher.rs:30:95:30:100 | const5 [&ref] | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref] | provenance | MaD:23 | +| test_cipher.rs:30:95:30:100 | const5 [&ref] | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref] | provenance | MaD:18 | | test_cipher.rs:37:9:37:14 | const7 | test_cipher.rs:38:74:38:79 | const7 | provenance | | | test_cipher.rs:37:27:37:74 | [...] | test_cipher.rs:37:9:37:14 | const7 | provenance | | | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | test_cipher.rs:38:30:38:47 | ...::new | provenance | MaD:3 Sink:MaD:3 | -| test_cipher.rs:38:73:38:79 | &const7 [&ref] | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | provenance | MaD:23 | +| test_cipher.rs:38:73:38:79 | &const7 [&ref] | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | provenance | MaD:18 | | test_cipher.rs:38:74:38:79 | const7 | test_cipher.rs:38:73:38:79 | &const7 [&ref] | provenance | | | test_cipher.rs:41:9:41:14 | const8 [&ref] | test_cipher.rs:42:73:42:78 | const8 [&ref] | provenance | | | test_cipher.rs:41:28:41:76 | &... [&ref] | test_cipher.rs:41:9:41:14 | const8 [&ref] | provenance | | | test_cipher.rs:41:29:41:76 | [...] | test_cipher.rs:41:28:41:76 | &... [&ref] | provenance | | | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | test_cipher.rs:42:30:42:47 | ...::new | provenance | MaD:3 Sink:MaD:3 | -| test_cipher.rs:42:73:42:78 | const8 [&ref] | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | provenance | MaD:23 | +| test_cipher.rs:42:73:42:78 | const8 [&ref] | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | provenance | MaD:18 | | test_cipher.rs:50:9:50:15 | const10 [element] | test_cipher.rs:51:75:51:81 | const10 [element] | provenance | | | test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:50:37:50:54 | ...::zeroed(...) [element] | provenance | Src:MaD:7 | | test_cipher.rs:50:37:50:54 | ...::zeroed(...) [element] | test_cipher.rs:50:9:50:15 | const10 [element] | provenance | | | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | test_cipher.rs:51:31:51:48 | ...::new | provenance | MaD:3 Sink:MaD:3 Sink:MaD:3 | -| test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | provenance | MaD:23 | +| test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | provenance | MaD:18 | | test_cipher.rs:51:75:51:81 | const10 [element] | test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | provenance | | | test_cipher.rs:73:9:73:14 | const2 [&ref] | test_cipher.rs:74:46:74:51 | const2 [&ref] | provenance | | | test_cipher.rs:73:18:73:26 | &... [&ref] | test_cipher.rs:73:9:73:14 | const2 [&ref] | provenance | | @@ -65,14 +65,14 @@ edges | test_cookie.rs:38:9:38:14 | array2 | test_cookie.rs:42:34:42:39 | array2 | provenance | | | test_cookie.rs:38:18:38:37 | ...::from(...) | test_cookie.rs:38:9:38:14 | array2 | provenance | | | test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:8 | -| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:18 | -| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:19 | -| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:20 | -| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:21 | -| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:22 | +| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:13 | +| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:14 | +| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:15 | +| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:16 | +| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:17 | | test_cookie.rs:42:34:42:39 | array2 | test_cookie.rs:42:14:42:32 | ...::from | provenance | MaD:2 Sink:MaD:2 | | test_cookie.rs:49:9:49:14 | array3 [element] | test_cookie.rs:53:34:53:39 | array3 [element] | provenance | | -| test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | provenance | MaD:24 | +| test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | provenance | MaD:19 | | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | test_cookie.rs:49:9:49:14 | array3 [element] | provenance | | | test_cookie.rs:53:34:53:39 | array3 [element] | test_cookie.rs:53:14:53:32 | ...::from | provenance | MaD:2 Sink:MaD:2 | | test_heuristic.rs:44:9:44:16 | const_iv [&ref] | test_heuristic.rs:45:41:45:48 | const_iv | provenance | | @@ -80,15 +80,11 @@ edges | test_heuristic.rs:44:31:44:38 | [0u8; 16] | test_heuristic.rs:44:30:44:38 | &... [&ref] | provenance | | | test_heuristic.rs:64:20:64:27 | [0u8; 16] | test_heuristic.rs:64:19:64:27 | &... | provenance | | | test_heuristic.rs:65:31:65:38 | [0u8; 16] | test_heuristic.rs:65:30:65:38 | &... | provenance | | -| test_heuristic.rs:69:32:69:32 | 1 | test_heuristic.rs:69:22:69:32 | ... + ... | provenance | MaD:10 | | test_heuristic.rs:69:32:69:32 | 1 | test_heuristic.rs:69:22:69:32 | ... + ... | provenance | MaD:9 | -| test_heuristic.rs:70:23:70:35 | ... << ... | test_heuristic.rs:70:22:70:62 | ... ^ ... | provenance | MaD:15 | -| test_heuristic.rs:70:34:70:35 | 32 | test_heuristic.rs:70:23:70:35 | ... << ... | provenance | MaD:17 | -| test_heuristic.rs:70:34:70:35 | 32 | test_heuristic.rs:70:23:70:35 | ... << ... | provenance | MaD:16 | -| test_heuristic.rs:70:41:70:61 | ... & ... | test_heuristic.rs:70:22:70:62 | ... ^ ... | provenance | MaD:14 | -| test_heuristic.rs:70:41:70:61 | ... & ... | test_heuristic.rs:70:22:70:62 | ... ^ ... | provenance | MaD:13 | -| test_heuristic.rs:70:52:70:61 | 0xFFFFFFFF | test_heuristic.rs:70:41:70:61 | ... & ... | provenance | MaD:12 | -| test_heuristic.rs:70:52:70:61 | 0xFFFFFFFF | test_heuristic.rs:70:41:70:61 | ... & ... | provenance | MaD:11 | +| test_heuristic.rs:70:23:70:35 | ... << ... | test_heuristic.rs:70:22:70:62 | ... ^ ... | provenance | MaD:11 | +| test_heuristic.rs:70:34:70:35 | 32 | test_heuristic.rs:70:23:70:35 | ... << ... | provenance | MaD:12 | +| test_heuristic.rs:70:41:70:61 | ... & ... | test_heuristic.rs:70:22:70:62 | ... ^ ... | provenance | MaD:11 | +| test_heuristic.rs:70:52:70:61 | 0xFFFFFFFF | test_heuristic.rs:70:41:70:61 | ... & ... | provenance | MaD:10 | models | 1 | Sink: <_ as crypto_common::KeyInit>::new_from_slice; Argument[0]; credentials-key | | 2 | Sink: ::from; Argument[0]; credentials-key | @@ -98,22 +94,17 @@ models | 6 | Sink: ::from; Argument[0].Reference; credentials-key | | 7 | Source: core::mem::zeroed; ReturnValue.Element; constant-source | | 8 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; taint | -| 9 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint | -| 10 | Summary: <_ as core::ops::arith::Add>::add; Argument[0]; ReturnValue; taint | -| 11 | Summary: <_ as core::ops::bit::BitAnd>::bitand; Argument[0].Reference; ReturnValue; taint | -| 12 | Summary: <_ as core::ops::bit::BitAnd>::bitand; Argument[0]; ReturnValue; taint | -| 13 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[0].Reference; ReturnValue; taint | -| 14 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[0]; ReturnValue; taint | -| 15 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[self]; ReturnValue; taint | -| 16 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[0].Reference; ReturnValue; taint | -| 17 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[0]; ReturnValue; taint | -| 18 | Summary: ::from; Argument[0].Field[alloc::borrow::Cow::Owned(0)]; ReturnValue; value | -| 19 | Summary: ::from; Argument[0].Field[alloc::bstr::ByteString(0)]; ReturnValue; value | -| 20 | Summary: ::from; Argument[0].Field[alloc::collections::binary_heap::BinaryHeap::data]; ReturnValue; value | -| 21 | Summary: ::from; Argument[0].Field[alloc::string::String::vec]; ReturnValue; value | -| 22 | Summary: ::from; Argument[0]; ReturnValue; taint | -| 23 | Summary: ::from_slice; Argument[0].Reference; ReturnValue.Reference; value | -| 24 | Summary: alloc::vec::from_elem; Argument[0]; ReturnValue.Element; value | +| 9 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0]; ReturnValue; taint | +| 10 | Summary: <_ as core::ops::bit::BitAnd>::bitand; Argument[self,0]; ReturnValue; taint | +| 11 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[self,0]; ReturnValue; taint | +| 12 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[self,0]; ReturnValue; taint | +| 13 | Summary: ::from; Argument[0].Field[alloc::borrow::Cow::Owned(0)]; ReturnValue; value | +| 14 | Summary: ::from; Argument[0].Field[alloc::bstr::ByteString(0)]; ReturnValue; value | +| 15 | Summary: ::from; Argument[0].Field[alloc::collections::binary_heap::BinaryHeap::data]; ReturnValue; value | +| 16 | Summary: ::from; Argument[0].Field[alloc::string::String::vec]; ReturnValue; value | +| 17 | Summary: ::from; Argument[0]; ReturnValue; taint | +| 18 | Summary: ::from_slice; Argument[0].Reference; ReturnValue.Reference; value | +| 19 | Summary: alloc::vec::from_elem; Argument[0]; ReturnValue.Element; value | nodes | test_cipher.rs:18:9:18:14 | const1 [&ref] | semmle.label | const1 [&ref] | | test_cipher.rs:18:28:18:36 | &... [&ref] | semmle.label | &... [&ref] |