diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll index 7a77b7de5b6..553cf009a52 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll @@ -90,8 +90,6 @@ final class DataFlowCall extends TDataFlowCall { * Holds if `arg` is an argument of `call` at the position `pos`. */ predicate isArgumentForCall(Expr arg, Call call, RustDataFlow::ArgumentPosition pos) { - // TODO: Handle index expressions as calls in data flow. - not call instanceof IndexExpr and arg = pos.getArgument(call) } @@ -261,6 +259,30 @@ private module Aliases { class LambdaCallKindAlias = LambdaCallKind; } +/** + * Index assignments like `a[i] = rhs` are treated as `*a.index_mut(i) = rhs`, + * so they should in principle be handled by `referenceAssignment`. + * + * However, this would require support for [generalized reverse flow][1], which + * is not yet implemented, so instead we simulate reverse flow where it would + * have applied via the model for `<_ as core::ops::index::IndexMut>::index_mut`. + * + * The same is the case for compound assignments like `a[i] += rhs`, which are + * treated as `(*a.index_mut(i)).add_assign(rhs)`. + * + * [1]: https://github.com/github/codeql/pull/18109 + */ +predicate indexAssignment( + AssignmentOperation assignment, IndexExpr index, Node rhs, PostUpdateNode base, Content c +) { + assignment.getLhs() = index and + rhs.asExpr() = assignment.getRhs() and + base.getPreUpdateNode().asExpr() = index.getBase() and + c instanceof ElementContent and + // simulate that the flow summary applies + not index.getResolvedTarget().fromSource() +} + module RustDataFlow implements InputSig { private import Aliases private import codeql.rust.dataflow.DataFlow @@ -360,6 +382,7 @@ module RustDataFlow implements InputSig { node instanceof ClosureParameterNode or node instanceof DerefBorrowNode or node instanceof DerefOutNode or + node instanceof IndexOutNode or node.asExpr() instanceof ParenExpr or nodeIsHidden(node.(PostUpdateNode).getPreUpdateNode()) } @@ -552,12 +575,6 @@ module RustDataFlow implements InputSig { access = c.(FieldContent).getAnAccess() ) or - exists(IndexExpr arr | - c instanceof ElementContent and - node1.asExpr() = arr.getBase() and - node2.asExpr() = arr - ) - or exists(ForExpr for | c instanceof ElementContent and node1.asExpr() = for.getIterable() and @@ -583,6 +600,12 @@ module RustDataFlow implements InputSig { node2.asExpr() = deref ) or + exists(IndexExpr index | + c instanceof ReferenceContent and + node1.(IndexOutNode).getIndexExpr() = index and + node2.asExpr() = index + ) + or // Read from function return exists(DataFlowCall call | lambdaCall(call, _, node1) and @@ -644,13 +667,27 @@ module RustDataFlow implements InputSig { } pragma[nomagic] - private predicate referenceAssignment(Node node1, Node node2, ReferenceContent c) { - exists(AssignmentExpr assignment, PrefixExpr deref | - assignment.getLhs() = deref and - deref.getOperatorName() = "*" and + private predicate referenceAssignment( + Node node1, Node node2, Expr e, boolean clears, ReferenceContent c + ) { + exists(AssignmentExpr assignment, Expr lhs | + assignment.getLhs() = lhs and node1.asExpr() = assignment.getRhs() and - node2.asExpr() = deref.getExpr() and exists(c) + | + lhs = + any(DerefExpr de | + de = node2.(DerefOutNode).getDerefExpr() and + e = de.getExpr() + ) and + clears = true + or + lhs = + any(IndexExpr ie | + ie = node2.(IndexOutNode).getIndexExpr() and + e = ie.getBase() and + clears = false + ) ) } @@ -694,14 +731,14 @@ module RustDataFlow implements InputSig { or fieldAssignment(node1, node2.(PostUpdateNode).getPreUpdateNode(), c) or - referenceAssignment(node1, node2.(PostUpdateNode).getPreUpdateNode(), c) + referenceAssignment(node1, node2.(PostUpdateNode).getPreUpdateNode(), _, _, c) or - exists(AssignmentExpr assignment, IndexExpr index | - c instanceof ElementContent and - assignment.getLhs() = index and - node1.asExpr() = assignment.getRhs() and - node2.(PostUpdateNode).getPreUpdateNode().asExpr() = index.getBase() - ) + indexAssignment(any(AssignmentExpr ae), _, node1, node2, c) + or + // Compund assignment like `a[i] += rhs` are modeled as a store step from `rhs` + // to `[post] a[i]`, followed by a taint step into `[post] a`. + indexAssignment(any(CompoundAssignmentExpr cae), + node2.(PostUpdateNode).getPreUpdateNode().asExpr(), node1, _, c) or referenceExprToExpr(node1, node2, c) or @@ -738,7 +775,7 @@ module RustDataFlow implements InputSig { predicate clearsContent(Node n, ContentSet cs) { fieldAssignment(_, n, cs.(SingletonContentSet).getContent()) or - referenceAssignment(_, n, cs.(SingletonContentSet).getContent()) + referenceAssignment(_, _, n.asExpr(), true, cs.(SingletonContentSet).getContent()) or FlowSummaryImpl::Private::Steps::summaryClearsContent(n.(FlowSummaryNode).getSummaryNode(), cs) or @@ -982,9 +1019,7 @@ private module Cached { newtype TDataFlowCall = TCall(Call call) { Stages::DataFlowStage::ref() and - call.hasEnclosingCfgScope() and - // TODO: Handle index expressions as calls in data flow. - not call instanceof IndexExpr + call.hasEnclosingCfgScope() } or TSummaryCall( FlowSummaryImpl::Public::SummarizedCallable c, FlowSummaryImpl::Private::SummaryNode receiver diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll b/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll index 1e4289afa3f..e70d7d414d0 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll @@ -350,7 +350,8 @@ final private class ExprOutNode extends ExprNode, OutNode { ExprOutNode() { exists(Call call | call = this.asExpr() and - not call instanceof DerefExpr // Handled by `DerefOutNode` + not call instanceof DerefExpr and // Handled by `DerefOutNode` + not call instanceof IndexExpr // Handled by `IndexOutNode` ) } @@ -387,6 +388,32 @@ class DerefOutNode extends OutNode, TDerefOutNode { override string toString() { result = de.toString() + " [pre-dereferenced]" } } +/** + * A node that represents the value of a `x[y]` expression _before_ implicit + * dereferencing: + * + * `x[y]` equivalent to `*x.index(y)`, and this node represents the + * `x.index(y)` part. + */ +class IndexOutNode extends OutNode, TIndexOutNode { + IndexExpr ie; + + IndexOutNode() { this = TIndexOutNode(ie, false) } + + IndexExpr getIndexExpr() { result = ie } + + override CfgScope getCfgScope() { result = ie.getEnclosingCfgScope() } + + override DataFlowCall getCall(ReturnKind kind) { + result.asCall() = ie and + kind = TNormalReturnKind() + } + + override Location getLocation() { result = ie.getLocation() } + + override string toString() { result = ie.toString() + " [pre-dereferenced]" } +} + final class SummaryOutNode extends FlowSummaryNode, OutNode { private DataFlowCall call; private ReturnKind kind_; @@ -476,6 +503,18 @@ class DerefOutPostUpdateNode extends PostUpdateNode, TDerefOutNode { override Location getLocation() { result = de.getLocation() } } +class IndexOutPostUpdateNode extends PostUpdateNode, TIndexOutNode { + IndexExpr ie; + + IndexOutPostUpdateNode() { this = TIndexOutNode(ie, true) } + + override IndexOutNode getPreUpdateNode() { result = TIndexOutNode(ie, false) } + + override CfgScope getCfgScope() { result = ie.getEnclosingCfgScope() } + + override Location getLocation() { result = ie.getLocation() } +} + final class SummaryPostUpdateNode extends FlowSummaryNode, PostUpdateNode { private FlowSummaryNode pre; @@ -514,7 +553,8 @@ newtype TNode = TExprPostUpdateNode(Expr e) { e.hasEnclosingCfgScope() and ( - isArgumentForCall(e, _, _) + isArgumentForCall(e, _, _) and + not (e = any(CompoundAssignmentExpr cae).getLhs() and e instanceof VariableAccess) or lambdaCallExpr(_, _, e) or @@ -526,7 +566,6 @@ newtype TNode = or e = [ - any(IndexExpr i).getBase(), // any(FieldExpr access).getContainer(), // any(TryExpr try).getExpr(), // any(AwaitExpr a).getExpr(), // @@ -542,6 +581,7 @@ newtype TNode = borrow = true } or TDerefOutNode(DerefExpr de, Boolean isPost) or + TIndexOutNode(IndexExpr ie, Boolean isPost) or TSsaNode(SsaImpl::DataFlowIntegration::SsaNode node) or TFlowSummaryNode(FlowSummaryImpl::Private::SummaryNode sn) { forall(AstNode n | n = sn.getSinkElement() or n = sn.getSourceElement() | diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/TaintTrackingImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/TaintTrackingImpl.qll index 544bed64730..38b455db4e0 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/TaintTrackingImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/TaintTrackingImpl.qll @@ -65,6 +65,9 @@ module RustTaintTracking implements InputSig { or succ.(Node::PostUpdateNode).getPreUpdateNode().asExpr() = getPostUpdateReverseStep(pred.(Node::PostUpdateNode).getPreUpdateNode().asExpr(), false) + or + indexAssignment(any(CompoundAssignmentExpr cae), + pred.(Node::PostUpdateNode).getPreUpdateNode().asExpr(), _, succ, _) ) or FlowSummaryImpl::Private::Steps::summaryLocalStep(pred.(Node::FlowSummaryNode).getSummaryNode(), diff --git a/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll index 4569a108cd8..37a2e4dacc0 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll @@ -676,12 +676,12 @@ module Impl { predicate isCapture() { this.getEnclosingCfgScope() != v.getEnclosingCfgScope() } } - /** Holds if `e` occurs in the LHS of an assignment or compound assignment. */ - private predicate assignmentExprDescendant(AssignmentExpr ae, Expr e) { - e = ae.getLhs() + /** Holds if `e` occurs in the LHS of an assignment operation. */ + predicate assignmentOperationDescendant(AssignmentOperation ao, Expr e) { + e = ao.getLhs() or exists(Expr mid | - assignmentExprDescendant(ae, mid) and + assignmentOperationDescendant(ao, mid) and getImmediateParentAdj(e) = mid and not mid instanceof DerefExpr and not mid instanceof FieldExpr and @@ -696,7 +696,7 @@ module Impl { cached VariableWriteAccess() { Cached::ref() and - assignmentExprDescendant(ae, this) + assignmentOperationDescendant(ae, this) } /** Gets the assignment expression that has this write access in the left-hand side. */ 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 eac7abec512..7cadcf8c8e5 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml @@ -6,6 +6,9 @@ extensions: # Builtin deref - ["<& as core::ops::deref::Deref>::deref", "Argument[self].Reference", "ReturnValue", "value", "manual"] - ["<&mut as core::ops::deref::Deref>::deref", "Argument[self].Reference", "ReturnValue", "value", "manual"] + # Index + - ["<_ as core::ops::index::Index>::index", "Argument[self].Reference.Element", "ReturnValue.Reference", "value", "manual"] + - ["<_ as core::ops::index::IndexMut>::index_mut", "Argument[self].Reference.Element", "ReturnValue.Reference", "value", "manual"] # Arithmetic - ["<_ as core::ops::arith::Add>::add", "Argument[self]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::arith::Add>::add", "Argument[0]", "ReturnValue", "taint", "manual"] diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index f121e8c3e6f..e4c8413b142 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -9,6 +9,7 @@ private import TypeMention private import typeinference.FunctionType private import typeinference.FunctionOverloading as FunctionOverloading private import typeinference.BlanketImplementation as BlanketImplementation +private import codeql.rust.elements.internal.VariableImpl::Impl as VariableImpl private import codeql.rust.internal.CachedStages private import codeql.typeinference.internal.TypeInference private import codeql.rust.frameworks.stdlib.Stdlib @@ -672,7 +673,7 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat /** * Holds if `child` is a child of `parent`, and the Rust compiler applies [least - * upper bound (LUB) coercion](1) to infer the type of `parent` from the type of + * upper bound (LUB) coercion][1] to infer the type of `parent` from the type of * `child`. * * In this case, we want type information to only flow from `child` to `parent`, @@ -1645,9 +1646,14 @@ private module MethodResolution { } private class MethodCallIndexExpr extends MethodCall instanceof IndexExpr { + private predicate isInMutableContext() { + // todo: does not handle all cases yet + VariableImpl::assignmentOperationDescendant(_, this) + } + pragma[nomagic] override predicate hasNameAndArity(string name, int arity) { - name = "index" and + (if this.isInMutableContext() then name = "index_mut" else name = "index") and arity = 1 } @@ -1661,7 +1667,11 @@ private module MethodResolution { override predicate supportsAutoDerefAndBorrow() { any() } - override Trait getTrait() { result.getCanonicalPath() = "core::ops::index::Index" } + override Trait getTrait() { + if this.isInMutableContext() + then result.getCanonicalPath() = "core::ops::index::IndexMut" + else result.getCanonicalPath() = "core::ops::index::Index" + } } private class MethodCallCallExpr extends MethodCall instanceof CallExpr { 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 6e9604d5682..f5162557185 100644 --- a/rust/ql/test/library-tests/dataflow/collections/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/collections/inline-flow.expected @@ -1,14 +1,22 @@ models | 1 | Summary: <& as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value | +| 2 | 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 | | | main.rs:16:13:16:15 | arr [element] | main.rs:17:14:17:16 | arr [element] | provenance | | +| 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 | | -| main.rs:20:13:20:19 | mut arr | main.rs:21:14:21:19 | arr[0] | provenance | | +| main.rs:17:14:17:16 | arr [element] | main.rs:17:14:17:19 | arr[2] | provenance | MaD:2 | +| main.rs:18:15:18:17 | arr [element] | main.rs:18:15:18:26 | arr.index(...) [&ref] | provenance | MaD:2 | +| 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:2 | +| main.rs:22:15:22:17 | arr | main.rs:22:15:22:26 | arr.index(...) [&ref] | provenance | MaD:2 | +| 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 | | | main.rs:25:13:25:15 | arr [element] | main.rs:26:18:26:20 | arr [element] | provenance | | @@ -20,17 +28,25 @@ 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 | | +| main.rs:38:14:38:16 | arr [element] | main.rs:38:14:38:19 | arr[0] | provenance | MaD:2 | | main.rs:63:18:63:22 | SelfParam [&ref, S] | main.rs:63:56:65:9 | { ... } [&ref, S] | provenance | | | 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 | | | main.rs:83:13:83:13 | s [S] | main.rs:85:16:85:16 | s [S] | provenance | | | main.rs:83:17:83:20 | S(...) [S] | main.rs:83:13:83:13 | s [S] | provenance | | | main.rs:83:19:83:19 | s | main.rs:83:17:83:20 | S(...) [S] | provenance | | +| main.rs:84:14:84:14 | s [S] | main.rs:63:18:63:22 | SelfParam [&ref, S] | provenance | | +| main.rs:84:14:84:14 | s [S] | main.rs:84:14:84:17 | s[0] [S] | provenance | | +| main.rs:84:14:84:17 | s[0] [S] | main.rs:84:14:84:19 | ... .0 | provenance | | | main.rs:85:15:85:25 | * ... [S] | main.rs:85:14:85:28 | ... .0 | provenance | | | main.rs:85:16:85:16 | s [S] | main.rs:63:18:63:22 | SelfParam [&ref, S] | provenance | | | main.rs:85:16:85:16 | s [S] | main.rs:85:16:85:25 | s.index(...) [&ref, S] | provenance | | | main.rs:85:16:85:25 | s.index(...) [&ref, S] | main.rs:85:15:85:25 | * ... [S] | provenance | MaD:1 | +| main.rs:89:9:89:9 | [post] s [S] | main.rs:90:14:90:14 | s [S] | provenance | | +| main.rs:89:16:89:27 | S(...) [S] | main.rs:89:9:89:9 | [post] s [S] | provenance | | +| main.rs:89:18:89:26 | source(...) | main.rs:89:16:89:27 | S(...) [S] | provenance | | +| main.rs:90:14:90:14 | s [S] | main.rs:90:14:90:16 | s.0 | provenance | | | main.rs:94:10:94:10 | [post] s [S] | main.rs:95:14:95:14 | s [S] | provenance | | | main.rs:94:10:94:23 | [post] s.index_mut(...) [&ref, S] | main.rs:94:10:94:10 | [post] s [S] | provenance | | | main.rs:94:27:94:38 | S(...) [S] | main.rs:94:10:94:23 | [post] s.index_mut(...) [&ref, S] | provenance | | @@ -44,9 +60,16 @@ nodes | main.rs:16:20:16:20 | s | semmle.label | s | | main.rs:17:14:17:16 | arr [element] | semmle.label | arr [element] | | main.rs:17:14:17:19 | arr[2] | semmle.label | arr[2] | +| main.rs:18:14:18:26 | * ... | semmle.label | * ... | +| main.rs:18:15:18:17 | arr [element] | semmle.label | arr [element] | +| main.rs:18:15:18:26 | arr.index(...) [&ref] | semmle.label | arr.index(...) [&ref] | | main.rs:20:13:20:19 | mut arr | semmle.label | mut arr | | main.rs:20:23:20:33 | source(...) | semmle.label | source(...) | +| main.rs:21:14:21:16 | arr | semmle.label | arr | | main.rs:21:14:21:19 | arr[0] | semmle.label | arr[0] | +| main.rs:22:14:22:26 | * ... | semmle.label | * ... | +| main.rs:22:15:22:17 | arr | semmle.label | arr | +| main.rs:22:15:22:26 | arr.index(...) [&ref] | semmle.label | arr.index(...) [&ref] | | main.rs:24:13:24:13 | s | semmle.label | s | | main.rs:24:17:24:25 | source(...) | semmle.label | source(...) | | main.rs:25:13:25:15 | arr [element] | semmle.label | arr [element] | @@ -69,10 +92,18 @@ nodes | main.rs:83:13:83:13 | s [S] | semmle.label | s [S] | | main.rs:83:17:83:20 | S(...) [S] | semmle.label | S(...) [S] | | main.rs:83:19:83:19 | s | semmle.label | s | +| main.rs:84:14:84:14 | s [S] | semmle.label | s [S] | +| main.rs:84:14:84:17 | s[0] [S] | semmle.label | s[0] [S] | +| main.rs:84:14:84:19 | ... .0 | semmle.label | ... .0 | | main.rs:85:14:85:28 | ... .0 | semmle.label | ... .0 | | main.rs:85:15:85:25 | * ... [S] | semmle.label | * ... [S] | | main.rs:85:16:85:16 | s [S] | semmle.label | s [S] | | main.rs:85:16:85:25 | s.index(...) [&ref, S] | semmle.label | s.index(...) [&ref, S] | +| main.rs:89:9:89:9 | [post] s [S] | semmle.label | [post] s [S] | +| main.rs:89:16:89:27 | S(...) [S] | semmle.label | S(...) [S] | +| main.rs:89:18:89:26 | source(...) | semmle.label | source(...) | +| main.rs:90:14:90:14 | s [S] | semmle.label | s [S] | +| main.rs:90:14:90:16 | s.0 | semmle.label | s.0 | | main.rs:94:10:94:10 | [post] s [S] | semmle.label | [post] s [S] | | main.rs:94:10:94:23 | [post] s.index_mut(...) [&ref, S] | semmle.label | [post] s.index_mut(...) [&ref, S] | | main.rs:94:27:94:38 | S(...) [S] | semmle.label | S(...) [S] | @@ -80,13 +111,18 @@ nodes | main.rs:95:14:95:14 | s [S] | semmle.label | s [S] | | main.rs:95:14:95:16 | s.0 | semmle.label | s.0 | subpaths +| main.rs:84:14:84:14 | s [S] | main.rs:63:18:63:22 | SelfParam [&ref, S] | main.rs:63:56:65:9 | { ... } [&ref, S] | main.rs:84:14:84:17 | s[0] [S] | | main.rs:85:16:85:16 | s [S] | main.rs:63:18:63:22 | SelfParam [&ref, S] | main.rs:63:56:65:9 | { ... } [&ref, S] | main.rs:85:16:85:25 | s.index(...) [&ref, S] | testFailures #select | main.rs:17:14:17:19 | arr[2] | main.rs:15:17:15:25 | source(...) | main.rs:17:14:17:19 | arr[2] | $@ | main.rs:15:17:15:25 | source(...) | source(...) | +| main.rs:18:14:18:26 | * ... | main.rs:15:17:15:25 | source(...) | main.rs:18:14:18:26 | * ... | $@ | main.rs:15:17:15:25 | source(...) | source(...) | | main.rs:21:14:21:19 | arr[0] | main.rs:20:23:20:33 | source(...) | main.rs:21:14:21:19 | arr[0] | $@ | main.rs:20:23:20:33 | source(...) | source(...) | +| main.rs:22:14:22:26 | * ... | main.rs:20:23:20:33 | source(...) | main.rs:22:14:22:26 | * ... | $@ | main.rs:20:23:20:33 | source(...) | source(...) | | main.rs:27:18:27:18 | x | main.rs:24:17:24:25 | source(...) | main.rs:27:18:27:18 | x | $@ | main.rs:24:17:24:25 | source(...) | source(...) | | main.rs:32:18:32:18 | x | main.rs:30:19:30:29 | source(...) | main.rs:32:18:32:18 | x | $@ | main.rs:30:19:30:29 | source(...) | source(...) | | main.rs:38:14:38:19 | arr[0] | main.rs:37:18:37:26 | source(...) | main.rs:38:14:38:19 | arr[0] | $@ | main.rs:37:18:37:26 | source(...) | source(...) | +| main.rs:84:14:84:19 | ... .0 | main.rs:82:17:82:25 | source(...) | main.rs:84:14:84:19 | ... .0 | $@ | main.rs:82:17:82:25 | source(...) | source(...) | | main.rs:85:14:85:28 | ... .0 | main.rs:82:17:82:25 | source(...) | main.rs:85:14:85:28 | ... .0 | $@ | main.rs:82:17:82:25 | source(...) | source(...) | +| main.rs:90:14:90:16 | s.0 | main.rs:89:18:89:26 | source(...) | main.rs:90:14:90:16 | s.0 | $@ | main.rs:89:18:89:26 | source(...) | source(...) | | main.rs:95:14:95:16 | s.0 | main.rs:94:29:94:37 | source(...) | main.rs:95:14:95:16 | s.0 | $@ | main.rs:94:29:94:37 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/collections/main.rs b/rust/ql/test/library-tests/dataflow/collections/main.rs index bfd3da8db05..60a8a9a9a9b 100644 --- a/rust/ql/test/library-tests/dataflow/collections/main.rs +++ b/rust/ql/test/library-tests/dataflow/collections/main.rs @@ -15,11 +15,11 @@ mod arrays { let s = source(0); let arr = [s; 5]; sink(arr[2]); // $ hasValueFlow=0 - sink(*arr.index(2)); // $ MISSING: hasValueFlow=0 + sink(*arr.index(2)); // $ hasValueFlow=0 let mut arr = source([1]); sink(arr[0]); // $ hasTaintFlow=1 - sink(*arr.index(0)); // $ MISSING: hasTaintFlow=1 + sink(*arr.index(0)); // $ hasTaintFlow=1 let s = source(2); let arr = [s]; @@ -81,13 +81,13 @@ mod indexers { pub fn f() { let s = source(0); let s = S(s); - sink(s[0].0); // $ MISSING: hasValueFlow=0 + sink(s[0].0); // $ hasValueFlow=0 sink((*s.index(0)).0); // $ hasValueFlow=0 let mut s = S(0); sink(s.0); s[0] = S(source(1)); - sink(s.0); // $ MISSING: hasValueFlow=1 + sink(s.0); // $ hasValueFlow=1 let mut s = S(0); sink(s.0); diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index 3cb59c14fbc..d607e5fe31c 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -905,24 +905,24 @@ readStep | main.rs:421:9:421:24 | C {...} | main.rs:384:9:384:20 | C | main.rs:421:22:421:22 | n | | main.rs:422:9:422:24 | D {...} | main.rs:385:9:385:20 | D | main.rs:422:22:422:22 | n | | main.rs:431:14:431:17 | [post] arr1 [borrowed] | file://:0:0:0:0 | &ref | main.rs:431:14:431:17 | [post] arr1 | -| main.rs:431:14:431:17 | arr1 | file://:0:0:0:0 | element | main.rs:431:14:431:20 | arr1[2] | +| main.rs:431:14:431:20 | arr1[2] [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:431:14:431:20 | arr1[2] | | main.rs:435:14:435:17 | [post] arr2 [borrowed] | file://:0:0:0:0 | &ref | main.rs:435:14:435:17 | [post] arr2 | -| main.rs:435:14:435:17 | arr2 | file://:0:0:0:0 | element | main.rs:435:14:435:20 | arr2[4] | +| main.rs:435:14:435:20 | arr2[4] [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:435:14:435:20 | arr2[4] | | main.rs:439:14:439:17 | [post] arr3 [borrowed] | file://:0:0:0:0 | &ref | main.rs:439:14:439:17 | [post] arr3 | -| main.rs:439:14:439:17 | arr3 | file://:0:0:0:0 | element | main.rs:439:14:439:20 | arr3[2] | +| main.rs:439:14:439:20 | arr3[2] [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:439:14:439:20 | arr3[2] | | main.rs:445:15:445:18 | arr1 | file://:0:0:0:0 | element | main.rs:445:9:445:10 | n1 | | main.rs:450:15:450:18 | arr2 | file://:0:0:0:0 | element | main.rs:450:9:450:10 | n2 | | main.rs:458:9:458:17 | SlicePat | file://:0:0:0:0 | element | main.rs:458:10:458:10 | a | | main.rs:458:9:458:17 | SlicePat | file://:0:0:0:0 | element | main.rs:458:13:458:13 | b | | main.rs:458:9:458:17 | SlicePat | file://:0:0:0:0 | element | main.rs:458:16:458:16 | c | | main.rs:468:10:468:16 | [post] mut_arr [borrowed] | file://:0:0:0:0 | &ref | main.rs:468:10:468:16 | [post] mut_arr | -| main.rs:468:10:468:16 | mut_arr | file://:0:0:0:0 | element | main.rs:468:10:468:19 | mut_arr[1] | +| main.rs:468:10:468:19 | mut_arr[1] [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:468:10:468:19 | mut_arr[1] | | main.rs:470:5:470:11 | [post] mut_arr [borrowed] | file://:0:0:0:0 | &ref | main.rs:470:5:470:11 | [post] mut_arr | -| main.rs:470:5:470:11 | mut_arr | file://:0:0:0:0 | element | main.rs:470:5:470:14 | mut_arr[1] | +| main.rs:470:5:470:14 | mut_arr[1] [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:470:5:470:14 | mut_arr[1] | | main.rs:471:13:471:19 | [post] mut_arr [borrowed] | file://:0:0:0:0 | &ref | main.rs:471:13:471:19 | [post] mut_arr | -| main.rs:471:13:471:19 | mut_arr | file://:0:0:0:0 | element | main.rs:471:13:471:22 | mut_arr[1] | +| main.rs:471:13:471:22 | mut_arr[1] [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:471:13:471:22 | mut_arr[1] | | main.rs:473:10:473:16 | [post] mut_arr [borrowed] | file://:0:0:0:0 | &ref | main.rs:473:10:473:16 | [post] mut_arr | -| main.rs:473:10:473:16 | mut_arr | file://:0:0:0:0 | element | main.rs:473:10:473:19 | mut_arr[0] | +| main.rs:473:10:473:19 | mut_arr[0] [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:473:10:473:19 | mut_arr[0] | | main.rs:479:24:479:33 | [post] source(...) [borrowed] | file://:0:0:0:0 | &ref | main.rs:479:24:479:33 | [post] source(...) | | main.rs:480:9:480:20 | TuplePat | file://:0:0:0:0 | tuple.0 | main.rs:480:10:480:13 | cond | | main.rs:480:9:480:20 | TuplePat | file://:0:0:0:0 | tuple.1 | main.rs:480:16:480:19 | name | @@ -933,7 +933,7 @@ readStep | main.rs:483:18:483:18 | [post] n [borrowed] | file://:0:0:0:0 | &ref | main.rs:483:18:483:18 | [post] n | | main.rs:506:13:506:13 | [post] a [borrowed] | file://:0:0:0:0 | &ref | main.rs:506:13:506:13 | [post] a | | main.rs:519:10:519:11 | [post] vs [borrowed] | file://:0:0:0:0 | &ref | main.rs:519:10:519:11 | [post] vs | -| main.rs:519:10:519:11 | vs | file://:0:0:0:0 | element | main.rs:519:10:519:14 | vs[0] | +| main.rs:519:10:519:14 | vs[0] [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:519:10:519:14 | vs[0] | | main.rs:520:10:520:35 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:520:10:520:35 | * ... | | main.rs:520:11:520:35 | [post] ... .unwrap() [borrowed] | file://:0:0:0:0 | &ref | main.rs:520:11:520:35 | [post] ... .unwrap() | | main.rs:521:10:521:35 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:521:10:521:35 | * ... | @@ -949,7 +949,7 @@ readStep | main.rs:536:34:536:34 | [post] x [borrowed] | file://:0:0:0:0 | &ref | main.rs:536:34:536:34 | [post] x | | main.rs:538:14:538:27 | vs.into_iter() | file://:0:0:0:0 | element | main.rs:538:9:538:9 | v | | main.rs:544:10:544:15 | [post] vs_mut [borrowed] | file://:0:0:0:0 | &ref | main.rs:544:10:544:15 | [post] vs_mut | -| main.rs:544:10:544:15 | vs_mut | file://:0:0:0:0 | element | main.rs:544:10:544:18 | vs_mut[0] | +| main.rs:544:10:544:18 | vs_mut[0] [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:544:10:544:18 | vs_mut[0] | | main.rs:545:10:545:39 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:545:10:545:39 | * ... | | main.rs:545:11:545:39 | [post] ... .unwrap() [borrowed] | file://:0:0:0:0 | &ref | main.rs:545:11:545:39 | [post] ... .unwrap() | | main.rs:546:10:546:39 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:546:10:546:39 | * ... | @@ -1042,6 +1042,7 @@ storeStep | main.rs:467:30:467:30 | 3 | file://:0:0:0:0 | element | main.rs:467:23:467:31 | [...] | | main.rs:468:10:468:16 | mut_arr | file://:0:0:0:0 | &ref | main.rs:468:10:468:16 | mut_arr [borrowed] | | main.rs:470:5:470:11 | mut_arr | file://:0:0:0:0 | &ref | main.rs:470:5:470:11 | mut_arr [borrowed] | +| main.rs:470:18:470:27 | source(...) | file://:0:0:0:0 | &ref | main.rs:470:5:470:14 | [post] mut_arr[1] [pre-dereferenced] | | main.rs:470:18:470:27 | source(...) | file://:0:0:0:0 | element | main.rs:470:5:470:11 | [post] mut_arr | | main.rs:471:13:471:19 | mut_arr | file://:0:0:0:0 | &ref | main.rs:471:13:471:19 | mut_arr [borrowed] | | main.rs:473:10:473:16 | mut_arr | file://:0:0:0:0 | &ref | main.rs:473:10:473:16 | mut_arr [borrowed] | diff --git a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected index 7c7d3d8e260..61c4771068b 100644 --- a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected @@ -2,20 +2,21 @@ models | 1 | Summary: <& as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value | | 2 | Summary: <_ as alloc::string::ToString>::to_string; Argument[self].Reference; ReturnValue; taint | | 3 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; taint | -| 4 | Summary: ::deref; Argument[self].Reference.Field[alloc::boxed::Box(0)]; ReturnValue.Reference; value | -| 5 | Summary: ::new; Argument[0]; ReturnValue.Field[alloc::boxed::Box(0)]; value | -| 6 | Summary: ::from; Argument[0]; ReturnValue; taint | -| 7 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 8 | Summary: ::unwrap_or; Argument[0]; ReturnValue; value | -| 9 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 10 | Summary: ::unwrap_or_else; Argument[0].ReturnValue; ReturnValue; value | -| 11 | Summary: ::unwrap_or_else; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 12 | Summary: ::err; Argument[self].Field[core::result::Result::Err(0)]; ReturnValue.Field[core::option::Option::Some(0)]; value | -| 13 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 14 | Summary: ::expect_err; Argument[self].Field[core::result::Result::Err(0)]; ReturnValue; value | -| 15 | Summary: ::ok; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue.Field[core::option::Option::Some(0)]; value | -| 16 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 17 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 4 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 5 | Summary: ::deref; Argument[self].Reference.Field[alloc::boxed::Box(0)]; ReturnValue.Reference; value | +| 6 | Summary: ::new; Argument[0]; ReturnValue.Field[alloc::boxed::Box(0)]; value | +| 7 | Summary: ::from; Argument[0]; ReturnValue; taint | +| 8 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 9 | Summary: ::unwrap_or; Argument[0]; ReturnValue; value | +| 10 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 11 | Summary: ::unwrap_or_else; Argument[0].ReturnValue; ReturnValue; value | +| 12 | Summary: ::unwrap_or_else; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 13 | Summary: ::err; Argument[self].Field[core::result::Result::Err(0)]; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 14 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 15 | Summary: ::expect_err; Argument[self].Field[core::result::Result::Err(0)]; ReturnValue; value | +| 16 | Summary: ::ok; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 17 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 18 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | edges | main.rs:23:9:23:9 | s | main.rs:24:10:24:10 | s | provenance | | | main.rs:23:9:23:9 | s | main.rs:26:12:26:12 | x | provenance | | @@ -43,8 +44,8 @@ edges | main.rs:82:5:82:5 | l | main.rs:83:10:83:10 | l | provenance | | | main.rs:115:9:115:9 | i [Box(0)] | main.rs:116:11:116:11 | i [Box(0)] | provenance | | | main.rs:115:13:115:31 | ...::new(...) [Box(0)] | main.rs:115:9:115:9 | i [Box(0)] | provenance | | -| main.rs:115:22:115:30 | source(...) | main.rs:115:13:115:31 | ...::new(...) [Box(0)] | provenance | MaD:5 | -| main.rs:116:11:116:11 | i [Box(0)] | main.rs:116:10:116:11 | * ... | provenance | MaD:4 | +| main.rs:115:22:115:30 | source(...) | main.rs:115:13:115:31 | ...::new(...) [Box(0)] | provenance | MaD:6 | +| main.rs:116:11:116:11 | i [Box(0)] | main.rs:116:10:116:11 | * ... | provenance | MaD:5 | | main.rs:123:9:123:9 | a [tuple.0] | main.rs:124:10:124:10 | a [tuple.0] | provenance | | | main.rs:123:13:123:26 | TupleExpr [tuple.0] | main.rs:123:9:123:9 | a [tuple.0] | provenance | | | main.rs:123:14:123:22 | source(...) | main.rs:123:13:123:26 | TupleExpr [tuple.0] | provenance | | @@ -127,17 +128,17 @@ edges | main.rs:278:9:278:10 | s1 [Some] | main.rs:279:10:279:11 | s1 [Some] | provenance | | | main.rs:278:14:278:29 | Some(...) [Some] | main.rs:278:9:278:10 | s1 [Some] | provenance | | | main.rs:278:19:278:28 | source(...) | main.rs:278:14:278:29 | Some(...) [Some] | provenance | | -| main.rs:279:10:279:11 | s1 [Some] | main.rs:279:10:279:20 | s1.unwrap() | provenance | MaD:7 | +| main.rs:279:10:279:11 | s1 [Some] | main.rs:279:10:279:20 | s1.unwrap() | provenance | MaD:8 | | main.rs:283:9:283:10 | s1 [Some] | main.rs:284:10:284:11 | s1 [Some] | provenance | | | main.rs:283:14:283:29 | Some(...) [Some] | main.rs:283:9:283:10 | s1 [Some] | provenance | | | main.rs:283:19:283:28 | source(...) | main.rs:283:14:283:29 | Some(...) [Some] | provenance | | -| main.rs:284:10:284:11 | s1 [Some] | main.rs:284:10:284:24 | s1.unwrap_or(...) | provenance | MaD:9 | -| main.rs:287:23:287:32 | source(...) | main.rs:287:10:287:33 | s2.unwrap_or(...) | provenance | MaD:8 | +| main.rs:284:10:284:11 | s1 [Some] | main.rs:284:10:284:24 | s1.unwrap_or(...) | provenance | MaD:10 | +| main.rs:287:23:287:32 | source(...) | main.rs:287:10:287:33 | s2.unwrap_or(...) | provenance | MaD:9 | | main.rs:291:9:291:10 | s1 [Some] | main.rs:292:10:292:11 | s1 [Some] | provenance | | | main.rs:291:14:291:29 | Some(...) [Some] | main.rs:291:9:291:10 | s1 [Some] | provenance | | | main.rs:291:19:291:28 | source(...) | main.rs:291:14:291:29 | Some(...) [Some] | provenance | | -| main.rs:292:10:292:11 | s1 [Some] | main.rs:292:10:292:32 | s1.unwrap_or_else(...) | provenance | MaD:11 | -| main.rs:295:31:295:40 | source(...) | main.rs:295:10:295:41 | s2.unwrap_or_else(...) | provenance | MaD:10 | +| main.rs:292:10:292:11 | s1 [Some] | main.rs:292:10:292:32 | s1.unwrap_or_else(...) | provenance | MaD:12 | +| main.rs:295:31:295:40 | source(...) | main.rs:295:10:295:41 | s2.unwrap_or_else(...) | provenance | MaD:11 | | main.rs:299:9:299:10 | s1 [Some] | main.rs:301:14:301:15 | s1 [Some] | provenance | | | main.rs:299:14:299:29 | Some(...) [Some] | main.rs:299:9:299:10 | s1 [Some] | provenance | | | main.rs:299:19:299:28 | source(...) | main.rs:299:14:299:29 | Some(...) [Some] | provenance | | @@ -148,16 +149,16 @@ edges | main.rs:308:32:308:45 | Ok(...) [Ok] | main.rs:308:9:308:10 | r1 [Ok] | provenance | | | main.rs:308:35:308:44 | source(...) | main.rs:308:32:308:45 | Ok(...) [Ok] | provenance | | | main.rs:309:9:309:11 | o1a [Some] | main.rs:311:10:311:12 | o1a [Some] | provenance | | -| main.rs:309:28:309:29 | r1 [Ok] | main.rs:309:28:309:34 | r1.ok() [Some] | provenance | MaD:15 | +| main.rs:309:28:309:29 | r1 [Ok] | main.rs:309:28:309:34 | r1.ok() [Some] | provenance | MaD:16 | | main.rs:309:28:309:34 | r1.ok() [Some] | main.rs:309:9:309:11 | o1a [Some] | provenance | | -| main.rs:311:10:311:12 | o1a [Some] | main.rs:311:10:311:21 | o1a.unwrap() | provenance | MaD:7 | +| main.rs:311:10:311:12 | o1a [Some] | main.rs:311:10:311:21 | o1a.unwrap() | provenance | MaD:8 | | main.rs:314:9:314:10 | r2 [Err] | main.rs:316:28:316:29 | r2 [Err] | provenance | | | main.rs:314:32:314:46 | Err(...) [Err] | main.rs:314:9:314:10 | r2 [Err] | provenance | | | main.rs:314:36:314:45 | source(...) | main.rs:314:32:314:46 | Err(...) [Err] | provenance | | | main.rs:316:9:316:11 | o2b [Some] | main.rs:318:10:318:12 | o2b [Some] | provenance | | -| main.rs:316:28:316:29 | r2 [Err] | main.rs:316:28:316:35 | r2.err() [Some] | provenance | MaD:12 | +| main.rs:316:28:316:29 | r2 [Err] | main.rs:316:28:316:35 | r2.err() [Some] | provenance | MaD:13 | | main.rs:316:28:316:35 | r2.err() [Some] | main.rs:316:9:316:11 | o2b [Some] | provenance | | -| main.rs:318:10:318:12 | o2b [Some] | main.rs:318:10:318:21 | o2b.unwrap() | provenance | MaD:7 | +| main.rs:318:10:318:12 | o2b [Some] | main.rs:318:10:318:21 | o2b.unwrap() | provenance | MaD:8 | | main.rs:322:9:322:10 | s1 [Ok] | main.rs:325:14:325:15 | s1 [Ok] | provenance | | | main.rs:322:32:322:45 | Ok(...) [Ok] | main.rs:322:9:322:10 | s1 [Ok] | provenance | | | main.rs:322:35:322:44 | source(...) | main.rs:322:32:322:45 | Ok(...) [Ok] | provenance | | @@ -167,11 +168,11 @@ edges | main.rs:335:9:335:10 | s1 [Ok] | main.rs:336:10:336:11 | s1 [Ok] | provenance | | | main.rs:335:32:335:45 | Ok(...) [Ok] | main.rs:335:9:335:10 | s1 [Ok] | provenance | | | main.rs:335:35:335:44 | source(...) | main.rs:335:32:335:45 | Ok(...) [Ok] | provenance | | -| main.rs:336:10:336:11 | s1 [Ok] | main.rs:336:10:336:22 | s1.expect(...) | provenance | MaD:13 | +| main.rs:336:10:336:11 | s1 [Ok] | main.rs:336:10:336:22 | s1.expect(...) | provenance | MaD:14 | | main.rs:339:9:339:10 | s2 [Err] | main.rs:341:10:341:11 | s2 [Err] | provenance | | | main.rs:339:32:339:46 | Err(...) [Err] | main.rs:339:9:339:10 | s2 [Err] | provenance | | | main.rs:339:36:339:45 | source(...) | main.rs:339:32:339:46 | Err(...) [Err] | provenance | | -| main.rs:341:10:341:11 | s2 [Err] | main.rs:341:10:341:26 | s2.expect_err(...) | provenance | MaD:14 | +| main.rs:341:10:341:11 | s2 [Err] | main.rs:341:10:341:26 | s2.expect_err(...) | provenance | MaD:15 | | main.rs:350:9:350:10 | s1 [A] | main.rs:352:11:352:12 | s1 [A] | provenance | | | main.rs:350:14:350:39 | ...::A(...) [A] | main.rs:350:9:350:10 | s1 [A] | provenance | | | main.rs:350:29:350:38 | source(...) | main.rs:350:14:350:39 | ...::A(...) [A] | provenance | | @@ -220,13 +221,13 @@ edges | main.rs:430:16:430:33 | [...] [element] | main.rs:430:9:430:12 | arr1 [element] | provenance | | | main.rs:430:23:430:32 | source(...) | main.rs:430:16:430:33 | [...] [element] | provenance | | | main.rs:431:9:431:10 | n1 | main.rs:432:10:432:11 | n1 | provenance | | -| main.rs:431:14:431:17 | arr1 [element] | main.rs:431:14:431:20 | arr1[2] | provenance | | +| main.rs:431:14:431:17 | arr1 [element] | main.rs:431:14:431:20 | arr1[2] | provenance | MaD:4 | | main.rs:431:14:431:20 | arr1[2] | main.rs:431:9:431:10 | n1 | provenance | | | main.rs:434:9:434:12 | arr2 [element] | main.rs:435:14:435:17 | arr2 [element] | provenance | | | main.rs:434:16:434:31 | [...; 10] [element] | main.rs:434:9:434:12 | arr2 [element] | provenance | | | main.rs:434:17:434:26 | source(...) | main.rs:434:16:434:31 | [...; 10] [element] | provenance | | | main.rs:435:9:435:10 | n2 | main.rs:436:10:436:11 | n2 | provenance | | -| main.rs:435:14:435:17 | arr2 [element] | main.rs:435:14:435:20 | arr2[4] | provenance | | +| main.rs:435:14:435:17 | arr2 [element] | main.rs:435:14:435:20 | arr2[4] | provenance | MaD:4 | | main.rs:435:14:435:20 | arr2[4] | main.rs:435:9:435:10 | n2 | provenance | | | main.rs:444:9:444:12 | arr1 [element] | main.rs:445:15:445:18 | arr1 [element] | provenance | | | main.rs:444:16:444:33 | [...] [element] | main.rs:444:9:444:12 | arr1 [element] | provenance | | @@ -247,9 +248,9 @@ edges | main.rs:470:5:470:11 | [post] mut_arr [element] | main.rs:473:10:473:16 | mut_arr [element] | provenance | | | main.rs:470:18:470:27 | source(...) | main.rs:470:5:470:11 | [post] mut_arr [element] | provenance | | | main.rs:471:9:471:9 | d | main.rs:472:10:472:10 | d | provenance | | -| main.rs:471:13:471:19 | mut_arr [element] | main.rs:471:13:471:22 | mut_arr[1] | provenance | | +| main.rs:471:13:471:19 | mut_arr [element] | main.rs:471:13:471:22 | mut_arr[1] | provenance | MaD:4 | | main.rs:471:13:471:22 | mut_arr[1] | main.rs:471:9:471:9 | d | provenance | | -| main.rs:473:10:473:16 | mut_arr [element] | main.rs:473:10:473:19 | mut_arr[0] | provenance | | +| main.rs:473:10:473:16 | mut_arr [element] | main.rs:473:10:473:19 | mut_arr[0] | provenance | MaD:4 | | main.rs:496:9:496:9 | s | main.rs:497:10:497:10 | s | provenance | | | main.rs:496:25:496:26 | source(...) | main.rs:496:9:496:9 | s | provenance | | | main.rs:505:9:505:9 | a | main.rs:506:13:506:13 | a | provenance | | @@ -261,24 +262,24 @@ edges | main.rs:506:13:506:13 | a | main.rs:506:13:506:25 | a.to_string() | provenance | MaD:2 | | main.rs:506:13:506:25 | a.to_string() | main.rs:506:9:506:9 | b | provenance | | | main.rs:507:9:507:9 | c | main.rs:512:10:512:10 | c | provenance | | -| main.rs:507:13:507:13 | b | main.rs:507:13:507:28 | b.parse() [Ok] | provenance | MaD:17 | -| main.rs:507:13:507:28 | b.parse() [Ok] | main.rs:507:13:507:37 | ... .unwrap() | provenance | MaD:16 | +| main.rs:507:13:507:13 | b | main.rs:507:13:507:28 | b.parse() [Ok] | provenance | MaD:18 | +| main.rs:507:13:507:28 | b.parse() [Ok] | main.rs:507:13:507:37 | ... .unwrap() | provenance | MaD:17 | | main.rs:507:13:507:37 | ... .unwrap() | main.rs:507:9:507:9 | c | provenance | | | main.rs:508:9:508:9 | d | main.rs:513:10:513:10 | d | provenance | | -| main.rs:508:18:508:18 | b | main.rs:508:18:508:26 | b.parse() [Ok] | provenance | MaD:17 | -| main.rs:508:18:508:26 | b.parse() [Ok] | main.rs:508:18:508:35 | ... .unwrap() | provenance | MaD:16 | +| main.rs:508:18:508:18 | b | main.rs:508:18:508:26 | b.parse() [Ok] | provenance | MaD:18 | +| main.rs:508:18:508:26 | b.parse() [Ok] | main.rs:508:18:508:35 | ... .unwrap() | provenance | MaD:17 | | main.rs:508:18:508:35 | ... .unwrap() | main.rs:508:9:508:9 | d | provenance | | | main.rs:517:9:517:10 | vs [element] | main.rs:519:10:519:11 | vs [element] | provenance | | | main.rs:517:9:517:10 | vs [element] | main.rs:523:14:523:15 | vs [element] | provenance | | | main.rs:517:14:517:34 | [...] [element] | main.rs:517:9:517:10 | vs [element] | provenance | | | main.rs:517:15:517:24 | source(...) | main.rs:517:14:517:34 | [...] [element] | provenance | | -| main.rs:519:10:519:11 | vs [element] | main.rs:519:10:519:14 | vs[0] | provenance | | +| main.rs:519:10:519:11 | vs [element] | main.rs:519:10:519:14 | vs[0] | provenance | MaD:4 | | main.rs:523:9:523:9 | v | main.rs:524:14:524:14 | v | provenance | | | main.rs:523:14:523:15 | vs [element] | main.rs:523:9:523:9 | v | provenance | | | main.rs:542:9:542:18 | mut vs_mut [element] | main.rs:544:10:544:15 | vs_mut [element] | provenance | | | main.rs:542:22:542:42 | [...] [element] | main.rs:542:9:542:18 | mut vs_mut [element] | provenance | | | main.rs:542:23:542:32 | source(...) | main.rs:542:22:542:42 | [...] [element] | provenance | | -| main.rs:544:10:544:15 | vs_mut [element] | main.rs:544:10:544:18 | vs_mut[0] | provenance | | +| main.rs:544:10:544:15 | vs_mut [element] | main.rs:544:10:544:18 | vs_mut[0] | provenance | MaD:4 | | main.rs:554:9:554:9 | a | main.rs:559:10:559:10 | a | provenance | | | main.rs:554:13:554:22 | source(...) | main.rs:554:9:554:9 | a | provenance | | | main.rs:555:9:555:9 | b | main.rs:560:15:560:15 | b | provenance | | @@ -297,7 +298,7 @@ edges | main.rs:572:9:572:9 | b | main.rs:576:20:576:20 | b | provenance | | | main.rs:572:18:572:27 | source(...) | main.rs:572:9:572:9 | b | provenance | | | main.rs:576:20:576:20 | b | main.rs:576:10:576:21 | ...::from(...) | provenance | MaD:3 | -| main.rs:576:20:576:20 | b | main.rs:576:10:576:21 | ...::from(...) | provenance | MaD:6 | +| main.rs:576:20:576:20 | b | main.rs:576:10:576:21 | ...::from(...) | provenance | MaD:7 | nodes | main.rs:19:10:19:18 | source(...) | semmle.label | source(...) | | main.rs:23:9:23:9 | s | semmle.label | s | diff --git a/rust/ql/test/library-tests/dataflow/models/models.expected b/rust/ql/test/library-tests/dataflow/models/models.expected index 955b0b81b44..90133f0e6a9 100644 --- a/rust/ql/test/library-tests/dataflow/models/models.expected +++ b/rust/ql/test/library-tests/dataflow/models/models.expected @@ -9,20 +9,21 @@ models | 8 | Source: main::source_into_function::pass_source; Argument[1].Parameter[0]; test-source | | 9 | Summary: <_ as core::cmp::Ord>::max; Argument[self]; ReturnValue; value | | 10 | Summary: <_ as core::cmp::PartialOrd>::lt; Argument[self].Reference; ReturnValue; taint | -| 11 | Summary: main::apply; Argument[0]; Argument[1].Parameter[0]; value | -| 12 | Summary: main::apply; Argument[1].ReturnValue; ReturnValue; value | -| 13 | Summary: main::coerce; Argument[0]; ReturnValue; taint | -| 14 | Summary: main::get_array_element; Argument[0].Element; ReturnValue; value | -| 15 | Summary: main::get_async_number; Argument[0]; ReturnValue.Future; value | -| 16 | Summary: main::get_struct_field; Argument[0].Field[main::MyStruct::field1]; ReturnValue; value | -| 17 | Summary: main::get_tuple_element; Argument[0].Field[0]; ReturnValue; value | -| 18 | Summary: main::get_var_field; Argument[0].Field[main::MyFieldEnum::C::field_c]; ReturnValue; value | -| 19 | Summary: main::get_var_pos; Argument[0].Field[main::MyPosEnum::A(0)]; ReturnValue; value | -| 20 | Summary: main::set_array_element; Argument[0]; ReturnValue.Element; value | -| 21 | Summary: main::set_struct_field; Argument[0]; ReturnValue.Field[main::MyStruct::field2]; value | -| 22 | Summary: main::set_tuple_element; Argument[0]; ReturnValue.Field[1]; value | -| 23 | Summary: main::set_var_field; Argument[0]; ReturnValue.Field[main::MyFieldEnum::D::field_d]; value | -| 24 | Summary: main::set_var_pos; Argument[0]; ReturnValue.Field[main::MyPosEnum::B(0)]; value | +| 11 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 12 | Summary: main::apply; Argument[0]; Argument[1].Parameter[0]; value | +| 13 | Summary: main::apply; Argument[1].ReturnValue; ReturnValue; value | +| 14 | Summary: main::coerce; Argument[0]; ReturnValue; taint | +| 15 | Summary: main::get_array_element; Argument[0].Element; ReturnValue; value | +| 16 | Summary: main::get_async_number; Argument[0]; ReturnValue.Future; value | +| 17 | Summary: main::get_struct_field; Argument[0].Field[main::MyStruct::field1]; ReturnValue; value | +| 18 | Summary: main::get_tuple_element; Argument[0].Field[0]; ReturnValue; value | +| 19 | Summary: main::get_var_field; Argument[0].Field[main::MyFieldEnum::C::field_c]; ReturnValue; value | +| 20 | Summary: main::get_var_pos; Argument[0].Field[main::MyPosEnum::A(0)]; ReturnValue; value | +| 21 | Summary: main::set_array_element; Argument[0]; ReturnValue.Element; value | +| 22 | Summary: main::set_struct_field; Argument[0]; ReturnValue.Field[main::MyStruct::field2]; value | +| 23 | Summary: main::set_tuple_element; Argument[0]; ReturnValue.Field[1]; value | +| 24 | Summary: main::set_var_field; Argument[0]; ReturnValue.Field[main::MyFieldEnum::D::field_d]; value | +| 25 | Summary: main::set_var_pos; Argument[0]; ReturnValue.Field[main::MyPosEnum::B(0)]; value | edges | main.rs:15:9:15:9 | s | main.rs:16:19:16:19 | s | provenance | | | main.rs:15:9:15:9 | s | main.rs:16:19:16:19 | s | provenance | | @@ -32,7 +33,7 @@ edges | main.rs:16:19:16:19 | s | main.rs:16:10:16:20 | identity(...) | provenance | QL | | main.rs:25:9:25:9 | s | main.rs:26:17:26:17 | s | provenance | | | main.rs:25:13:25:22 | source(...) | main.rs:25:9:25:9 | s | provenance | | -| main.rs:26:17:26:17 | s | main.rs:26:10:26:18 | coerce(...) | provenance | MaD:13 | +| main.rs:26:17:26:17 | s | main.rs:26:10:26:18 | coerce(...) | provenance | MaD:14 | | main.rs:40:9:40:9 | s | main.rs:41:27:41:27 | s | provenance | | | main.rs:40:9:40:9 | s | main.rs:41:27:41:27 | s | provenance | | | main.rs:40:13:40:21 | source(...) | main.rs:40:9:40:9 | s | provenance | | @@ -43,8 +44,8 @@ edges | main.rs:41:14:41:28 | ...::A(...) [A] | main.rs:41:9:41:10 | e1 [A] | provenance | | | main.rs:41:27:41:27 | s | main.rs:41:14:41:28 | ...::A(...) [A] | provenance | | | main.rs:41:27:41:27 | s | main.rs:41:14:41:28 | ...::A(...) [A] | provenance | | -| main.rs:42:22:42:23 | e1 [A] | main.rs:42:10:42:24 | get_var_pos(...) | provenance | MaD:19 | -| main.rs:42:22:42:23 | e1 [A] | main.rs:42:10:42:24 | get_var_pos(...) | provenance | MaD:19 | +| main.rs:42:22:42:23 | e1 [A] | main.rs:42:10:42:24 | get_var_pos(...) | provenance | MaD:20 | +| main.rs:42:22:42:23 | e1 [A] | main.rs:42:10:42:24 | get_var_pos(...) | provenance | MaD:20 | | main.rs:53:9:53:9 | s | main.rs:54:26:54:26 | s | provenance | | | main.rs:53:9:53:9 | s | main.rs:54:26:54:26 | s | provenance | | | main.rs:53:13:53:21 | source(...) | main.rs:53:9:53:9 | s | provenance | | @@ -53,8 +54,8 @@ edges | main.rs:54:9:54:10 | e1 [B] | main.rs:55:11:55:12 | e1 [B] | provenance | | | main.rs:54:14:54:27 | set_var_pos(...) [B] | main.rs:54:9:54:10 | e1 [B] | provenance | | | main.rs:54:14:54:27 | set_var_pos(...) [B] | main.rs:54:9:54:10 | e1 [B] | provenance | | -| main.rs:54:26:54:26 | s | main.rs:54:14:54:27 | set_var_pos(...) [B] | provenance | MaD:24 | -| main.rs:54:26:54:26 | s | main.rs:54:14:54:27 | set_var_pos(...) [B] | provenance | MaD:24 | +| main.rs:54:26:54:26 | s | main.rs:54:14:54:27 | set_var_pos(...) [B] | provenance | MaD:25 | +| main.rs:54:26:54:26 | s | main.rs:54:14:54:27 | set_var_pos(...) [B] | provenance | MaD:25 | | main.rs:55:11:55:12 | e1 [B] | main.rs:57:9:57:23 | ...::B(...) [B] | provenance | | | main.rs:55:11:55:12 | e1 [B] | main.rs:57:9:57:23 | ...::B(...) [B] | provenance | | | main.rs:57:9:57:23 | ...::B(...) [B] | main.rs:57:22:57:22 | i | provenance | | @@ -71,8 +72,8 @@ edges | main.rs:73:14:73:42 | ...::C {...} [C] | main.rs:73:9:73:10 | e1 [C] | provenance | | | main.rs:73:40:73:40 | s | main.rs:73:14:73:42 | ...::C {...} [C] | provenance | | | main.rs:73:40:73:40 | s | main.rs:73:14:73:42 | ...::C {...} [C] | provenance | | -| main.rs:74:24:74:25 | e1 [C] | main.rs:74:10:74:26 | get_var_field(...) | provenance | MaD:18 | -| main.rs:74:24:74:25 | e1 [C] | main.rs:74:10:74:26 | get_var_field(...) | provenance | MaD:18 | +| main.rs:74:24:74:25 | e1 [C] | main.rs:74:10:74:26 | get_var_field(...) | provenance | MaD:19 | +| main.rs:74:24:74:25 | e1 [C] | main.rs:74:10:74:26 | get_var_field(...) | provenance | MaD:19 | | main.rs:85:9:85:9 | s | main.rs:86:28:86:28 | s | provenance | | | main.rs:85:9:85:9 | s | main.rs:86:28:86:28 | s | provenance | | | main.rs:85:13:85:21 | source(...) | main.rs:85:9:85:9 | s | provenance | | @@ -81,8 +82,8 @@ edges | main.rs:86:9:86:10 | e1 [D] | main.rs:87:11:87:12 | e1 [D] | provenance | | | main.rs:86:14:86:29 | set_var_field(...) [D] | main.rs:86:9:86:10 | e1 [D] | provenance | | | main.rs:86:14:86:29 | set_var_field(...) [D] | main.rs:86:9:86:10 | e1 [D] | provenance | | -| main.rs:86:28:86:28 | s | main.rs:86:14:86:29 | set_var_field(...) [D] | provenance | MaD:23 | -| main.rs:86:28:86:28 | s | main.rs:86:14:86:29 | set_var_field(...) [D] | provenance | MaD:23 | +| main.rs:86:28:86:28 | s | main.rs:86:14:86:29 | set_var_field(...) [D] | provenance | MaD:24 | +| main.rs:86:28:86:28 | s | main.rs:86:14:86:29 | set_var_field(...) [D] | provenance | MaD:24 | | main.rs:87:11:87:12 | e1 [D] | main.rs:89:9:89:37 | ...::D {...} [D] | provenance | | | main.rs:87:11:87:12 | e1 [D] | main.rs:89:9:89:37 | ...::D {...} [D] | provenance | | | main.rs:89:9:89:37 | ...::D {...} [D] | main.rs:89:35:89:35 | i | provenance | | @@ -99,8 +100,8 @@ edges | main.rs:105:21:108:5 | MyStruct {...} [MyStruct.field1] | main.rs:105:9:105:17 | my_struct [MyStruct.field1] | provenance | | | main.rs:106:17:106:17 | s | main.rs:105:21:108:5 | MyStruct {...} [MyStruct.field1] | provenance | | | main.rs:106:17:106:17 | s | main.rs:105:21:108:5 | MyStruct {...} [MyStruct.field1] | provenance | | -| main.rs:109:27:109:35 | my_struct [MyStruct.field1] | main.rs:109:10:109:36 | get_struct_field(...) | provenance | MaD:16 | -| main.rs:109:27:109:35 | my_struct [MyStruct.field1] | main.rs:109:10:109:36 | get_struct_field(...) | provenance | MaD:16 | +| main.rs:109:27:109:35 | my_struct [MyStruct.field1] | main.rs:109:10:109:36 | get_struct_field(...) | provenance | MaD:17 | +| main.rs:109:27:109:35 | my_struct [MyStruct.field1] | main.rs:109:10:109:36 | get_struct_field(...) | provenance | MaD:17 | | main.rs:126:9:126:9 | s | main.rs:127:38:127:38 | s | provenance | | | main.rs:126:9:126:9 | s | main.rs:127:38:127:38 | s | provenance | | | main.rs:126:13:126:21 | source(...) | main.rs:126:9:126:9 | s | provenance | | @@ -109,16 +110,16 @@ edges | main.rs:127:9:127:17 | my_struct [MyStruct.field2] | main.rs:129:10:129:18 | my_struct [MyStruct.field2] | provenance | | | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | main.rs:127:9:127:17 | my_struct [MyStruct.field2] | provenance | | | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | main.rs:127:9:127:17 | my_struct [MyStruct.field2] | provenance | | -| main.rs:127:38:127:38 | s | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:21 | -| main.rs:127:38:127:38 | s | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:21 | +| main.rs:127:38:127:38 | s | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:22 | +| main.rs:127:38:127:38 | s | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:22 | | main.rs:129:10:129:18 | my_struct [MyStruct.field2] | main.rs:129:10:129:25 | my_struct.field2 | provenance | | | main.rs:129:10:129:18 | my_struct [MyStruct.field2] | main.rs:129:10:129:25 | my_struct.field2 | provenance | | | main.rs:138:9:138:9 | s | main.rs:139:29:139:29 | s | provenance | | | main.rs:138:9:138:9 | s | main.rs:139:29:139:29 | s | provenance | | | main.rs:138:13:138:21 | source(...) | main.rs:138:9:138:9 | s | provenance | | | main.rs:138:13:138:21 | source(...) | main.rs:138:9:138:9 | s | provenance | | -| main.rs:139:28:139:30 | [...] [element] | main.rs:139:10:139:31 | get_array_element(...) | provenance | MaD:14 | -| main.rs:139:28:139:30 | [...] [element] | main.rs:139:10:139:31 | get_array_element(...) | provenance | MaD:14 | +| main.rs:139:28:139:30 | [...] [element] | main.rs:139:10:139:31 | get_array_element(...) | provenance | MaD:15 | +| main.rs:139:28:139:30 | [...] [element] | main.rs:139:10:139:31 | get_array_element(...) | provenance | MaD:15 | | main.rs:139:29:139:29 | s | main.rs:139:28:139:30 | [...] [element] | provenance | | | main.rs:139:29:139:29 | s | main.rs:139:28:139:30 | [...] [element] | provenance | | | main.rs:148:9:148:9 | s | main.rs:149:33:149:33 | s | provenance | | @@ -129,10 +130,10 @@ edges | main.rs:149:9:149:11 | arr [element] | main.rs:150:10:150:12 | arr [element] | provenance | | | main.rs:149:15:149:34 | set_array_element(...) [element] | main.rs:149:9:149:11 | arr [element] | provenance | | | main.rs:149:15:149:34 | set_array_element(...) [element] | main.rs:149:9:149:11 | arr [element] | provenance | | -| main.rs:149:33:149:33 | s | main.rs:149:15:149:34 | set_array_element(...) [element] | provenance | MaD:20 | -| main.rs:149:33:149:33 | s | main.rs:149:15:149:34 | set_array_element(...) [element] | provenance | MaD:20 | -| main.rs:150:10:150:12 | arr [element] | main.rs:150:10:150:15 | arr[0] | provenance | | -| main.rs:150:10:150:12 | arr [element] | main.rs:150:10:150:15 | arr[0] | provenance | | +| main.rs:149:33:149:33 | s | main.rs:149:15:149:34 | set_array_element(...) [element] | provenance | MaD:21 | +| main.rs:149:33:149:33 | s | main.rs:149:15:149:34 | set_array_element(...) [element] | provenance | MaD:21 | +| main.rs:150:10:150:12 | arr [element] | main.rs:150:10:150:15 | arr[0] | provenance | MaD:11 | +| main.rs:150:10:150:12 | arr [element] | main.rs:150:10:150:15 | arr[0] | provenance | MaD:11 | | main.rs:159:9:159:9 | s | main.rs:160:14:160:14 | s | provenance | | | main.rs:159:9:159:9 | s | main.rs:160:14:160:14 | s | provenance | | | main.rs:159:13:159:22 | source(...) | main.rs:159:9:159:9 | s | provenance | | @@ -143,8 +144,8 @@ edges | main.rs:160:13:160:18 | TupleExpr [tuple.0] | main.rs:160:9:160:9 | t [tuple.0] | provenance | | | main.rs:160:14:160:14 | s | main.rs:160:13:160:18 | TupleExpr [tuple.0] | provenance | | | main.rs:160:14:160:14 | s | main.rs:160:13:160:18 | TupleExpr [tuple.0] | provenance | | -| main.rs:161:28:161:28 | t [tuple.0] | main.rs:161:10:161:29 | get_tuple_element(...) | provenance | MaD:17 | -| main.rs:161:28:161:28 | t [tuple.0] | main.rs:161:10:161:29 | get_tuple_element(...) | provenance | MaD:17 | +| main.rs:161:28:161:28 | t [tuple.0] | main.rs:161:10:161:29 | get_tuple_element(...) | provenance | MaD:18 | +| main.rs:161:28:161:28 | t [tuple.0] | main.rs:161:10:161:29 | get_tuple_element(...) | provenance | MaD:18 | | main.rs:172:9:172:9 | s | main.rs:173:31:173:31 | s | provenance | | | main.rs:172:9:172:9 | s | main.rs:173:31:173:31 | s | provenance | | | main.rs:172:13:172:22 | source(...) | main.rs:172:9:172:9 | s | provenance | | @@ -153,8 +154,8 @@ edges | main.rs:173:9:173:9 | t [tuple.1] | main.rs:175:10:175:10 | t [tuple.1] | provenance | | | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | main.rs:173:9:173:9 | t [tuple.1] | provenance | | | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | main.rs:173:9:173:9 | t [tuple.1] | provenance | | -| main.rs:173:31:173:31 | s | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:22 | -| main.rs:173:31:173:31 | s | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:22 | +| main.rs:173:31:173:31 | s | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:23 | +| main.rs:173:31:173:31 | s | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:23 | | main.rs:175:10:175:10 | t [tuple.1] | main.rs:175:10:175:12 | t.1 | provenance | | | main.rs:175:10:175:10 | t [tuple.1] | main.rs:175:10:175:12 | t.1 | provenance | | | main.rs:187:9:187:9 | s | main.rs:192:11:192:11 | s | provenance | | @@ -163,8 +164,8 @@ edges | main.rs:187:13:187:22 | source(...) | main.rs:187:9:187:9 | s | provenance | | | main.rs:188:14:188:14 | ... | main.rs:189:14:189:14 | n | provenance | | | main.rs:188:14:188:14 | ... | main.rs:189:14:189:14 | n | provenance | | -| main.rs:192:11:192:11 | s | main.rs:188:14:188:14 | ... | provenance | MaD:11 | -| main.rs:192:11:192:11 | s | main.rs:188:14:188:14 | ... | provenance | MaD:11 | +| main.rs:192:11:192:11 | s | main.rs:188:14:188:14 | ... | provenance | MaD:12 | +| main.rs:192:11:192:11 | s | main.rs:188:14:188:14 | ... | provenance | MaD:12 | | main.rs:196:13:196:22 | source(...) | main.rs:198:23:198:23 | f [captured s] | provenance | | | main.rs:196:13:196:22 | source(...) | main.rs:198:23:198:23 | f [captured s] | provenance | | | main.rs:197:40:197:40 | s | main.rs:197:17:197:42 | if ... {...} else {...} | provenance | | @@ -173,14 +174,14 @@ edges | main.rs:198:9:198:9 | t | main.rs:199:10:199:10 | t | provenance | | | main.rs:198:13:198:24 | apply(...) | main.rs:198:9:198:9 | t | provenance | | | main.rs:198:13:198:24 | apply(...) | main.rs:198:9:198:9 | t | provenance | | -| main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | provenance | MaD:11 | -| main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | provenance | MaD:11 | | main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | provenance | MaD:12 | | main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | provenance | MaD:12 | -| main.rs:198:23:198:23 | f [captured s] | main.rs:198:13:198:24 | apply(...) | provenance | MaD:11 | -| main.rs:198:23:198:23 | f [captured s] | main.rs:198:13:198:24 | apply(...) | provenance | MaD:11 | +| main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | provenance | MaD:13 | +| main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | provenance | MaD:13 | | main.rs:198:23:198:23 | f [captured s] | main.rs:198:13:198:24 | apply(...) | provenance | MaD:12 | | main.rs:198:23:198:23 | f [captured s] | main.rs:198:13:198:24 | apply(...) | provenance | MaD:12 | +| main.rs:198:23:198:23 | f [captured s] | main.rs:198:13:198:24 | apply(...) | provenance | MaD:13 | +| main.rs:198:23:198:23 | f [captured s] | main.rs:198:13:198:24 | apply(...) | provenance | MaD:13 | | main.rs:203:9:203:9 | s | main.rs:205:19:205:19 | s | provenance | | | main.rs:203:9:203:9 | s | main.rs:205:19:205:19 | s | provenance | | | main.rs:203:13:203:22 | source(...) | main.rs:203:9:203:9 | s | provenance | | @@ -191,10 +192,10 @@ edges | main.rs:205:9:205:9 | t | main.rs:206:10:206:10 | t | provenance | | | main.rs:205:13:205:23 | apply(...) | main.rs:205:9:205:9 | t | provenance | | | main.rs:205:13:205:23 | apply(...) | main.rs:205:9:205:9 | t | provenance | | -| main.rs:205:19:205:19 | s | main.rs:204:14:204:14 | ... | provenance | MaD:11 | -| main.rs:205:19:205:19 | s | main.rs:204:14:204:14 | ... | provenance | MaD:11 | -| main.rs:205:19:205:19 | s | main.rs:205:13:205:23 | apply(...) | provenance | MaD:11 | -| main.rs:205:19:205:19 | s | main.rs:205:13:205:23 | apply(...) | provenance | MaD:11 | +| main.rs:205:19:205:19 | s | main.rs:204:14:204:14 | ... | provenance | MaD:12 | +| main.rs:205:19:205:19 | s | main.rs:204:14:204:14 | ... | provenance | MaD:12 | +| main.rs:205:19:205:19 | s | main.rs:205:13:205:23 | apply(...) | provenance | MaD:12 | +| main.rs:205:19:205:19 | s | main.rs:205:13:205:23 | apply(...) | provenance | MaD:12 | | main.rs:215:9:215:9 | s | main.rs:216:30:216:30 | s | provenance | | | main.rs:215:9:215:9 | s | main.rs:216:30:216:30 | s | provenance | | | main.rs:215:13:215:22 | source(...) | main.rs:215:9:215:9 | s | provenance | | @@ -205,8 +206,8 @@ edges | main.rs:216:13:216:31 | get_async_number(...) [future] | main.rs:216:13:216:37 | await ... | provenance | | | main.rs:216:13:216:37 | await ... | main.rs:216:9:216:9 | t | provenance | | | main.rs:216:13:216:37 | await ... | main.rs:216:9:216:9 | t | provenance | | -| main.rs:216:30:216:30 | s | main.rs:216:13:216:31 | get_async_number(...) [future] | provenance | MaD:15 | -| main.rs:216:30:216:30 | s | main.rs:216:13:216:31 | get_async_number(...) [future] | provenance | MaD:15 | +| main.rs:216:30:216:30 | s | main.rs:216:13:216:31 | get_async_number(...) [future] | provenance | MaD:16 | +| main.rs:216:30:216:30 | s | main.rs:216:13:216:31 | get_async_number(...) [future] | provenance | MaD:16 | | main.rs:236:9:236:9 | s [D] | main.rs:237:11:237:11 | s [D] | provenance | | | main.rs:236:9:236:9 | s [D] | main.rs:237:11:237:11 | s [D] | provenance | | | main.rs:236:13:236:23 | enum_source | main.rs:236:13:236:27 | enum_source(...) [D] | provenance | Src:MaD:6 | diff --git a/rust/ql/test/library-tests/dataflow/sources/env/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/env/InlineFlow.expected index 6fcfdb5c24b..60066fdd74e 100644 --- a/rust/ql/test/library-tests/dataflow/sources/env/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/env/InlineFlow.expected @@ -8,21 +8,22 @@ models | 7 | Source: std::env::var_os; ReturnValue.Field[core::option::Option::Some(0)]; environment | | 8 | Summary: <_ as core::iter::traits::iterator::Iterator>::collect; Argument[self].Element; ReturnValue.Element; value | | 9 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Reference.Element; ReturnValue.Field[core::option::Option::Some(0)]; value | -| 10 | Summary: ::expect; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 11 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 12 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 13 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 14 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 10 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 11 | Summary: ::expect; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 12 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 13 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 14 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 15 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | edges | test.rs:6:10:6:22 | ...::var | test.rs:6:10:6:30 | ...::var(...) | provenance | Src:MaD:6 | | test.rs:7:10:7:25 | ...::var_os | test.rs:7:10:7:33 | ...::var_os(...) | provenance | Src:MaD:7 | | test.rs:9:9:9:12 | var1 | test.rs:12:10:12:13 | var1 | provenance | | | test.rs:9:16:9:28 | ...::var | test.rs:9:16:9:36 | ...::var(...) [Ok] | provenance | Src:MaD:6 | -| test.rs:9:16:9:36 | ...::var(...) [Ok] | test.rs:9:16:9:59 | ... .expect(...) | provenance | MaD:12 | +| test.rs:9:16:9:36 | ...::var(...) [Ok] | test.rs:9:16:9:59 | ... .expect(...) | provenance | MaD:13 | | test.rs:9:16:9:59 | ... .expect(...) | test.rs:9:9:9:12 | var1 | provenance | | | test.rs:10:9:10:12 | var2 | test.rs:13:10:13:13 | var2 | provenance | | | test.rs:10:16:10:31 | ...::var_os | test.rs:10:16:10:39 | ...::var_os(...) [Some] | provenance | Src:MaD:7 | -| test.rs:10:16:10:39 | ...::var_os(...) [Some] | test.rs:10:16:10:48 | ... .unwrap() | provenance | MaD:11 | +| test.rs:10:16:10:39 | ...::var_os(...) [Some] | test.rs:10:16:10:48 | ... .unwrap() | provenance | MaD:12 | | test.rs:10:16:10:48 | ... .unwrap() | test.rs:10:9:10:12 | var2 | provenance | | | test.rs:27:9:27:12 | args [element] | test.rs:28:20:28:23 | args [element] | provenance | | | test.rs:27:9:27:12 | args [element] | test.rs:29:17:29:20 | args [element] | provenance | | @@ -31,28 +32,28 @@ edges | test.rs:27:29:27:54 | ... .collect() [element] | test.rs:27:9:27:12 | args [element] | provenance | | | test.rs:28:9:28:15 | my_path [&ref] | test.rs:34:10:34:16 | my_path | provenance | | | test.rs:28:19:28:26 | &... [&ref] | test.rs:28:9:28:15 | my_path [&ref] | provenance | | -| test.rs:28:20:28:23 | args [element] | test.rs:28:20:28:26 | args[0] | provenance | | +| test.rs:28:20:28:23 | args [element] | test.rs:28:20:28:26 | args[0] | provenance | MaD:10 | | test.rs:28:20:28:26 | args[0] | test.rs:28:19:28:26 | &... [&ref] | provenance | | | test.rs:29:9:29:12 | arg1 [&ref] | test.rs:35:10:35:13 | arg1 | provenance | | | test.rs:29:16:29:23 | &... [&ref] | test.rs:29:9:29:12 | arg1 [&ref] | provenance | | -| test.rs:29:17:29:20 | args [element] | test.rs:29:17:29:23 | args[1] | provenance | | +| test.rs:29:17:29:20 | args [element] | test.rs:29:17:29:23 | args[1] | provenance | MaD:10 | | test.rs:29:17:29:23 | args[1] | test.rs:29:16:29:23 | &... [&ref] | provenance | | | test.rs:30:9:30:12 | arg2 | test.rs:36:10:36:13 | arg2 | provenance | | | test.rs:30:16:30:29 | ...::args | test.rs:30:16:30:31 | ...::args(...) [element] | provenance | Src:MaD:1 | | test.rs:30:16:30:31 | ...::args(...) [element] | test.rs:30:16:30:38 | ... .nth(...) [Some] | provenance | MaD:9 | -| test.rs:30:16:30:38 | ... .nth(...) [Some] | test.rs:30:16:30:47 | ... .unwrap() | provenance | MaD:11 | +| test.rs:30:16:30:38 | ... .nth(...) [Some] | test.rs:30:16:30:47 | ... .unwrap() | provenance | MaD:12 | | test.rs:30:16:30:47 | ... .unwrap() | test.rs:30:9:30:12 | arg2 | provenance | | | test.rs:31:9:31:12 | arg3 | test.rs:37:10:37:13 | arg3 | provenance | | | test.rs:31:16:31:32 | ...::args_os | test.rs:31:16:31:34 | ...::args_os(...) [element] | provenance | Src:MaD:2 | | test.rs:31:16:31:34 | ...::args_os(...) [element] | test.rs:31:16:31:41 | ... .nth(...) [Some] | provenance | MaD:9 | -| test.rs:31:16:31:41 | ... .nth(...) [Some] | test.rs:31:16:31:50 | ... .unwrap() | provenance | MaD:11 | +| test.rs:31:16:31:41 | ... .nth(...) [Some] | test.rs:31:16:31:50 | ... .unwrap() | provenance | MaD:12 | | test.rs:31:16:31:50 | ... .unwrap() | test.rs:31:9:31:12 | arg3 | provenance | | | test.rs:32:9:32:12 | arg4 | test.rs:38:10:38:13 | arg4 | provenance | | | test.rs:32:16:32:29 | ...::args | test.rs:32:16:32:31 | ...::args(...) [element] | provenance | Src:MaD:1 | | test.rs:32:16:32:31 | ...::args(...) [element] | test.rs:32:16:32:38 | ... .nth(...) [Some] | provenance | MaD:9 | -| test.rs:32:16:32:38 | ... .nth(...) [Some] | test.rs:32:16:32:47 | ... .unwrap() | provenance | MaD:11 | -| test.rs:32:16:32:47 | ... .unwrap() | test.rs:32:16:32:64 | ... .parse() [Ok] | provenance | MaD:14 | -| test.rs:32:16:32:64 | ... .parse() [Ok] | test.rs:32:16:32:73 | ... .unwrap() | provenance | MaD:13 | +| test.rs:32:16:32:38 | ... .nth(...) [Some] | test.rs:32:16:32:47 | ... .unwrap() | provenance | MaD:12 | +| test.rs:32:16:32:47 | ... .unwrap() | test.rs:32:16:32:64 | ... .parse() [Ok] | provenance | MaD:15 | +| test.rs:32:16:32:64 | ... .parse() [Ok] | test.rs:32:16:32:73 | ... .unwrap() | provenance | MaD:14 | | test.rs:32:16:32:73 | ... .unwrap() | test.rs:32:9:32:12 | arg4 | provenance | | | test.rs:40:9:40:11 | arg | test.rs:41:14:41:16 | arg | provenance | | | test.rs:40:16:40:29 | ...::args | test.rs:40:16:40:31 | ...::args(...) [element] | provenance | Src:MaD:1 | @@ -62,15 +63,15 @@ edges | test.rs:44:16:44:34 | ...::args_os(...) [element] | test.rs:44:9:44:11 | arg | provenance | | | test.rs:50:9:50:11 | dir | test.rs:54:10:54:12 | dir | provenance | | | test.rs:50:15:50:35 | ...::current_dir | test.rs:50:15:50:37 | ...::current_dir(...) [Ok] | provenance | Src:MaD:3 | -| test.rs:50:15:50:37 | ...::current_dir(...) [Ok] | test.rs:50:15:50:54 | ... .expect(...) | provenance | MaD:12 | +| test.rs:50:15:50:37 | ...::current_dir(...) [Ok] | test.rs:50:15:50:54 | ... .expect(...) | provenance | MaD:13 | | test.rs:50:15:50:54 | ... .expect(...) | test.rs:50:9:50:11 | dir | provenance | | | test.rs:51:9:51:11 | exe | test.rs:55:10:55:12 | exe | provenance | | | test.rs:51:15:51:35 | ...::current_exe | test.rs:51:15:51:37 | ...::current_exe(...) [Ok] | provenance | Src:MaD:4 | -| test.rs:51:15:51:37 | ...::current_exe(...) [Ok] | test.rs:51:15:51:54 | ... .expect(...) | provenance | MaD:12 | +| test.rs:51:15:51:37 | ...::current_exe(...) [Ok] | test.rs:51:15:51:54 | ... .expect(...) | provenance | MaD:13 | | test.rs:51:15:51:54 | ... .expect(...) | test.rs:51:9:51:11 | exe | provenance | | | test.rs:52:9:52:12 | home | test.rs:56:10:56:13 | home | provenance | | | test.rs:52:16:52:33 | ...::home_dir | test.rs:52:16:52:35 | ...::home_dir(...) [Some] | provenance | Src:MaD:5 | -| test.rs:52:16:52:35 | ...::home_dir(...) [Some] | test.rs:52:16:52:52 | ... .expect(...) | provenance | MaD:10 | +| test.rs:52:16:52:35 | ...::home_dir(...) [Some] | test.rs:52:16:52:52 | ... .expect(...) | provenance | MaD:11 | | test.rs:52:16:52:52 | ... .expect(...) | test.rs:52:9:52:12 | home | provenance | | nodes | test.rs:6:10:6:22 | ...::var | semmle.label | ...::var | diff --git a/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.expected index 9682ff1a01d..2b39cf16c42 100644 --- a/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.expected @@ -6,63 +6,64 @@ models | 5 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | | 6 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote | | 7 | Source: reqwest::get; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | -| 8 | Summary: <_ as futures_io::if_std::AsyncBufRead>::poll_fill_buf; Argument[self].Reference; ReturnValue.Field[core::task::poll::Poll::Ready(0)].Field[core::result::Result::Ok(0)]; taint | -| 9 | Summary: <_ as futures_io::if_std::AsyncRead>::poll_read; Argument[self].Reference; Argument[1].Reference; taint | -| 10 | Summary: <_ as futures_util::io::AsyncBufReadExt>::fill_buf; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 11 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self].Reference; Argument[0].Reference; taint | -| 12 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self].Reference; Argument[1].Reference; taint | -| 13 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | -| 14 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | -| 15 | Summary: <_ as std::io::BufRead>::read_line; Argument[self].Reference; Argument[0].Reference; taint | -| 16 | Summary: <_ as std::io::Read>::read; Argument[self].Reference; Argument[0].Reference; taint | -| 17 | Summary: <_ as std::io::Read>::take; Argument[self]; ReturnValue; taint | -| 18 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | -| 19 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 20 | Summary: ::new; Argument[0].Reference; ReturnValue; value | -| 21 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value | -| 22 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 23 | Summary: ::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 24 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 25 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 26 | Summary: ::chunk; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | -| 27 | Summary: ::text; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 28 | Summary: ::bytes; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 29 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 30 | Summary: ::text_with_charset; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 31 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 32 | Summary: ::peek; Argument[self].Reference; Argument[0].Reference; taint | -| 33 | Summary: ::try_read; Argument[self].Reference; Argument[0].Reference; taint | -| 34 | Summary: ::try_read_buf; Argument[self].Reference; Argument[0].Reference; taint | +| 8 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 9 | Summary: <_ as futures_io::if_std::AsyncBufRead>::poll_fill_buf; Argument[self].Reference; ReturnValue.Field[core::task::poll::Poll::Ready(0)].Field[core::result::Result::Ok(0)]; taint | +| 10 | Summary: <_ as futures_io::if_std::AsyncRead>::poll_read; Argument[self].Reference; Argument[1].Reference; taint | +| 11 | Summary: <_ as futures_util::io::AsyncBufReadExt>::fill_buf; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 12 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self].Reference; Argument[0].Reference; taint | +| 13 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self].Reference; Argument[1].Reference; taint | +| 14 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 15 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | +| 16 | Summary: <_ as std::io::BufRead>::read_line; Argument[self].Reference; Argument[0].Reference; taint | +| 17 | Summary: <_ as std::io::Read>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 18 | Summary: <_ as std::io::Read>::take; Argument[self]; ReturnValue; taint | +| 19 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 20 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 21 | Summary: ::new; Argument[0].Reference; ReturnValue; value | +| 22 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value | +| 23 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 24 | Summary: ::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 25 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 26 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 27 | Summary: ::chunk; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 28 | Summary: ::text; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 29 | Summary: ::bytes; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 30 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 31 | Summary: ::text_with_charset; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 32 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 33 | Summary: ::peek; Argument[self].Reference; Argument[0].Reference; taint | +| 34 | Summary: ::try_read; Argument[self].Reference; Argument[0].Reference; taint | +| 35 | Summary: ::try_read_buf; Argument[self].Reference; Argument[0].Reference; taint | edges | test.rs:11:9:11:22 | remote_string1 | test.rs:12:10:12:23 | remote_string1 | provenance | | | test.rs:11:26:11:47 | ...::get | test.rs:11:26:11:62 | ...::get(...) [Ok] | provenance | Src:MaD:6 | | test.rs:11:26:11:62 | ...::get(...) [Ok] | test.rs:11:26:11:63 | TryExpr | provenance | | -| test.rs:11:26:11:63 | TryExpr | test.rs:11:26:11:70 | ... .text() [Ok] | provenance | MaD:29 | +| test.rs:11:26:11:63 | TryExpr | test.rs:11:26:11:70 | ... .text() [Ok] | provenance | MaD:30 | | test.rs:11:26:11:70 | ... .text() [Ok] | test.rs:11:26:11:71 | TryExpr | provenance | | | test.rs:11:26:11:71 | TryExpr | test.rs:11:9:11:22 | remote_string1 | provenance | | | test.rs:14:9:14:22 | remote_string2 | test.rs:15:10:15:23 | remote_string2 | provenance | | | test.rs:14:26:14:47 | ...::get | test.rs:14:26:14:62 | ...::get(...) [Ok] | provenance | Src:MaD:6 | -| test.rs:14:26:14:62 | ...::get(...) [Ok] | test.rs:14:26:14:71 | ... .unwrap() | provenance | MaD:22 | -| test.rs:14:26:14:71 | ... .unwrap() | test.rs:14:26:14:78 | ... .text() [Ok] | provenance | MaD:29 | -| test.rs:14:26:14:78 | ... .text() [Ok] | test.rs:14:26:14:87 | ... .unwrap() | provenance | MaD:22 | +| test.rs:14:26:14:62 | ...::get(...) [Ok] | test.rs:14:26:14:71 | ... .unwrap() | provenance | MaD:23 | +| test.rs:14:26:14:71 | ... .unwrap() | test.rs:14:26:14:78 | ... .text() [Ok] | provenance | MaD:30 | +| test.rs:14:26:14:78 | ... .text() [Ok] | test.rs:14:26:14:87 | ... .unwrap() | provenance | MaD:23 | | test.rs:14:26:14:87 | ... .unwrap() | test.rs:14:9:14:22 | remote_string2 | provenance | | | test.rs:17:9:17:22 | remote_string3 | test.rs:18:10:18:23 | remote_string3 | provenance | | | test.rs:17:26:17:47 | ...::get | test.rs:17:26:17:62 | ...::get(...) [Ok] | provenance | Src:MaD:6 | -| test.rs:17:26:17:62 | ...::get(...) [Ok] | test.rs:17:26:17:71 | ... .unwrap() | provenance | MaD:22 | -| test.rs:17:26:17:71 | ... .unwrap() | test.rs:17:26:17:98 | ... .text_with_charset(...) [Ok] | provenance | MaD:30 | -| test.rs:17:26:17:98 | ... .text_with_charset(...) [Ok] | test.rs:17:26:17:107 | ... .unwrap() | provenance | MaD:22 | +| test.rs:17:26:17:62 | ...::get(...) [Ok] | test.rs:17:26:17:71 | ... .unwrap() | provenance | MaD:23 | +| test.rs:17:26:17:71 | ... .unwrap() | test.rs:17:26:17:98 | ... .text_with_charset(...) [Ok] | provenance | MaD:31 | +| test.rs:17:26:17:98 | ... .text_with_charset(...) [Ok] | test.rs:17:26:17:107 | ... .unwrap() | provenance | MaD:23 | | test.rs:17:26:17:107 | ... .unwrap() | test.rs:17:9:17:22 | remote_string3 | provenance | | | test.rs:20:9:20:22 | remote_string4 | test.rs:21:10:21:23 | remote_string4 | provenance | | | test.rs:20:26:20:47 | ...::get | test.rs:20:26:20:62 | ...::get(...) [Ok] | provenance | Src:MaD:6 | -| test.rs:20:26:20:62 | ...::get(...) [Ok] | test.rs:20:26:20:71 | ... .unwrap() | provenance | MaD:22 | -| test.rs:20:26:20:71 | ... .unwrap() | test.rs:20:26:20:79 | ... .bytes() [Ok] | provenance | MaD:28 | -| test.rs:20:26:20:79 | ... .bytes() [Ok] | test.rs:20:26:20:88 | ... .unwrap() | provenance | MaD:22 | +| test.rs:20:26:20:62 | ...::get(...) [Ok] | test.rs:20:26:20:71 | ... .unwrap() | provenance | MaD:23 | +| test.rs:20:26:20:71 | ... .unwrap() | test.rs:20:26:20:79 | ... .bytes() [Ok] | provenance | MaD:29 | +| test.rs:20:26:20:79 | ... .bytes() [Ok] | test.rs:20:26:20:88 | ... .unwrap() | provenance | MaD:23 | | test.rs:20:26:20:88 | ... .unwrap() | test.rs:20:9:20:22 | remote_string4 | provenance | | | test.rs:23:9:23:22 | remote_string5 | test.rs:24:10:24:23 | remote_string5 | provenance | | | test.rs:23:26:23:37 | ...::get | test.rs:23:26:23:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:7 | | test.rs:23:26:23:52 | ...::get(...) [future, Ok] | test.rs:23:26:23:58 | await ... [Ok] | provenance | | | test.rs:23:26:23:58 | await ... [Ok] | test.rs:23:26:23:59 | TryExpr | provenance | | -| test.rs:23:26:23:59 | TryExpr | test.rs:23:26:23:66 | ... .text() [future, Ok] | provenance | MaD:27 | +| test.rs:23:26:23:59 | TryExpr | test.rs:23:26:23:66 | ... .text() [future, Ok] | provenance | MaD:28 | | test.rs:23:26:23:66 | ... .text() [future, Ok] | test.rs:23:26:23:72 | await ... [Ok] | provenance | | | test.rs:23:26:23:72 | await ... [Ok] | test.rs:23:26:23:73 | TryExpr | provenance | | | test.rs:23:26:23:73 | TryExpr | test.rs:23:9:23:22 | remote_string5 | provenance | | @@ -70,7 +71,7 @@ edges | test.rs:26:26:26:37 | ...::get | test.rs:26:26:26:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:7 | | test.rs:26:26:26:52 | ...::get(...) [future, Ok] | test.rs:26:26:26:58 | await ... [Ok] | provenance | | | test.rs:26:26:26:58 | await ... [Ok] | test.rs:26:26:26:59 | TryExpr | provenance | | -| test.rs:26:26:26:59 | TryExpr | test.rs:26:26:26:67 | ... .bytes() [future, Ok] | provenance | MaD:25 | +| test.rs:26:26:26:59 | TryExpr | test.rs:26:26:26:67 | ... .bytes() [future, Ok] | provenance | MaD:26 | | test.rs:26:26:26:67 | ... .bytes() [future, Ok] | test.rs:26:26:26:73 | await ... [Ok] | provenance | | | test.rs:26:26:26:73 | await ... [Ok] | test.rs:26:26:26:74 | TryExpr | provenance | | | test.rs:26:26:26:74 | TryExpr | test.rs:26:9:26:22 | remote_string6 | provenance | | @@ -80,13 +81,13 @@ edges | test.rs:29:24:29:50 | ...::get(...) [future, Ok] | test.rs:29:24:29:56 | await ... [Ok] | provenance | | | test.rs:29:24:29:56 | await ... [Ok] | test.rs:29:24:29:57 | TryExpr | provenance | | | test.rs:29:24:29:57 | TryExpr | test.rs:29:9:29:20 | mut request1 | provenance | | -| test.rs:30:10:30:17 | request1 | test.rs:30:10:30:25 | request1.chunk() [future, Ok, Some] | provenance | MaD:26 | +| test.rs:30:10:30:17 | request1 | test.rs:30:10:30:25 | request1.chunk() [future, Ok, Some] | provenance | MaD:27 | | test.rs:30:10:30:25 | request1.chunk() [future, Ok, Some] | test.rs:30:10:30:31 | await ... [Ok, Some] | provenance | | | test.rs:30:10:30:31 | await ... [Ok, Some] | test.rs:30:10:30:32 | TryExpr [Some] | provenance | | -| test.rs:30:10:30:32 | TryExpr [Some] | test.rs:30:10:30:41 | ... .unwrap() | provenance | MaD:19 | +| test.rs:30:10:30:32 | TryExpr [Some] | test.rs:30:10:30:41 | ... .unwrap() | provenance | MaD:20 | | test.rs:31:15:31:25 | Some(...) [Some] | test.rs:31:20:31:24 | chunk | provenance | | | test.rs:31:20:31:24 | chunk | test.rs:32:14:32:18 | chunk | provenance | | -| test.rs:31:29:31:36 | request1 | test.rs:31:29:31:44 | request1.chunk() [future, Ok, Some] | provenance | MaD:26 | +| test.rs:31:29:31:36 | request1 | test.rs:31:29:31:44 | request1.chunk() [future, Ok, Some] | provenance | MaD:27 | | test.rs:31:29:31:44 | request1.chunk() [future, Ok, Some] | test.rs:31:29:31:50 | await ... [Ok, Some] | provenance | | | test.rs:31:29:31:50 | await ... [Ok, Some] | test.rs:31:29:31:51 | TryExpr [Some] | provenance | | | test.rs:31:29:31:51 | TryExpr [Some] | test.rs:31:15:31:25 | Some(...) [Some] | provenance | | @@ -107,20 +108,21 @@ edges | test.rs:155:26:155:53 | ...::connect | test.rs:155:26:155:62 | ...::connect(...) [Ok] | provenance | Src:MaD:3 | | test.rs:155:26:155:62 | ...::connect(...) [Ok] | test.rs:155:26:155:63 | TryExpr | provenance | | | test.rs:155:26:155:63 | TryExpr | test.rs:155:13:155:22 | mut stream | provenance | | -| test.rs:162:17:162:22 | stream | test.rs:162:29:162:39 | [post] &mut buffer [&ref] | provenance | MaD:16 | +| test.rs:162:17:162:22 | stream | test.rs:162:29:162:39 | [post] &mut buffer [&ref] | provenance | MaD:17 | | test.rs:162:29:162:39 | [post] &mut buffer [&ref] | test.rs:162:34:162:39 | [post] buffer | provenance | | | test.rs:162:34:162:39 | [post] buffer | test.rs:165:15:165:20 | buffer | provenance | | -| test.rs:162:34:162:39 | [post] buffer | test.rs:166:14:166:22 | buffer[0] | provenance | | +| test.rs:162:34:162:39 | [post] buffer | test.rs:166:14:166:19 | buffer | provenance | | | test.rs:165:15:165:20 | buffer | test.rs:165:14:165:20 | &buffer | provenance | | +| test.rs:166:14:166:19 | buffer | test.rs:166:14:166:22 | buffer[0] | provenance | MaD:8 | | test.rs:174:13:174:22 | mut stream | test.rs:182:58:182:63 | stream | provenance | | | test.rs:174:26:174:61 | ...::connect_timeout | test.rs:174:26:174:105 | ...::connect_timeout(...) [Ok] | provenance | Src:MaD:4 | | test.rs:174:26:174:105 | ...::connect_timeout(...) [Ok] | test.rs:174:26:174:106 | TryExpr | provenance | | | test.rs:174:26:174:106 | TryExpr | test.rs:174:13:174:22 | mut stream | provenance | | | test.rs:182:21:182:30 | mut reader | test.rs:185:27:185:32 | reader | provenance | | -| test.rs:182:34:182:64 | ...::new(...) | test.rs:182:34:182:74 | ... .take(...) | provenance | MaD:17 | +| test.rs:182:34:182:64 | ...::new(...) | test.rs:182:34:182:74 | ... .take(...) | provenance | MaD:18 | | test.rs:182:34:182:74 | ... .take(...) | test.rs:182:21:182:30 | mut reader | provenance | | -| test.rs:182:58:182:63 | stream | test.rs:182:34:182:64 | ...::new(...) | provenance | MaD:31 | -| test.rs:185:27:185:32 | reader | test.rs:185:44:185:52 | [post] &mut line [&ref] | provenance | MaD:15 | +| test.rs:182:58:182:63 | stream | test.rs:182:34:182:64 | ...::new(...) | provenance | MaD:32 | +| test.rs:185:27:185:32 | reader | test.rs:185:44:185:52 | [post] &mut line [&ref] | provenance | MaD:16 | | test.rs:185:44:185:52 | [post] &mut line [&ref] | test.rs:185:49:185:52 | [post] line | provenance | | | test.rs:185:49:185:52 | [post] line | test.rs:192:35:192:38 | line | provenance | | | test.rs:192:35:192:38 | line | test.rs:192:34:192:38 | &line | provenance | | @@ -132,21 +134,23 @@ edges | test.rs:224:28:224:66 | ...::connect(...) [future, Ok] | test.rs:224:28:224:72 | await ... [Ok] | provenance | | | test.rs:224:28:224:72 | await ... [Ok] | test.rs:224:28:224:73 | TryExpr | provenance | | | test.rs:224:28:224:73 | TryExpr | test.rs:224:9:224:24 | mut tokio_stream | provenance | | -| test.rs:232:17:232:28 | tokio_stream | test.rs:232:35:232:46 | [post] &mut buffer1 [&ref] | provenance | MaD:32 | +| test.rs:232:17:232:28 | tokio_stream | test.rs:232:35:232:46 | [post] &mut buffer1 [&ref] | provenance | MaD:33 | | test.rs:232:35:232:46 | [post] &mut buffer1 [&ref] | test.rs:232:40:232:46 | [post] buffer1 | provenance | | | test.rs:232:40:232:46 | [post] buffer1 | test.rs:239:15:239:21 | buffer1 | provenance | | -| test.rs:232:40:232:46 | [post] buffer1 | test.rs:240:14:240:23 | buffer1[0] | provenance | | -| test.rs:236:18:236:29 | tokio_stream | test.rs:236:36:236:47 | [post] &mut buffer2 [&ref] | provenance | MaD:18 | +| test.rs:232:40:232:46 | [post] buffer1 | test.rs:240:14:240:20 | buffer1 | provenance | | +| test.rs:236:18:236:29 | tokio_stream | test.rs:236:36:236:47 | [post] &mut buffer2 [&ref] | provenance | MaD:19 | | test.rs:236:36:236:47 | [post] &mut buffer2 [&ref] | test.rs:236:41:236:47 | [post] buffer2 | provenance | | | test.rs:236:41:236:47 | [post] buffer2 | test.rs:243:15:243:21 | buffer2 | provenance | | -| test.rs:236:41:236:47 | [post] buffer2 | test.rs:244:14:244:23 | buffer2[0] | provenance | | +| test.rs:236:41:236:47 | [post] buffer2 | test.rs:244:14:244:20 | buffer2 | provenance | | | test.rs:239:15:239:21 | buffer1 | test.rs:239:14:239:21 | &buffer1 | provenance | | +| test.rs:240:14:240:20 | buffer1 | test.rs:240:14:240:23 | buffer1[0] | provenance | MaD:8 | | test.rs:243:15:243:21 | buffer2 | test.rs:243:14:243:21 | &buffer2 | provenance | | -| test.rs:252:19:252:30 | tokio_stream | test.rs:252:41:252:51 | [post] &mut buffer [&ref] | provenance | MaD:33 | +| test.rs:244:14:244:20 | buffer2 | test.rs:244:14:244:23 | buffer2[0] | provenance | MaD:8 | +| test.rs:252:19:252:30 | tokio_stream | test.rs:252:41:252:51 | [post] &mut buffer [&ref] | provenance | MaD:34 | | test.rs:252:41:252:51 | [post] &mut buffer [&ref] | test.rs:252:46:252:51 | [post] buffer | provenance | | | test.rs:252:46:252:51 | [post] buffer | test.rs:259:27:259:32 | buffer | provenance | | | test.rs:259:27:259:32 | buffer | test.rs:259:26:259:32 | &buffer | provenance | | -| test.rs:275:19:275:30 | tokio_stream | test.rs:275:45:275:55 | [post] &mut buffer [&ref] | provenance | MaD:34 | +| test.rs:275:19:275:30 | tokio_stream | test.rs:275:45:275:55 | [post] &mut buffer [&ref] | provenance | MaD:35 | | test.rs:275:45:275:55 | [post] &mut buffer [&ref] | test.rs:275:50:275:55 | [post] buffer | provenance | | | test.rs:275:50:275:55 | [post] buffer | test.rs:282:27:282:32 | buffer | provenance | | | test.rs:282:27:282:32 | buffer | test.rs:282:26:282:32 | &buffer | provenance | | @@ -165,32 +169,38 @@ edges | test.rs:380:26:380:60 | connector.connect(...) [future, Ok] | test.rs:380:26:380:66 | await ... [Ok] | provenance | | | test.rs:380:26:380:66 | await ... [Ok] | test.rs:380:26:380:67 | TryExpr | provenance | | | test.rs:380:26:380:67 | TryExpr | test.rs:380:13:380:22 | mut reader | provenance | | -| test.rs:380:57:380:59 | tcp | test.rs:380:26:380:60 | connector.connect(...) [future, Ok] | provenance | MaD:23 | +| test.rs:380:57:380:59 | tcp | test.rs:380:26:380:60 | connector.connect(...) [future, Ok] | provenance | MaD:24 | | test.rs:381:15:381:20 | reader | test.rs:381:14:381:20 | &reader | provenance | | | test.rs:386:17:386:26 | mut pinned | test.rs:387:19:387:24 | pinned | provenance | | | test.rs:386:17:386:26 | mut pinned | test.rs:389:30:389:35 | pinned | provenance | | | test.rs:386:17:386:26 | mut pinned [Pin, &ref] | test.rs:387:19:387:24 | pinned [Pin, &ref] | provenance | | | test.rs:386:30:386:50 | ...::new(...) | test.rs:386:17:386:26 | mut pinned | provenance | | | test.rs:386:30:386:50 | ...::new(...) [Pin, &ref] | test.rs:386:17:386:26 | mut pinned [Pin, &ref] | provenance | | -| test.rs:386:39:386:49 | &mut reader [&ref] | test.rs:386:30:386:50 | ...::new(...) | provenance | MaD:20 | -| test.rs:386:39:386:49 | &mut reader [&ref] | test.rs:386:30:386:50 | ...::new(...) [Pin, &ref] | provenance | MaD:21 | +| test.rs:386:39:386:49 | &mut reader [&ref] | test.rs:386:30:386:50 | ...::new(...) | provenance | MaD:21 | +| test.rs:386:39:386:49 | &mut reader [&ref] | test.rs:386:30:386:50 | ...::new(...) [Pin, &ref] | provenance | MaD:22 | | test.rs:386:44:386:49 | reader | test.rs:386:39:386:49 | &mut reader [&ref] | provenance | | | test.rs:387:19:387:24 | pinned | test.rs:387:18:387:24 | &pinned | provenance | | | test.rs:387:19:387:24 | pinned [Pin, &ref] | test.rs:387:18:387:24 | &pinned | provenance | | -| test.rs:389:30:389:35 | pinned | test.rs:389:56:389:66 | [post] &mut buffer [&ref] | provenance | MaD:9 | +| test.rs:389:30:389:35 | pinned | test.rs:389:56:389:66 | [post] &mut buffer [&ref] | provenance | MaD:10 | | test.rs:389:56:389:66 | [post] &mut buffer [&ref] | test.rs:389:61:389:66 | [post] buffer | provenance | | | test.rs:389:61:389:66 | [post] buffer | test.rs:391:23:391:28 | buffer | provenance | | +| test.rs:389:61:389:66 | [post] buffer | test.rs:392:23:392:28 | buffer | provenance | | | test.rs:389:61:389:66 | [post] buffer | test.rs:392:23:392:33 | buffer[...] | provenance | | | test.rs:391:23:391:28 | buffer | test.rs:391:22:391:28 | &buffer | provenance | | +| test.rs:392:23:392:28 | buffer | test.rs:392:23:392:33 | buffer[...] | provenance | MaD:8 | | test.rs:392:23:392:33 | buffer[...] | test.rs:392:22:392:33 | &... | provenance | | -| test.rs:399:63:399:73 | &mut reader [&ref] | test.rs:399:76:399:87 | [post] &mut buffer1 [&ref] | provenance | MaD:13 | +| test.rs:399:63:399:73 | &mut reader [&ref] | test.rs:399:76:399:87 | [post] &mut buffer1 [&ref] | provenance | MaD:14 | | test.rs:399:68:399:73 | reader | test.rs:399:63:399:73 | &mut reader [&ref] | provenance | | | test.rs:399:76:399:87 | [post] &mut buffer1 [&ref] | test.rs:399:81:399:87 | [post] buffer1 | provenance | | +| test.rs:399:81:399:87 | [post] buffer1 | test.rs:400:19:400:25 | buffer1 | provenance | | | test.rs:399:81:399:87 | [post] buffer1 | test.rs:400:19:400:40 | buffer1[...] | provenance | | +| test.rs:400:19:400:25 | buffer1 | test.rs:400:19:400:40 | buffer1[...] | provenance | MaD:8 | | test.rs:400:19:400:40 | buffer1[...] | test.rs:400:18:400:40 | &... | provenance | | -| test.rs:403:31:403:36 | reader | test.rs:403:43:403:54 | [post] &mut buffer2 [&ref] | provenance | MaD:13 | +| test.rs:403:31:403:36 | reader | test.rs:403:43:403:54 | [post] &mut buffer2 [&ref] | provenance | MaD:14 | | test.rs:403:43:403:54 | [post] &mut buffer2 [&ref] | test.rs:403:48:403:54 | [post] buffer2 | provenance | | +| test.rs:403:48:403:54 | [post] buffer2 | test.rs:405:19:405:25 | buffer2 | provenance | | | test.rs:403:48:403:54 | [post] buffer2 | test.rs:405:19:405:40 | buffer2[...] | provenance | | +| test.rs:405:19:405:25 | buffer2 | test.rs:405:19:405:40 | buffer2[...] | provenance | MaD:8 | | test.rs:405:19:405:40 | buffer2[...] | test.rs:405:18:405:40 | &... | provenance | | | test.rs:408:13:408:23 | mut reader2 | test.rs:409:15:409:21 | reader2 | provenance | | | test.rs:408:13:408:23 | mut reader2 | test.rs:413:44:413:50 | reader2 | provenance | | @@ -205,30 +215,30 @@ edges | test.rs:408:13:408:23 | mut reader2 | test.rs:493:31:493:37 | reader2 | provenance | | | test.rs:408:13:408:23 | mut reader2 | test.rs:500:31:500:37 | reader2 | provenance | | | test.rs:408:27:408:61 | ...::new(...) | test.rs:408:13:408:23 | mut reader2 | provenance | | -| test.rs:408:55:408:60 | reader | test.rs:408:27:408:61 | ...::new(...) | provenance | MaD:24 | +| test.rs:408:55:408:60 | reader | test.rs:408:27:408:61 | ...::new(...) | provenance | MaD:25 | | test.rs:409:15:409:21 | reader2 | test.rs:409:14:409:21 | &reader2 | provenance | | | test.rs:413:17:413:26 | mut pinned | test.rs:414:19:414:24 | pinned | provenance | | | test.rs:413:17:413:26 | mut pinned | test.rs:416:26:416:31 | pinned | provenance | | | test.rs:413:17:413:26 | mut pinned [Pin, &ref] | test.rs:414:19:414:24 | pinned [Pin, &ref] | provenance | | | test.rs:413:30:413:51 | ...::new(...) | test.rs:413:17:413:26 | mut pinned | provenance | | | test.rs:413:30:413:51 | ...::new(...) [Pin, &ref] | test.rs:413:17:413:26 | mut pinned [Pin, &ref] | provenance | | -| test.rs:413:39:413:50 | &mut reader2 [&ref] | test.rs:413:30:413:51 | ...::new(...) | provenance | MaD:20 | -| test.rs:413:39:413:50 | &mut reader2 [&ref] | test.rs:413:30:413:51 | ...::new(...) [Pin, &ref] | provenance | MaD:21 | +| test.rs:413:39:413:50 | &mut reader2 [&ref] | test.rs:413:30:413:51 | ...::new(...) | provenance | MaD:21 | +| test.rs:413:39:413:50 | &mut reader2 [&ref] | test.rs:413:30:413:51 | ...::new(...) [Pin, &ref] | provenance | MaD:22 | | test.rs:413:44:413:50 | reader2 | test.rs:413:39:413:50 | &mut reader2 [&ref] | provenance | | | test.rs:414:19:414:24 | pinned | test.rs:414:18:414:24 | &pinned | provenance | | | test.rs:414:19:414:24 | pinned [Pin, &ref] | test.rs:414:18:414:24 | &pinned | provenance | | | test.rs:416:17:416:22 | buffer [Ready, Ok] | test.rs:417:20:417:39 | ...::Ready(...) [Ready, Ok] | provenance | | | test.rs:416:17:416:22 | buffer [Ready, Ok] | test.rs:418:23:418:28 | buffer [Ready, Ok] | provenance | | -| test.rs:416:26:416:31 | pinned | test.rs:416:26:416:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:8 | +| test.rs:416:26:416:31 | pinned | test.rs:416:26:416:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:9 | | test.rs:416:26:416:54 | pinned.poll_fill_buf(...) [Ready, Ok] | test.rs:416:17:416:22 | buffer [Ready, Ok] | provenance | | | test.rs:417:20:417:39 | ...::Ready(...) [Ready, Ok] | test.rs:417:32:417:38 | Ok(...) [Ok] | provenance | | | test.rs:417:32:417:38 | Ok(...) [Ok] | test.rs:417:35:417:37 | buf | provenance | | | test.rs:417:35:417:37 | buf | test.rs:419:22:419:24 | buf | provenance | | | test.rs:418:23:418:28 | buffer [Ready, Ok] | test.rs:418:22:418:28 | &buffer | provenance | | | test.rs:423:17:423:23 | buffer2 [Ready, Ok] | test.rs:424:20:424:26 | buffer2 [Ready, Ok] | provenance | | -| test.rs:423:27:423:48 | ...::new(...) | test.rs:423:27:423:71 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:8 | +| test.rs:423:27:423:48 | ...::new(...) | test.rs:423:27:423:71 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:9 | | test.rs:423:27:423:71 | ... .poll_fill_buf(...) [Ready, Ok] | test.rs:423:17:423:23 | buffer2 [Ready, Ok] | provenance | | -| test.rs:423:36:423:47 | &mut reader2 [&ref] | test.rs:423:27:423:48 | ...::new(...) | provenance | MaD:20 | +| test.rs:423:36:423:47 | &mut reader2 [&ref] | test.rs:423:27:423:48 | ...::new(...) | provenance | MaD:21 | | test.rs:423:41:423:47 | reader2 | test.rs:423:36:423:47 | &mut reader2 [&ref] | provenance | | | test.rs:424:20:424:26 | buffer2 [Ready, Ok] | test.rs:425:17:425:36 | ...::Ready(...) [Ready, Ok] | provenance | | | test.rs:424:20:424:26 | buffer2 [Ready, Ok] | test.rs:426:27:426:33 | buffer2 [Ready, Ok] | provenance | | @@ -237,7 +247,7 @@ edges | test.rs:425:32:425:34 | buf | test.rs:427:26:427:28 | buf | provenance | | | test.rs:426:27:426:33 | buffer2 [Ready, Ok] | test.rs:426:26:426:33 | &buffer2 | provenance | | | test.rs:437:17:437:22 | buffer | test.rs:438:18:438:23 | buffer | provenance | | -| test.rs:437:26:437:32 | reader2 | test.rs:437:26:437:43 | reader2.fill_buf() [future, Ok] | provenance | MaD:10 | +| test.rs:437:26:437:32 | reader2 | test.rs:437:26:437:43 | reader2.fill_buf() [future, Ok] | provenance | MaD:11 | | test.rs:437:26:437:43 | reader2.fill_buf() [future, Ok] | test.rs:437:26:437:49 | await ... [Ok] | provenance | | | test.rs:437:26:437:49 | await ... [Ok] | test.rs:437:26:437:50 | TryExpr | provenance | | | test.rs:437:26:437:50 | TryExpr | test.rs:437:17:437:22 | buffer | provenance | | @@ -246,58 +256,64 @@ edges | test.rs:444:17:444:26 | mut pinned [Pin, &ref] | test.rs:445:19:445:24 | pinned [Pin, &ref] | provenance | | | test.rs:444:30:444:51 | ...::new(...) | test.rs:444:17:444:26 | mut pinned | provenance | | | test.rs:444:30:444:51 | ...::new(...) [Pin, &ref] | test.rs:444:17:444:26 | mut pinned [Pin, &ref] | provenance | | -| test.rs:444:39:444:50 | &mut reader2 [&ref] | test.rs:444:30:444:51 | ...::new(...) | provenance | MaD:20 | -| test.rs:444:39:444:50 | &mut reader2 [&ref] | test.rs:444:30:444:51 | ...::new(...) [Pin, &ref] | provenance | MaD:21 | +| test.rs:444:39:444:50 | &mut reader2 [&ref] | test.rs:444:30:444:51 | ...::new(...) | provenance | MaD:21 | +| test.rs:444:39:444:50 | &mut reader2 [&ref] | test.rs:444:30:444:51 | ...::new(...) [Pin, &ref] | provenance | MaD:22 | | test.rs:444:44:444:50 | reader2 | test.rs:444:39:444:50 | &mut reader2 [&ref] | provenance | | | test.rs:445:19:445:24 | pinned | test.rs:445:18:445:24 | &pinned | provenance | | | test.rs:445:19:445:24 | pinned [Pin, &ref] | test.rs:445:18:445:24 | &pinned | provenance | | -| test.rs:447:30:447:35 | pinned | test.rs:447:56:447:66 | [post] &mut buffer [&ref] | provenance | MaD:9 | +| test.rs:447:30:447:35 | pinned | test.rs:447:56:447:66 | [post] &mut buffer [&ref] | provenance | MaD:10 | | test.rs:447:56:447:66 | [post] &mut buffer [&ref] | test.rs:447:61:447:66 | [post] buffer | provenance | | | test.rs:447:61:447:66 | [post] buffer | test.rs:448:19:448:24 | buffer | provenance | | +| test.rs:447:61:447:66 | [post] buffer | test.rs:450:23:450:28 | buffer | provenance | | | test.rs:447:61:447:66 | [post] buffer | test.rs:450:23:450:33 | buffer[...] | provenance | | | test.rs:448:19:448:24 | buffer | test.rs:448:18:448:24 | &buffer | provenance | | +| test.rs:450:23:450:28 | buffer | test.rs:450:23:450:33 | buffer[...] | provenance | MaD:8 | | test.rs:450:23:450:33 | buffer[...] | test.rs:450:22:450:33 | &... | provenance | | -| test.rs:457:63:457:74 | &mut reader2 [&ref] | test.rs:457:77:457:88 | [post] &mut buffer1 [&ref] | provenance | MaD:13 | +| test.rs:457:63:457:74 | &mut reader2 [&ref] | test.rs:457:77:457:88 | [post] &mut buffer1 [&ref] | provenance | MaD:14 | | test.rs:457:68:457:74 | reader2 | test.rs:457:63:457:74 | &mut reader2 [&ref] | provenance | | | test.rs:457:77:457:88 | [post] &mut buffer1 [&ref] | test.rs:457:82:457:88 | [post] buffer1 | provenance | | +| test.rs:457:82:457:88 | [post] buffer1 | test.rs:458:19:458:25 | buffer1 | provenance | | | test.rs:457:82:457:88 | [post] buffer1 | test.rs:458:19:458:40 | buffer1[...] | provenance | | +| test.rs:458:19:458:25 | buffer1 | test.rs:458:19:458:40 | buffer1[...] | provenance | MaD:8 | | test.rs:458:19:458:40 | buffer1[...] | test.rs:458:18:458:40 | &... | provenance | | -| test.rs:461:31:461:37 | reader2 | test.rs:461:44:461:55 | [post] &mut buffer2 [&ref] | provenance | MaD:13 | +| test.rs:461:31:461:37 | reader2 | test.rs:461:44:461:55 | [post] &mut buffer2 [&ref] | provenance | MaD:14 | | test.rs:461:44:461:55 | [post] &mut buffer2 [&ref] | test.rs:461:49:461:55 | [post] buffer2 | provenance | | +| test.rs:461:49:461:55 | [post] buffer2 | test.rs:462:19:462:25 | buffer2 | provenance | | | test.rs:461:49:461:55 | [post] buffer2 | test.rs:462:19:462:40 | buffer2[...] | provenance | | +| test.rs:462:19:462:25 | buffer2 | test.rs:462:19:462:40 | buffer2[...] | provenance | MaD:8 | | test.rs:462:19:462:40 | buffer2[...] | test.rs:462:18:462:40 | &... | provenance | | | test.rs:467:17:467:26 | mut pinned | test.rs:468:19:468:24 | pinned | provenance | | | test.rs:467:17:467:26 | mut pinned | test.rs:470:26:470:31 | pinned | provenance | | | test.rs:467:17:467:26 | mut pinned [Pin, &ref] | test.rs:468:19:468:24 | pinned [Pin, &ref] | provenance | | | test.rs:467:30:467:51 | ...::new(...) | test.rs:467:17:467:26 | mut pinned | provenance | | | test.rs:467:30:467:51 | ...::new(...) [Pin, &ref] | test.rs:467:17:467:26 | mut pinned [Pin, &ref] | provenance | | -| test.rs:467:39:467:50 | &mut reader2 [&ref] | test.rs:467:30:467:51 | ...::new(...) | provenance | MaD:20 | -| test.rs:467:39:467:50 | &mut reader2 [&ref] | test.rs:467:30:467:51 | ...::new(...) [Pin, &ref] | provenance | MaD:21 | +| test.rs:467:39:467:50 | &mut reader2 [&ref] | test.rs:467:30:467:51 | ...::new(...) | provenance | MaD:21 | +| test.rs:467:39:467:50 | &mut reader2 [&ref] | test.rs:467:30:467:51 | ...::new(...) [Pin, &ref] | provenance | MaD:22 | | test.rs:467:44:467:50 | reader2 | test.rs:467:39:467:50 | &mut reader2 [&ref] | provenance | | | test.rs:468:19:468:24 | pinned | test.rs:468:18:468:24 | &pinned | provenance | | | test.rs:468:19:468:24 | pinned [Pin, &ref] | test.rs:468:18:468:24 | &pinned | provenance | | | test.rs:470:17:470:22 | buffer [Ready, Ok] | test.rs:471:19:471:24 | buffer [Ready, Ok] | provenance | | | test.rs:470:17:470:22 | buffer [Ready, Ok] | test.rs:472:20:472:39 | ...::Ready(...) [Ready, Ok] | provenance | | -| test.rs:470:26:470:31 | pinned | test.rs:470:26:470:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:8 | +| test.rs:470:26:470:31 | pinned | test.rs:470:26:470:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:9 | | test.rs:470:26:470:54 | pinned.poll_fill_buf(...) [Ready, Ok] | test.rs:470:17:470:22 | buffer [Ready, Ok] | provenance | | | test.rs:471:19:471:24 | buffer [Ready, Ok] | test.rs:471:18:471:24 | &buffer | provenance | | | test.rs:472:20:472:39 | ...::Ready(...) [Ready, Ok] | test.rs:472:32:472:38 | Ok(...) [Ok] | provenance | | | test.rs:472:32:472:38 | Ok(...) [Ok] | test.rs:472:35:472:37 | buf | provenance | | | test.rs:472:35:472:37 | buf | test.rs:473:22:473:24 | buf | provenance | | | test.rs:479:17:479:22 | buffer | test.rs:480:18:480:23 | buffer | provenance | | -| test.rs:479:26:479:32 | reader2 | test.rs:479:26:479:43 | reader2.fill_buf() [future, Ok] | provenance | MaD:10 | +| test.rs:479:26:479:32 | reader2 | test.rs:479:26:479:43 | reader2.fill_buf() [future, Ok] | provenance | MaD:11 | | test.rs:479:26:479:43 | reader2.fill_buf() [future, Ok] | test.rs:479:26:479:49 | await ... [Ok] | provenance | | | test.rs:479:26:479:49 | await ... [Ok] | test.rs:479:26:479:50 | TryExpr | provenance | | | test.rs:479:26:479:50 | TryExpr | test.rs:479:17:479:22 | buffer | provenance | | -| test.rs:486:31:486:37 | reader2 | test.rs:486:57:486:65 | [post] &mut line [&ref] | provenance | MaD:12 | +| test.rs:486:31:486:37 | reader2 | test.rs:486:57:486:65 | [post] &mut line [&ref] | provenance | MaD:13 | | test.rs:486:57:486:65 | [post] &mut line [&ref] | test.rs:486:62:486:65 | [post] line | provenance | | | test.rs:486:62:486:65 | [post] line | test.rs:487:19:487:22 | line | provenance | | | test.rs:487:19:487:22 | line | test.rs:487:18:487:22 | &line | provenance | | -| test.rs:493:31:493:37 | reader2 | test.rs:493:49:493:57 | [post] &mut line [&ref] | provenance | MaD:11 | +| test.rs:493:31:493:37 | reader2 | test.rs:493:49:493:57 | [post] &mut line [&ref] | provenance | MaD:12 | | test.rs:493:49:493:57 | [post] &mut line [&ref] | test.rs:493:54:493:57 | [post] line | provenance | | | test.rs:493:54:493:57 | [post] line | test.rs:494:19:494:22 | line | provenance | | | test.rs:494:19:494:22 | line | test.rs:494:18:494:22 | &line | provenance | | -| test.rs:500:31:500:37 | reader2 | test.rs:500:51:500:61 | [post] &mut buffer [&ref] | provenance | MaD:14 | +| test.rs:500:31:500:37 | reader2 | test.rs:500:51:500:61 | [post] &mut buffer [&ref] | provenance | MaD:15 | | test.rs:500:51:500:61 | [post] &mut buffer [&ref] | test.rs:500:56:500:61 | [post] buffer | provenance | | | test.rs:500:56:500:61 | [post] buffer | test.rs:501:19:501:24 | buffer | provenance | | | test.rs:501:19:501:24 | buffer | test.rs:501:18:501:24 | &buffer | provenance | | @@ -389,6 +405,7 @@ nodes | test.rs:162:34:162:39 | [post] buffer | semmle.label | [post] buffer | | test.rs:165:14:165:20 | &buffer | semmle.label | &buffer | | test.rs:165:15:165:20 | buffer | semmle.label | buffer | +| test.rs:166:14:166:19 | buffer | semmle.label | buffer | | test.rs:166:14:166:22 | buffer[0] | semmle.label | buffer[0] | | test.rs:174:13:174:22 | mut stream | semmle.label | mut stream | | test.rs:174:26:174:61 | ...::connect_timeout | semmle.label | ...::connect_timeout | @@ -416,9 +433,11 @@ nodes | test.rs:236:41:236:47 | [post] buffer2 | semmle.label | [post] buffer2 | | test.rs:239:14:239:21 | &buffer1 | semmle.label | &buffer1 | | test.rs:239:15:239:21 | buffer1 | semmle.label | buffer1 | +| test.rs:240:14:240:20 | buffer1 | semmle.label | buffer1 | | test.rs:240:14:240:23 | buffer1[0] | semmle.label | buffer1[0] | | test.rs:243:14:243:21 | &buffer2 | semmle.label | &buffer2 | | test.rs:243:15:243:21 | buffer2 | semmle.label | buffer2 | +| test.rs:244:14:244:20 | buffer2 | semmle.label | buffer2 | | test.rs:244:14:244:23 | buffer2[0] | semmle.label | buffer2[0] | | test.rs:252:19:252:30 | tokio_stream | semmle.label | tokio_stream | | test.rs:252:41:252:51 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | @@ -459,17 +478,20 @@ nodes | test.rs:391:22:391:28 | &buffer | semmle.label | &buffer | | test.rs:391:23:391:28 | buffer | semmle.label | buffer | | test.rs:392:22:392:33 | &... | semmle.label | &... | +| test.rs:392:23:392:28 | buffer | semmle.label | buffer | | test.rs:392:23:392:33 | buffer[...] | semmle.label | buffer[...] | | test.rs:399:63:399:73 | &mut reader [&ref] | semmle.label | &mut reader [&ref] | | test.rs:399:68:399:73 | reader | semmle.label | reader | | test.rs:399:76:399:87 | [post] &mut buffer1 [&ref] | semmle.label | [post] &mut buffer1 [&ref] | | test.rs:399:81:399:87 | [post] buffer1 | semmle.label | [post] buffer1 | | test.rs:400:18:400:40 | &... | semmle.label | &... | +| test.rs:400:19:400:25 | buffer1 | semmle.label | buffer1 | | test.rs:400:19:400:40 | buffer1[...] | semmle.label | buffer1[...] | | test.rs:403:31:403:36 | reader | semmle.label | reader | | test.rs:403:43:403:54 | [post] &mut buffer2 [&ref] | semmle.label | [post] &mut buffer2 [&ref] | | test.rs:403:48:403:54 | [post] buffer2 | semmle.label | [post] buffer2 | | test.rs:405:18:405:40 | &... | semmle.label | &... | +| test.rs:405:19:405:25 | buffer2 | semmle.label | buffer2 | | test.rs:405:19:405:40 | buffer2[...] | semmle.label | buffer2[...] | | test.rs:408:13:408:23 | mut reader2 | semmle.label | mut reader2 | | test.rs:408:27:408:61 | ...::new(...) | semmle.label | ...::new(...) | @@ -527,17 +549,20 @@ nodes | test.rs:448:18:448:24 | &buffer | semmle.label | &buffer | | test.rs:448:19:448:24 | buffer | semmle.label | buffer | | test.rs:450:22:450:33 | &... | semmle.label | &... | +| test.rs:450:23:450:28 | buffer | semmle.label | buffer | | test.rs:450:23:450:33 | buffer[...] | semmle.label | buffer[...] | | test.rs:457:63:457:74 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | | test.rs:457:68:457:74 | reader2 | semmle.label | reader2 | | test.rs:457:77:457:88 | [post] &mut buffer1 [&ref] | semmle.label | [post] &mut buffer1 [&ref] | | test.rs:457:82:457:88 | [post] buffer1 | semmle.label | [post] buffer1 | | test.rs:458:18:458:40 | &... | semmle.label | &... | +| test.rs:458:19:458:25 | buffer1 | semmle.label | buffer1 | | test.rs:458:19:458:40 | buffer1[...] | semmle.label | buffer1[...] | | test.rs:461:31:461:37 | reader2 | semmle.label | reader2 | | test.rs:461:44:461:55 | [post] &mut buffer2 [&ref] | semmle.label | [post] &mut buffer2 [&ref] | | test.rs:461:49:461:55 | [post] buffer2 | semmle.label | [post] buffer2 | | test.rs:462:18:462:40 | &... | semmle.label | &... | +| test.rs:462:19:462:25 | buffer2 | semmle.label | buffer2 | | test.rs:462:19:462:40 | buffer2[...] | semmle.label | buffer2[...] | | test.rs:467:17:467:26 | mut pinned | semmle.label | mut pinned | | test.rs:467:17:467:26 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] | diff --git a/rust/ql/test/library-tests/dataflow/sources/stdin/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/stdin/InlineFlow.expected index 6fc049f5fef..01693b0041f 100644 --- a/rust/ql/test/library-tests/dataflow/sources/stdin/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/stdin/InlineFlow.expected @@ -1,149 +1,151 @@ models | 1 | Source: std::io::stdio::stdin; ReturnValue; stdin | | 2 | Source: tokio::io::stdin::stdin; ReturnValue; stdin | -| 3 | Summary: <_ as std::io::BufRead>::fill_buf; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 4 | Summary: <_ as std::io::BufRead>::lines; Argument[self]; ReturnValue; taint | -| 5 | Summary: <_ as std::io::BufRead>::read_line; Argument[self].Reference; Argument[0].Reference; taint | -| 6 | Summary: <_ as std::io::BufRead>::read_until; Argument[self].Reference; Argument[1].Reference; taint | -| 7 | Summary: <_ as std::io::BufRead>::split; Argument[self]; ReturnValue; taint | -| 8 | Summary: <_ as std::io::Read>::bytes; Argument[self]; ReturnValue; taint | -| 9 | Summary: <_ as std::io::Read>::read; Argument[self].Reference; Argument[0].Reference; taint | -| 10 | Summary: <_ as std::io::Read>::read_exact; Argument[self].Reference; Argument[0].Reference; taint | -| 11 | Summary: <_ as std::io::Read>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | -| 12 | Summary: <_ as std::io::Read>::read_to_string; Argument[self].Reference; Argument[0].Reference; taint | -| 13 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::fill_buf; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 14 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::lines; Argument[self]; ReturnValue; taint | -| 15 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_line; Argument[self].Reference; Argument[0].Reference; taint | -| 16 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_until; Argument[self].Reference; Argument[1].Reference; taint | -| 17 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::split; Argument[self]; ReturnValue; taint | -| 18 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | -| 19 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_buf; Argument[self].Reference; Argument[0].Reference; taint | -| 20 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_exact; Argument[self].Reference; Argument[0].Reference; taint | -| 21 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f32; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 22 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 23 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64_le; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 24 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | -| 25 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string; Argument[self].Reference; Argument[0].Reference; taint | -| 26 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 27 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 28 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 29 | Summary: ::next; Argument[self].Reference.Element; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; value | -| 30 | Summary: ::buffer; Argument[self].Reference; ReturnValue.Reference; taint | -| 31 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 32 | Summary: ::lock; Argument[self].Reference; ReturnValue; taint | -| 33 | Summary: ::buffer; Argument[self].Reference; ReturnValue.Reference; taint | -| 34 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 35 | Summary: ::next_line; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | -| 36 | Summary: ::next_segment; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 3 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 4 | Summary: <_ as std::io::BufRead>::fill_buf; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 5 | Summary: <_ as std::io::BufRead>::lines; Argument[self]; ReturnValue; taint | +| 6 | Summary: <_ as std::io::BufRead>::read_line; Argument[self].Reference; Argument[0].Reference; taint | +| 7 | Summary: <_ as std::io::BufRead>::read_until; Argument[self].Reference; Argument[1].Reference; taint | +| 8 | Summary: <_ as std::io::BufRead>::split; Argument[self]; ReturnValue; taint | +| 9 | Summary: <_ as std::io::Read>::bytes; Argument[self]; ReturnValue; taint | +| 10 | Summary: <_ as std::io::Read>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 11 | Summary: <_ as std::io::Read>::read_exact; Argument[self].Reference; Argument[0].Reference; taint | +| 12 | Summary: <_ as std::io::Read>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | +| 13 | Summary: <_ as std::io::Read>::read_to_string; Argument[self].Reference; Argument[0].Reference; taint | +| 14 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::fill_buf; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 15 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::lines; Argument[self]; ReturnValue; taint | +| 16 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_line; Argument[self].Reference; Argument[0].Reference; taint | +| 17 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_until; Argument[self].Reference; Argument[1].Reference; taint | +| 18 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::split; Argument[self]; ReturnValue; taint | +| 19 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 20 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_buf; Argument[self].Reference; Argument[0].Reference; taint | +| 21 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_exact; Argument[self].Reference; Argument[0].Reference; taint | +| 22 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f32; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 23 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 24 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64_le; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 25 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | +| 26 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string; Argument[self].Reference; Argument[0].Reference; taint | +| 27 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 28 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 29 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 30 | Summary: ::next; Argument[self].Reference.Element; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; value | +| 31 | Summary: ::buffer; Argument[self].Reference; ReturnValue.Reference; taint | +| 32 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 33 | Summary: ::lock; Argument[self].Reference; ReturnValue; taint | +| 34 | Summary: ::buffer; Argument[self].Reference; ReturnValue.Reference; taint | +| 35 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 36 | Summary: ::next_line; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 37 | Summary: ::next_segment; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | edges | test.rs:13:22:13:35 | ...::stdin | test.rs:13:22:13:37 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:13:22:13:37 | ...::stdin(...) | test.rs:13:44:13:54 | [post] &mut buffer [&ref] | provenance | MaD:9 | +| test.rs:13:22:13:37 | ...::stdin(...) | test.rs:13:44:13:54 | [post] &mut buffer [&ref] | provenance | MaD:10 | | test.rs:13:44:13:54 | [post] &mut buffer [&ref] | test.rs:13:49:13:54 | [post] buffer | provenance | | | test.rs:13:49:13:54 | [post] buffer | test.rs:14:15:14:20 | buffer | provenance | | | test.rs:14:15:14:20 | buffer | test.rs:14:14:14:20 | &buffer | provenance | | | test.rs:19:22:19:35 | ...::stdin | test.rs:19:22:19:37 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:19:22:19:37 | ...::stdin(...) | test.rs:19:51:19:61 | [post] &mut buffer [&ref] | provenance | MaD:11 | +| test.rs:19:22:19:37 | ...::stdin(...) | test.rs:19:51:19:61 | [post] &mut buffer [&ref] | provenance | MaD:12 | | test.rs:19:51:19:61 | [post] &mut buffer [&ref] | test.rs:19:56:19:61 | [post] buffer | provenance | | | test.rs:19:56:19:61 | [post] buffer | test.rs:20:15:20:20 | buffer | provenance | | | test.rs:20:15:20:20 | buffer | test.rs:20:14:20:20 | &buffer | provenance | | | test.rs:25:22:25:35 | ...::stdin | test.rs:25:22:25:37 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:25:22:25:37 | ...::stdin(...) | test.rs:25:54:25:64 | [post] &mut buffer [&ref] | provenance | MaD:12 | +| test.rs:25:22:25:37 | ...::stdin(...) | test.rs:25:54:25:64 | [post] &mut buffer [&ref] | provenance | MaD:13 | | test.rs:25:54:25:64 | [post] &mut buffer [&ref] | test.rs:25:59:25:64 | [post] buffer | provenance | | | test.rs:25:59:25:64 | [post] buffer | test.rs:26:15:26:20 | buffer | provenance | | | test.rs:26:15:26:20 | buffer | test.rs:26:14:26:20 | &buffer | provenance | | | test.rs:31:22:31:35 | ...::stdin | test.rs:31:22:31:37 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:31:22:31:37 | ...::stdin(...) | test.rs:31:22:31:44 | ... .lock() | provenance | MaD:32 | -| test.rs:31:22:31:44 | ... .lock() | test.rs:31:61:31:71 | [post] &mut buffer [&ref] | provenance | MaD:12 | +| test.rs:31:22:31:37 | ...::stdin(...) | test.rs:31:22:31:44 | ... .lock() | provenance | MaD:33 | +| test.rs:31:22:31:44 | ... .lock() | test.rs:31:61:31:71 | [post] &mut buffer [&ref] | provenance | MaD:13 | | test.rs:31:61:31:71 | [post] &mut buffer [&ref] | test.rs:31:66:31:71 | [post] buffer | provenance | | | test.rs:31:66:31:71 | [post] buffer | test.rs:32:15:32:20 | buffer | provenance | | | test.rs:32:15:32:20 | buffer | test.rs:32:14:32:20 | &buffer | provenance | | | test.rs:37:9:37:22 | ...::stdin | test.rs:37:9:37:24 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:37:9:37:24 | ...::stdin(...) | test.rs:37:37:37:47 | [post] &mut buffer [&ref] | provenance | MaD:10 | +| test.rs:37:9:37:24 | ...::stdin(...) | test.rs:37:37:37:47 | [post] &mut buffer [&ref] | provenance | MaD:11 | | test.rs:37:37:37:47 | [post] &mut buffer [&ref] | test.rs:37:42:37:47 | [post] buffer | provenance | | | test.rs:37:42:37:47 | [post] buffer | test.rs:38:15:38:20 | buffer | provenance | | | test.rs:38:15:38:20 | buffer | test.rs:38:14:38:20 | &buffer | provenance | | | test.rs:41:17:41:30 | ...::stdin | test.rs:41:17:41:32 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:41:17:41:32 | ...::stdin(...) | test.rs:41:17:41:40 | ... .bytes() | provenance | MaD:8 | +| test.rs:41:17:41:32 | ...::stdin(...) | test.rs:41:17:41:40 | ... .bytes() | provenance | MaD:9 | | test.rs:41:17:41:40 | ... .bytes() | test.rs:42:14:42:17 | byte | provenance | | | test.rs:48:13:48:22 | mut reader | test.rs:49:20:49:25 | reader | provenance | | | test.rs:48:26:48:66 | ...::new(...) | test.rs:48:13:48:22 | mut reader | provenance | | | test.rs:48:50:48:63 | ...::stdin | test.rs:48:50:48:65 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:48:50:48:65 | ...::stdin(...) | test.rs:48:26:48:66 | ...::new(...) | provenance | MaD:31 | +| test.rs:48:50:48:65 | ...::stdin(...) | test.rs:48:26:48:66 | ...::new(...) | provenance | MaD:32 | | test.rs:49:13:49:16 | data | test.rs:50:15:50:18 | data | provenance | | -| test.rs:49:20:49:25 | reader | test.rs:49:20:49:36 | reader.fill_buf() [Ok] | provenance | MaD:3 | +| test.rs:49:20:49:25 | reader | test.rs:49:20:49:36 | reader.fill_buf() [Ok] | provenance | MaD:4 | | test.rs:49:20:49:36 | reader.fill_buf() [Ok] | test.rs:49:20:49:37 | TryExpr | provenance | | | test.rs:49:20:49:37 | TryExpr | test.rs:49:13:49:16 | data | provenance | | | test.rs:50:15:50:18 | data | test.rs:50:14:50:18 | &data | provenance | | | test.rs:54:13:54:18 | reader | test.rs:55:20:55:25 | reader | provenance | | | test.rs:54:22:54:62 | ...::new(...) | test.rs:54:13:54:18 | reader | provenance | | | test.rs:54:46:54:59 | ...::stdin | test.rs:54:46:54:61 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:54:46:54:61 | ...::stdin(...) | test.rs:54:22:54:62 | ...::new(...) | provenance | MaD:31 | +| test.rs:54:46:54:61 | ...::stdin(...) | test.rs:54:22:54:62 | ...::new(...) | provenance | MaD:32 | | test.rs:55:13:55:16 | data [&ref] | test.rs:56:15:56:18 | data [&ref] | provenance | | -| test.rs:55:20:55:25 | reader | test.rs:55:20:55:34 | reader.buffer() [&ref] | provenance | MaD:30 | +| test.rs:55:20:55:25 | reader | test.rs:55:20:55:34 | reader.buffer() [&ref] | provenance | MaD:31 | | test.rs:55:20:55:34 | reader.buffer() [&ref] | test.rs:55:13:55:16 | data [&ref] | provenance | | | test.rs:56:15:56:18 | data [&ref] | test.rs:56:14:56:18 | &data | provenance | | | test.rs:61:13:61:22 | mut reader | test.rs:62:9:62:14 | reader | provenance | | | test.rs:61:26:61:66 | ...::new(...) | test.rs:61:13:61:22 | mut reader | provenance | | | test.rs:61:50:61:63 | ...::stdin | test.rs:61:50:61:65 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:61:50:61:65 | ...::stdin(...) | test.rs:61:26:61:66 | ...::new(...) | provenance | MaD:31 | -| test.rs:62:9:62:14 | reader | test.rs:62:26:62:36 | [post] &mut buffer [&ref] | provenance | MaD:5 | +| test.rs:61:50:61:65 | ...::stdin(...) | test.rs:61:26:61:66 | ...::new(...) | provenance | MaD:32 | +| test.rs:62:9:62:14 | reader | test.rs:62:26:62:36 | [post] &mut buffer [&ref] | provenance | MaD:6 | | test.rs:62:26:62:36 | [post] &mut buffer [&ref] | test.rs:62:31:62:36 | [post] buffer | provenance | | | test.rs:62:31:62:36 | [post] buffer | test.rs:63:15:63:20 | buffer | provenance | | | test.rs:63:15:63:20 | buffer | test.rs:63:14:63:20 | &buffer | provenance | | | test.rs:68:13:68:22 | mut reader | test.rs:69:9:69:14 | reader | provenance | | | test.rs:68:26:68:66 | ...::new(...) | test.rs:68:13:68:22 | mut reader | provenance | | | test.rs:68:50:68:63 | ...::stdin | test.rs:68:50:68:65 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:68:50:68:65 | ...::stdin(...) | test.rs:68:26:68:66 | ...::new(...) | provenance | MaD:31 | -| test.rs:69:9:69:14 | reader | test.rs:69:33:69:43 | [post] &mut buffer [&ref] | provenance | MaD:6 | +| test.rs:68:50:68:65 | ...::stdin(...) | test.rs:68:26:68:66 | ...::new(...) | provenance | MaD:32 | +| test.rs:69:9:69:14 | reader | test.rs:69:33:69:43 | [post] &mut buffer [&ref] | provenance | MaD:7 | | test.rs:69:33:69:43 | [post] &mut buffer [&ref] | test.rs:69:38:69:43 | [post] buffer | provenance | | | test.rs:69:38:69:43 | [post] buffer | test.rs:70:15:70:20 | buffer | provenance | | -| test.rs:69:38:69:43 | [post] buffer | test.rs:71:14:71:22 | buffer[0] | provenance | | +| test.rs:69:38:69:43 | [post] buffer | test.rs:71:14:71:19 | buffer | provenance | | | test.rs:70:15:70:20 | buffer | test.rs:70:14:70:20 | &buffer | provenance | | +| test.rs:71:14:71:19 | buffer | test.rs:71:14:71:22 | buffer[0] | provenance | MaD:3 | | test.rs:75:13:75:28 | mut reader_split | test.rs:76:14:76:25 | reader_split | provenance | | | test.rs:75:13:75:28 | mut reader_split | test.rs:77:33:77:44 | reader_split | provenance | | -| test.rs:75:32:75:72 | ...::new(...) | test.rs:75:32:75:84 | ... .split(...) | provenance | MaD:7 | +| test.rs:75:32:75:72 | ...::new(...) | test.rs:75:32:75:84 | ... .split(...) | provenance | MaD:8 | | test.rs:75:32:75:84 | ... .split(...) | test.rs:75:13:75:28 | mut reader_split | provenance | | | test.rs:75:56:75:69 | ...::stdin | test.rs:75:56:75:71 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:75:56:75:71 | ...::stdin(...) | test.rs:75:32:75:72 | ...::new(...) | provenance | MaD:31 | -| test.rs:76:14:76:25 | reader_split | test.rs:76:14:76:32 | reader_split.next() [Some, Ok] | provenance | MaD:29 | -| test.rs:76:14:76:32 | reader_split.next() [Some, Ok] | test.rs:76:14:76:41 | ... .unwrap() [Ok] | provenance | MaD:27 | -| test.rs:76:14:76:41 | ... .unwrap() [Ok] | test.rs:76:14:76:50 | ... .unwrap() | provenance | MaD:28 | +| test.rs:75:56:75:71 | ...::stdin(...) | test.rs:75:32:75:72 | ...::new(...) | provenance | MaD:32 | +| test.rs:76:14:76:25 | reader_split | test.rs:76:14:76:32 | reader_split.next() [Some, Ok] | provenance | MaD:30 | +| test.rs:76:14:76:32 | reader_split.next() [Some, Ok] | test.rs:76:14:76:41 | ... .unwrap() [Ok] | provenance | MaD:28 | +| test.rs:76:14:76:41 | ... .unwrap() [Ok] | test.rs:76:14:76:50 | ... .unwrap() | provenance | MaD:29 | | test.rs:77:19:77:29 | Some(...) [Some, Ok] | test.rs:77:24:77:28 | chunk [Ok] | provenance | | | test.rs:77:24:77:28 | chunk [Ok] | test.rs:78:18:78:22 | chunk [Ok] | provenance | | -| test.rs:77:33:77:44 | reader_split | test.rs:77:33:77:51 | reader_split.next() [Some, Ok] | provenance | MaD:29 | +| test.rs:77:33:77:44 | reader_split | test.rs:77:33:77:51 | reader_split.next() [Some, Ok] | provenance | MaD:30 | | test.rs:77:33:77:51 | reader_split.next() [Some, Ok] | test.rs:77:19:77:29 | Some(...) [Some, Ok] | provenance | | -| test.rs:78:18:78:22 | chunk [Ok] | test.rs:78:18:78:31 | chunk.unwrap() | provenance | MaD:28 | +| test.rs:78:18:78:22 | chunk [Ok] | test.rs:78:18:78:31 | chunk.unwrap() | provenance | MaD:29 | | test.rs:83:13:83:18 | reader | test.rs:84:21:84:26 | reader | provenance | | | test.rs:83:22:83:62 | ...::new(...) | test.rs:83:13:83:18 | reader | provenance | | | test.rs:83:46:83:59 | ...::stdin | test.rs:83:46:83:61 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | -| test.rs:83:46:83:61 | ...::stdin(...) | test.rs:83:22:83:62 | ...::new(...) | provenance | MaD:31 | -| test.rs:84:21:84:26 | reader | test.rs:84:21:84:34 | reader.lines() | provenance | MaD:4 | +| test.rs:83:46:83:61 | ...::stdin(...) | test.rs:83:22:83:62 | ...::new(...) | provenance | MaD:32 | +| test.rs:84:21:84:26 | reader | test.rs:84:21:84:34 | reader.lines() | provenance | MaD:5 | | test.rs:84:21:84:34 | reader.lines() | test.rs:85:18:85:21 | line | provenance | | | test.rs:109:13:109:21 | mut stdin | test.rs:111:22:111:26 | stdin | provenance | | | test.rs:109:25:109:40 | ...::stdin | test.rs:109:25:109:42 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | | test.rs:109:25:109:42 | ...::stdin(...) | test.rs:109:13:109:21 | mut stdin | provenance | | -| test.rs:111:22:111:26 | stdin | test.rs:111:33:111:43 | [post] &mut buffer [&ref] | provenance | MaD:18 | +| test.rs:111:22:111:26 | stdin | test.rs:111:33:111:43 | [post] &mut buffer [&ref] | provenance | MaD:19 | | test.rs:111:33:111:43 | [post] &mut buffer [&ref] | test.rs:111:38:111:43 | [post] buffer | provenance | | | test.rs:111:38:111:43 | [post] buffer | test.rs:112:15:112:20 | buffer | provenance | | | test.rs:112:15:112:20 | buffer | test.rs:112:14:112:20 | &buffer | provenance | | | test.rs:116:13:116:21 | mut stdin | test.rs:118:22:118:26 | stdin | provenance | | | test.rs:116:25:116:40 | ...::stdin | test.rs:116:25:116:42 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | | test.rs:116:25:116:42 | ...::stdin(...) | test.rs:116:13:116:21 | mut stdin | provenance | | -| test.rs:118:22:118:26 | stdin | test.rs:118:40:118:50 | [post] &mut buffer [&ref] | provenance | MaD:24 | +| test.rs:118:22:118:26 | stdin | test.rs:118:40:118:50 | [post] &mut buffer [&ref] | provenance | MaD:25 | | test.rs:118:40:118:50 | [post] &mut buffer [&ref] | test.rs:118:45:118:50 | [post] buffer | provenance | | | test.rs:118:45:118:50 | [post] buffer | test.rs:119:15:119:20 | buffer | provenance | | | test.rs:119:15:119:20 | buffer | test.rs:119:14:119:20 | &buffer | provenance | | | test.rs:123:13:123:21 | mut stdin | test.rs:125:22:125:26 | stdin | provenance | | | test.rs:123:25:123:40 | ...::stdin | test.rs:123:25:123:42 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | | test.rs:123:25:123:42 | ...::stdin(...) | test.rs:123:13:123:21 | mut stdin | provenance | | -| test.rs:125:22:125:26 | stdin | test.rs:125:43:125:53 | [post] &mut buffer [&ref] | provenance | MaD:25 | +| test.rs:125:22:125:26 | stdin | test.rs:125:43:125:53 | [post] &mut buffer [&ref] | provenance | MaD:26 | | test.rs:125:43:125:53 | [post] &mut buffer [&ref] | test.rs:125:48:125:53 | [post] buffer | provenance | | | test.rs:125:48:125:53 | [post] buffer | test.rs:126:15:126:20 | buffer | provenance | | | test.rs:126:15:126:20 | buffer | test.rs:126:14:126:20 | &buffer | provenance | | | test.rs:130:13:130:21 | mut stdin | test.rs:132:9:132:13 | stdin | provenance | | | test.rs:130:25:130:40 | ...::stdin | test.rs:130:25:130:42 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | | test.rs:130:25:130:42 | ...::stdin(...) | test.rs:130:13:130:21 | mut stdin | provenance | | -| test.rs:132:9:132:13 | stdin | test.rs:132:26:132:36 | [post] &mut buffer [&ref] | provenance | MaD:20 | +| test.rs:132:9:132:13 | stdin | test.rs:132:26:132:36 | [post] &mut buffer [&ref] | provenance | MaD:21 | | test.rs:132:26:132:36 | [post] &mut buffer [&ref] | test.rs:132:31:132:36 | [post] buffer | provenance | | | test.rs:132:31:132:36 | [post] buffer | test.rs:133:15:133:20 | buffer | provenance | | | test.rs:133:15:133:20 | buffer | test.rs:133:14:133:20 | &buffer | provenance | | @@ -154,38 +156,38 @@ edges | test.rs:137:25:137:40 | ...::stdin | test.rs:137:25:137:42 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | | test.rs:137:25:137:42 | ...::stdin(...) | test.rs:137:13:137:21 | mut stdin | provenance | | | test.rs:138:13:138:14 | v1 | test.rs:142:14:142:15 | v1 | provenance | | -| test.rs:138:18:138:22 | stdin | test.rs:138:18:138:32 | stdin.read_u8() [future, Ok] | provenance | MaD:26 | +| test.rs:138:18:138:22 | stdin | test.rs:138:18:138:32 | stdin.read_u8() [future, Ok] | provenance | MaD:27 | | test.rs:138:18:138:32 | stdin.read_u8() [future, Ok] | test.rs:138:18:138:38 | await ... [Ok] | provenance | | | test.rs:138:18:138:38 | await ... [Ok] | test.rs:138:18:138:39 | TryExpr | provenance | | | test.rs:138:18:138:39 | TryExpr | test.rs:138:13:138:14 | v1 | provenance | | | test.rs:139:13:139:14 | v2 | test.rs:143:14:143:15 | v2 | provenance | | -| test.rs:139:18:139:22 | stdin | test.rs:139:18:139:33 | stdin.read_i16() [future, Ok] | provenance | MaD:22 | +| test.rs:139:18:139:22 | stdin | test.rs:139:18:139:33 | stdin.read_i16() [future, Ok] | provenance | MaD:23 | | test.rs:139:18:139:33 | stdin.read_i16() [future, Ok] | test.rs:139:18:139:39 | await ... [Ok] | provenance | | | test.rs:139:18:139:39 | await ... [Ok] | test.rs:139:18:139:40 | TryExpr | provenance | | | test.rs:139:18:139:40 | TryExpr | test.rs:139:13:139:14 | v2 | provenance | | | test.rs:140:13:140:14 | v3 | test.rs:144:14:144:15 | v3 | provenance | | -| test.rs:140:18:140:22 | stdin | test.rs:140:18:140:33 | stdin.read_f32() [future, Ok] | provenance | MaD:21 | +| test.rs:140:18:140:22 | stdin | test.rs:140:18:140:33 | stdin.read_f32() [future, Ok] | provenance | MaD:22 | | test.rs:140:18:140:33 | stdin.read_f32() [future, Ok] | test.rs:140:18:140:39 | await ... [Ok] | provenance | | | test.rs:140:18:140:39 | await ... [Ok] | test.rs:140:18:140:40 | TryExpr | provenance | | | test.rs:140:18:140:40 | TryExpr | test.rs:140:13:140:14 | v3 | provenance | | | test.rs:141:13:141:14 | v4 | test.rs:145:14:145:15 | v4 | provenance | | -| test.rs:141:18:141:22 | stdin | test.rs:141:18:141:36 | stdin.read_i64_le() [future, Ok] | provenance | MaD:23 | +| test.rs:141:18:141:22 | stdin | test.rs:141:18:141:36 | stdin.read_i64_le() [future, Ok] | provenance | MaD:24 | | test.rs:141:18:141:36 | stdin.read_i64_le() [future, Ok] | test.rs:141:18:141:42 | await ... [Ok] | provenance | | | test.rs:141:18:141:42 | await ... [Ok] | test.rs:141:18:141:43 | TryExpr | provenance | | | test.rs:141:18:141:43 | TryExpr | test.rs:141:13:141:14 | v4 | provenance | | | test.rs:149:13:149:21 | mut stdin | test.rs:151:9:151:13 | stdin | provenance | | | test.rs:149:25:149:40 | ...::stdin | test.rs:149:25:149:42 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | | test.rs:149:25:149:42 | ...::stdin(...) | test.rs:149:13:149:21 | mut stdin | provenance | | -| test.rs:151:9:151:13 | stdin | test.rs:151:24:151:34 | [post] &mut buffer [&ref] | provenance | MaD:19 | +| test.rs:151:9:151:13 | stdin | test.rs:151:24:151:34 | [post] &mut buffer [&ref] | provenance | MaD:20 | | test.rs:151:24:151:34 | [post] &mut buffer [&ref] | test.rs:151:29:151:34 | [post] buffer | provenance | | | test.rs:151:29:151:34 | [post] buffer | test.rs:152:15:152:20 | buffer | provenance | | | test.rs:152:15:152:20 | buffer | test.rs:152:14:152:20 | &buffer | provenance | | | test.rs:158:13:158:22 | mut reader | test.rs:159:20:159:25 | reader | provenance | | | test.rs:158:26:158:70 | ...::new(...) | test.rs:158:13:158:22 | mut reader | provenance | | | test.rs:158:52:158:67 | ...::stdin | test.rs:158:52:158:69 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | -| test.rs:158:52:158:69 | ...::stdin(...) | test.rs:158:26:158:70 | ...::new(...) | provenance | MaD:34 | +| test.rs:158:52:158:69 | ...::stdin(...) | test.rs:158:26:158:70 | ...::new(...) | provenance | MaD:35 | | test.rs:159:13:159:16 | data | test.rs:160:15:160:18 | data | provenance | | -| test.rs:159:20:159:25 | reader | test.rs:159:20:159:36 | reader.fill_buf() [future, Ok] | provenance | MaD:13 | +| test.rs:159:20:159:25 | reader | test.rs:159:20:159:36 | reader.fill_buf() [future, Ok] | provenance | MaD:14 | | test.rs:159:20:159:36 | reader.fill_buf() [future, Ok] | test.rs:159:20:159:42 | await ... [Ok] | provenance | | | test.rs:159:20:159:42 | await ... [Ok] | test.rs:159:20:159:43 | TryExpr | provenance | | | test.rs:159:20:159:43 | TryExpr | test.rs:159:13:159:16 | data | provenance | | @@ -193,59 +195,60 @@ edges | test.rs:164:13:164:18 | reader | test.rs:165:20:165:25 | reader | provenance | | | test.rs:164:22:164:66 | ...::new(...) | test.rs:164:13:164:18 | reader | provenance | | | test.rs:164:48:164:63 | ...::stdin | test.rs:164:48:164:65 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | -| test.rs:164:48:164:65 | ...::stdin(...) | test.rs:164:22:164:66 | ...::new(...) | provenance | MaD:34 | +| test.rs:164:48:164:65 | ...::stdin(...) | test.rs:164:22:164:66 | ...::new(...) | provenance | MaD:35 | | test.rs:165:13:165:16 | data [&ref] | test.rs:166:15:166:18 | data [&ref] | provenance | | -| test.rs:165:20:165:25 | reader | test.rs:165:20:165:34 | reader.buffer() [&ref] | provenance | MaD:33 | +| test.rs:165:20:165:25 | reader | test.rs:165:20:165:34 | reader.buffer() [&ref] | provenance | MaD:34 | | test.rs:165:20:165:34 | reader.buffer() [&ref] | test.rs:165:13:165:16 | data [&ref] | provenance | | | test.rs:166:15:166:18 | data [&ref] | test.rs:166:14:166:18 | &data | provenance | | | test.rs:171:13:171:22 | mut reader | test.rs:172:9:172:14 | reader | provenance | | | test.rs:171:26:171:70 | ...::new(...) | test.rs:171:13:171:22 | mut reader | provenance | | | test.rs:171:52:171:67 | ...::stdin | test.rs:171:52:171:69 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | -| test.rs:171:52:171:69 | ...::stdin(...) | test.rs:171:26:171:70 | ...::new(...) | provenance | MaD:34 | -| test.rs:172:9:172:14 | reader | test.rs:172:26:172:36 | [post] &mut buffer [&ref] | provenance | MaD:15 | +| test.rs:171:52:171:69 | ...::stdin(...) | test.rs:171:26:171:70 | ...::new(...) | provenance | MaD:35 | +| test.rs:172:9:172:14 | reader | test.rs:172:26:172:36 | [post] &mut buffer [&ref] | provenance | MaD:16 | | test.rs:172:26:172:36 | [post] &mut buffer [&ref] | test.rs:172:31:172:36 | [post] buffer | provenance | | | test.rs:172:31:172:36 | [post] buffer | test.rs:173:15:173:20 | buffer | provenance | | | test.rs:173:15:173:20 | buffer | test.rs:173:14:173:20 | &buffer | provenance | | | test.rs:178:13:178:22 | mut reader | test.rs:179:9:179:14 | reader | provenance | | | test.rs:178:26:178:70 | ...::new(...) | test.rs:178:13:178:22 | mut reader | provenance | | | test.rs:178:52:178:67 | ...::stdin | test.rs:178:52:178:69 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | -| test.rs:178:52:178:69 | ...::stdin(...) | test.rs:178:26:178:70 | ...::new(...) | provenance | MaD:34 | -| test.rs:179:9:179:14 | reader | test.rs:179:33:179:43 | [post] &mut buffer [&ref] | provenance | MaD:16 | +| test.rs:178:52:178:69 | ...::stdin(...) | test.rs:178:26:178:70 | ...::new(...) | provenance | MaD:35 | +| test.rs:179:9:179:14 | reader | test.rs:179:33:179:43 | [post] &mut buffer [&ref] | provenance | MaD:17 | | test.rs:179:33:179:43 | [post] &mut buffer [&ref] | test.rs:179:38:179:43 | [post] buffer | provenance | | | test.rs:179:38:179:43 | [post] buffer | test.rs:180:15:180:20 | buffer | provenance | | -| test.rs:179:38:179:43 | [post] buffer | test.rs:181:14:181:22 | buffer[0] | provenance | | +| test.rs:179:38:179:43 | [post] buffer | test.rs:181:14:181:19 | buffer | provenance | | | test.rs:180:15:180:20 | buffer | test.rs:180:14:180:20 | &buffer | provenance | | +| test.rs:181:14:181:19 | buffer | test.rs:181:14:181:22 | buffer[0] | provenance | MaD:3 | | test.rs:185:13:185:28 | mut reader_split | test.rs:186:14:186:25 | reader_split | provenance | | | test.rs:185:13:185:28 | mut reader_split | test.rs:187:33:187:44 | reader_split | provenance | | -| test.rs:185:32:185:76 | ...::new(...) | test.rs:185:32:185:88 | ... .split(...) | provenance | MaD:17 | +| test.rs:185:32:185:76 | ...::new(...) | test.rs:185:32:185:88 | ... .split(...) | provenance | MaD:18 | | test.rs:185:32:185:88 | ... .split(...) | test.rs:185:13:185:28 | mut reader_split | provenance | | | test.rs:185:58:185:73 | ...::stdin | test.rs:185:58:185:75 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | -| test.rs:185:58:185:75 | ...::stdin(...) | test.rs:185:32:185:76 | ...::new(...) | provenance | MaD:34 | -| test.rs:186:14:186:25 | reader_split | test.rs:186:14:186:40 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:36 | +| test.rs:185:58:185:75 | ...::stdin(...) | test.rs:185:32:185:76 | ...::new(...) | provenance | MaD:35 | +| test.rs:186:14:186:25 | reader_split | test.rs:186:14:186:40 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:37 | | test.rs:186:14:186:40 | reader_split.next_segment() [future, Ok, Some] | test.rs:186:14:186:46 | await ... [Ok, Some] | provenance | | | test.rs:186:14:186:46 | await ... [Ok, Some] | test.rs:186:14:186:47 | TryExpr [Some] | provenance | | -| test.rs:186:14:186:47 | TryExpr [Some] | test.rs:186:14:186:56 | ... .unwrap() | provenance | MaD:27 | +| test.rs:186:14:186:47 | TryExpr [Some] | test.rs:186:14:186:56 | ... .unwrap() | provenance | MaD:28 | | test.rs:187:19:187:29 | Some(...) [Some] | test.rs:187:24:187:28 | chunk | provenance | | | test.rs:187:24:187:28 | chunk | test.rs:188:18:188:22 | chunk | provenance | | -| test.rs:187:33:187:44 | reader_split | test.rs:187:33:187:59 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:36 | +| test.rs:187:33:187:44 | reader_split | test.rs:187:33:187:59 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:37 | | test.rs:187:33:187:59 | reader_split.next_segment() [future, Ok, Some] | test.rs:187:33:187:65 | await ... [Ok, Some] | provenance | | | test.rs:187:33:187:65 | await ... [Ok, Some] | test.rs:187:33:187:66 | TryExpr [Some] | provenance | | | test.rs:187:33:187:66 | TryExpr [Some] | test.rs:187:19:187:29 | Some(...) [Some] | provenance | | | test.rs:193:13:193:18 | reader | test.rs:194:25:194:30 | reader | provenance | | | test.rs:193:22:193:66 | ...::new(...) | test.rs:193:13:193:18 | reader | provenance | | | test.rs:193:48:193:63 | ...::stdin | test.rs:193:48:193:65 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | -| test.rs:193:48:193:65 | ...::stdin(...) | test.rs:193:22:193:66 | ...::new(...) | provenance | MaD:34 | +| test.rs:193:48:193:65 | ...::stdin(...) | test.rs:193:22:193:66 | ...::new(...) | provenance | MaD:35 | | test.rs:194:13:194:21 | mut lines | test.rs:195:14:195:18 | lines | provenance | | | test.rs:194:13:194:21 | mut lines | test.rs:196:32:196:36 | lines | provenance | | -| test.rs:194:25:194:30 | reader | test.rs:194:25:194:38 | reader.lines() | provenance | MaD:14 | +| test.rs:194:25:194:30 | reader | test.rs:194:25:194:38 | reader.lines() | provenance | MaD:15 | | test.rs:194:25:194:38 | reader.lines() | test.rs:194:13:194:21 | mut lines | provenance | | -| test.rs:195:14:195:18 | lines | test.rs:195:14:195:30 | lines.next_line() [future, Ok, Some] | provenance | MaD:35 | +| test.rs:195:14:195:18 | lines | test.rs:195:14:195:30 | lines.next_line() [future, Ok, Some] | provenance | MaD:36 | | test.rs:195:14:195:30 | lines.next_line() [future, Ok, Some] | test.rs:195:14:195:36 | await ... [Ok, Some] | provenance | | | test.rs:195:14:195:36 | await ... [Ok, Some] | test.rs:195:14:195:37 | TryExpr [Some] | provenance | | -| test.rs:195:14:195:37 | TryExpr [Some] | test.rs:195:14:195:46 | ... .unwrap() | provenance | MaD:27 | +| test.rs:195:14:195:37 | TryExpr [Some] | test.rs:195:14:195:46 | ... .unwrap() | provenance | MaD:28 | | test.rs:196:19:196:28 | Some(...) [Some] | test.rs:196:24:196:27 | line | provenance | | | test.rs:196:24:196:27 | line | test.rs:197:18:197:21 | line | provenance | | -| test.rs:196:32:196:36 | lines | test.rs:196:32:196:48 | lines.next_line() [future, Ok, Some] | provenance | MaD:35 | +| test.rs:196:32:196:36 | lines | test.rs:196:32:196:48 | lines.next_line() [future, Ok, Some] | provenance | MaD:36 | | test.rs:196:32:196:48 | lines.next_line() [future, Ok, Some] | test.rs:196:32:196:54 | await ... [Ok, Some] | provenance | | | test.rs:196:32:196:54 | await ... [Ok, Some] | test.rs:196:32:196:55 | TryExpr [Some] | provenance | | | test.rs:196:32:196:55 | TryExpr [Some] | test.rs:196:19:196:28 | Some(...) [Some] | provenance | | @@ -322,6 +325,7 @@ nodes | test.rs:69:38:69:43 | [post] buffer | semmle.label | [post] buffer | | test.rs:70:14:70:20 | &buffer | semmle.label | &buffer | | test.rs:70:15:70:20 | buffer | semmle.label | buffer | +| test.rs:71:14:71:19 | buffer | semmle.label | buffer | | test.rs:71:14:71:22 | buffer[0] | semmle.label | buffer[0] | | test.rs:75:13:75:28 | mut reader_split | semmle.label | mut reader_split | | test.rs:75:32:75:72 | ...::new(...) | semmle.label | ...::new(...) | @@ -450,6 +454,7 @@ nodes | test.rs:179:38:179:43 | [post] buffer | semmle.label | [post] buffer | | test.rs:180:14:180:20 | &buffer | semmle.label | &buffer | | test.rs:180:15:180:20 | buffer | semmle.label | buffer | +| test.rs:181:14:181:19 | buffer | semmle.label | buffer | | test.rs:181:14:181:22 | buffer[0] | semmle.label | buffer[0] | | test.rs:185:13:185:28 | mut reader_split | semmle.label | mut reader_split | | test.rs:185:32:185:76 | ...::new(...) | semmle.label | ...::new(...) | diff --git a/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected b/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected index ba4119dd4d0..932db0a5ced 100644 --- a/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected +++ b/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected @@ -3,23 +3,26 @@ models | 2 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; taint | | 3 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint | | 4 | Summary: <_ as core::ops::arith::Add>::add; Argument[self]; ReturnValue; taint | -| 5 | Summary: ::from; Argument[0].Reference; ReturnValue; value | -| 6 | Summary: ::add; Argument[self]; ReturnValue; value | -| 7 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 8 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | -| 9 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | +| 5 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 6 | Summary: ::from; Argument[0].Reference; ReturnValue; value | +| 7 | Summary: ::add; Argument[self]; ReturnValue; value | +| 8 | Summary: ::as_str; Argument[self]; ReturnValue; value | +| 9 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | +| 10 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | edges +| main.rs:26:9:26:9 | s | main.rs:27:19:27:19 | s | provenance | | | main.rs:26:9:26:9 | s | main.rs:27:19:27:25 | s[...] | provenance | | | main.rs:26:13:26:22 | source(...) | main.rs:26:9:26:9 | s | provenance | | | main.rs:27:9:27:14 | sliced [&ref] | main.rs:28:16:28:21 | sliced | provenance | | | main.rs:27:18:27:25 | &... [&ref] | main.rs:27:9:27:14 | sliced [&ref] | provenance | | +| main.rs:27:19:27:19 | s | main.rs:27:19:27:25 | s[...] | provenance | MaD:5 | | main.rs:27:19:27:25 | s[...] | main.rs:27:18:27:25 | &... [&ref] | provenance | | | main.rs:32:9:32:10 | s1 | main.rs:35:9:35:10 | s4 | provenance | | | main.rs:32:9:32:10 | s1 | main.rs:35:14:35:15 | s1 | provenance | | | main.rs:32:14:32:23 | source(...) | main.rs:32:9:32:10 | s1 | provenance | | | main.rs:35:9:35:10 | s4 | main.rs:38:10:38:11 | s4 | provenance | | | main.rs:35:14:35:15 | s1 | main.rs:35:14:35:20 | ... + ... | provenance | MaD:4 | -| main.rs:35:14:35:15 | s1 | main.rs:35:14:35:20 | ... + ... | provenance | MaD:6 | +| main.rs:35:14:35:15 | s1 | main.rs:35:14:35:20 | ... + ... | provenance | MaD:7 | | main.rs:35:14:35:20 | ... + ... | main.rs:35:9:35:10 | s4 | provenance | | | main.rs:43:9:43:10 | s1 | main.rs:46:34:46:35 | s1 | provenance | | | main.rs:43:14:43:23 | source(...) | main.rs:43:9:43:10 | s1 | provenance | | @@ -30,7 +33,7 @@ edges | main.rs:52:9:52:10 | s2 | main.rs:53:10:53:11 | s2 | provenance | | | main.rs:52:14:52:29 | ...::from(...) | main.rs:52:9:52:10 | s2 | provenance | | | main.rs:52:27:52:28 | s1 | main.rs:52:14:52:29 | ...::from(...) | provenance | MaD:2 | -| main.rs:52:27:52:28 | s1 | main.rs:52:14:52:29 | ...::from(...) | provenance | MaD:5 | +| main.rs:52:27:52:28 | s1 | main.rs:52:14:52:29 | ...::from(...) | provenance | MaD:6 | | main.rs:57:9:57:10 | s1 | main.rs:58:14:58:15 | s1 | provenance | | | main.rs:57:14:57:29 | source_slice(...) | main.rs:57:9:57:10 | s1 | provenance | | | main.rs:58:9:58:10 | s2 | main.rs:59:10:59:11 | s2 | provenance | | @@ -38,37 +41,38 @@ edges | main.rs:58:14:58:27 | s1.to_string() | main.rs:58:9:58:10 | s2 | provenance | | | main.rs:63:9:63:9 | s | main.rs:64:16:64:16 | s | provenance | | | main.rs:63:13:63:22 | source(...) | main.rs:63:9:63:9 | s | provenance | | -| main.rs:64:16:64:16 | s | main.rs:64:16:64:25 | s.as_str() | provenance | MaD:7 | +| main.rs:64:16:64:16 | s | main.rs:64:16:64:25 | s.as_str() | provenance | MaD:8 | | main.rs:68:9:68:9 | s | main.rs:70:34:70:61 | MacroExpr | provenance | | | main.rs:68:9:68:9 | s | main.rs:73:34:73:59 | MacroExpr | provenance | | | main.rs:68:13:68:22 | source(...) | main.rs:68:9:68:9 | s | provenance | | | main.rs:70:9:70:18 | formatted1 | main.rs:71:10:71:19 | formatted1 | provenance | | | main.rs:70:22:70:62 | ...::format(...) | main.rs:70:9:70:18 | formatted1 | provenance | | -| main.rs:70:34:70:61 | MacroExpr | main.rs:70:22:70:62 | ...::format(...) | provenance | MaD:8 | +| main.rs:70:34:70:61 | MacroExpr | main.rs:70:22:70:62 | ...::format(...) | provenance | MaD:9 | | main.rs:73:9:73:18 | formatted2 | main.rs:74:10:74:19 | formatted2 | provenance | | | main.rs:73:22:73:60 | ...::format(...) | main.rs:73:9:73:18 | formatted2 | provenance | | -| main.rs:73:34:73:59 | MacroExpr | main.rs:73:22:73:60 | ...::format(...) | provenance | MaD:8 | +| main.rs:73:34:73:59 | MacroExpr | main.rs:73:22:73:60 | ...::format(...) | provenance | MaD:9 | | main.rs:76:9:76:13 | width | main.rs:77:34:77:74 | MacroExpr | provenance | | | main.rs:76:17:76:32 | source_usize(...) | main.rs:76:9:76:13 | width | provenance | | | main.rs:77:9:77:18 | formatted3 | main.rs:78:10:78:19 | formatted3 | provenance | | | main.rs:77:22:77:75 | ...::format(...) | main.rs:77:9:77:18 | formatted3 | provenance | | -| main.rs:77:34:77:74 | MacroExpr | main.rs:77:22:77:75 | ...::format(...) | provenance | MaD:8 | +| main.rs:77:34:77:74 | MacroExpr | main.rs:77:22:77:75 | ...::format(...) | provenance | MaD:9 | | main.rs:82:9:82:10 | s1 | main.rs:86:18:86:25 | MacroExpr | provenance | | | main.rs:82:9:82:10 | s1 | main.rs:87:18:87:32 | MacroExpr | provenance | | | main.rs:82:14:82:23 | source(...) | main.rs:82:9:82:10 | s1 | provenance | | | main.rs:86:18:86:25 | ...::format(...) | main.rs:86:18:86:25 | { ... } | provenance | | | main.rs:86:18:86:25 | ...::must_use(...) | main.rs:86:10:86:26 | MacroExpr | provenance | | -| main.rs:86:18:86:25 | MacroExpr | main.rs:86:18:86:25 | ...::format(...) | provenance | MaD:8 | -| main.rs:86:18:86:25 | { ... } | main.rs:86:18:86:25 | ...::must_use(...) | provenance | MaD:9 | +| main.rs:86:18:86:25 | MacroExpr | main.rs:86:18:86:25 | ...::format(...) | provenance | MaD:9 | +| main.rs:86:18:86:25 | { ... } | main.rs:86:18:86:25 | ...::must_use(...) | provenance | MaD:10 | | main.rs:87:18:87:32 | ...::format(...) | main.rs:87:18:87:32 | { ... } | provenance | | | main.rs:87:18:87:32 | ...::must_use(...) | main.rs:87:10:87:33 | MacroExpr | provenance | | -| main.rs:87:18:87:32 | MacroExpr | main.rs:87:18:87:32 | ...::format(...) | provenance | MaD:8 | -| main.rs:87:18:87:32 | { ... } | main.rs:87:18:87:32 | ...::must_use(...) | provenance | MaD:9 | +| main.rs:87:18:87:32 | MacroExpr | main.rs:87:18:87:32 | ...::format(...) | provenance | MaD:9 | +| main.rs:87:18:87:32 | { ... } | main.rs:87:18:87:32 | ...::must_use(...) | provenance | MaD:10 | nodes | main.rs:26:9:26:9 | s | semmle.label | s | | main.rs:26:13:26:22 | source(...) | semmle.label | source(...) | | main.rs:27:9:27:14 | sliced [&ref] | semmle.label | sliced [&ref] | | main.rs:27:18:27:25 | &... [&ref] | semmle.label | &... [&ref] | +| main.rs:27:19:27:19 | s | semmle.label | s | | main.rs:27:19:27:25 | s[...] | semmle.label | s[...] | | main.rs:28:16:28:21 | sliced | semmle.label | sliced | | main.rs:32:9:32:10 | s1 | semmle.label | s1 | diff --git a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected index 99b5f86fac5..506d2ddd1fa 100644 --- a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected @@ -11,11 +11,12 @@ | main.rs:33:24:33:24 | s | main.rs:33:18:33:24 | FormatArgsExpr | | main.rs:38:23:38:23 | [post] s [borrowed] | main.rs:38:23:38:23 | [post] s | | main.rs:38:23:38:23 | s | main.rs:38:23:38:29 | s[...] | +| main.rs:38:23:38:29 | s[...] [pre-dereferenced] | main.rs:38:23:38:29 | s[...] | | main.rs:49:24:49:24 | i | main.rs:49:18:49:24 | FormatArgsExpr | | main.rs:54:14:54:16 | [post] arr [borrowed] | main.rs:54:14:54:16 | [post] arr | -| main.rs:54:14:54:16 | arr | main.rs:54:14:54:19 | arr[1] | +| main.rs:54:14:54:19 | arr[1] [pre-dereferenced] | main.rs:54:14:54:19 | arr[1] | | main.rs:64:24:64:24 | [post] s [borrowed] | main.rs:64:24:64:24 | [post] s | -| main.rs:64:24:64:24 | s | main.rs:64:24:64:27 | s[1] | | main.rs:64:24:64:27 | s[1] | main.rs:64:18:64:27 | FormatArgsExpr | +| main.rs:64:24:64:27 | s[1] [pre-dereferenced] | main.rs:64:24:64:27 | s[1] | | main.rs:69:9:69:12 | [post] arr2 [borrowed] | main.rs:69:9:69:12 | [post] arr2 | -| main.rs:69:9:69:12 | arr2 | main.rs:69:9:69:15 | arr2[1] | +| main.rs:69:9:69:15 | arr2[1] [pre-dereferenced] | main.rs:69:9:69:15 | arr2[1] | 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 a8f0b6321f5..d9306b3e89b 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,22 +1,26 @@ models -| 1 | Summary: ::neg; Argument[self]; ReturnValue; taint | +| 1 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 2 | Summary: ::neg; Argument[self]; ReturnValue; taint | edges | main.rs:12:9:12:9 | a | main.rs:13:10:13:14 | ... + ... | provenance | | | main.rs:12:13:12:22 | source(...) | main.rs:12:9:12:9 | a | provenance | | | main.rs:17:9:17:9 | a | main.rs:18:10:18:11 | - ... | provenance | | | main.rs:17:9:17:9 | a | main.rs:18:11:18:11 | a | provenance | | | main.rs:17:13:17:22 | source(...) | main.rs:17:9:17:9 | a | provenance | | -| main.rs:18:11:18:11 | a | main.rs:18:10:18:11 | - ... | provenance | MaD:1 | +| main.rs:18:11:18:11 | a | main.rs:18:10:18:11 | - ... | provenance | MaD:2 | | main.rs:22:9:22:9 | a | main.rs:23:9:23:9 | b | provenance | | | main.rs:22:13:22:22 | source(...) | main.rs:22:9:22:9 | a | provenance | | | main.rs:23:9:23:9 | b | main.rs:24:10:24:17 | b as i64 | provenance | | +| main.rs:37:13:37:13 | s | main.rs:38:23:38:23 | s | provenance | | | main.rs:37:13:37:13 | s | main.rs:38:23:38:29 | s[...] | provenance | | | main.rs:37:17:37:26 | source(...) | main.rs:37:13:37:13 | s | provenance | | | main.rs:38:13:38:18 | sliced [&ref] | main.rs:39:14:39:19 | sliced | provenance | | | main.rs:38:22:38:29 | &... [&ref] | main.rs:38:13:38:18 | sliced [&ref] | provenance | | +| main.rs:38:23:38:23 | s | main.rs:38:23:38:29 | s[...] | provenance | MaD:1 | | main.rs:38:23:38:29 | s[...] | main.rs:38:22:38:29 | &... [&ref] | provenance | | -| main.rs:53:13:53:15 | arr | main.rs:54:14:54:19 | arr[1] | provenance | | +| main.rs:53:13:53:15 | arr | main.rs:54:14:54:16 | arr | provenance | | | main.rs:53:19:53:28 | source(...) | main.rs:53:13:53:15 | arr | provenance | | +| main.rs:54:14:54:16 | arr | main.rs:54:14:54:19 | arr[1] | provenance | MaD:1 | | main.rs:69:9:69:12 | [post] arr2 [element] | main.rs:70:14:70:17 | arr2 | provenance | | | main.rs:69:19:69:28 | source(...) | main.rs:69:9:69:12 | [post] arr2 [element] | provenance | | nodes @@ -35,10 +39,12 @@ nodes | main.rs:37:17:37:26 | source(...) | semmle.label | source(...) | | main.rs:38:13:38:18 | sliced [&ref] | semmle.label | sliced [&ref] | | main.rs:38:22:38:29 | &... [&ref] | semmle.label | &... [&ref] | +| main.rs:38:23:38:23 | s | semmle.label | s | | main.rs:38:23:38:29 | s[...] | semmle.label | s[...] | | main.rs:39:14:39:19 | sliced | semmle.label | sliced | | main.rs:53:13:53:15 | arr | semmle.label | arr | | main.rs:53:19:53:28 | source(...) | semmle.label | source(...) | +| main.rs:54:14:54:16 | arr | semmle.label | arr | | main.rs:54:14:54:19 | arr[1] | semmle.label | arr[1] | | main.rs:69:9:69:12 | [post] arr2 [element] | semmle.label | [post] arr2 [element] | | main.rs:69:19:69:28 | source(...) | semmle.label | source(...) |