diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll index 66b33b1ed522..f304f626994f 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll @@ -17,9 +17,11 @@ module Input implements InputSig { class SummarizedCallableBase = Function; - class SourceBase = Void; + class SourceBase extends Void { + Location getLocation() { none() } + } - class SinkBase = Void; + class SinkBase = SourceBase; class FlowSummaryCallBase = CallInstruction; @@ -132,11 +134,42 @@ module Input implements InputSig { private import Make as Impl -private module StepsInput implements Impl::Private::StepsInputSig { - Impl::Private::SummaryNode getSummaryNode(Node n) { - result = n.(FlowSummaryNode).getSummaryNode() +private module Input2 implements Impl::Private::InputSig2 { + private import codeql.util.Void + + class SourceSinkReportingElement extends Void { + Location getLocation() { none() } + + DataFlowCallable getEnclosingCallable() { none() } + } + + bindingset[source, s] + SourceSinkReportingElement getSourceEntryElement( + Impl::Public::SourceElement source, Impl::Private::SummaryComponentStack s + ) { + none() + } + + bindingset[e, s] + Node getSourceExitNode(SourceSinkReportingElement e, Impl::Private::SummaryComponentStack s) { + none() + } + + SourceSinkReportingElement getSinkExitElement( + Impl::Public::SinkElement sink, Impl::Private::SummaryComponent sc + ) { + none() } + bindingset[e, sc] + Node getSinkEntryNode(SourceSinkReportingElement e, Impl::Private::SummaryComponent sc) { none() } +} + +private import Impl::Private::Make2 as Impl2 + +private module StepsInput implements Impl2::StepsInputSig { + Impl2::SummaryNode getSummaryNode(Node n) { result = n.(FlowSummaryNode).getSummaryNode() } + DataFlowCall getACall(Public::SummarizedCallable sc) { result.getStaticCallTarget().getUnderlyingCallable() = sc } @@ -148,12 +181,6 @@ private module StepsInput implements Impl::Private::StepsInputSig { pragma[only_bind_out](out.getIndirectionIndex()) ) } - - DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { none() } - - Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } - - Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() } } module SourceSinkInterpretationInput implements @@ -270,8 +297,9 @@ module SourceSinkInterpretationInput implements module Private { import Impl::Private + import Impl2 - module Steps = Impl::Private::Steps; + module Steps = Impl2::Steps; module External { import Impl::Private::External diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll index abcff398420c..27f7497422db 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowNodes.qll @@ -1535,10 +1535,10 @@ class FlowSummaryNode extends Node, TFlowSummaryNode { } override DataFlowCallable getEnclosingCallable() { - result = FlowSummaryImpl::Private::getEnclosingCallable(this.getSummaryNode()) + result = this.getSummaryNode().getEnclosingCallable() } - override Location getLocationImpl() { result = this.getSummarizedCallable().getLocation() } + override Location getLocationImpl() { result = this.getSummaryNode().getLocation() } override string toStringImpl() { result = this.getSummaryNode().toString() } } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index d12c65c9fffd..8b16dc55cca6 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -1778,7 +1778,7 @@ class FlowSummaryNode extends NodeImpl, TFlowSummaryNode { } override DataFlowCallable getEnclosingCallableImpl() { - result.asSummarizedCallable() = this.getSummarizedCallable() + result = this.getSummaryNode().getEnclosingCallable() } override DataFlowType getDataFlowType() { @@ -1789,7 +1789,7 @@ class FlowSummaryNode extends NodeImpl, TFlowSummaryNode { override ControlFlowNode getControlFlowNodeImpl() { none() } - override Location getLocationImpl() { result = this.getSummarizedCallable().getLocation() } + override Location getLocationImpl() { result = this.getSummaryNode().getLocation() } override string toStringImpl() { result = this.getSummaryNode().toString() } } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll index f936a206e2b1..4f9eab404196 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll @@ -30,11 +30,17 @@ module Input implements InputSig ) } - class SourceBase = Void; + class SourceBase extends Void { + Location getLocation() { none() } + } + + class SinkBase = SourceBase; - class SinkBase = Void; + class FlowSummaryCallBase = SourceBase; - class FlowSummaryCallBase = Void; + DataFlowCallable getSummarizedCallableAsDataFlowCallable(SummarizedCallableBase c) { + result.asSummarizedCallable() = c + } predicate neutralElement(SummarizedCallableBase c, string kind, string provenance, boolean isExact) { interpretNeutral(c, kind, provenance, isExact) @@ -122,7 +128,40 @@ module Input implements InputSig private import Make as Impl -private module TypesInput implements Impl::Private::TypesInputSig { +private module Input2 implements Impl::Private::InputSig2 { + private import codeql.util.Void + + class SourceSinkReportingElement extends Void { + Location getLocation() { none() } + + DataFlowCallable getEnclosingCallable() { none() } + } + + bindingset[source, s] + SourceSinkReportingElement getSourceEntryElement( + Impl::Public::SourceElement source, Impl::Private::SummaryComponentStack s + ) { + none() + } + + bindingset[e, s] + Node getSourceExitNode(SourceSinkReportingElement e, Impl::Private::SummaryComponentStack s) { + none() + } + + SourceSinkReportingElement getSinkExitElement( + Impl::Public::SinkElement sink, Impl::Private::SummaryComponent sc + ) { + none() + } + + bindingset[e, sc] + Node getSinkEntryNode(SourceSinkReportingElement e, Impl::Private::SummaryComponent sc) { none() } +} + +private import Impl::Private::Make2 as Impl2 + +private module TypesInput implements Impl2::TypesInputSig { DataFlowType getSyntheticGlobalType(Impl::Private::SyntheticGlobal sg) { exists(sg) and result.asGvnType() = Gvn::getGlobalValueNumber(any(ObjectType t)) @@ -202,20 +241,12 @@ private module TypesInput implements Impl::Private::TypesInputSig { DataFlowType getSinkType(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() } } -private module StepsInput implements Impl::Private::StepsInputSig { - Impl::Private::SummaryNode getSummaryNode(Node n) { - result = n.(FlowSummaryNode).getSummaryNode() - } +private module StepsInput implements Impl2::StepsInputSig { + Impl2::SummaryNode getSummaryNode(Node n) { result = n.(FlowSummaryNode).getSummaryNode() } DataFlowCall getACall(Public::SummarizedCallable sc) { sc = viableCallable(result).asSummarizedCallable() } - - DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { none() } - - Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } - - Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() } } module SourceSinkInterpretationInput implements @@ -339,9 +370,10 @@ module SourceSinkInterpretationInput implements module Private { import Impl::Private - import Impl::Private::Types + import Impl2 + import Types - module Steps = Impl::Private::Steps; + module Steps = Impl2::Steps; module External { import Impl::Private::External diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll index 7069cf36bd01..247f535e6fad 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll @@ -82,7 +82,7 @@ module Private { result = this.getSummaryNode().getSummarizedCallable() } - override Location getLocation() { result = this.getSummarizedCallable().getLocation() } + override Location getLocation() { result = this.getSummaryNode().getLocation() } override string toString() { result = this.getSummaryNode().toString() } diff --git a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll index 868066af1e45..d73bb27bceae 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll @@ -27,14 +27,20 @@ module Input implements InputSig { class SummarizedCallableBase = Callable; - class SourceBase = Void; + class SourceBase extends Void { + Location getLocation() { none() } + } - class SinkBase = Void; + class SinkBase = SourceBase; - class FlowSummaryCallBase = Void; + class FlowSummaryCallBase = SourceBase; predicate callableFromSource(SummarizedCallableBase c) { exists(c.getFuncDef()) } + DataFlowCallable getSummarizedCallableAsDataFlowCallable(SummarizedCallableBase c) { + result.asSummarizedCallable() = c + } + predicate neutralElement( Input::SummarizedCallableBase c, string kind, string provenance, boolean isExact ) { @@ -114,23 +120,48 @@ module Input implements InputSig { private import Make as Impl -private module StepsInput implements Impl::Private::StepsInputSig { - Impl::Private::SummaryNode getSummaryNode(Node n) { - result = n.(FlowSummaryNode).getSummaryNode() +private module Input2 implements Impl::Private::InputSig2 { + private import codeql.util.Void + + class SourceSinkReportingElement extends Void { + Location getLocation() { none() } + + DataFlowCallable getEnclosingCallable() { none() } + } + + bindingset[source, s] + SourceSinkReportingElement getSourceEntryElement( + Impl::Public::SourceElement source, Impl::Private::SummaryComponentStack s + ) { + none() + } + + bindingset[e, s] + Node getSourceExitNode(SourceSinkReportingElement e, Impl::Private::SummaryComponentStack s) { + none() } + SourceSinkReportingElement getSinkExitElement( + Impl::Public::SinkElement sink, Impl::Private::SummaryComponent sc + ) { + none() + } + + bindingset[e, sc] + Node getSinkEntryNode(SourceSinkReportingElement e, Impl::Private::SummaryComponent sc) { none() } +} + +private import Impl::Private::Make2 as Impl2 + +private module StepsInput implements Impl2::StepsInputSig { + Impl2::SummaryNode getSummaryNode(Node n) { result = n.(FlowSummaryNode).getSummaryNode() } + DataFlowCall getACall(Public::SummarizedCallable sc) { exists(DataFlow::CallNode call | call.asExpr() = result and call.getACalleeIncludingExternals() = sc ) } - - DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { none() } - - Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } - - Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() } } module SourceSinkInterpretationInput implements @@ -500,8 +531,9 @@ private predicate parseReturn(AccessPath::AccessPathTokenBase c, int n) { module Private { import Impl::Private + import Impl2 - module Steps = Impl::Private::Steps; + module Steps = Impl2::Steps; module External { import Impl::Private::External diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll index 8957442b39ac..5a0df6a222c6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll @@ -439,7 +439,7 @@ module Private { result.asCallable() = n.(ImplicitInstanceAccess).getInstanceAccess().getEnclosingCallable() or result.asCallable() = n.(MallocNode).getClassInstanceExpr().getEnclosingCallable() or result = nodeGetEnclosingCallable(n.(ImplicitPostUpdateNode).getPreUpdateNode()) or - result.asSummarizedCallable() = n.(FlowSummaryNode).getSummarizedCallable() or + result = n.(FlowSummaryNode).getSummaryNode().getEnclosingCallable() or result.asCallable() = n.(CaptureNode).getSynthesizedCaptureNode().getEnclosingCallable() or result.asFieldScope() = n.(FieldValueNode).getField() or result.asCallable() = any(Expr e | n.(AdditionalNode).nodeAt(e, _)).getEnclosingCallable() or @@ -531,7 +531,7 @@ module Private { result = this.getSummaryNode().getSummarizedCallable() } - override Location getLocation() { result = this.getSummarizedCallable().getLocation() } + override Location getLocation() { result = this.getSummaryNode().getLocation() } override string toString() { result = this.getSummaryNode().toString() } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll index 5ff113db730e..a39b5459080e 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll @@ -37,11 +37,17 @@ module Input implements InputSig { sc.asCallable() = any(Callable c | c.fromSource() and not c.isStub()) } - class SourceBase = Void; + class SourceBase extends Void { + Location getLocation() { none() } + } + + class SinkBase = SourceBase; - class SinkBase = Void; + class FlowSummaryCallBase = SourceBase; - class FlowSummaryCallBase = Void; + DataFlowCallable getSummarizedCallableAsDataFlowCallable(SummarizedCallableBase c) { + result.asSummarizedCallable() = c + } predicate neutralElement( Input::SummarizedCallableBase c, string kind, string provenance, boolean isExact @@ -110,7 +116,40 @@ module Input implements InputSig { private import Make as Impl -private module TypesInput implements Impl::Private::TypesInputSig { +private module Input2 implements Impl::Private::InputSig2 { + private import codeql.util.Void + + class SourceSinkReportingElement extends Void { + Location getLocation() { none() } + + DataFlowCallable getEnclosingCallable() { none() } + } + + bindingset[source, s] + SourceSinkReportingElement getSourceEntryElement( + Impl::Public::SourceElement source, Impl::Private::SummaryComponentStack s + ) { + none() + } + + bindingset[e, s] + Node getSourceExitNode(SourceSinkReportingElement e, Impl::Private::SummaryComponentStack s) { + none() + } + + SourceSinkReportingElement getSinkExitElement( + Impl::Public::SinkElement sink, Impl::Private::SummaryComponent sc + ) { + none() + } + + bindingset[e, sc] + Node getSinkEntryNode(SourceSinkReportingElement e, Impl::Private::SummaryComponent sc) { none() } +} + +private import Impl::Private::Make2 as Impl2 + +private module TypesInput implements Impl2::TypesInputSig { DataFlowType getSyntheticGlobalType(Impl::Private::SyntheticGlobal sg) { exists(sg) and result instanceof TypeObject @@ -145,20 +184,12 @@ private module TypesInput implements Impl::Private::TypesInputSig { DataFlowType getSinkType(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() } } -private module StepsInput implements Impl::Private::StepsInputSig { - Impl::Private::SummaryNode getSummaryNode(Node n) { - result = n.(FlowSummaryNode).getSummaryNode() - } +private module StepsInput implements Impl2::StepsInputSig { + Impl2::SummaryNode getSummaryNode(Node n) { result = n.(FlowSummaryNode).getSummaryNode() } DataFlowCall getACall(Public::SummarizedCallable sc) { sc = viableCallable(result).asSummarizedCallable() } - - DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { none() } - - Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } - - Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() } } private predicate relatedArgSpec(Callable c, string spec) { @@ -372,9 +403,10 @@ module SourceSinkInterpretationInput implements module Private { import Impl::Private - import Impl::Private::Types + import Impl2 + import Types - module Steps = Impl::Private::Steps; + module Steps = Impl2::Steps; module External { import Impl::Private::External diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll index 922dd5acc869..b30ef1a48d2c 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll @@ -65,6 +65,8 @@ class FlowSummaryNode extends DataFlow::Node, TFlowSummaryNode { cached override string toString() { result = this.getSummaryNode().toString() } + + override Location getLocation() { result = this.getSummaryNode().getLocation() } } class FlowSummaryDynamicParameterArrayNode extends DataFlow::Node, @@ -541,7 +543,7 @@ predicate isArgumentNode(ArgumentNode n, DataFlowCall call, ArgumentPosition pos DataFlowCallable nodeGetEnclosingCallable(Node node) { result.asSourceCallable() = node.getContainer() or - result.asLibraryCallable() = node.(FlowSummaryNode).getSummarizedCallable() + result = node.(FlowSummaryNode).getSummaryNode().getEnclosingCallable() or result.asLibraryCallable() = node.(FlowSummaryDynamicParameterArrayNode).getSummarizedCallable() or diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSummaryPrivate.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSummaryPrivate.qll index a7519f4180b4..ed57c7f7e932 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSummaryPrivate.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSummaryPrivate.qll @@ -12,18 +12,28 @@ private import sharedlib.FlowSummaryImpl::Private as Private private import sharedlib.FlowSummaryImpl::Public private import codeql.dataflow.internal.AccessPathSyntax as AccessPathSyntax private import semmle.javascript.internal.flow_summaries.ExceptionFlow +private import codeql.util.Void /** * A class of callables that are candidates for flow summary modeling. */ -class SummarizedCallableBase = string; +class SummarizedCallableBase extends string { + bindingset[this] + SummarizedCallableBase() { exists(this) } -class SourceBase extends Unit { - SourceBase() { none() } + Location getLocation() { none() } } -class SinkBase extends Unit { - SinkBase() { none() } +class SourceBase extends Void { + Location getLocation() { none() } +} + +class SinkBase = SourceBase; + +class FlowSummaryCallBase = SourceBase; + +DataFlowCallable getSummarizedCallableAsDataFlowCallable(SummarizedCallableBase c) { + result.asLibraryCallable() = c } /** Gets the parameter position representing a callback itself, if any. */ @@ -141,8 +151,41 @@ string encodeArgumentPosition(ArgumentPosition pos) { /** Gets the return kind corresponding to specification `"ReturnValue"`. */ ReturnKind getStandardReturnValueKind() { result = MkNormalReturnKind() and Stage::ref() } -private module FlowSummaryStepInput implements Private::StepsInputSig { - Private::SummaryNode getSummaryNode(DataFlow::Node n) { +private module Input2 implements Private::InputSig2 { + private import codeql.util.Void + + class SourceSinkReportingElement extends Void { + Location getLocation() { none() } + + DataFlowCallable getEnclosingCallable() { none() } + } + + bindingset[source, s] + SourceSinkReportingElement getSourceEntryElement( + SourceElement source, Private::SummaryComponentStack s + ) { + none() + } + + bindingset[e, s] + DataFlow::Node getSourceExitNode(SourceSinkReportingElement e, Private::SummaryComponentStack s) { + none() + } + + SourceSinkReportingElement getSinkExitElement(SinkElement sink, Private::SummaryComponent sc) { + none() + } + + bindingset[e, sc] + DataFlow::Node getSinkEntryNode(SourceSinkReportingElement e, Private::SummaryComponent sc) { + none() + } +} + +import Private::Make2 as Impl2 + +private module FlowSummaryStepInput implements Impl2::StepsInputSig { + Impl2::SummaryNode getSummaryNode(DataFlow::Node n) { result = n.(FlowSummaryNode).getSummaryNode() } @@ -156,12 +199,6 @@ private module FlowSummaryStepInput implements Private::StepsInputSig { ] ) } - - DataFlowCallable getSourceNodeEnclosingCallable(SourceBase source) { none() } - - DataFlow::Node getSourceNode(SourceBase source, Private::SummaryComponentStack s) { none() } - - DataFlow::Node getSinkNode(SinkBase sink, Private::SummaryComponent sc) { none() } } module Steps = Private::Steps; diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/DataFlowArg.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/DataFlowArg.qll index 0f0966cb27c9..494a216696d5 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/DataFlowArg.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/DataFlowArg.qll @@ -29,8 +29,6 @@ module JSFlowSummary implements FlowSummaryImpl::InputSig private import semmle.javascript.dataflow.internal.FlowSummaryPrivate as FlowSummaryPrivate import FlowSummaryPrivate - class FlowSummaryCallBase = Void; - overlay[local] predicate callableFromSource(SummarizedCallableBase c) { none() } diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/FlowSummaryImpl.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/FlowSummaryImpl.qll index bf370eb9a271..93245cdf9088 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/FlowSummaryImpl.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/FlowSummaryImpl.qll @@ -1,4 +1,13 @@ private import semmle.javascript.Locations private import codeql.dataflow.internal.FlowSummaryImpl private import DataFlowArg -import Make +private import semmle.javascript.dataflow.internal.FlowSummaryPrivate as Priv + +private module Impl = Make; + +module Private { + import Impl::Private + import Priv::Impl2 +} + +module Public = Impl::Public; diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index 23b49882445e..4a1f08315caf 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -1711,21 +1711,12 @@ class FlowSummaryNode extends Node, TFlowSummaryNode { } override DataFlowCallable getEnclosingCallable() { - result.asLibraryCallable() = this.getSummarizedCallable() + result = this.getSummaryNode().getEnclosingCallable() } override string toString() { result = this.getSummaryNode().toString() } - // Hack to return "empty location" - deprecated override predicate hasLocationInfo( - string file, int startline, int startcolumn, int endline, int endcolumn - ) { - file = "" and - startline = 0 and - startcolumn = 0 and - endline = 0 and - endcolumn = 0 - } + override Location getLocation() { result = this.getSummaryNode().getLocation() } } private class SummaryReturnNode extends FlowSummaryNode, ReturnNode { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll index 22c2f75944a0..af7fedcc0e0d 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll @@ -14,16 +14,27 @@ private import DataFlowImplSpecific::Public module Input implements InputSig { private import codeql.util.Void - class SummarizedCallableBase = string; + class SummarizedCallableBase extends string { + bindingset[this] + SummarizedCallableBase() { exists(this) } - class SourceBase = Void; + Location getLocation() { none() } + } + + class SourceBase extends Void { + Location getLocation() { none() } + } - class SinkBase = Void; + class SinkBase = SourceBase; - class FlowSummaryCallBase = Void; + class FlowSummaryCallBase = SourceBase; predicate callableFromSource(SummarizedCallableBase c) { none() } + DataFlowCallable getSummarizedCallableAsDataFlowCallable(SummarizedCallableBase c) { + result.asLibraryCallable() = c + } + ArgumentPosition callbackSelfParameterPosition() { result.isLambdaSelf() } ReturnKind getStandardReturnValueKind() { any() } @@ -112,11 +123,42 @@ module Input implements InputSig private import Make as Impl -private module StepsInput implements Impl::Private::StepsInputSig { - Impl::Private::SummaryNode getSummaryNode(Node n) { - result = n.(FlowSummaryNode).getSummaryNode() +private module Input2 implements Impl::Private::InputSig2 { + private import codeql.util.Void + + class SourceSinkReportingElement extends Void { + Location getLocation() { none() } + + DataFlowCallable getEnclosingCallable() { none() } } + bindingset[source, s] + SourceSinkReportingElement getSourceEntryElement( + Impl::Public::SourceElement source, Impl::Private::SummaryComponentStack s + ) { + none() + } + + bindingset[e, s] + Node getSourceExitNode(SourceSinkReportingElement e, Impl::Private::SummaryComponentStack s) { + none() + } + + SourceSinkReportingElement getSinkExitElement( + Impl::Public::SinkElement sink, Impl::Private::SummaryComponent sc + ) { + none() + } + + bindingset[e, sc] + Node getSinkEntryNode(SourceSinkReportingElement e, Impl::Private::SummaryComponent sc) { none() } +} + +private import Impl::Private::Make2 as Impl2 + +private module StepsInput implements Impl2::StepsInputSig { + Impl2::SummaryNode getSummaryNode(Node n) { result = n.(FlowSummaryNode).getSummaryNode() } + overlay[global] DataFlowCall getACall(Public::SummarizedCallable sc) { result = @@ -125,18 +167,13 @@ private module StepsInput implements Impl::Private::StepsInputSig { sc.(LibraryCallable).getACallSimple().asCfgNode() ]) } - - DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { none() } - - Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } - - Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() } } module Private { import Impl::Private + import Impl2 - module Steps = Impl::Private::Steps; + module Steps = Impl2::Steps; /** * Provides predicates for constructing summary components. diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index 9f3042ebb5b7..251a2af3331f 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -1286,10 +1286,10 @@ class FlowSummaryNode extends NodeImpl, TFlowSummaryNode { override CfgScope getCfgScopeImpl() { none() } override DataFlowCallable getEnclosingCallable() { - result.asLibraryCallable() = this.getSummarizedCallable() + result = this.getSummaryNode().getEnclosingCallable() } - override EmptyLocation getLocationImpl() { any() } + override Location getLocationImpl() { result = this.getSummaryNode().getLocation() } override string toStringImpl() { result = this.getSummaryNode().toString() } } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll index d94bba89bf5a..01ce6ce261dd 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll @@ -12,16 +12,28 @@ private import DataFlowImplSpecific::Public module Input implements InputSig { private import codeql.util.Void - class SummarizedCallableBase = string; + class SummarizedCallableBase extends string { + bindingset[this] + SummarizedCallableBase() { exists(this) } - class SourceBase = Void; + bindingset[this] + Location getLocation() { result instanceof EmptyLocation } + } + + class SourceBase extends Void { + Location getLocation() { none() } + } - class SinkBase = Void; + class SinkBase = SourceBase; - class FlowSummaryCallBase = Void; + class FlowSummaryCallBase = SourceBase; predicate callableFromSource(SummarizedCallableBase c) { none() } + DataFlowCallable getSummarizedCallableAsDataFlowCallable(SummarizedCallableBase c) { + result.asLibraryCallable() = c + } + ArgumentPosition callbackSelfParameterPosition() { result.isLambdaSelf() } ReturnKind getStandardReturnValueKind() { result instanceof NormalReturnKind } @@ -158,28 +170,54 @@ module Input implements InputSig { private import Make as Impl -private module StepsInput implements Impl::Private::StepsInputSig { - Impl::Private::SummaryNode getSummaryNode(Node n) { - result = n.(FlowSummaryNode).getSummaryNode() +private module Input2 implements Impl::Private::InputSig2 { + private import codeql.util.Void + + class SourceSinkReportingElement extends Void { + Location getLocation() { none() } + + DataFlowCallable getEnclosingCallable() { none() } } + bindingset[source, s] + SourceSinkReportingElement getSourceEntryElement( + Impl::Public::SourceElement source, Impl::Private::SummaryComponentStack s + ) { + none() + } + + bindingset[e, s] + Node getSourceExitNode(SourceSinkReportingElement e, Impl::Private::SummaryComponentStack s) { + none() + } + + SourceSinkReportingElement getSinkExitElement( + Impl::Public::SinkElement sink, Impl::Private::SummaryComponent sc + ) { + none() + } + + bindingset[e, sc] + Node getSinkEntryNode(SourceSinkReportingElement e, Impl::Private::SummaryComponent sc) { none() } +} + +private import Impl::Private::Make2 as Impl2 + +private module StepsInput implements Impl2::StepsInputSig { + Impl2::SummaryNode getSummaryNode(Node n) { result = n.(FlowSummaryNode).getSummaryNode() } + DataFlowCall getACall(Public::SummarizedCallable sc) { result.asCall().getAstNode() = sc.(LibraryCallable).getACall() or result.asCall().getAstNode() = sc.(LibraryCallable).getACallSimple() } - - DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { none() } - - Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } - - Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() } } module Private { import Impl::Private + import Impl2 - module Steps = Impl::Private::Steps; + module Steps = Impl2::Steps; /** * Provides predicates for constructing summary components. diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll index c18ac5e026b1..c153d67ad89b 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll @@ -448,6 +448,8 @@ module RustDataFlowGen implements InputSig or result = ps.getSelfParam() and this.isSelf() } + + ParamBase getParameter(Callable c) { result = this.getParameterIn(c.getParamList()) } } /** @@ -510,10 +512,6 @@ module RustDataFlowGen implements InputSig node.asExpr() = stripParens(match.getScrutinee()) or node.asPat() = match.getAnArm().getPat() ) - or - FlowSummaryImpl::Private::Steps::sourceLocalStep(_, node, _) - or - FlowSummaryImpl::Private::Steps::sinkLocalStep(node, _, _) } class DataFlowExpr = Expr; @@ -1289,10 +1287,10 @@ private module Cached { FlowSummaryImpl::Public::AcceptingValue acceptingValue, string kind, string model | FlowSummaryImpl::Private::barrierGuardSpec(b, stack, acceptingValue, kind, model) and - e = FlowSummaryImpl::StepsInput::getSinkNode(b, stack.headOfSingleton()).asExpr() and + e = FlowSummaryImpl::getExitElement(b, stack.headOfSingleton()) and kmp = TMkPair(kind, model) and gv = convertAcceptingValue(acceptingValue) and - g = b.getCall() + g.(Call).getResolvedTarget() = b ) } @@ -1303,15 +1301,8 @@ private module Cached { FlowSummaryImpl::Public::BarrierElement b, FlowSummaryImpl::Private::SummaryComponentStack stack | - FlowSummaryImpl::Private::barrierSpec(b, stack, kind, model) - | - n = FlowSummaryImpl::StepsInput::getSourceNode(b, stack, false) - or - // For barriers like `Argument[0]` we want to target the pre-update node - n = - FlowSummaryImpl::StepsInput::getSourceNode(b, stack, true) - .(PostUpdateNode) - .getPreUpdateNode() + FlowSummaryImpl::Private::barrierSpec(b, stack, kind, model) and + exists(FlowSummaryImpl::getEntryElement(b, stack, _, n.asExpr())) ) or ParameterizedBarrierGuard::getABarrierNode(TMkPair(kind, diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll index d9104da11ad5..9df51a38ce3c 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll @@ -33,23 +33,19 @@ module Input implements InputSig { class SummarizedCallableBase = Function; - class FlowSummaryCallBase = Void; + class FlowSummaryCallBase extends Void { + Location getLocation() { none() } + } predicate callableFromSource(SummarizedCallableBase c) { c.fromSource() } - abstract private class SourceSinkBase extends AstNode { - /** Gets the associated call. */ - abstract Call getCall(); - - /** Holds if the associated call resolves to `path`. */ - final predicate callResolvesTo(string path) { - path = this.getCall().getResolvedTarget().getCanonicalPath() - } + DataFlowCallable getSummarizedCallableAsDataFlowCallable(SummarizedCallableBase c) { + result.asSummarizedCallable() = c } - abstract class SourceBase extends SourceSinkBase { } + class SourceBase = Function; - abstract class SinkBase extends SourceSinkBase { } + class SinkBase = Function; predicate neutralElement( Input::SummarizedCallableBase c, string kind, string provenance, boolean isExact @@ -61,22 +57,6 @@ module Input implements InputSig { ) } - private class CallExprFunction extends SourceBase, SinkBase { - private CallExpr call; - - CallExprFunction() { this = call.getFunction() } - - override Call getCall() { result = call } - } - - private class MethodCallExprNameRef extends SourceBase, SinkBase { - private MethodCallExpr call; - - MethodCallExprNameRef() { this = call.getIdentifier() } - - override MethodCallExpr getCall() { result = call } - } - RustDataFlow::ArgumentPosition callbackSelfParameterPosition() { result.isClosureSelf() } ReturnKind getStandardReturnValueKind() { result = TNormalReturnKind() } @@ -147,75 +127,127 @@ module Input implements InputSig { private import Make as Impl -module StepsInput implements Impl::Private::StepsInputSig { - Impl::Private::SummaryNode getSummaryNode(RustDataFlow::Node n) { - result = n.(FlowSummaryNode).getSummaryNode() - } +/** Gets the argument of `call` described by `sc`, if any. */ +private Expr getArg(Call call, Impl::Private::SummaryComponent sc) { + exists(RustDataFlow::ArgumentPosition pos | + sc = Impl::Private::SummaryComponent::argument(pos) and + result = pos.getArgument(call) + ) +} - DataFlowCall getACall(Public::SummarizedCallable sc) { result.asCall().getStaticTarget() = sc } +/** Get the callable that `expr` refers to. */ +private Callable getCallable(Expr expr) { + result = resolvePath(expr.(PathExpr).getPath()).(Function) + or + result = expr.(ClosureExpr) + or + // The expression is an SSA read of an assignment of a closure + exists(Ssa::Definition def | + def.getARead() = expr and + def.getAnUltimateDefinition().(Ssa::WriteDefinition).assigns(result.(ClosureExpr)) + ) +} - /** Gets the argument of `source` described by `sc`, if any. */ - private Expr getSourceNodeArgument(Input::SourceBase source, Impl::Private::SummaryComponent sc) { - exists(RustDataFlow::ArgumentPosition pos | - sc = Impl::Private::SummaryComponent::argument(pos) and - result = pos.getArgument(source.getCall()) +bindingset[f, s] +bindingset[result, s] +Input2::SourceSinkReportingElement getEntryElement( + Function f, Impl::Private::SummaryComponentStack s, boolean isArg, + Input2::SourceSinkReportingElement exit +) { + s.headOfSingleton() = Impl::Private::SummaryComponent::return(_) and + result.(Call).getResolvedTarget() = f and + isArg = false and + exit = result + or + exists(RustDataFlow::ArgumentPosition pos | + s.head() = Impl::Private::SummaryComponent::parameter(pos) + | + exists(Call call, Expr arg | + call.getResolvedTarget() = f and + arg = getArg(call, s.tail().headOfSingleton()) and + exit = pos.getParameter(getCallable(arg)) and + result = call and + isArg = false ) - } - - /** Get the callable that `expr` refers to. */ - private Callable getCallable(Expr expr) { - result = resolvePath(expr.(PathExpr).getPath()).(Function) or - result = expr.(ClosureExpr) - or - // The expression is an SSA read of an assignment of a closure - exists(Ssa::Definition def | - def.getARead() = expr and - def.getAnUltimateDefinition().(Ssa::WriteDefinition).assigns(result.(ClosureExpr)) + exists(Function f0 | + f0 = f + or + f0.implements(f) + | + s.length() = 1 and + result = pos.getParameter(f0) and + exit = result and + isArg = false ) - } + ) + or + exists(Call call | + call.getResolvedTarget() = f and + result = getArg(call, s.headOfSingleton()) and + exit = result and + isArg = true + ) +} - RustDataFlow::DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { - result.asCfgScope() = source.getEnclosingCfgScope() +Input2::SourceSinkReportingElement getExitElement(Function f, Impl::Private::SummaryComponent sc) { + exists(Call call | + call.getResolvedTarget() = f and + result = getArg(call, sc) + ) +} + +private module Input2 implements Impl::Private::InputSig2 { + class SourceSinkReportingElement extends AstNode { + DataFlowCallable getEnclosingCallable() { result.asCfgScope() = this.getEnclosingCfgScope() } } - additional RustDataFlow::Node getSourceNode( - Input::SourceBase source, Impl::Private::SummaryComponentStack s, boolean isArgPostUpdate + bindingset[source, s] + SourceSinkReportingElement getSourceEntryElement( + Impl::Public::SourceElement source, Impl::Private::SummaryComponentStack s ) { - s.head() = Impl::Private::SummaryComponent::return(_) and - result.asExpr() = source.getCall() and - isArgPostUpdate = false - or - exists(RustDataFlow::ArgumentPosition pos, Expr arg | - s.head() = Impl::Private::SummaryComponent::parameter(pos) and - arg = getSourceNodeArgument(source, s.tail().headOfSingleton()) and - result.asParameter() = getCallable(arg).getParam(pos.getPosition()) and - isArgPostUpdate = false + result = getEntryElement(source, s, _, _) + } + + bindingset[e, s] + NodePublic getSourceExitNode(SourceSinkReportingElement e, Impl::Private::SummaryComponentStack s) { + exists(boolean isArg, SourceSinkReportingElement exit | e = getEntryElement(_, s, isArg, exit) | + isArg = false and + result.(Node).getAstNode() = exit + or + isArg = true and + result.(PostUpdateNode).getPreUpdateNode().(Node).getAstNode() = exit ) - or - result.(RustDataFlow::PostUpdateNode).getPreUpdateNode().asExpr() = - getSourceNodeArgument(source, s.headOfSingleton()) and - isArgPostUpdate = true } - RustDataFlow::Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { - result = getSourceNode(source, s, _) + SourceSinkReportingElement getSinkExitElement( + Impl::Public::SinkElement sink, Impl::Private::SummaryComponent sc + ) { + result = getExitElement(sink, sc) } - RustDataFlow::Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { - exists(InvocationExpr call, Expr arg, RustDataFlow::ArgumentPosition pos | - result.asExpr() = arg and - sc = Impl::Private::SummaryComponent::argument(pos) and - call = sink.getCall() and - arg = pos.getArgument(call) - ) + bindingset[e, sc] + NodePublic getSinkEntryNode(SourceSinkReportingElement e, Impl::Private::SummaryComponent sc) { + result.asExpr() = e and + exists(sc) + } +} + +private import Impl::Private::Make2 as Impl2 + +module StepsInput implements Impl2::StepsInputSig { + Impl2::SummaryNode getSummaryNode(RustDataFlow::Node n) { + result = n.(FlowSummaryNode).getSummaryNode() } + + DataFlowCall getACall(Public::SummarizedCallable sc) { result.asCall().getStaticTarget() = sc } } module Private { import Impl::Private + import Impl2 - module Steps = Impl::Private::Steps; + module Steps = Impl2::Steps; private import codeql.rust.dataflow.FlowSource private import codeql.rust.dataflow.FlowSink diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll index 8652b93f4aa9..81b3c1b1f468 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll @@ -212,7 +212,7 @@ private class FlowSourceFromModel extends FlowSource::Range { FlowSourceFromModel() { sourceModel(path, _, _, _, _) and - this.callResolvesTo(path) + this.getCanonicalPath() = path } override predicate isSource(string output, string kind, Provenance provenance, string model) { @@ -234,7 +234,7 @@ private class FlowSinkFromModel extends FlowSink::Range { FlowSinkFromModel() { sinkModel(path, _, _, _, _) and - this.callResolvesTo(path) + this.getCanonicalPath() = path } override predicate isSink(string input, string kind, Provenance provenance, string model) { @@ -256,7 +256,7 @@ private class FlowBarrierFromModel extends FlowBarrier::Range { FlowBarrierFromModel() { barrierModel(path, _, _, _, _) and - this.callResolvesTo(path) + this.getCanonicalPath() = path } override predicate isBarrier(string output, string kind, Provenance provenance, string model) { @@ -272,7 +272,7 @@ private class FlowBarrierGuardFromModel extends FlowBarrierGuard::Range { FlowBarrierGuardFromModel() { barrierGuardModel(path, _, _, _, _, _) and - this.callResolvesTo(path) + this.getCanonicalPath() = path } override predicate isBarrierGuard( diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll b/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll index 9ef2c3a08faf..cbe638d430c4 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll @@ -93,25 +93,16 @@ class FlowSummaryNode extends Node, TFlowSummaryNode { } override CfgScope getCfgScope() { - result = this.getSummaryNode().getSourceElement().getEnclosingCfgScope() - or - result = this.getSummaryNode().getSinkElement().getEnclosingCfgScope() + result = this.getSummaryNode().getSourceSinkReportingElement().getEnclosingCfgScope() } override DataFlowCallable getEnclosingCallable() { - result.asCfgScope() = this.getCfgScope() - or - result.asSummarizedCallable() = this.getSummarizedCallable() + result = this.getSummaryNode().getEnclosingCallable() } override Location getLocation() { Stages::DataFlowStage::ref() and - exists(this.getSummarizedCallable()) and - result instanceof EmptyLocation - or - result = this.getSourceElement().getLocation() - or - result = this.getSinkElement().getLocation() + result = this.getSummaryNode().getLocation() } override string toString() { @@ -761,9 +752,7 @@ newtype TNode = 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() | - n.hasEnclosingCfgScope() - ) + forall(AstNode n | n = sn.getSourceSinkReportingElement() | n.hasEnclosingCfgScope()) } or TClosureSelfReferenceNode(CfgScope c) { lambdaCreationExpr(c) } or TCaptureNode(VariableCapture::Flow::SynthesizedCaptureNode cn) or diff --git a/rust/ql/lib/codeql/rust/security/DisabledCertificateCheckExtensions.qll b/rust/ql/lib/codeql/rust/security/DisabledCertificateCheckExtensions.qll index a5933bc74b1c..d6685dfcb161 100644 --- a/rust/ql/lib/codeql/rust/security/DisabledCertificateCheckExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/DisabledCertificateCheckExtensions.qll @@ -39,12 +39,15 @@ module DisabledCertificateCheckExtensions { */ private class HeuristicSink extends Sink { HeuristicSink() { - exists(Call call | + exists(Call call, Expr arg | + arg = this.asExpr() and call.getStaticTarget().getName().getText() = ["danger_accept_invalid_certs", "danger_accept_invalid_hostnames"] and - call.getPositionalArgument(0) = this.asExpr() and + call.getPositionalArgument(0) = arg and // don't duplicate modeled sinks - not exists(ModelsAsDataSink s | s.(Node::FlowSummaryNode).getSinkElement().getCall() = call) + not exists(ModelsAsDataSink s | + s.(Node::FlowSummaryNode).getSummaryNode().getSourceSinkReportingElement() = arg + ) ) } } diff --git a/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll b/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll index fe5a8b038410..ea57d9427338 100644 --- a/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/HardcodedCryptographicValueExtensions.qll @@ -118,8 +118,9 @@ module HardcodedCryptographicValue { HeuristicSinks() { // any argument going to a parameter whose name matches a credential name - exists(Call c, Function f, int argIndex, string argName | - c.getPositionalArgument(argIndex) = this.asExpr() and + exists(Call c, Function f, Expr arg, int argIndex, string argName | + arg = this.asExpr() and + c.getPositionalArgument(argIndex) = arg and c.getStaticTarget() = f and f.getParam(argIndex).getPat().(IdentPat).getName().getText() = argName and ( @@ -134,7 +135,9 @@ module HardcodedCryptographicValue { // note: matching "key" results in too many false positives ) and // don't duplicate modeled sinks - not exists(ModelsAsDataSinks s | s.(Node::FlowSummaryNode).getSinkElement().getCall() = c) + not exists(ModelsAsDataSinks s | + s.(Node::FlowSummaryNode).getSummaryNode().getSourceSinkReportingElement() = arg + ) ) } diff --git a/rust/ql/lib/codeql/rust/security/WeakSensitiveDataHashingExtensions.qll b/rust/ql/lib/codeql/rust/security/WeakSensitiveDataHashingExtensions.qll index bd29f0498b35..25e6f4d5c7b7 100644 --- a/rust/ql/lib/codeql/rust/security/WeakSensitiveDataHashingExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/WeakSensitiveDataHashingExtensions.qll @@ -186,11 +186,15 @@ class ModeledHashOperation extends Cryptography::CryptographicOperation::Range { string algorithmName; ModeledHashOperation() { - exists(CallExpr call | + exists(CallExpr call, Expr e | sinkNode(input, "hasher-input") and - call = input.(Node::FlowSummaryNode).getSinkElement().getCall() and - call = this.asExpr() and + e = this.asExpr() and + e = input.(Node::FlowSummaryNode).getSummaryNode().getSourceSinkReportingElement() and algorithmName = call.getFunction().(PathExpr).getPath().getQualifier().getText() + | + call = e + or + call.getASyntacticArgument() = e ) } diff --git a/rust/ql/lib/utils/test/InlineFlowTest.qll b/rust/ql/lib/utils/test/InlineFlowTest.qll index 704172b95bd9..6b438165d406 100644 --- a/rust/ql/lib/utils/test/InlineFlowTest.qll +++ b/rust/ql/lib/utils/test/InlineFlowTest.qll @@ -38,9 +38,18 @@ private module FlowTestImpl implements InputSig { result = arg.(ArrayListExpr).getExpr(0).toString() ) or - sourceNode(src, _) and - result = - src.(Node::FlowSummaryNode).getSourceElement().getCall().getPositionalArgument(0).toString() and + exists(AstNode n | + sourceNode(src, _) and + n = src.(Node::FlowSummaryNode).getSummaryNode().getSourceSinkReportingElement() + | + result = n.(Call).getPositionalArgument(0).toString() + or + result = n.(Param).getPat().(IdentPat).getName().getText() + or + not n instanceof Call and + not n instanceof Param and + result = n.toString() + ) and // Don't use the result if it contains spaces not result.matches("% %") } diff --git a/rust/ql/test/library-tests/dataflow/models/main.rs b/rust/ql/test/library-tests/dataflow/models/main.rs index 61e5928636d7..f84a994a88c7 100644 --- a/rust/ql/test/library-tests/dataflow/models/main.rs +++ b/rust/ql/test/library-tests/dataflow/models/main.rs @@ -332,6 +332,17 @@ fn test_arg_source() { sink(i) // $ hasValueFlow=i } +trait MyTrait { + // has a source model + fn test_param_source(i: i64); +} + +impl MyTrait for () { + fn test_param_source(i: i64) { + sink(i) // $ hasValueFlow=i + } +} + struct MyStruct2(i64); impl PartialEq for MyStruct { diff --git a/rust/ql/test/library-tests/dataflow/models/models.expected b/rust/ql/test/library-tests/dataflow/models/models.expected index e5ea563eaefe..f31ce215ed4b 100644 --- a/rust/ql/test/library-tests/dataflow/models/models.expected +++ b/rust/ql/test/library-tests/dataflow/models/models.expected @@ -4,33 +4,34 @@ models | 3 | Sink: main::external_file::generated_sink; Argument[0]; test-sink | | 4 | Sink: main::external_file::neutral_manual_sink; Argument[0]; test-sink | | 5 | Sink: main::simple_sink; Argument[0]; test-sink | -| 6 | Source: ::source; ReturnValue.Field[main::MyFieldEnum::C::field_c]; test-source | -| 7 | Source: main::arg_source; Argument[0]; test-source | -| 8 | Source: main::enum_source; ReturnValue.Field[main::MyFieldEnum::D::field_d]; test-source | -| 9 | Source: main::external_file::generated_source; ReturnValue; test-source | -| 10 | Source: main::external_file::neutral_manual_source; ReturnValue; test-source | -| 11 | Source: main::simple_source; ReturnValue; test-source | -| 12 | Source: main::source_into_function::pass_source; Argument[1].Parameter[0]; test-source | -| 13 | Summary: <_ as core::cmp::Ord>::max; Argument[self,0]; ReturnValue; value | -| 14 | Summary: <_ as core::cmp::PartialOrd>::lt; Argument[self].Reference; ReturnValue; taint | -| 15 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | -| 16 | Summary: main::apply; Argument[0]; Argument[1].Parameter[0]; value | -| 17 | Summary: main::apply; Argument[1].ReturnValue; ReturnValue; value | -| 18 | Summary: main::coerce; Argument[0]; ReturnValue; taint | -| 19 | Summary: main::external_file::generated_summary; Argument[0]; ReturnValue; value | -| 20 | Summary: main::external_file::neutral_manual_summary; Argument[0]; ReturnValue; value | -| 21 | Summary: main::get_array_element; Argument[0].Element; ReturnValue; value | -| 22 | Summary: main::get_async_number; Argument[0]; ReturnValue.Future; value | -| 23 | Summary: main::get_struct_field; Argument[0].Field[main::MyStruct::field1]; ReturnValue; value | -| 24 | Summary: main::get_tuple_element; Argument[0].Field[0]; ReturnValue; value | -| 25 | Summary: main::get_var_field; Argument[0].Field[main::MyFieldEnum::C::field_c]; ReturnValue; value | -| 26 | Summary: main::get_var_pos; Argument[0].Field[main::MyPosEnum::A(0)]; ReturnValue; value | -| 27 | Summary: main::set_array_element; Argument[0]; ReturnValue.Element; value | -| 28 | Summary: main::set_struct_field; Argument[0]; ReturnValue.Field[main::MyStruct::field2]; value | -| 29 | Summary: main::set_tuple_element; Argument[0]; ReturnValue.Field[1]; value | -| 30 | Summary: main::set_var_field; Argument[0]; ReturnValue.Field[main::MyFieldEnum::D::field_d]; value | -| 31 | Summary: main::set_var_pos; Argument[0]; ReturnValue.Field[main::MyPosEnum::B(0)]; value | -| 32 | Summary: main::snd; Argument[1]; ReturnValue; value | +| 6 | Source: <_ as main::MyTrait>::test_param_source; Parameter[0]; test-source | +| 7 | Source: ::source; ReturnValue.Field[main::MyFieldEnum::C::field_c]; test-source | +| 8 | Source: main::arg_source; Argument[0]; test-source | +| 9 | Source: main::enum_source; ReturnValue.Field[main::MyFieldEnum::D::field_d]; test-source | +| 10 | Source: main::external_file::generated_source; ReturnValue; test-source | +| 11 | Source: main::external_file::neutral_manual_source; ReturnValue; test-source | +| 12 | Source: main::simple_source; ReturnValue; test-source | +| 13 | Source: main::source_into_function::pass_source; Argument[1].Parameter[0]; test-source | +| 14 | Summary: <_ as core::cmp::Ord>::max; Argument[self,0]; ReturnValue; value | +| 15 | Summary: <_ as core::cmp::PartialOrd>::lt; Argument[self].Reference; ReturnValue; taint | +| 16 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 17 | Summary: main::apply; Argument[0]; Argument[1].Parameter[0]; value | +| 18 | Summary: main::apply; Argument[1].ReturnValue; ReturnValue; value | +| 19 | Summary: main::coerce; Argument[0]; ReturnValue; taint | +| 20 | Summary: main::external_file::generated_summary; Argument[0]; ReturnValue; value | +| 21 | Summary: main::external_file::neutral_manual_summary; Argument[0]; ReturnValue; value | +| 22 | Summary: main::get_array_element; Argument[0].Element; ReturnValue; value | +| 23 | Summary: main::get_async_number; Argument[0]; ReturnValue.Future; value | +| 24 | Summary: main::get_struct_field; Argument[0].Field[main::MyStruct::field1]; ReturnValue; value | +| 25 | Summary: main::get_tuple_element; Argument[0].Field[0]; ReturnValue; value | +| 26 | Summary: main::get_var_field; Argument[0].Field[main::MyFieldEnum::C::field_c]; ReturnValue; value | +| 27 | Summary: main::get_var_pos; Argument[0].Field[main::MyPosEnum::A(0)]; ReturnValue; value | +| 28 | Summary: main::set_array_element; Argument[0]; ReturnValue.Element; value | +| 29 | Summary: main::set_struct_field; Argument[0]; ReturnValue.Field[main::MyStruct::field2]; value | +| 30 | Summary: main::set_tuple_element; Argument[0]; ReturnValue.Field[1]; value | +| 31 | Summary: main::set_var_field; Argument[0]; ReturnValue.Field[main::MyFieldEnum::D::field_d]; value | +| 32 | Summary: main::set_var_pos; Argument[0]; ReturnValue.Field[main::MyPosEnum::B(0)]; value | +| 33 | Summary: main::snd; Argument[1]; ReturnValue; 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 | | @@ -40,13 +41,13 @@ 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:18 | +| main.rs:26:17:26:17 | s | main.rs:26:10:26:18 | coerce(...) | provenance | MaD:19 | | main.rs:41:9:41:10 | s1 | main.rs:42:17:42:18 | s1 | provenance | | | main.rs:41:9:41:10 | s1 | main.rs:42:17:42:18 | s1 | provenance | | | main.rs:41:14:41:23 | source(...) | main.rs:41:9:41:10 | s1 | provenance | | | main.rs:41:14:41:23 | source(...) | main.rs:41:9:41:10 | s1 | provenance | | -| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:32 | -| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:32 | +| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:33 | +| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:33 | | main.rs:54:9:54:9 | s | main.rs:55:27:55:27 | s | provenance | | | main.rs:54:9:54:9 | s | main.rs:55:27:55:27 | s | provenance | | | main.rs:54:13:54:21 | source(...) | main.rs:54:9:54:9 | s | provenance | | @@ -57,8 +58,8 @@ edges | main.rs:55:14:55:28 | ...::A(...) [A] | main.rs:55:9:55:10 | e1 [A] | provenance | | | main.rs:55:27:55:27 | s | main.rs:55:14:55:28 | ...::A(...) [A] | provenance | | | main.rs:55:27:55:27 | s | main.rs:55:14:55:28 | ...::A(...) [A] | provenance | | -| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:26 | -| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:26 | +| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:27 | +| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:27 | | main.rs:67:9:67:9 | s | main.rs:68:26:68:26 | s | provenance | | | main.rs:67:9:67:9 | s | main.rs:68:26:68:26 | s | provenance | | | main.rs:67:13:67:21 | source(...) | main.rs:67:9:67:9 | s | provenance | | @@ -67,8 +68,8 @@ edges | main.rs:68:9:68:10 | e1 [B] | main.rs:69:11:69:12 | e1 [B] | provenance | | | main.rs:68:14:68:27 | set_var_pos(...) [B] | main.rs:68:9:68:10 | e1 [B] | provenance | | | main.rs:68:14:68:27 | set_var_pos(...) [B] | main.rs:68:9:68:10 | e1 [B] | provenance | | -| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:31 | -| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:31 | +| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:32 | +| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:32 | | main.rs:69:11:69:12 | e1 [B] | main.rs:71:9:71:23 | ...::B(...) [B] | provenance | | | main.rs:69:11:69:12 | e1 [B] | main.rs:71:9:71:23 | ...::B(...) [B] | provenance | | | main.rs:71:9:71:23 | ...::B(...) [B] | main.rs:71:22:71:22 | i | provenance | | @@ -85,8 +86,8 @@ edges | main.rs:87:14:87:42 | ...::C {...} [C] | main.rs:87:9:87:10 | e1 [C] | provenance | | | main.rs:87:40:87:40 | s | main.rs:87:14:87:42 | ...::C {...} [C] | provenance | | | main.rs:87:40:87:40 | s | main.rs:87:14:87:42 | ...::C {...} [C] | provenance | | -| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:25 | -| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:25 | +| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:26 | +| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:26 | | main.rs:99:9:99:9 | s | main.rs:100:28:100:28 | s | provenance | | | main.rs:99:9:99:9 | s | main.rs:100:28:100:28 | s | provenance | | | main.rs:99:13:99:21 | source(...) | main.rs:99:9:99:9 | s | provenance | | @@ -95,8 +96,8 @@ edges | main.rs:100:9:100:10 | e1 [D] | main.rs:101:11:101:12 | e1 [D] | provenance | | | main.rs:100:14:100:29 | set_var_field(...) [D] | main.rs:100:9:100:10 | e1 [D] | provenance | | | main.rs:100:14:100:29 | set_var_field(...) [D] | main.rs:100:9:100:10 | e1 [D] | provenance | | -| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:30 | -| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:30 | +| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:31 | +| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:31 | | main.rs:101:11:101:12 | e1 [D] | main.rs:103:9:103:37 | ...::D {...} [D] | provenance | | | main.rs:101:11:101:12 | e1 [D] | main.rs:103:9:103:37 | ...::D {...} [D] | provenance | | | main.rs:103:9:103:37 | ...::D {...} [D] | main.rs:103:35:103:35 | i | provenance | | @@ -113,8 +114,8 @@ edges | main.rs:119:21:122:5 | MyStruct {...} [MyStruct.field1] | main.rs:119:9:119:17 | my_struct [MyStruct.field1] | provenance | | | main.rs:120:17:120:17 | s | main.rs:119:21:122:5 | MyStruct {...} [MyStruct.field1] | provenance | | | main.rs:120:17:120:17 | s | main.rs:119:21:122:5 | MyStruct {...} [MyStruct.field1] | provenance | | -| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:23 | -| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:23 | +| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:24 | +| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:24 | | main.rs:140:9:140:9 | s | main.rs:141:38:141:38 | s | provenance | | | main.rs:140:9:140:9 | s | main.rs:141:38:141:38 | s | provenance | | | main.rs:140:13:140:21 | source(...) | main.rs:140:9:140:9 | s | provenance | | @@ -123,16 +124,16 @@ edges | main.rs:141:9:141:17 | my_struct [MyStruct.field2] | main.rs:143:10:143:18 | my_struct [MyStruct.field2] | provenance | | | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | main.rs:141:9:141:17 | my_struct [MyStruct.field2] | provenance | | | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | main.rs:141:9:141:17 | my_struct [MyStruct.field2] | provenance | | -| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:28 | -| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:28 | +| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:29 | +| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:29 | | main.rs:143:10:143:18 | my_struct [MyStruct.field2] | main.rs:143:10:143:25 | my_struct.field2 | provenance | | | main.rs:143:10:143:18 | my_struct [MyStruct.field2] | main.rs:143:10:143:25 | my_struct.field2 | provenance | | | main.rs:152:9:152:9 | s | main.rs:153:29:153:29 | s | provenance | | | main.rs:152:9:152:9 | s | main.rs:153:29:153:29 | s | provenance | | | main.rs:152:13:152:21 | source(...) | main.rs:152:9:152:9 | s | provenance | | | main.rs:152:13:152:21 | source(...) | main.rs:152:9:152:9 | s | provenance | | -| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:21 | -| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:21 | +| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:22 | +| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:22 | | main.rs:153:29:153:29 | s | main.rs:153:28:153:30 | [...] [element] | provenance | | | main.rs:153:29:153:29 | s | main.rs:153:28:153:30 | [...] [element] | provenance | | | main.rs:162:9:162:9 | s | main.rs:163:33:163:33 | s | provenance | | @@ -143,10 +144,10 @@ edges | main.rs:163:9:163:11 | arr [element] | main.rs:164:10:164:12 | arr [element] | provenance | | | main.rs:163:15:163:34 | set_array_element(...) [element] | main.rs:163:9:163:11 | arr [element] | provenance | | | main.rs:163:15:163:34 | set_array_element(...) [element] | main.rs:163:9:163:11 | arr [element] | provenance | | -| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:27 | -| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:27 | -| main.rs:164:10:164:12 | arr [element] | main.rs:164:10:164:15 | arr[0] | provenance | MaD:15 | -| main.rs:164:10:164:12 | arr [element] | main.rs:164:10:164:15 | arr[0] | provenance | MaD:15 | +| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:28 | +| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:28 | +| main.rs:164:10:164:12 | arr [element] | main.rs:164:10:164:15 | arr[0] | provenance | MaD:16 | +| main.rs:164:10:164:12 | arr [element] | main.rs:164:10:164:15 | arr[0] | provenance | MaD:16 | | main.rs:173:9:173:9 | s | main.rs:174:14:174:14 | s | provenance | | | main.rs:173:9:173:9 | s | main.rs:174:14:174:14 | s | provenance | | | main.rs:173:13:173:22 | source(...) | main.rs:173:9:173:9 | s | provenance | | @@ -157,8 +158,8 @@ edges | main.rs:174:13:174:18 | TupleExpr [tuple.0] | main.rs:174:9:174:9 | t [tuple.0] | provenance | | | main.rs:174:14:174:14 | s | main.rs:174:13:174:18 | TupleExpr [tuple.0] | provenance | | | main.rs:174:14:174:14 | s | main.rs:174:13:174:18 | TupleExpr [tuple.0] | provenance | | -| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:24 | -| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:24 | +| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:25 | +| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:25 | | main.rs:186:9:186:9 | s | main.rs:187:31:187:31 | s | provenance | | | main.rs:186:9:186:9 | s | main.rs:187:31:187:31 | s | provenance | | | main.rs:186:13:186:22 | source(...) | main.rs:186:9:186:9 | s | provenance | | @@ -167,8 +168,8 @@ edges | main.rs:187:9:187:9 | t [tuple.1] | main.rs:189:10:189:10 | t [tuple.1] | provenance | | | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | main.rs:187:9:187:9 | t [tuple.1] | provenance | | | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | main.rs:187:9:187:9 | t [tuple.1] | provenance | | -| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:29 | -| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:29 | +| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:30 | +| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:30 | | main.rs:189:10:189:10 | t [tuple.1] | main.rs:189:10:189:12 | t.1 | provenance | | | main.rs:189:10:189:10 | t [tuple.1] | main.rs:189:10:189:12 | t.1 | provenance | | | main.rs:201:9:201:9 | s | main.rs:206:11:206:11 | s | provenance | | @@ -177,8 +178,8 @@ edges | main.rs:201:13:201:22 | source(...) | main.rs:201:9:201:9 | s | provenance | | | main.rs:202:14:202:14 | ... | main.rs:203:14:203:14 | n | provenance | | | main.rs:202:14:202:14 | ... | main.rs:203:14:203:14 | n | provenance | | -| main.rs:206:11:206:11 | s | main.rs:202:14:202:14 | ... | provenance | MaD:16 | -| main.rs:206:11:206:11 | s | main.rs:202:14:202:14 | ... | provenance | MaD:16 | +| main.rs:206:11:206:11 | s | main.rs:202:14:202:14 | ... | provenance | MaD:17 | +| main.rs:206:11:206:11 | s | main.rs:202:14:202:14 | ... | provenance | MaD:17 | | main.rs:210:13:210:22 | source(...) | main.rs:212:23:212:23 | f [captured s] | provenance | | | main.rs:210:13:210:22 | source(...) | main.rs:212:23:212:23 | f [captured s] | provenance | | | main.rs:211:40:211:40 | s | main.rs:211:17:211:42 | if ... {...} else {...} | provenance | | @@ -187,14 +188,14 @@ edges | main.rs:212:9:212:9 | t | main.rs:213:10:213:10 | t | provenance | | | main.rs:212:13:212:24 | apply(...) | main.rs:212:9:212:9 | t | provenance | | | main.rs:212:13:212:24 | apply(...) | main.rs:212:9:212:9 | t | provenance | | -| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:16 | -| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:16 | | main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:17 | | main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:17 | -| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:16 | -| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:16 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:18 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:18 | | main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:17 | | main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:17 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:18 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:18 | | main.rs:217:9:217:9 | s | main.rs:219:19:219:19 | s | provenance | | | main.rs:217:9:217:9 | s | main.rs:219:19:219:19 | s | provenance | | | main.rs:217:13:217:22 | source(...) | main.rs:217:9:217:9 | s | provenance | | @@ -205,10 +206,10 @@ edges | main.rs:219:9:219:9 | t | main.rs:220:10:220:10 | t | provenance | | | main.rs:219:13:219:23 | apply(...) | main.rs:219:9:219:9 | t | provenance | | | main.rs:219:13:219:23 | apply(...) | main.rs:219:9:219:9 | t | provenance | | -| main.rs:219:19:219:19 | s | main.rs:218:14:218:14 | ... | provenance | MaD:16 | -| main.rs:219:19:219:19 | s | main.rs:218:14:218:14 | ... | provenance | MaD:16 | -| main.rs:219:19:219:19 | s | main.rs:219:13:219:23 | apply(...) | provenance | MaD:16 | -| main.rs:219:19:219:19 | s | main.rs:219:13:219:23 | apply(...) | provenance | MaD:16 | +| main.rs:219:19:219:19 | s | main.rs:218:14:218:14 | ... | provenance | MaD:17 | +| main.rs:219:19:219:19 | s | main.rs:218:14:218:14 | ... | provenance | MaD:17 | +| main.rs:219:19:219:19 | s | main.rs:219:13:219:23 | apply(...) | provenance | MaD:17 | +| main.rs:219:19:219:19 | s | main.rs:219:13:219:23 | apply(...) | provenance | MaD:17 | | main.rs:229:9:229:9 | s | main.rs:230:30:230:30 | s | provenance | | | main.rs:229:9:229:9 | s | main.rs:230:30:230:30 | s | provenance | | | main.rs:229:13:229:22 | source(...) | main.rs:229:9:229:9 | s | provenance | | @@ -219,14 +220,12 @@ edges | main.rs:230:13:230:31 | get_async_number(...) [future] | main.rs:230:13:230:37 | await ... | provenance | | | main.rs:230:13:230:37 | await ... | main.rs:230:9:230:9 | t | provenance | | | main.rs:230:13:230:37 | await ... | main.rs:230:9:230:9 | t | provenance | | -| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:22 | -| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:22 | +| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:23 | +| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:23 | | main.rs:250:9:250:9 | s [D] | main.rs:251:11:251:11 | s [D] | provenance | | | main.rs:250:9:250:9 | s [D] | main.rs:251:11:251:11 | s [D] | provenance | | -| main.rs:250:13:250:23 | enum_source | main.rs:250:13:250:27 | enum_source(...) [D] | provenance | Src:MaD:8 | -| main.rs:250:13:250:23 | enum_source | main.rs:250:13:250:27 | enum_source(...) [D] | provenance | Src:MaD:8 | -| main.rs:250:13:250:27 | enum_source(...) [D] | main.rs:250:9:250:9 | s [D] | provenance | | -| main.rs:250:13:250:27 | enum_source(...) [D] | main.rs:250:9:250:9 | s [D] | provenance | | +| main.rs:250:13:250:27 | enum_source(...) | main.rs:250:9:250:9 | s [D] | provenance | Src:MaD:9 | +| main.rs:250:13:250:27 | enum_source(...) | main.rs:250:9:250:9 | s [D] | provenance | Src:MaD:9 | | main.rs:251:11:251:11 | s [D] | main.rs:253:9:253:37 | ...::D {...} [D] | provenance | | | main.rs:251:11:251:11 | s [D] | main.rs:253:9:253:37 | ...::D {...} [D] | provenance | | | main.rs:253:9:253:37 | ...::D {...} [D] | main.rs:253:35:253:35 | i | provenance | | @@ -235,10 +234,8 @@ edges | main.rs:253:35:253:35 | i | main.rs:253:47:253:47 | i | provenance | | | main.rs:259:9:259:9 | s [C] | main.rs:260:11:260:11 | s [C] | provenance | | | main.rs:259:9:259:9 | s [C] | main.rs:260:11:260:11 | s [C] | provenance | | -| main.rs:259:13:259:24 | e.source(...) [C] | main.rs:259:9:259:9 | s [C] | provenance | | -| main.rs:259:13:259:24 | e.source(...) [C] | main.rs:259:9:259:9 | s [C] | provenance | | -| main.rs:259:15:259:20 | source | main.rs:259:13:259:24 | e.source(...) [C] | provenance | Src:MaD:6 | -| main.rs:259:15:259:20 | source | main.rs:259:13:259:24 | e.source(...) [C] | provenance | Src:MaD:6 | +| main.rs:259:13:259:24 | e.source(...) | main.rs:259:9:259:9 | s [C] | provenance | Src:MaD:7 | +| main.rs:259:13:259:24 | e.source(...) | main.rs:259:9:259:9 | s [C] | provenance | Src:MaD:7 | | main.rs:260:11:260:11 | s [C] | main.rs:261:9:261:37 | ...::C {...} [C] | provenance | | | main.rs:260:11:260:11 | s [C] | main.rs:261:9:261:37 | ...::C {...} [C] | provenance | | | main.rs:261:9:261:37 | ...::C {...} [C] | main.rs:261:35:261:35 | i | provenance | | @@ -247,96 +244,90 @@ edges | main.rs:261:35:261:35 | i | main.rs:261:47:261:47 | i | provenance | | | main.rs:275:18:275:18 | ... | main.rs:275:26:275:26 | a | provenance | | | main.rs:275:18:275:18 | ... | main.rs:275:26:275:26 | a | provenance | | -| main.rs:276:9:276:19 | pass_source | main.rs:275:18:275:18 | ... | provenance | Src:MaD:12 | -| main.rs:276:9:276:19 | pass_source | main.rs:275:18:275:18 | ... | provenance | Src:MaD:12 | -| main.rs:278:9:278:19 | pass_source | main.rs:278:25:278:25 | ... | provenance | Src:MaD:12 | -| main.rs:278:9:278:19 | pass_source | main.rs:278:25:278:25 | ... | provenance | Src:MaD:12 | +| main.rs:276:9:276:25 | pass_source(...) | main.rs:275:18:275:18 | ... | provenance | Src:MaD:13 | +| main.rs:276:9:276:25 | pass_source(...) | main.rs:275:18:275:18 | ... | provenance | Src:MaD:13 | +| main.rs:278:9:280:10 | pass_source(...) | main.rs:278:25:278:25 | ... | provenance | Src:MaD:13 | +| main.rs:278:9:280:10 | pass_source(...) | main.rs:278:25:278:25 | ... | provenance | Src:MaD:13 | | main.rs:278:25:278:25 | ... | main.rs:279:18:279:18 | a | provenance | | | main.rs:278:25:278:25 | ... | main.rs:279:18:279:18 | a | provenance | | | main.rs:282:14:282:19 | ...: i64 | main.rs:283:18:283:18 | a | provenance | | | main.rs:282:14:282:19 | ...: i64 | main.rs:283:18:283:18 | a | provenance | | -| main.rs:285:9:285:19 | pass_source | main.rs:282:14:282:19 | ...: i64 | provenance | Src:MaD:12 | -| main.rs:285:9:285:19 | pass_source | main.rs:282:14:282:19 | ...: i64 | provenance | Src:MaD:12 | -| main.rs:287:9:287:19 | pass_source | main.rs:287:36:287:36 | ... | provenance | Src:MaD:12 | -| main.rs:287:9:287:19 | pass_source | main.rs:287:36:287:36 | ... | provenance | Src:MaD:12 | +| main.rs:285:9:285:25 | pass_source(...) | main.rs:282:14:282:19 | ...: i64 | provenance | Src:MaD:13 | +| main.rs:285:9:285:25 | pass_source(...) | main.rs:282:14:282:19 | ...: i64 | provenance | Src:MaD:13 | +| main.rs:287:9:289:10 | pass_source(...) | main.rs:287:36:287:36 | ... | provenance | Src:MaD:13 | +| main.rs:287:9:289:10 | pass_source(...) | main.rs:287:36:287:36 | ... | provenance | Src:MaD:13 | | main.rs:287:36:287:36 | ... | main.rs:288:18:288:18 | a | provenance | | | main.rs:287:36:287:36 | ... | main.rs:288:18:288:18 | a | provenance | | | main.rs:297:9:297:9 | s | main.rs:298:41:298:41 | s | provenance | | | main.rs:297:9:297:9 | s | main.rs:298:41:298:41 | s | provenance | | | main.rs:297:13:297:22 | source(...) | main.rs:297:9:297:9 | s | provenance | | | main.rs:297:13:297:22 | source(...) | main.rs:297:9:297:9 | s | provenance | | -| main.rs:298:15:298:43 | ...::C {...} [C] | main.rs:298:5:298:13 | enum_sink | provenance | MaD:2 Sink:MaD:2 | -| main.rs:298:15:298:43 | ...::C {...} [C] | main.rs:298:5:298:13 | enum_sink | provenance | MaD:2 Sink:MaD:2 | +| main.rs:298:15:298:43 | ...::C {...} [C] | main.rs:298:15:298:43 | ...::C {...} | provenance | MaD:2 Sink:MaD:2 | +| main.rs:298:15:298:43 | ...::C {...} [C] | main.rs:298:15:298:43 | ...::C {...} | provenance | MaD:2 Sink:MaD:2 | | main.rs:298:41:298:41 | s | main.rs:298:15:298:43 | ...::C {...} [C] | provenance | | | main.rs:298:41:298:41 | s | main.rs:298:15:298:43 | ...::C {...} [C] | provenance | | | main.rs:303:9:303:9 | s | main.rs:304:39:304:39 | s | provenance | | | main.rs:303:9:303:9 | s | main.rs:304:39:304:39 | s | provenance | | | main.rs:303:13:303:22 | source(...) | main.rs:303:9:303:9 | s | provenance | | | main.rs:303:13:303:22 | source(...) | main.rs:303:9:303:9 | s | provenance | | -| main.rs:304:9:304:9 | e [D] | main.rs:305:5:305:5 | e [D] | provenance | | -| main.rs:304:9:304:9 | e [D] | main.rs:305:5:305:5 | e [D] | provenance | | +| main.rs:304:9:304:9 | e [D] | main.rs:305:5:305:5 | e | provenance | MaD:1 Sink:MaD:1 | +| main.rs:304:9:304:9 | e [D] | main.rs:305:5:305:5 | e | provenance | MaD:1 Sink:MaD:1 | | main.rs:304:13:304:41 | ...::D {...} [D] | main.rs:304:9:304:9 | e [D] | provenance | | | main.rs:304:13:304:41 | ...::D {...} [D] | main.rs:304:9:304:9 | e [D] | provenance | | | main.rs:304:39:304:39 | s | main.rs:304:13:304:41 | ...::D {...} [D] | provenance | | | main.rs:304:39:304:39 | s | main.rs:304:13:304:41 | ...::D {...} [D] | provenance | | -| main.rs:305:5:305:5 | e [D] | main.rs:305:7:305:10 | sink | provenance | MaD:1 Sink:MaD:1 | -| main.rs:305:5:305:5 | e [D] | main.rs:305:7:305:10 | sink | provenance | MaD:1 Sink:MaD:1 | | main.rs:314:9:314:9 | s | main.rs:315:10:315:10 | s | provenance | | | main.rs:314:9:314:9 | s | main.rs:315:10:315:10 | s | provenance | | -| main.rs:314:13:314:25 | simple_source | main.rs:314:13:314:29 | simple_source(...) | provenance | Src:MaD:11 MaD:11 | -| main.rs:314:13:314:25 | simple_source | main.rs:314:13:314:29 | simple_source(...) | provenance | Src:MaD:11 MaD:11 | -| main.rs:314:13:314:29 | simple_source(...) | main.rs:314:9:314:9 | s | provenance | | -| main.rs:314:13:314:29 | simple_source(...) | main.rs:314:9:314:9 | s | provenance | | -| main.rs:322:9:322:9 | s | main.rs:323:17:323:17 | s | provenance | | -| main.rs:322:9:322:9 | s | main.rs:323:17:323:17 | s | provenance | | +| main.rs:314:13:314:29 | simple_source(...) | main.rs:314:9:314:9 | s | provenance | Src:MaD:12 MaD:12 | +| main.rs:314:13:314:29 | simple_source(...) | main.rs:314:9:314:9 | s | provenance | Src:MaD:12 MaD:12 | +| main.rs:322:9:322:9 | s | main.rs:323:17:323:17 | s | provenance | MaD:5 Sink:MaD:5 | +| main.rs:322:9:322:9 | s | main.rs:323:17:323:17 | s | provenance | MaD:5 Sink:MaD:5 | | main.rs:322:13:322:22 | source(...) | main.rs:322:9:322:9 | s | provenance | | | main.rs:322:13:322:22 | source(...) | main.rs:322:9:322:9 | s | provenance | | -| main.rs:323:17:323:17 | s | main.rs:323:5:323:15 | simple_sink | provenance | MaD:5 Sink:MaD:5 | -| main.rs:323:17:323:17 | s | main.rs:323:5:323:15 | simple_sink | provenance | MaD:5 Sink:MaD:5 | -| main.rs:331:5:331:14 | arg_source | main.rs:331:16:331:16 | [post] i | provenance | Src:MaD:7 MaD:7 | -| main.rs:331:5:331:14 | arg_source | main.rs:331:16:331:16 | [post] i | provenance | Src:MaD:7 MaD:7 | -| main.rs:331:16:331:16 | [post] i | main.rs:332:10:332:10 | i | provenance | | -| main.rs:331:16:331:16 | [post] i | main.rs:332:10:332:10 | i | provenance | | -| main.rs:384:9:384:10 | x1 | main.rs:385:10:385:11 | x1 | provenance | | -| main.rs:384:9:384:10 | x1 | main.rs:385:10:385:11 | x1 | provenance | | -| main.rs:384:14:384:23 | source(...) | main.rs:384:14:384:30 | ... .max(...) | provenance | MaD:13 | -| main.rs:384:14:384:23 | source(...) | main.rs:384:14:384:30 | ... .max(...) | provenance | MaD:13 | -| main.rs:384:14:384:30 | ... .max(...) | main.rs:384:9:384:10 | x1 | provenance | | -| main.rs:384:14:384:30 | ... .max(...) | main.rs:384:9:384:10 | x1 | provenance | | -| main.rs:387:9:387:10 | x2 [MyStruct.field1] | main.rs:395:10:395:11 | x2 [MyStruct.field1] | provenance | | -| main.rs:387:9:387:10 | x2 [MyStruct.field1] | main.rs:395:10:395:11 | x2 [MyStruct.field1] | provenance | | -| main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | main.rs:387:9:387:10 | x2 [MyStruct.field1] | provenance | | -| main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | main.rs:387:9:387:10 | x2 [MyStruct.field1] | provenance | | -| main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:13 | -| main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:13 | -| main.rs:388:17:388:26 | source(...) | main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | provenance | | -| main.rs:388:17:388:26 | source(...) | main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | provenance | | -| main.rs:395:10:395:11 | x2 [MyStruct.field1] | main.rs:395:10:395:18 | x2.field1 | provenance | | -| main.rs:395:10:395:11 | x2 [MyStruct.field1] | main.rs:395:10:395:18 | x2.field1 | provenance | | -| main.rs:400:9:400:10 | x4 | main.rs:401:10:401:11 | x4 | provenance | | -| main.rs:400:9:400:10 | x4 | main.rs:401:10:401:11 | x4 | provenance | | -| main.rs:400:14:400:23 | source(...) | main.rs:400:14:400:30 | ... .max(...) | provenance | MaD:13 | -| main.rs:400:14:400:23 | source(...) | main.rs:400:14:400:30 | ... .max(...) | provenance | MaD:13 | -| main.rs:400:14:400:30 | ... .max(...) | main.rs:400:9:400:10 | x4 | provenance | | -| main.rs:400:14:400:30 | ... .max(...) | main.rs:400:9:400:10 | x4 | provenance | | -| main.rs:403:9:403:10 | x5 | main.rs:404:10:404:11 | x5 | provenance | | -| main.rs:403:14:403:23 | source(...) | main.rs:403:14:403:30 | ... .lt(...) | provenance | MaD:14 | -| main.rs:403:14:403:30 | ... .lt(...) | main.rs:403:9:403:10 | x5 | provenance | | -| main.rs:406:9:406:10 | x6 | main.rs:407:10:407:11 | x6 | provenance | | -| main.rs:406:14:406:23 | source(...) | main.rs:406:14:406:27 | ... < ... | provenance | MaD:14 | -| main.rs:406:14:406:27 | ... < ... | main.rs:406:9:406:10 | x6 | provenance | | -| main.rs:422:10:422:25 | generated_source | main.rs:422:10:422:28 | generated_source(...) | provenance | Src:MaD:9 MaD:9 | -| main.rs:422:10:422:25 | generated_source | main.rs:422:10:422:28 | generated_source(...) | provenance | Src:MaD:9 MaD:9 | -| main.rs:424:10:424:30 | neutral_manual_source | main.rs:424:10:424:33 | neutral_manual_source(...) | provenance | Src:MaD:10 MaD:10 | -| main.rs:424:10:424:30 | neutral_manual_source | main.rs:424:10:424:33 | neutral_manual_source(...) | provenance | Src:MaD:10 MaD:10 | -| main.rs:425:20:425:28 | source(...) | main.rs:425:5:425:18 | generated_sink | provenance | MaD:3 Sink:MaD:3 | -| main.rs:425:20:425:28 | source(...) | main.rs:425:5:425:18 | generated_sink | provenance | MaD:3 Sink:MaD:3 | -| main.rs:427:25:427:33 | source(...) | main.rs:427:5:427:23 | neutral_manual_sink | provenance | MaD:4 Sink:MaD:4 | -| main.rs:427:25:427:33 | source(...) | main.rs:427:5:427:23 | neutral_manual_sink | provenance | MaD:4 Sink:MaD:4 | -| main.rs:428:28:428:36 | source(...) | main.rs:428:10:428:37 | generated_summary(...) | provenance | MaD:19 | -| main.rs:428:28:428:36 | source(...) | main.rs:428:10:428:37 | generated_summary(...) | provenance | MaD:19 | -| main.rs:430:33:430:41 | source(...) | main.rs:430:10:430:42 | neutral_manual_summary(...) | provenance | MaD:20 | -| main.rs:430:33:430:41 | source(...) | main.rs:430:10:430:42 | neutral_manual_summary(...) | provenance | MaD:20 | +| main.rs:331:16:331:16 | i | main.rs:332:10:332:10 | i | provenance | Src:MaD:8 MaD:8 | +| main.rs:331:16:331:16 | i | main.rs:332:10:332:10 | i | provenance | Src:MaD:8 MaD:8 | +| main.rs:341:26:341:31 | ...: i64 | main.rs:342:14:342:14 | i | provenance | Src:MaD:6 MaD:6 | +| main.rs:341:26:341:31 | ...: i64 | main.rs:342:14:342:14 | i | provenance | Src:MaD:6 MaD:6 | +| main.rs:395:9:395:10 | x1 | main.rs:396:10:396:11 | x1 | provenance | | +| main.rs:395:9:395:10 | x1 | main.rs:396:10:396:11 | x1 | provenance | | +| main.rs:395:14:395:23 | source(...) | main.rs:395:14:395:30 | ... .max(...) | provenance | MaD:14 | +| main.rs:395:14:395:23 | source(...) | main.rs:395:14:395:30 | ... .max(...) | provenance | MaD:14 | +| main.rs:395:14:395:30 | ... .max(...) | main.rs:395:9:395:10 | x1 | provenance | | +| main.rs:395:14:395:30 | ... .max(...) | main.rs:395:9:395:10 | x1 | provenance | | +| main.rs:398:9:398:10 | x2 [MyStruct.field1] | main.rs:406:10:406:11 | x2 [MyStruct.field1] | provenance | | +| main.rs:398:9:398:10 | x2 [MyStruct.field1] | main.rs:406:10:406:11 | x2 [MyStruct.field1] | provenance | | +| main.rs:398:14:405:6 | ... .max(...) [MyStruct.field1] | main.rs:398:9:398:10 | x2 [MyStruct.field1] | provenance | | +| main.rs:398:14:405:6 | ... .max(...) [MyStruct.field1] | main.rs:398:9:398:10 | x2 [MyStruct.field1] | provenance | | +| main.rs:398:15:401:5 | MyStruct {...} [MyStruct.field1] | main.rs:398:14:405:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:14 | +| main.rs:398:15:401:5 | MyStruct {...} [MyStruct.field1] | main.rs:398:14:405:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:14 | +| main.rs:399:17:399:26 | source(...) | main.rs:398:15:401:5 | MyStruct {...} [MyStruct.field1] | provenance | | +| main.rs:399:17:399:26 | source(...) | main.rs:398:15:401:5 | MyStruct {...} [MyStruct.field1] | provenance | | +| main.rs:406:10:406:11 | x2 [MyStruct.field1] | main.rs:406:10:406:18 | x2.field1 | provenance | | +| main.rs:406:10:406:11 | x2 [MyStruct.field1] | main.rs:406:10:406:18 | x2.field1 | provenance | | +| main.rs:411:9:411:10 | x4 | main.rs:412:10:412:11 | x4 | provenance | | +| main.rs:411:9:411:10 | x4 | main.rs:412:10:412:11 | x4 | provenance | | +| main.rs:411:14:411:23 | source(...) | main.rs:411:14:411:30 | ... .max(...) | provenance | MaD:14 | +| main.rs:411:14:411:23 | source(...) | main.rs:411:14:411:30 | ... .max(...) | provenance | MaD:14 | +| main.rs:411:14:411:30 | ... .max(...) | main.rs:411:9:411:10 | x4 | provenance | | +| main.rs:411:14:411:30 | ... .max(...) | main.rs:411:9:411:10 | x4 | provenance | | +| main.rs:414:9:414:10 | x5 | main.rs:415:10:415:11 | x5 | provenance | | +| main.rs:414:14:414:23 | source(...) | main.rs:414:14:414:30 | ... .lt(...) | provenance | MaD:15 | +| main.rs:414:14:414:30 | ... .lt(...) | main.rs:414:9:414:10 | x5 | provenance | | +| main.rs:417:9:417:10 | x6 | main.rs:418:10:418:11 | x6 | provenance | | +| main.rs:417:14:417:23 | source(...) | main.rs:417:14:417:27 | ... < ... | provenance | MaD:15 | +| main.rs:417:14:417:27 | ... < ... | main.rs:417:9:417:10 | x6 | provenance | | +| main.rs:433:10:433:28 | generated_source(...) | main.rs:433:10:433:28 | generated_source(...) | provenance | Src:MaD:10 MaD:10 | +| main.rs:433:10:433:28 | generated_source(...) | main.rs:433:10:433:28 | generated_source(...) | provenance | Src:MaD:10 MaD:10 | +| main.rs:435:10:435:33 | neutral_manual_source(...) | main.rs:435:10:435:33 | neutral_manual_source(...) | provenance | Src:MaD:11 MaD:11 | +| main.rs:435:10:435:33 | neutral_manual_source(...) | main.rs:435:10:435:33 | neutral_manual_source(...) | provenance | Src:MaD:11 MaD:11 | +| main.rs:436:20:436:28 | source(...) | main.rs:436:20:436:28 | source(...) | provenance | MaD:3 Sink:MaD:3 | +| main.rs:436:20:436:28 | source(...) | main.rs:436:20:436:28 | source(...) | provenance | MaD:3 Sink:MaD:3 | +| main.rs:438:25:438:33 | source(...) | main.rs:438:25:438:33 | source(...) | provenance | MaD:4 Sink:MaD:4 | +| main.rs:438:25:438:33 | source(...) | main.rs:438:25:438:33 | source(...) | provenance | MaD:4 Sink:MaD:4 | +| main.rs:439:28:439:36 | source(...) | main.rs:439:10:439:37 | generated_summary(...) | provenance | MaD:20 | +| main.rs:439:28:439:36 | source(...) | main.rs:439:10:439:37 | generated_summary(...) | provenance | MaD:20 | +| main.rs:441:33:441:41 | source(...) | main.rs:441:10:441:42 | neutral_manual_summary(...) | provenance | MaD:21 | +| main.rs:441:33:441:41 | source(...) | main.rs:441:10:441:42 | neutral_manual_summary(...) | provenance | MaD:21 | nodes | main.rs:15:9:15:9 | s | semmle.label | s | | main.rs:15:9:15:9 | s | semmle.label | s | @@ -558,10 +549,8 @@ nodes | main.rs:231:10:231:10 | t | semmle.label | t | | main.rs:250:9:250:9 | s [D] | semmle.label | s [D] | | main.rs:250:9:250:9 | s [D] | semmle.label | s [D] | -| main.rs:250:13:250:23 | enum_source | semmle.label | enum_source | -| main.rs:250:13:250:23 | enum_source | semmle.label | enum_source | -| main.rs:250:13:250:27 | enum_source(...) [D] | semmle.label | enum_source(...) [D] | -| main.rs:250:13:250:27 | enum_source(...) [D] | semmle.label | enum_source(...) [D] | +| main.rs:250:13:250:27 | enum_source(...) | semmle.label | enum_source(...) | +| main.rs:250:13:250:27 | enum_source(...) | semmle.label | enum_source(...) | | main.rs:251:11:251:11 | s [D] | semmle.label | s [D] | | main.rs:251:11:251:11 | s [D] | semmle.label | s [D] | | main.rs:253:9:253:37 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | @@ -572,10 +561,8 @@ nodes | main.rs:253:47:253:47 | i | semmle.label | i | | main.rs:259:9:259:9 | s [C] | semmle.label | s [C] | | main.rs:259:9:259:9 | s [C] | semmle.label | s [C] | -| main.rs:259:13:259:24 | e.source(...) [C] | semmle.label | e.source(...) [C] | -| main.rs:259:13:259:24 | e.source(...) [C] | semmle.label | e.source(...) [C] | -| main.rs:259:15:259:20 | source | semmle.label | source | -| main.rs:259:15:259:20 | source | semmle.label | source | +| main.rs:259:13:259:24 | e.source(...) | semmle.label | e.source(...) | +| main.rs:259:13:259:24 | e.source(...) | semmle.label | e.source(...) | | main.rs:260:11:260:11 | s [C] | semmle.label | s [C] | | main.rs:260:11:260:11 | s [C] | semmle.label | s [C] | | main.rs:261:9:261:37 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | @@ -588,10 +575,10 @@ nodes | main.rs:275:18:275:18 | ... | semmle.label | ... | | main.rs:275:26:275:26 | a | semmle.label | a | | main.rs:275:26:275:26 | a | semmle.label | a | -| main.rs:276:9:276:19 | pass_source | semmle.label | pass_source | -| main.rs:276:9:276:19 | pass_source | semmle.label | pass_source | -| main.rs:278:9:278:19 | pass_source | semmle.label | pass_source | -| main.rs:278:9:278:19 | pass_source | semmle.label | pass_source | +| main.rs:276:9:276:25 | pass_source(...) | semmle.label | pass_source(...) | +| main.rs:276:9:276:25 | pass_source(...) | semmle.label | pass_source(...) | +| main.rs:278:9:280:10 | pass_source(...) | semmle.label | pass_source(...) | +| main.rs:278:9:280:10 | pass_source(...) | semmle.label | pass_source(...) | | main.rs:278:25:278:25 | ... | semmle.label | ... | | main.rs:278:25:278:25 | ... | semmle.label | ... | | main.rs:279:18:279:18 | a | semmle.label | a | @@ -600,10 +587,10 @@ nodes | main.rs:282:14:282:19 | ...: i64 | semmle.label | ...: i64 | | main.rs:283:18:283:18 | a | semmle.label | a | | main.rs:283:18:283:18 | a | semmle.label | a | -| main.rs:285:9:285:19 | pass_source | semmle.label | pass_source | -| main.rs:285:9:285:19 | pass_source | semmle.label | pass_source | -| main.rs:287:9:287:19 | pass_source | semmle.label | pass_source | -| main.rs:287:9:287:19 | pass_source | semmle.label | pass_source | +| main.rs:285:9:285:25 | pass_source(...) | semmle.label | pass_source(...) | +| main.rs:285:9:285:25 | pass_source(...) | semmle.label | pass_source(...) | +| main.rs:287:9:289:10 | pass_source(...) | semmle.label | pass_source(...) | +| main.rs:287:9:289:10 | pass_source(...) | semmle.label | pass_source(...) | | main.rs:287:36:287:36 | ... | semmle.label | ... | | main.rs:287:36:287:36 | ... | semmle.label | ... | | main.rs:288:18:288:18 | a | semmle.label | a | @@ -612,8 +599,8 @@ nodes | main.rs:297:9:297:9 | s | semmle.label | s | | main.rs:297:13:297:22 | source(...) | semmle.label | source(...) | | main.rs:297:13:297:22 | source(...) | semmle.label | source(...) | -| main.rs:298:5:298:13 | enum_sink | semmle.label | enum_sink | -| main.rs:298:5:298:13 | enum_sink | semmle.label | enum_sink | +| main.rs:298:15:298:43 | ...::C {...} | semmle.label | ...::C {...} | +| main.rs:298:15:298:43 | ...::C {...} | semmle.label | ...::C {...} | | main.rs:298:15:298:43 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | | main.rs:298:15:298:43 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | | main.rs:298:41:298:41 | s | semmle.label | s | @@ -628,14 +615,10 @@ nodes | main.rs:304:13:304:41 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | | main.rs:304:39:304:39 | s | semmle.label | s | | main.rs:304:39:304:39 | s | semmle.label | s | -| main.rs:305:5:305:5 | e [D] | semmle.label | e [D] | -| main.rs:305:5:305:5 | e [D] | semmle.label | e [D] | -| main.rs:305:7:305:10 | sink | semmle.label | sink | -| main.rs:305:7:305:10 | sink | semmle.label | sink | +| main.rs:305:5:305:5 | e | semmle.label | e | +| main.rs:305:5:305:5 | e | semmle.label | e | | main.rs:314:9:314:9 | s | semmle.label | s | | main.rs:314:9:314:9 | s | semmle.label | s | -| main.rs:314:13:314:25 | simple_source | semmle.label | simple_source | -| main.rs:314:13:314:25 | simple_source | semmle.label | simple_source | | main.rs:314:13:314:29 | simple_source(...) | semmle.label | simple_source(...) | | main.rs:314:13:314:29 | simple_source(...) | semmle.label | simple_source(...) | | main.rs:315:10:315:10 | s | semmle.label | s | @@ -644,76 +627,76 @@ nodes | main.rs:322:9:322:9 | s | semmle.label | s | | main.rs:322:13:322:22 | source(...) | semmle.label | source(...) | | main.rs:322:13:322:22 | source(...) | semmle.label | source(...) | -| main.rs:323:5:323:15 | simple_sink | semmle.label | simple_sink | -| main.rs:323:5:323:15 | simple_sink | semmle.label | simple_sink | | main.rs:323:17:323:17 | s | semmle.label | s | | main.rs:323:17:323:17 | s | semmle.label | s | -| main.rs:331:5:331:14 | arg_source | semmle.label | arg_source | -| main.rs:331:5:331:14 | arg_source | semmle.label | arg_source | -| main.rs:331:16:331:16 | [post] i | semmle.label | [post] i | -| main.rs:331:16:331:16 | [post] i | semmle.label | [post] i | +| main.rs:331:16:331:16 | i | semmle.label | i | +| main.rs:331:16:331:16 | i | semmle.label | i | | main.rs:332:10:332:10 | i | semmle.label | i | | main.rs:332:10:332:10 | i | semmle.label | i | -| main.rs:384:9:384:10 | x1 | semmle.label | x1 | -| main.rs:384:9:384:10 | x1 | semmle.label | x1 | -| main.rs:384:14:384:23 | source(...) | semmle.label | source(...) | -| main.rs:384:14:384:23 | source(...) | semmle.label | source(...) | -| main.rs:384:14:384:30 | ... .max(...) | semmle.label | ... .max(...) | -| main.rs:384:14:384:30 | ... .max(...) | semmle.label | ... .max(...) | -| main.rs:385:10:385:11 | x1 | semmle.label | x1 | -| main.rs:385:10:385:11 | x1 | semmle.label | x1 | -| main.rs:387:9:387:10 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | -| main.rs:387:9:387:10 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | -| main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | semmle.label | ... .max(...) [MyStruct.field1] | -| main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | semmle.label | ... .max(...) [MyStruct.field1] | -| main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | semmle.label | MyStruct {...} [MyStruct.field1] | -| main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | semmle.label | MyStruct {...} [MyStruct.field1] | -| main.rs:388:17:388:26 | source(...) | semmle.label | source(...) | -| main.rs:388:17:388:26 | source(...) | semmle.label | source(...) | -| main.rs:395:10:395:11 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | -| main.rs:395:10:395:11 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | -| main.rs:395:10:395:18 | x2.field1 | semmle.label | x2.field1 | -| main.rs:395:10:395:18 | x2.field1 | semmle.label | x2.field1 | -| main.rs:400:9:400:10 | x4 | semmle.label | x4 | -| main.rs:400:9:400:10 | x4 | semmle.label | x4 | -| main.rs:400:14:400:23 | source(...) | semmle.label | source(...) | -| main.rs:400:14:400:23 | source(...) | semmle.label | source(...) | -| main.rs:400:14:400:30 | ... .max(...) | semmle.label | ... .max(...) | -| main.rs:400:14:400:30 | ... .max(...) | semmle.label | ... .max(...) | -| main.rs:401:10:401:11 | x4 | semmle.label | x4 | -| main.rs:401:10:401:11 | x4 | semmle.label | x4 | -| main.rs:403:9:403:10 | x5 | semmle.label | x5 | -| main.rs:403:14:403:23 | source(...) | semmle.label | source(...) | -| main.rs:403:14:403:30 | ... .lt(...) | semmle.label | ... .lt(...) | -| main.rs:404:10:404:11 | x5 | semmle.label | x5 | -| main.rs:406:9:406:10 | x6 | semmle.label | x6 | -| main.rs:406:14:406:23 | source(...) | semmle.label | source(...) | -| main.rs:406:14:406:27 | ... < ... | semmle.label | ... < ... | -| main.rs:407:10:407:11 | x6 | semmle.label | x6 | -| main.rs:422:10:422:25 | generated_source | semmle.label | generated_source | -| main.rs:422:10:422:25 | generated_source | semmle.label | generated_source | -| main.rs:422:10:422:28 | generated_source(...) | semmle.label | generated_source(...) | -| main.rs:422:10:422:28 | generated_source(...) | semmle.label | generated_source(...) | -| main.rs:424:10:424:30 | neutral_manual_source | semmle.label | neutral_manual_source | -| main.rs:424:10:424:30 | neutral_manual_source | semmle.label | neutral_manual_source | -| main.rs:424:10:424:33 | neutral_manual_source(...) | semmle.label | neutral_manual_source(...) | -| main.rs:424:10:424:33 | neutral_manual_source(...) | semmle.label | neutral_manual_source(...) | -| main.rs:425:5:425:18 | generated_sink | semmle.label | generated_sink | -| main.rs:425:5:425:18 | generated_sink | semmle.label | generated_sink | -| main.rs:425:20:425:28 | source(...) | semmle.label | source(...) | -| main.rs:425:20:425:28 | source(...) | semmle.label | source(...) | -| main.rs:427:5:427:23 | neutral_manual_sink | semmle.label | neutral_manual_sink | -| main.rs:427:5:427:23 | neutral_manual_sink | semmle.label | neutral_manual_sink | -| main.rs:427:25:427:33 | source(...) | semmle.label | source(...) | -| main.rs:427:25:427:33 | source(...) | semmle.label | source(...) | -| main.rs:428:10:428:37 | generated_summary(...) | semmle.label | generated_summary(...) | -| main.rs:428:10:428:37 | generated_summary(...) | semmle.label | generated_summary(...) | -| main.rs:428:28:428:36 | source(...) | semmle.label | source(...) | -| main.rs:428:28:428:36 | source(...) | semmle.label | source(...) | -| main.rs:430:10:430:42 | neutral_manual_summary(...) | semmle.label | neutral_manual_summary(...) | -| main.rs:430:10:430:42 | neutral_manual_summary(...) | semmle.label | neutral_manual_summary(...) | -| main.rs:430:33:430:41 | source(...) | semmle.label | source(...) | -| main.rs:430:33:430:41 | source(...) | semmle.label | source(...) | +| main.rs:341:26:341:31 | ...: i64 | semmle.label | ...: i64 | +| main.rs:341:26:341:31 | ...: i64 | semmle.label | ...: i64 | +| main.rs:342:14:342:14 | i | semmle.label | i | +| main.rs:342:14:342:14 | i | semmle.label | i | +| main.rs:395:9:395:10 | x1 | semmle.label | x1 | +| main.rs:395:9:395:10 | x1 | semmle.label | x1 | +| main.rs:395:14:395:23 | source(...) | semmle.label | source(...) | +| main.rs:395:14:395:23 | source(...) | semmle.label | source(...) | +| main.rs:395:14:395:30 | ... .max(...) | semmle.label | ... .max(...) | +| main.rs:395:14:395:30 | ... .max(...) | semmle.label | ... .max(...) | +| main.rs:396:10:396:11 | x1 | semmle.label | x1 | +| main.rs:396:10:396:11 | x1 | semmle.label | x1 | +| main.rs:398:9:398:10 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | +| main.rs:398:9:398:10 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | +| main.rs:398:14:405:6 | ... .max(...) [MyStruct.field1] | semmle.label | ... .max(...) [MyStruct.field1] | +| main.rs:398:14:405:6 | ... .max(...) [MyStruct.field1] | semmle.label | ... .max(...) [MyStruct.field1] | +| main.rs:398:15:401:5 | MyStruct {...} [MyStruct.field1] | semmle.label | MyStruct {...} [MyStruct.field1] | +| main.rs:398:15:401:5 | MyStruct {...} [MyStruct.field1] | semmle.label | MyStruct {...} [MyStruct.field1] | +| main.rs:399:17:399:26 | source(...) | semmle.label | source(...) | +| main.rs:399:17:399:26 | source(...) | semmle.label | source(...) | +| main.rs:406:10:406:11 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | +| main.rs:406:10:406:11 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | +| main.rs:406:10:406:18 | x2.field1 | semmle.label | x2.field1 | +| main.rs:406:10:406:18 | x2.field1 | semmle.label | x2.field1 | +| main.rs:411:9:411:10 | x4 | semmle.label | x4 | +| main.rs:411:9:411:10 | x4 | semmle.label | x4 | +| main.rs:411:14:411:23 | source(...) | semmle.label | source(...) | +| main.rs:411:14:411:23 | source(...) | semmle.label | source(...) | +| main.rs:411:14:411:30 | ... .max(...) | semmle.label | ... .max(...) | +| main.rs:411:14:411:30 | ... .max(...) | semmle.label | ... .max(...) | +| main.rs:412:10:412:11 | x4 | semmle.label | x4 | +| main.rs:412:10:412:11 | x4 | semmle.label | x4 | +| main.rs:414:9:414:10 | x5 | semmle.label | x5 | +| main.rs:414:14:414:23 | source(...) | semmle.label | source(...) | +| main.rs:414:14:414:30 | ... .lt(...) | semmle.label | ... .lt(...) | +| main.rs:415:10:415:11 | x5 | semmle.label | x5 | +| main.rs:417:9:417:10 | x6 | semmle.label | x6 | +| main.rs:417:14:417:23 | source(...) | semmle.label | source(...) | +| main.rs:417:14:417:27 | ... < ... | semmle.label | ... < ... | +| main.rs:418:10:418:11 | x6 | semmle.label | x6 | +| main.rs:433:10:433:28 | generated_source(...) | semmle.label | generated_source(...) | +| main.rs:433:10:433:28 | generated_source(...) | semmle.label | generated_source(...) | +| main.rs:433:10:433:28 | generated_source(...) | semmle.label | generated_source(...) | +| main.rs:433:10:433:28 | generated_source(...) | semmle.label | generated_source(...) | +| main.rs:435:10:435:33 | neutral_manual_source(...) | semmle.label | neutral_manual_source(...) | +| main.rs:435:10:435:33 | neutral_manual_source(...) | semmle.label | neutral_manual_source(...) | +| main.rs:435:10:435:33 | neutral_manual_source(...) | semmle.label | neutral_manual_source(...) | +| main.rs:435:10:435:33 | neutral_manual_source(...) | semmle.label | neutral_manual_source(...) | +| main.rs:436:20:436:28 | source(...) | semmle.label | source(...) | +| main.rs:436:20:436:28 | source(...) | semmle.label | source(...) | +| main.rs:436:20:436:28 | source(...) | semmle.label | source(...) | +| main.rs:436:20:436:28 | source(...) | semmle.label | source(...) | +| main.rs:438:25:438:33 | source(...) | semmle.label | source(...) | +| main.rs:438:25:438:33 | source(...) | semmle.label | source(...) | +| main.rs:438:25:438:33 | source(...) | semmle.label | source(...) | +| main.rs:438:25:438:33 | source(...) | semmle.label | source(...) | +| main.rs:439:10:439:37 | generated_summary(...) | semmle.label | generated_summary(...) | +| main.rs:439:10:439:37 | generated_summary(...) | semmle.label | generated_summary(...) | +| main.rs:439:28:439:36 | source(...) | semmle.label | source(...) | +| main.rs:439:28:439:36 | source(...) | semmle.label | source(...) | +| main.rs:441:10:441:42 | neutral_manual_summary(...) | semmle.label | neutral_manual_summary(...) | +| main.rs:441:10:441:42 | neutral_manual_summary(...) | semmle.label | neutral_manual_summary(...) | +| main.rs:441:33:441:41 | source(...) | semmle.label | source(...) | +| main.rs:441:33:441:41 | source(...) | semmle.label | source(...) | subpaths | main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | main.rs:211:17:211:42 | if ... {...} else {...} | main.rs:212:13:212:24 | apply(...) | | main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | main.rs:211:17:211:42 | if ... {...} else {...} | main.rs:212:13:212:24 | apply(...) | @@ -755,45 +738,47 @@ invalidSpecComponent | main.rs:220:10:220:10 | t | main.rs:217:13:217:22 | source(...) | main.rs:220:10:220:10 | t | $@ | main.rs:217:13:217:22 | source(...) | source(...) | | main.rs:231:10:231:10 | t | main.rs:229:13:229:22 | source(...) | main.rs:231:10:231:10 | t | $@ | main.rs:229:13:229:22 | source(...) | source(...) | | main.rs:231:10:231:10 | t | main.rs:229:13:229:22 | source(...) | main.rs:231:10:231:10 | t | $@ | main.rs:229:13:229:22 | source(...) | source(...) | -| main.rs:253:47:253:47 | i | main.rs:250:13:250:23 | enum_source | main.rs:253:47:253:47 | i | $@ | main.rs:250:13:250:23 | enum_source | enum_source | -| main.rs:253:47:253:47 | i | main.rs:250:13:250:23 | enum_source | main.rs:253:47:253:47 | i | $@ | main.rs:250:13:250:23 | enum_source | enum_source | -| main.rs:261:47:261:47 | i | main.rs:259:15:259:20 | source | main.rs:261:47:261:47 | i | $@ | main.rs:259:15:259:20 | source | source | -| main.rs:261:47:261:47 | i | main.rs:259:15:259:20 | source | main.rs:261:47:261:47 | i | $@ | main.rs:259:15:259:20 | source | source | -| main.rs:275:26:275:26 | a | main.rs:276:9:276:19 | pass_source | main.rs:275:26:275:26 | a | $@ | main.rs:276:9:276:19 | pass_source | pass_source | -| main.rs:275:26:275:26 | a | main.rs:276:9:276:19 | pass_source | main.rs:275:26:275:26 | a | $@ | main.rs:276:9:276:19 | pass_source | pass_source | -| main.rs:279:18:279:18 | a | main.rs:278:9:278:19 | pass_source | main.rs:279:18:279:18 | a | $@ | main.rs:278:9:278:19 | pass_source | pass_source | -| main.rs:279:18:279:18 | a | main.rs:278:9:278:19 | pass_source | main.rs:279:18:279:18 | a | $@ | main.rs:278:9:278:19 | pass_source | pass_source | -| main.rs:283:18:283:18 | a | main.rs:285:9:285:19 | pass_source | main.rs:283:18:283:18 | a | $@ | main.rs:285:9:285:19 | pass_source | pass_source | -| main.rs:283:18:283:18 | a | main.rs:285:9:285:19 | pass_source | main.rs:283:18:283:18 | a | $@ | main.rs:285:9:285:19 | pass_source | pass_source | -| main.rs:288:18:288:18 | a | main.rs:287:9:287:19 | pass_source | main.rs:288:18:288:18 | a | $@ | main.rs:287:9:287:19 | pass_source | pass_source | -| main.rs:288:18:288:18 | a | main.rs:287:9:287:19 | pass_source | main.rs:288:18:288:18 | a | $@ | main.rs:287:9:287:19 | pass_source | pass_source | -| main.rs:298:5:298:13 | enum_sink | main.rs:297:13:297:22 | source(...) | main.rs:298:5:298:13 | enum_sink | $@ | main.rs:297:13:297:22 | source(...) | source(...) | -| main.rs:298:5:298:13 | enum_sink | main.rs:297:13:297:22 | source(...) | main.rs:298:5:298:13 | enum_sink | $@ | main.rs:297:13:297:22 | source(...) | source(...) | -| main.rs:305:7:305:10 | sink | main.rs:303:13:303:22 | source(...) | main.rs:305:7:305:10 | sink | $@ | main.rs:303:13:303:22 | source(...) | source(...) | -| main.rs:305:7:305:10 | sink | main.rs:303:13:303:22 | source(...) | main.rs:305:7:305:10 | sink | $@ | main.rs:303:13:303:22 | source(...) | source(...) | -| main.rs:315:10:315:10 | s | main.rs:314:13:314:25 | simple_source | main.rs:315:10:315:10 | s | $@ | main.rs:314:13:314:25 | simple_source | simple_source | -| main.rs:315:10:315:10 | s | main.rs:314:13:314:25 | simple_source | main.rs:315:10:315:10 | s | $@ | main.rs:314:13:314:25 | simple_source | simple_source | -| main.rs:323:5:323:15 | simple_sink | main.rs:322:13:322:22 | source(...) | main.rs:323:5:323:15 | simple_sink | $@ | main.rs:322:13:322:22 | source(...) | source(...) | -| main.rs:323:5:323:15 | simple_sink | main.rs:322:13:322:22 | source(...) | main.rs:323:5:323:15 | simple_sink | $@ | main.rs:322:13:322:22 | source(...) | source(...) | -| main.rs:332:10:332:10 | i | main.rs:331:5:331:14 | arg_source | main.rs:332:10:332:10 | i | $@ | main.rs:331:5:331:14 | arg_source | arg_source | -| main.rs:332:10:332:10 | i | main.rs:331:5:331:14 | arg_source | main.rs:332:10:332:10 | i | $@ | main.rs:331:5:331:14 | arg_source | arg_source | -| main.rs:385:10:385:11 | x1 | main.rs:384:14:384:23 | source(...) | main.rs:385:10:385:11 | x1 | $@ | main.rs:384:14:384:23 | source(...) | source(...) | -| main.rs:385:10:385:11 | x1 | main.rs:384:14:384:23 | source(...) | main.rs:385:10:385:11 | x1 | $@ | main.rs:384:14:384:23 | source(...) | source(...) | -| main.rs:395:10:395:18 | x2.field1 | main.rs:388:17:388:26 | source(...) | main.rs:395:10:395:18 | x2.field1 | $@ | main.rs:388:17:388:26 | source(...) | source(...) | -| main.rs:395:10:395:18 | x2.field1 | main.rs:388:17:388:26 | source(...) | main.rs:395:10:395:18 | x2.field1 | $@ | main.rs:388:17:388:26 | source(...) | source(...) | -| main.rs:401:10:401:11 | x4 | main.rs:400:14:400:23 | source(...) | main.rs:401:10:401:11 | x4 | $@ | main.rs:400:14:400:23 | source(...) | source(...) | -| main.rs:401:10:401:11 | x4 | main.rs:400:14:400:23 | source(...) | main.rs:401:10:401:11 | x4 | $@ | main.rs:400:14:400:23 | source(...) | source(...) | -| main.rs:404:10:404:11 | x5 | main.rs:403:14:403:23 | source(...) | main.rs:404:10:404:11 | x5 | $@ | main.rs:403:14:403:23 | source(...) | source(...) | -| main.rs:407:10:407:11 | x6 | main.rs:406:14:406:23 | source(...) | main.rs:407:10:407:11 | x6 | $@ | main.rs:406:14:406:23 | source(...) | source(...) | -| main.rs:422:10:422:28 | generated_source(...) | main.rs:422:10:422:25 | generated_source | main.rs:422:10:422:28 | generated_source(...) | $@ | main.rs:422:10:422:25 | generated_source | generated_source | -| main.rs:422:10:422:28 | generated_source(...) | main.rs:422:10:422:25 | generated_source | main.rs:422:10:422:28 | generated_source(...) | $@ | main.rs:422:10:422:25 | generated_source | generated_source | -| main.rs:424:10:424:33 | neutral_manual_source(...) | main.rs:424:10:424:30 | neutral_manual_source | main.rs:424:10:424:33 | neutral_manual_source(...) | $@ | main.rs:424:10:424:30 | neutral_manual_source | neutral_manual_source | -| main.rs:424:10:424:33 | neutral_manual_source(...) | main.rs:424:10:424:30 | neutral_manual_source | main.rs:424:10:424:33 | neutral_manual_source(...) | $@ | main.rs:424:10:424:30 | neutral_manual_source | neutral_manual_source | -| main.rs:425:5:425:18 | generated_sink | main.rs:425:20:425:28 | source(...) | main.rs:425:5:425:18 | generated_sink | $@ | main.rs:425:20:425:28 | source(...) | source(...) | -| main.rs:425:5:425:18 | generated_sink | main.rs:425:20:425:28 | source(...) | main.rs:425:5:425:18 | generated_sink | $@ | main.rs:425:20:425:28 | source(...) | source(...) | -| main.rs:427:5:427:23 | neutral_manual_sink | main.rs:427:25:427:33 | source(...) | main.rs:427:5:427:23 | neutral_manual_sink | $@ | main.rs:427:25:427:33 | source(...) | source(...) | -| main.rs:427:5:427:23 | neutral_manual_sink | main.rs:427:25:427:33 | source(...) | main.rs:427:5:427:23 | neutral_manual_sink | $@ | main.rs:427:25:427:33 | source(...) | source(...) | -| main.rs:428:10:428:37 | generated_summary(...) | main.rs:428:28:428:36 | source(...) | main.rs:428:10:428:37 | generated_summary(...) | $@ | main.rs:428:28:428:36 | source(...) | source(...) | -| main.rs:428:10:428:37 | generated_summary(...) | main.rs:428:28:428:36 | source(...) | main.rs:428:10:428:37 | generated_summary(...) | $@ | main.rs:428:28:428:36 | source(...) | source(...) | -| main.rs:430:10:430:42 | neutral_manual_summary(...) | main.rs:430:33:430:41 | source(...) | main.rs:430:10:430:42 | neutral_manual_summary(...) | $@ | main.rs:430:33:430:41 | source(...) | source(...) | -| main.rs:430:10:430:42 | neutral_manual_summary(...) | main.rs:430:33:430:41 | source(...) | main.rs:430:10:430:42 | neutral_manual_summary(...) | $@ | main.rs:430:33:430:41 | source(...) | source(...) | +| main.rs:253:47:253:47 | i | main.rs:250:13:250:27 | enum_source(...) | main.rs:253:47:253:47 | i | $@ | main.rs:250:13:250:27 | enum_source(...) | enum_source(...) | +| main.rs:253:47:253:47 | i | main.rs:250:13:250:27 | enum_source(...) | main.rs:253:47:253:47 | i | $@ | main.rs:250:13:250:27 | enum_source(...) | enum_source(...) | +| main.rs:261:47:261:47 | i | main.rs:259:13:259:24 | e.source(...) | main.rs:261:47:261:47 | i | $@ | main.rs:259:13:259:24 | e.source(...) | e.source(...) | +| main.rs:261:47:261:47 | i | main.rs:259:13:259:24 | e.source(...) | main.rs:261:47:261:47 | i | $@ | main.rs:259:13:259:24 | e.source(...) | e.source(...) | +| main.rs:275:26:275:26 | a | main.rs:276:9:276:25 | pass_source(...) | main.rs:275:26:275:26 | a | $@ | main.rs:276:9:276:25 | pass_source(...) | pass_source(...) | +| main.rs:275:26:275:26 | a | main.rs:276:9:276:25 | pass_source(...) | main.rs:275:26:275:26 | a | $@ | main.rs:276:9:276:25 | pass_source(...) | pass_source(...) | +| main.rs:279:18:279:18 | a | main.rs:278:9:280:10 | pass_source(...) | main.rs:279:18:279:18 | a | $@ | main.rs:278:9:280:10 | pass_source(...) | pass_source(...) | +| main.rs:279:18:279:18 | a | main.rs:278:9:280:10 | pass_source(...) | main.rs:279:18:279:18 | a | $@ | main.rs:278:9:280:10 | pass_source(...) | pass_source(...) | +| main.rs:283:18:283:18 | a | main.rs:285:9:285:25 | pass_source(...) | main.rs:283:18:283:18 | a | $@ | main.rs:285:9:285:25 | pass_source(...) | pass_source(...) | +| main.rs:283:18:283:18 | a | main.rs:285:9:285:25 | pass_source(...) | main.rs:283:18:283:18 | a | $@ | main.rs:285:9:285:25 | pass_source(...) | pass_source(...) | +| main.rs:288:18:288:18 | a | main.rs:287:9:289:10 | pass_source(...) | main.rs:288:18:288:18 | a | $@ | main.rs:287:9:289:10 | pass_source(...) | pass_source(...) | +| main.rs:288:18:288:18 | a | main.rs:287:9:289:10 | pass_source(...) | main.rs:288:18:288:18 | a | $@ | main.rs:287:9:289:10 | pass_source(...) | pass_source(...) | +| main.rs:298:15:298:43 | ...::C {...} | main.rs:297:13:297:22 | source(...) | main.rs:298:15:298:43 | ...::C {...} | $@ | main.rs:297:13:297:22 | source(...) | source(...) | +| main.rs:298:15:298:43 | ...::C {...} | main.rs:297:13:297:22 | source(...) | main.rs:298:15:298:43 | ...::C {...} | $@ | main.rs:297:13:297:22 | source(...) | source(...) | +| main.rs:305:5:305:5 | e | main.rs:303:13:303:22 | source(...) | main.rs:305:5:305:5 | e | $@ | main.rs:303:13:303:22 | source(...) | source(...) | +| main.rs:305:5:305:5 | e | main.rs:303:13:303:22 | source(...) | main.rs:305:5:305:5 | e | $@ | main.rs:303:13:303:22 | source(...) | source(...) | +| main.rs:315:10:315:10 | s | main.rs:314:13:314:29 | simple_source(...) | main.rs:315:10:315:10 | s | $@ | main.rs:314:13:314:29 | simple_source(...) | simple_source(...) | +| main.rs:315:10:315:10 | s | main.rs:314:13:314:29 | simple_source(...) | main.rs:315:10:315:10 | s | $@ | main.rs:314:13:314:29 | simple_source(...) | simple_source(...) | +| main.rs:323:17:323:17 | s | main.rs:322:13:322:22 | source(...) | main.rs:323:17:323:17 | s | $@ | main.rs:322:13:322:22 | source(...) | source(...) | +| main.rs:323:17:323:17 | s | main.rs:322:13:322:22 | source(...) | main.rs:323:17:323:17 | s | $@ | main.rs:322:13:322:22 | source(...) | source(...) | +| main.rs:332:10:332:10 | i | main.rs:331:16:331:16 | i | main.rs:332:10:332:10 | i | $@ | main.rs:331:16:331:16 | i | i | +| main.rs:332:10:332:10 | i | main.rs:331:16:331:16 | i | main.rs:332:10:332:10 | i | $@ | main.rs:331:16:331:16 | i | i | +| main.rs:342:14:342:14 | i | main.rs:341:26:341:31 | ...: i64 | main.rs:342:14:342:14 | i | $@ | main.rs:341:26:341:31 | ...: i64 | ...: i64 | +| main.rs:342:14:342:14 | i | main.rs:341:26:341:31 | ...: i64 | main.rs:342:14:342:14 | i | $@ | main.rs:341:26:341:31 | ...: i64 | ...: i64 | +| main.rs:396:10:396:11 | x1 | main.rs:395:14:395:23 | source(...) | main.rs:396:10:396:11 | x1 | $@ | main.rs:395:14:395:23 | source(...) | source(...) | +| main.rs:396:10:396:11 | x1 | main.rs:395:14:395:23 | source(...) | main.rs:396:10:396:11 | x1 | $@ | main.rs:395:14:395:23 | source(...) | source(...) | +| main.rs:406:10:406:18 | x2.field1 | main.rs:399:17:399:26 | source(...) | main.rs:406:10:406:18 | x2.field1 | $@ | main.rs:399:17:399:26 | source(...) | source(...) | +| main.rs:406:10:406:18 | x2.field1 | main.rs:399:17:399:26 | source(...) | main.rs:406:10:406:18 | x2.field1 | $@ | main.rs:399:17:399:26 | source(...) | source(...) | +| main.rs:412:10:412:11 | x4 | main.rs:411:14:411:23 | source(...) | main.rs:412:10:412:11 | x4 | $@ | main.rs:411:14:411:23 | source(...) | source(...) | +| main.rs:412:10:412:11 | x4 | main.rs:411:14:411:23 | source(...) | main.rs:412:10:412:11 | x4 | $@ | main.rs:411:14:411:23 | source(...) | source(...) | +| main.rs:415:10:415:11 | x5 | main.rs:414:14:414:23 | source(...) | main.rs:415:10:415:11 | x5 | $@ | main.rs:414:14:414:23 | source(...) | source(...) | +| main.rs:418:10:418:11 | x6 | main.rs:417:14:417:23 | source(...) | main.rs:418:10:418:11 | x6 | $@ | main.rs:417:14:417:23 | source(...) | source(...) | +| main.rs:433:10:433:28 | generated_source(...) | main.rs:433:10:433:28 | generated_source(...) | main.rs:433:10:433:28 | generated_source(...) | $@ | main.rs:433:10:433:28 | generated_source(...) | generated_source(...) | +| main.rs:433:10:433:28 | generated_source(...) | main.rs:433:10:433:28 | generated_source(...) | main.rs:433:10:433:28 | generated_source(...) | $@ | main.rs:433:10:433:28 | generated_source(...) | generated_source(...) | +| main.rs:435:10:435:33 | neutral_manual_source(...) | main.rs:435:10:435:33 | neutral_manual_source(...) | main.rs:435:10:435:33 | neutral_manual_source(...) | $@ | main.rs:435:10:435:33 | neutral_manual_source(...) | neutral_manual_source(...) | +| main.rs:435:10:435:33 | neutral_manual_source(...) | main.rs:435:10:435:33 | neutral_manual_source(...) | main.rs:435:10:435:33 | neutral_manual_source(...) | $@ | main.rs:435:10:435:33 | neutral_manual_source(...) | neutral_manual_source(...) | +| main.rs:436:20:436:28 | source(...) | main.rs:436:20:436:28 | source(...) | main.rs:436:20:436:28 | source(...) | $@ | main.rs:436:20:436:28 | source(...) | source(...) | +| main.rs:436:20:436:28 | source(...) | main.rs:436:20:436:28 | source(...) | main.rs:436:20:436:28 | source(...) | $@ | main.rs:436:20:436:28 | source(...) | source(...) | +| main.rs:438:25:438:33 | source(...) | main.rs:438:25:438:33 | source(...) | main.rs:438:25:438:33 | source(...) | $@ | main.rs:438:25:438:33 | source(...) | source(...) | +| main.rs:438:25:438:33 | source(...) | main.rs:438:25:438:33 | source(...) | main.rs:438:25:438:33 | source(...) | $@ | main.rs:438:25:438:33 | source(...) | source(...) | +| main.rs:439:10:439:37 | generated_summary(...) | main.rs:439:28:439:36 | source(...) | main.rs:439:10:439:37 | generated_summary(...) | $@ | main.rs:439:28:439:36 | source(...) | source(...) | +| main.rs:439:10:439:37 | generated_summary(...) | main.rs:439:28:439:36 | source(...) | main.rs:439:10:439:37 | generated_summary(...) | $@ | main.rs:439:28:439:36 | source(...) | source(...) | +| main.rs:441:10:441:42 | neutral_manual_summary(...) | main.rs:441:33:441:41 | source(...) | main.rs:441:10:441:42 | neutral_manual_summary(...) | $@ | main.rs:441:33:441:41 | source(...) | source(...) | +| main.rs:441:10:441:42 | neutral_manual_summary(...) | main.rs:441:33:441:41 | source(...) | main.rs:441:10:441:42 | neutral_manual_summary(...) | $@ | main.rs:441:33:441:41 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/models/models.ext.yml b/rust/ql/test/library-tests/dataflow/models/models.ext.yml index 4e3377881a36..a681c6b159a0 100644 --- a/rust/ql/test/library-tests/dataflow/models/models.ext.yml +++ b/rust/ql/test/library-tests/dataflow/models/models.ext.yml @@ -7,6 +7,7 @@ extensions: - ["main::enum_source", "ReturnValue.Field[main::MyFieldEnum::D::field_d]", "test-source", "manual"] - ["::source", "ReturnValue.Field[main::MyFieldEnum::C::field_c]", "test-source", "manual"] - ["main::arg_source", "Argument[0]", "test-source", "manual"] + - ["<_ as main::MyTrait>::test_param_source", "Parameter[0]", "test-source", "manual"] - ["main::source_into_function::pass_source", "Argument[1].Parameter[0]", "test-source", "manual"] - ["main::external_file::generated_source", "ReturnValue", "test-source", "dfc-generated"] # not actually generated, but we want to test behaviour of generated models here. - ["main::external_file::neutral_generated_source", "ReturnValue", "test-source", "dfc-generated"] diff --git a/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.expected index 5b3e890545b3..b9fe94963962 100644 --- a/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.expected @@ -17,49 +17,49 @@ models | 16 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | edges | test.rs:18:13:18:14 | v1 | test.rs:19:14:19:15 | v1 | provenance | | +| test.rs:18:24:18:33 | row.get(...) | test.rs:18:24:18:33 | row.get(...) [Some] | provenance | Src:MaD:7 | | test.rs:18:24:18:33 | row.get(...) [Some] | test.rs:18:24:18:42 | ... .unwrap() | provenance | MaD:15 | | test.rs:18:24:18:42 | ... .unwrap() | test.rs:18:13:18:14 | v1 | provenance | | -| test.rs:18:28:18:30 | get | test.rs:18:24:18:33 | row.get(...) [Some] | provenance | Src:MaD:7 | | test.rs:21:13:21:14 | v2 | test.rs:22:14:22:15 | v2 | provenance | | +| test.rs:21:24:21:37 | row.get_opt(...) | test.rs:21:24:21:37 | row.get_opt(...) [Some, Ok] | provenance | Src:MaD:8 | | test.rs:21:24:21:37 | row.get_opt(...) [Some, Ok] | test.rs:21:24:21:46 | ... .unwrap() [Ok] | provenance | MaD:15 | | test.rs:21:24:21:46 | ... .unwrap() [Ok] | test.rs:21:24:21:55 | ... .unwrap() | provenance | MaD:16 | | test.rs:21:24:21:55 | ... .unwrap() | test.rs:21:13:21:14 | v2 | provenance | | -| test.rs:21:28:21:34 | get_opt | test.rs:21:24:21:37 | row.get_opt(...) [Some, Ok] | provenance | Src:MaD:8 | | test.rs:24:13:24:14 | v3 | test.rs:25:14:25:15 | v3 | provenance | | +| test.rs:24:24:24:34 | row.take(...) | test.rs:24:24:24:34 | row.take(...) [Some] | provenance | Src:MaD:9 | | test.rs:24:24:24:34 | row.take(...) [Some] | test.rs:24:24:24:43 | ... .unwrap() | provenance | MaD:15 | | test.rs:24:24:24:43 | ... .unwrap() | test.rs:24:13:24:14 | v3 | provenance | | -| test.rs:24:28:24:31 | take | test.rs:24:24:24:34 | row.take(...) [Some] | provenance | Src:MaD:9 | | test.rs:27:13:27:14 | v4 | test.rs:28:14:28:15 | v4 | provenance | | +| test.rs:27:24:27:38 | row.take_opt(...) | test.rs:27:24:27:38 | row.take_opt(...) [Some, Ok] | provenance | Src:MaD:10 | | test.rs:27:24:27:38 | row.take_opt(...) [Some, Ok] | test.rs:27:24:27:47 | ... .unwrap() [Ok] | provenance | MaD:15 | | test.rs:27:24:27:47 | ... .unwrap() [Ok] | test.rs:27:24:27:56 | ... .unwrap() | provenance | MaD:16 | | test.rs:27:24:27:56 | ... .unwrap() | test.rs:27:13:27:14 | v4 | provenance | | -| test.rs:27:28:27:35 | take_opt | test.rs:27:24:27:38 | row.take_opt(...) [Some, Ok] | provenance | Src:MaD:10 | | test.rs:37:13:37:14 | v6 | test.rs:38:14:38:15 | v6 | provenance | | +| test.rs:37:23:37:63 | conn.query_first(...) | test.rs:37:23:37:63 | conn.query_first(...) [Ok, Some] | provenance | Src:MaD:1 | | test.rs:37:23:37:63 | conn.query_first(...) [Ok, Some] | test.rs:37:23:37:64 | TryExpr [Some] | provenance | | | test.rs:37:23:37:64 | TryExpr [Some] | test.rs:37:23:37:73 | ... .unwrap() | provenance | MaD:15 | | test.rs:37:23:37:73 | ... .unwrap() | test.rs:37:13:37:14 | v6 | provenance | | -| test.rs:37:28:37:38 | query_first | test.rs:37:23:37:63 | conn.query_first(...) [Ok, Some] | provenance | Src:MaD:1 | | test.rs:40:13:40:18 | mut t1 [element] | test.rs:42:20:42:21 | t1 [element] | provenance | | +| test.rs:40:22:40:71 | conn.exec_iter(...) | test.rs:40:22:40:71 | conn.exec_iter(...) [Ok, element] | provenance | Src:MaD:6 | | test.rs:40:22:40:71 | conn.exec_iter(...) [Ok, element] | test.rs:40:22:40:72 | TryExpr [element] | provenance | | | test.rs:40:22:40:72 | TryExpr [element] | test.rs:40:13:40:18 | mut t1 [element] | provenance | | -| test.rs:40:27:40:35 | exec_iter | test.rs:40:22:40:71 | conn.exec_iter(...) [Ok, element] | provenance | Src:MaD:6 | +| test.rs:41:14:41:61 | ... .get(...) | test.rs:41:14:41:61 | ... .get(...) [Some] | provenance | Src:MaD:7 | | test.rs:41:14:41:61 | ... .get(...) [Some] | test.rs:41:14:41:70 | ... .unwrap() | provenance | MaD:15 | -| test.rs:41:42:41:44 | get | test.rs:41:14:41:61 | ... .get(...) [Some] | provenance | Src:MaD:7 | | test.rs:42:13:42:15 | row | test.rs:44:22:44:22 | v | provenance | | | test.rs:42:20:42:21 | t1 [element] | test.rs:42:13:42:15 | row | provenance | | -| test.rs:48:22:48:30 | query_map | test.rs:50:14:50:24 | ...: i64 | provenance | Src:MaD:3 | +| test.rs:48:17:53:9 | conn.query_map(...) | test.rs:50:14:50:24 | ...: i64 | provenance | Src:MaD:3 | | test.rs:50:14:50:24 | ...: i64 | test.rs:51:22:51:27 | values | provenance | | -| test.rs:55:22:55:30 | query_map | test.rs:57:14:57:39 | ...: ... | provenance | Src:MaD:3 | +| test.rs:55:17:62:9 | conn.query_map(...) | test.rs:57:14:57:39 | ...: ... | provenance | Src:MaD:3 | | test.rs:57:14:57:39 | ...: ... | test.rs:58:22:58:29 | values.0 | provenance | | | test.rs:57:14:57:39 | ...: ... | test.rs:59:22:59:29 | values.1 | provenance | | | test.rs:57:14:57:39 | ...: ... | test.rs:60:22:60:29 | values.2 | provenance | | | test.rs:64:13:64:17 | total | test.rs:68:14:68:18 | total | provenance | | | test.rs:64:13:64:17 | total [Wrapping] | test.rs:68:14:68:18 | total | provenance | | +| test.rs:64:21:67:10 | conn.query_fold(...) | test.rs:64:76:64:83 | ...: i64 | provenance | Src:MaD:2 | | test.rs:64:21:67:10 | conn.query_fold(...) [Ok, Wrapping] | test.rs:64:21:67:11 | TryExpr [Wrapping] | provenance | | | test.rs:64:21:67:10 | conn.query_fold(...) [Ok] | test.rs:64:21:67:11 | TryExpr | provenance | | | test.rs:64:21:67:11 | TryExpr | test.rs:64:13:64:17 | total | provenance | | | test.rs:64:21:67:11 | TryExpr [Wrapping] | test.rs:64:13:64:17 | total [Wrapping] | provenance | | -| test.rs:64:26:64:35 | query_fold | test.rs:64:76:64:83 | ...: i64 | provenance | Src:MaD:2 | | test.rs:64:76:64:83 | ...: i64 | test.rs:65:18:65:20 | row | provenance | | | test.rs:64:76:64:83 | ...: i64 | test.rs:66:19:66:21 | row | provenance | | | test.rs:64:86:67:9 | { ... } | test.rs:64:21:67:10 | conn.query_fold(...) [Ok] | provenance | MaD:13 | @@ -68,7 +68,7 @@ edges | test.rs:66:13:66:21 | ... + ... [Wrapping] | test.rs:64:86:67:9 | { ... } [Wrapping] | provenance | | | test.rs:66:19:66:21 | row | test.rs:66:13:66:21 | ... + ... | provenance | MaD:12 | | test.rs:66:19:66:21 | row | test.rs:66:13:66:21 | ... + ... [Wrapping] | provenance | MaD:11 | -| test.rs:70:22:70:31 | query_fold | test.rs:70:83:70:105 | ...: ... | provenance | Src:MaD:2 | +| test.rs:70:17:78:10 | conn.query_fold(...) | test.rs:70:83:70:105 | ...: ... | provenance | Src:MaD:2 | | test.rs:70:83:70:105 | ...: ... | test.rs:71:17:71:18 | id | provenance | | | test.rs:70:83:70:105 | ...: ... | test.rs:72:17:72:20 | name | provenance | | | test.rs:70:83:70:105 | ...: ... | test.rs:73:17:73:19 | age | provenance | | @@ -76,38 +76,38 @@ edges | test.rs:72:17:72:20 | name | test.rs:75:18:75:21 | name | provenance | | | test.rs:73:17:73:19 | age | test.rs:76:18:76:20 | age | provenance | | | test.rs:105:13:105:14 | v1 | test.rs:106:14:106:15 | v1 | provenance | | +| test.rs:105:24:105:33 | row.get(...) | test.rs:105:24:105:33 | row.get(...) [Some] | provenance | Src:MaD:7 | | test.rs:105:24:105:33 | row.get(...) [Some] | test.rs:105:24:105:42 | ... .unwrap() | provenance | MaD:15 | | test.rs:105:24:105:42 | ... .unwrap() | test.rs:105:13:105:14 | v1 | provenance | | -| test.rs:105:28:105:30 | get | test.rs:105:24:105:33 | row.get(...) [Some] | provenance | Src:MaD:7 | | test.rs:108:13:108:14 | v2 | test.rs:109:14:109:15 | v2 | provenance | | +| test.rs:108:24:108:37 | row.get_opt(...) | test.rs:108:24:108:37 | row.get_opt(...) [Some, Ok] | provenance | Src:MaD:8 | | test.rs:108:24:108:37 | row.get_opt(...) [Some, Ok] | test.rs:108:24:108:46 | ... .unwrap() [Ok] | provenance | MaD:15 | | test.rs:108:24:108:46 | ... .unwrap() [Ok] | test.rs:108:24:108:55 | ... .unwrap() | provenance | MaD:16 | | test.rs:108:24:108:55 | ... .unwrap() | test.rs:108:13:108:14 | v2 | provenance | | -| test.rs:108:28:108:34 | get_opt | test.rs:108:24:108:37 | row.get_opt(...) [Some, Ok] | provenance | Src:MaD:8 | | test.rs:111:13:111:14 | v3 | test.rs:112:14:112:15 | v3 | provenance | | +| test.rs:111:24:111:34 | row.take(...) | test.rs:111:24:111:34 | row.take(...) [Some] | provenance | Src:MaD:9 | | test.rs:111:24:111:34 | row.take(...) [Some] | test.rs:111:24:111:43 | ... .unwrap() | provenance | MaD:15 | | test.rs:111:24:111:43 | ... .unwrap() | test.rs:111:13:111:14 | v3 | provenance | | -| test.rs:111:28:111:31 | take | test.rs:111:24:111:34 | row.take(...) [Some] | provenance | Src:MaD:9 | | test.rs:114:13:114:14 | v4 | test.rs:115:14:115:15 | v4 | provenance | | +| test.rs:114:24:114:38 | row.take_opt(...) | test.rs:114:24:114:38 | row.take_opt(...) [Some, Ok] | provenance | Src:MaD:10 | | test.rs:114:24:114:38 | row.take_opt(...) [Some, Ok] | test.rs:114:24:114:47 | ... .unwrap() [Ok] | provenance | MaD:15 | | test.rs:114:24:114:47 | ... .unwrap() [Ok] | test.rs:114:24:114:56 | ... .unwrap() | provenance | MaD:16 | | test.rs:114:24:114:56 | ... .unwrap() | test.rs:114:13:114:14 | v4 | provenance | | -| test.rs:114:28:114:35 | take_opt | test.rs:114:24:114:38 | row.take_opt(...) [Some, Ok] | provenance | Src:MaD:10 | -| test.rs:135:22:135:30 | query_map | test.rs:137:14:137:24 | ...: i64 | provenance | Src:MaD:5 | +| test.rs:135:17:140:9 | conn.query_map(...) | test.rs:137:14:137:24 | ...: i64 | provenance | Src:MaD:5 | | test.rs:137:14:137:24 | ...: i64 | test.rs:138:22:138:27 | values | provenance | | -| test.rs:142:22:142:30 | query_map | test.rs:144:14:144:39 | ...: ... | provenance | Src:MaD:5 | +| test.rs:142:17:149:9 | conn.query_map(...) | test.rs:144:14:144:39 | ...: ... | provenance | Src:MaD:5 | | test.rs:144:14:144:39 | ...: ... | test.rs:145:22:145:29 | values.0 | provenance | | | test.rs:144:14:144:39 | ...: ... | test.rs:146:22:146:29 | values.1 | provenance | | | test.rs:144:14:144:39 | ...: ... | test.rs:147:22:147:29 | values.2 | provenance | | | test.rs:151:13:151:17 | total | test.rs:155:14:155:18 | total | provenance | | | test.rs:151:13:151:17 | total [Wrapping] | test.rs:155:14:155:18 | total | provenance | | +| test.rs:151:21:154:10 | conn.query_fold(...) | test.rs:151:76:151:83 | ...: i64 | provenance | Src:MaD:4 | | test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok, Wrapping] | test.rs:151:21:154:16 | await ... [Ok, Wrapping] | provenance | | | test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok] | test.rs:151:21:154:16 | await ... [Ok] | provenance | | | test.rs:151:21:154:16 | await ... [Ok, Wrapping] | test.rs:151:21:154:17 | TryExpr [Wrapping] | provenance | | | test.rs:151:21:154:16 | await ... [Ok] | test.rs:151:21:154:17 | TryExpr | provenance | | | test.rs:151:21:154:17 | TryExpr | test.rs:151:13:151:17 | total | provenance | | | test.rs:151:21:154:17 | TryExpr [Wrapping] | test.rs:151:13:151:17 | total [Wrapping] | provenance | | -| test.rs:151:26:151:35 | query_fold | test.rs:151:76:151:83 | ...: i64 | provenance | Src:MaD:4 | | test.rs:151:76:151:83 | ...: i64 | test.rs:152:18:152:20 | row | provenance | | | test.rs:151:76:151:83 | ...: i64 | test.rs:153:19:153:21 | row | provenance | | | test.rs:151:86:154:9 | { ... } | test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok] | provenance | MaD:14 | @@ -116,7 +116,7 @@ edges | test.rs:153:13:153:21 | ... + ... [Wrapping] | test.rs:151:86:154:9 | { ... } [Wrapping] | provenance | | | test.rs:153:19:153:21 | row | test.rs:153:13:153:21 | ... + ... | provenance | MaD:12 | | test.rs:153:19:153:21 | row | test.rs:153:13:153:21 | ... + ... [Wrapping] | provenance | MaD:11 | -| test.rs:157:22:157:31 | query_fold | test.rs:157:83:157:105 | ...: ... | provenance | Src:MaD:4 | +| test.rs:157:17:165:10 | conn.query_fold(...) | test.rs:157:83:157:105 | ...: ... | provenance | Src:MaD:4 | | test.rs:157:83:157:105 | ...: ... | test.rs:158:17:158:18 | id | provenance | | | test.rs:157:83:157:105 | ...: ... | test.rs:159:17:159:20 | name | provenance | | | test.rs:157:83:157:105 | ...: ... | test.rs:160:17:160:19 | age | provenance | | @@ -125,58 +125,58 @@ edges | test.rs:160:17:160:19 | age | test.rs:163:18:163:20 | age | provenance | | nodes | test.rs:18:13:18:14 | v1 | semmle.label | v1 | +| test.rs:18:24:18:33 | row.get(...) | semmle.label | row.get(...) | | test.rs:18:24:18:33 | row.get(...) [Some] | semmle.label | row.get(...) [Some] | | test.rs:18:24:18:42 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:18:28:18:30 | get | semmle.label | get | | test.rs:19:14:19:15 | v1 | semmle.label | v1 | | test.rs:21:13:21:14 | v2 | semmle.label | v2 | +| test.rs:21:24:21:37 | row.get_opt(...) | semmle.label | row.get_opt(...) | | test.rs:21:24:21:37 | row.get_opt(...) [Some, Ok] | semmle.label | row.get_opt(...) [Some, Ok] | | test.rs:21:24:21:46 | ... .unwrap() [Ok] | semmle.label | ... .unwrap() [Ok] | | test.rs:21:24:21:55 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:21:28:21:34 | get_opt | semmle.label | get_opt | | test.rs:22:14:22:15 | v2 | semmle.label | v2 | | test.rs:24:13:24:14 | v3 | semmle.label | v3 | +| test.rs:24:24:24:34 | row.take(...) | semmle.label | row.take(...) | | test.rs:24:24:24:34 | row.take(...) [Some] | semmle.label | row.take(...) [Some] | | test.rs:24:24:24:43 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:24:28:24:31 | take | semmle.label | take | | test.rs:25:14:25:15 | v3 | semmle.label | v3 | | test.rs:27:13:27:14 | v4 | semmle.label | v4 | +| test.rs:27:24:27:38 | row.take_opt(...) | semmle.label | row.take_opt(...) | | test.rs:27:24:27:38 | row.take_opt(...) [Some, Ok] | semmle.label | row.take_opt(...) [Some, Ok] | | test.rs:27:24:27:47 | ... .unwrap() [Ok] | semmle.label | ... .unwrap() [Ok] | | test.rs:27:24:27:56 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:27:28:27:35 | take_opt | semmle.label | take_opt | | test.rs:28:14:28:15 | v4 | semmle.label | v4 | | test.rs:37:13:37:14 | v6 | semmle.label | v6 | +| test.rs:37:23:37:63 | conn.query_first(...) | semmle.label | conn.query_first(...) | | test.rs:37:23:37:63 | conn.query_first(...) [Ok, Some] | semmle.label | conn.query_first(...) [Ok, Some] | | test.rs:37:23:37:64 | TryExpr [Some] | semmle.label | TryExpr [Some] | | test.rs:37:23:37:73 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:37:28:37:38 | query_first | semmle.label | query_first | | test.rs:38:14:38:15 | v6 | semmle.label | v6 | | test.rs:40:13:40:18 | mut t1 [element] | semmle.label | mut t1 [element] | +| test.rs:40:22:40:71 | conn.exec_iter(...) | semmle.label | conn.exec_iter(...) | | test.rs:40:22:40:71 | conn.exec_iter(...) [Ok, element] | semmle.label | conn.exec_iter(...) [Ok, element] | | test.rs:40:22:40:72 | TryExpr [element] | semmle.label | TryExpr [element] | -| test.rs:40:27:40:35 | exec_iter | semmle.label | exec_iter | +| test.rs:41:14:41:61 | ... .get(...) | semmle.label | ... .get(...) | | test.rs:41:14:41:61 | ... .get(...) [Some] | semmle.label | ... .get(...) [Some] | | test.rs:41:14:41:70 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:41:42:41:44 | get | semmle.label | get | | test.rs:42:13:42:15 | row | semmle.label | row | | test.rs:42:20:42:21 | t1 [element] | semmle.label | t1 [element] | | test.rs:44:22:44:22 | v | semmle.label | v | -| test.rs:48:22:48:30 | query_map | semmle.label | query_map | +| test.rs:48:17:53:9 | conn.query_map(...) | semmle.label | conn.query_map(...) | | test.rs:50:14:50:24 | ...: i64 | semmle.label | ...: i64 | | test.rs:51:22:51:27 | values | semmle.label | values | -| test.rs:55:22:55:30 | query_map | semmle.label | query_map | +| test.rs:55:17:62:9 | conn.query_map(...) | semmle.label | conn.query_map(...) | | test.rs:57:14:57:39 | ...: ... | semmle.label | ...: ... | | test.rs:58:22:58:29 | values.0 | semmle.label | values.0 | | test.rs:59:22:59:29 | values.1 | semmle.label | values.1 | | test.rs:60:22:60:29 | values.2 | semmle.label | values.2 | | test.rs:64:13:64:17 | total | semmle.label | total | | test.rs:64:13:64:17 | total [Wrapping] | semmle.label | total [Wrapping] | +| test.rs:64:21:67:10 | conn.query_fold(...) | semmle.label | conn.query_fold(...) | | test.rs:64:21:67:10 | conn.query_fold(...) [Ok, Wrapping] | semmle.label | conn.query_fold(...) [Ok, Wrapping] | | test.rs:64:21:67:10 | conn.query_fold(...) [Ok] | semmle.label | conn.query_fold(...) [Ok] | | test.rs:64:21:67:11 | TryExpr | semmle.label | TryExpr | | test.rs:64:21:67:11 | TryExpr [Wrapping] | semmle.label | TryExpr [Wrapping] | -| test.rs:64:26:64:35 | query_fold | semmle.label | query_fold | | test.rs:64:76:64:83 | ...: i64 | semmle.label | ...: i64 | | test.rs:64:86:67:9 | { ... } | semmle.label | { ... } | | test.rs:64:86:67:9 | { ... } [Wrapping] | semmle.label | { ... } [Wrapping] | @@ -185,7 +185,7 @@ nodes | test.rs:66:13:66:21 | ... + ... [Wrapping] | semmle.label | ... + ... [Wrapping] | | test.rs:66:19:66:21 | row | semmle.label | row | | test.rs:68:14:68:18 | total | semmle.label | total | -| test.rs:70:22:70:31 | query_fold | semmle.label | query_fold | +| test.rs:70:17:78:10 | conn.query_fold(...) | semmle.label | conn.query_fold(...) | | test.rs:70:83:70:105 | ...: ... | semmle.label | ...: ... | | test.rs:71:17:71:18 | id | semmle.label | id | | test.rs:72:17:72:20 | name | semmle.label | name | @@ -194,44 +194,44 @@ nodes | test.rs:75:18:75:21 | name | semmle.label | name | | test.rs:76:18:76:20 | age | semmle.label | age | | test.rs:105:13:105:14 | v1 | semmle.label | v1 | +| test.rs:105:24:105:33 | row.get(...) | semmle.label | row.get(...) | | test.rs:105:24:105:33 | row.get(...) [Some] | semmle.label | row.get(...) [Some] | | test.rs:105:24:105:42 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:105:28:105:30 | get | semmle.label | get | | test.rs:106:14:106:15 | v1 | semmle.label | v1 | | test.rs:108:13:108:14 | v2 | semmle.label | v2 | +| test.rs:108:24:108:37 | row.get_opt(...) | semmle.label | row.get_opt(...) | | test.rs:108:24:108:37 | row.get_opt(...) [Some, Ok] | semmle.label | row.get_opt(...) [Some, Ok] | | test.rs:108:24:108:46 | ... .unwrap() [Ok] | semmle.label | ... .unwrap() [Ok] | | test.rs:108:24:108:55 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:108:28:108:34 | get_opt | semmle.label | get_opt | | test.rs:109:14:109:15 | v2 | semmle.label | v2 | | test.rs:111:13:111:14 | v3 | semmle.label | v3 | +| test.rs:111:24:111:34 | row.take(...) | semmle.label | row.take(...) | | test.rs:111:24:111:34 | row.take(...) [Some] | semmle.label | row.take(...) [Some] | | test.rs:111:24:111:43 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:111:28:111:31 | take | semmle.label | take | | test.rs:112:14:112:15 | v3 | semmle.label | v3 | | test.rs:114:13:114:14 | v4 | semmle.label | v4 | +| test.rs:114:24:114:38 | row.take_opt(...) | semmle.label | row.take_opt(...) | | test.rs:114:24:114:38 | row.take_opt(...) [Some, Ok] | semmle.label | row.take_opt(...) [Some, Ok] | | test.rs:114:24:114:47 | ... .unwrap() [Ok] | semmle.label | ... .unwrap() [Ok] | | test.rs:114:24:114:56 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:114:28:114:35 | take_opt | semmle.label | take_opt | | test.rs:115:14:115:15 | v4 | semmle.label | v4 | -| test.rs:135:22:135:30 | query_map | semmle.label | query_map | +| test.rs:135:17:140:9 | conn.query_map(...) | semmle.label | conn.query_map(...) | | test.rs:137:14:137:24 | ...: i64 | semmle.label | ...: i64 | | test.rs:138:22:138:27 | values | semmle.label | values | -| test.rs:142:22:142:30 | query_map | semmle.label | query_map | +| test.rs:142:17:149:9 | conn.query_map(...) | semmle.label | conn.query_map(...) | | test.rs:144:14:144:39 | ...: ... | semmle.label | ...: ... | | test.rs:145:22:145:29 | values.0 | semmle.label | values.0 | | test.rs:146:22:146:29 | values.1 | semmle.label | values.1 | | test.rs:147:22:147:29 | values.2 | semmle.label | values.2 | | test.rs:151:13:151:17 | total | semmle.label | total | | test.rs:151:13:151:17 | total [Wrapping] | semmle.label | total [Wrapping] | +| test.rs:151:21:154:10 | conn.query_fold(...) | semmle.label | conn.query_fold(...) | | test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok, Wrapping] | semmle.label | conn.query_fold(...) [future, Ok, Wrapping] | | test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok] | semmle.label | conn.query_fold(...) [future, Ok] | | test.rs:151:21:154:16 | await ... [Ok, Wrapping] | semmle.label | await ... [Ok, Wrapping] | | test.rs:151:21:154:16 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:151:21:154:17 | TryExpr | semmle.label | TryExpr | | test.rs:151:21:154:17 | TryExpr [Wrapping] | semmle.label | TryExpr [Wrapping] | -| test.rs:151:26:151:35 | query_fold | semmle.label | query_fold | | test.rs:151:76:151:83 | ...: i64 | semmle.label | ...: i64 | | test.rs:151:86:154:9 | { ... } | semmle.label | { ... } | | test.rs:151:86:154:9 | { ... } [Wrapping] | semmle.label | { ... } [Wrapping] | @@ -240,7 +240,7 @@ nodes | test.rs:153:13:153:21 | ... + ... [Wrapping] | semmle.label | ... + ... [Wrapping] | | test.rs:153:19:153:21 | row | semmle.label | row | | test.rs:155:14:155:18 | total | semmle.label | total | -| test.rs:157:22:157:31 | query_fold | semmle.label | query_fold | +| test.rs:157:17:165:10 | conn.query_fold(...) | semmle.label | conn.query_fold(...) | | test.rs:157:83:157:105 | ...: ... | semmle.label | ...: ... | | test.rs:158:17:158:18 | id | semmle.label | id | | test.rs:159:17:159:20 | name | semmle.label | name | @@ -251,32 +251,32 @@ nodes subpaths testFailures #select -| test.rs:19:14:19:15 | v1 | test.rs:18:28:18:30 | get | test.rs:19:14:19:15 | v1 | $@ | test.rs:18:28:18:30 | get | get | -| test.rs:22:14:22:15 | v2 | test.rs:21:28:21:34 | get_opt | test.rs:22:14:22:15 | v2 | $@ | test.rs:21:28:21:34 | get_opt | get_opt | -| test.rs:25:14:25:15 | v3 | test.rs:24:28:24:31 | take | test.rs:25:14:25:15 | v3 | $@ | test.rs:24:28:24:31 | take | take | -| test.rs:28:14:28:15 | v4 | test.rs:27:28:27:35 | take_opt | test.rs:28:14:28:15 | v4 | $@ | test.rs:27:28:27:35 | take_opt | take_opt | -| test.rs:38:14:38:15 | v6 | test.rs:37:28:37:38 | query_first | test.rs:38:14:38:15 | v6 | $@ | test.rs:37:28:37:38 | query_first | query_first | -| test.rs:41:14:41:70 | ... .unwrap() | test.rs:41:42:41:44 | get | test.rs:41:14:41:70 | ... .unwrap() | $@ | test.rs:41:42:41:44 | get | get | -| test.rs:44:22:44:22 | v | test.rs:40:27:40:35 | exec_iter | test.rs:44:22:44:22 | v | $@ | test.rs:40:27:40:35 | exec_iter | exec_iter | -| test.rs:51:22:51:27 | values | test.rs:48:22:48:30 | query_map | test.rs:51:22:51:27 | values | $@ | test.rs:48:22:48:30 | query_map | query_map | -| test.rs:58:22:58:29 | values.0 | test.rs:55:22:55:30 | query_map | test.rs:58:22:58:29 | values.0 | $@ | test.rs:55:22:55:30 | query_map | query_map | -| test.rs:59:22:59:29 | values.1 | test.rs:55:22:55:30 | query_map | test.rs:59:22:59:29 | values.1 | $@ | test.rs:55:22:55:30 | query_map | query_map | -| test.rs:60:22:60:29 | values.2 | test.rs:55:22:55:30 | query_map | test.rs:60:22:60:29 | values.2 | $@ | test.rs:55:22:55:30 | query_map | query_map | -| test.rs:65:18:65:20 | row | test.rs:64:26:64:35 | query_fold | test.rs:65:18:65:20 | row | $@ | test.rs:64:26:64:35 | query_fold | query_fold | -| test.rs:68:14:68:18 | total | test.rs:64:26:64:35 | query_fold | test.rs:68:14:68:18 | total | $@ | test.rs:64:26:64:35 | query_fold | query_fold | -| test.rs:74:18:74:19 | id | test.rs:70:22:70:31 | query_fold | test.rs:74:18:74:19 | id | $@ | test.rs:70:22:70:31 | query_fold | query_fold | -| test.rs:75:18:75:21 | name | test.rs:70:22:70:31 | query_fold | test.rs:75:18:75:21 | name | $@ | test.rs:70:22:70:31 | query_fold | query_fold | -| test.rs:76:18:76:20 | age | test.rs:70:22:70:31 | query_fold | test.rs:76:18:76:20 | age | $@ | test.rs:70:22:70:31 | query_fold | query_fold | -| test.rs:106:14:106:15 | v1 | test.rs:105:28:105:30 | get | test.rs:106:14:106:15 | v1 | $@ | test.rs:105:28:105:30 | get | get | -| test.rs:109:14:109:15 | v2 | test.rs:108:28:108:34 | get_opt | test.rs:109:14:109:15 | v2 | $@ | test.rs:108:28:108:34 | get_opt | get_opt | -| test.rs:112:14:112:15 | v3 | test.rs:111:28:111:31 | take | test.rs:112:14:112:15 | v3 | $@ | test.rs:111:28:111:31 | take | take | -| test.rs:115:14:115:15 | v4 | test.rs:114:28:114:35 | take_opt | test.rs:115:14:115:15 | v4 | $@ | test.rs:114:28:114:35 | take_opt | take_opt | -| test.rs:138:22:138:27 | values | test.rs:135:22:135:30 | query_map | test.rs:138:22:138:27 | values | $@ | test.rs:135:22:135:30 | query_map | query_map | -| test.rs:145:22:145:29 | values.0 | test.rs:142:22:142:30 | query_map | test.rs:145:22:145:29 | values.0 | $@ | test.rs:142:22:142:30 | query_map | query_map | -| test.rs:146:22:146:29 | values.1 | test.rs:142:22:142:30 | query_map | test.rs:146:22:146:29 | values.1 | $@ | test.rs:142:22:142:30 | query_map | query_map | -| test.rs:147:22:147:29 | values.2 | test.rs:142:22:142:30 | query_map | test.rs:147:22:147:29 | values.2 | $@ | test.rs:142:22:142:30 | query_map | query_map | -| test.rs:152:18:152:20 | row | test.rs:151:26:151:35 | query_fold | test.rs:152:18:152:20 | row | $@ | test.rs:151:26:151:35 | query_fold | query_fold | -| test.rs:155:14:155:18 | total | test.rs:151:26:151:35 | query_fold | test.rs:155:14:155:18 | total | $@ | test.rs:151:26:151:35 | query_fold | query_fold | -| test.rs:161:18:161:19 | id | test.rs:157:22:157:31 | query_fold | test.rs:161:18:161:19 | id | $@ | test.rs:157:22:157:31 | query_fold | query_fold | -| test.rs:162:18:162:21 | name | test.rs:157:22:157:31 | query_fold | test.rs:162:18:162:21 | name | $@ | test.rs:157:22:157:31 | query_fold | query_fold | -| test.rs:163:18:163:20 | age | test.rs:157:22:157:31 | query_fold | test.rs:163:18:163:20 | age | $@ | test.rs:157:22:157:31 | query_fold | query_fold | +| test.rs:19:14:19:15 | v1 | test.rs:18:24:18:33 | row.get(...) | test.rs:19:14:19:15 | v1 | $@ | test.rs:18:24:18:33 | row.get(...) | row.get(...) | +| test.rs:22:14:22:15 | v2 | test.rs:21:24:21:37 | row.get_opt(...) | test.rs:22:14:22:15 | v2 | $@ | test.rs:21:24:21:37 | row.get_opt(...) | row.get_opt(...) | +| test.rs:25:14:25:15 | v3 | test.rs:24:24:24:34 | row.take(...) | test.rs:25:14:25:15 | v3 | $@ | test.rs:24:24:24:34 | row.take(...) | row.take(...) | +| test.rs:28:14:28:15 | v4 | test.rs:27:24:27:38 | row.take_opt(...) | test.rs:28:14:28:15 | v4 | $@ | test.rs:27:24:27:38 | row.take_opt(...) | row.take_opt(...) | +| test.rs:38:14:38:15 | v6 | test.rs:37:23:37:63 | conn.query_first(...) | test.rs:38:14:38:15 | v6 | $@ | test.rs:37:23:37:63 | conn.query_first(...) | conn.query_first(...) | +| test.rs:41:14:41:70 | ... .unwrap() | test.rs:41:14:41:61 | ... .get(...) | test.rs:41:14:41:70 | ... .unwrap() | $@ | test.rs:41:14:41:61 | ... .get(...) | ... .get(...) | +| test.rs:44:22:44:22 | v | test.rs:40:22:40:71 | conn.exec_iter(...) | test.rs:44:22:44:22 | v | $@ | test.rs:40:22:40:71 | conn.exec_iter(...) | conn.exec_iter(...) | +| test.rs:51:22:51:27 | values | test.rs:48:17:53:9 | conn.query_map(...) | test.rs:51:22:51:27 | values | $@ | test.rs:48:17:53:9 | conn.query_map(...) | conn.query_map(...) | +| test.rs:58:22:58:29 | values.0 | test.rs:55:17:62:9 | conn.query_map(...) | test.rs:58:22:58:29 | values.0 | $@ | test.rs:55:17:62:9 | conn.query_map(...) | conn.query_map(...) | +| test.rs:59:22:59:29 | values.1 | test.rs:55:17:62:9 | conn.query_map(...) | test.rs:59:22:59:29 | values.1 | $@ | test.rs:55:17:62:9 | conn.query_map(...) | conn.query_map(...) | +| test.rs:60:22:60:29 | values.2 | test.rs:55:17:62:9 | conn.query_map(...) | test.rs:60:22:60:29 | values.2 | $@ | test.rs:55:17:62:9 | conn.query_map(...) | conn.query_map(...) | +| test.rs:65:18:65:20 | row | test.rs:64:21:67:10 | conn.query_fold(...) | test.rs:65:18:65:20 | row | $@ | test.rs:64:21:67:10 | conn.query_fold(...) | conn.query_fold(...) | +| test.rs:68:14:68:18 | total | test.rs:64:21:67:10 | conn.query_fold(...) | test.rs:68:14:68:18 | total | $@ | test.rs:64:21:67:10 | conn.query_fold(...) | conn.query_fold(...) | +| test.rs:74:18:74:19 | id | test.rs:70:17:78:10 | conn.query_fold(...) | test.rs:74:18:74:19 | id | $@ | test.rs:70:17:78:10 | conn.query_fold(...) | conn.query_fold(...) | +| test.rs:75:18:75:21 | name | test.rs:70:17:78:10 | conn.query_fold(...) | test.rs:75:18:75:21 | name | $@ | test.rs:70:17:78:10 | conn.query_fold(...) | conn.query_fold(...) | +| test.rs:76:18:76:20 | age | test.rs:70:17:78:10 | conn.query_fold(...) | test.rs:76:18:76:20 | age | $@ | test.rs:70:17:78:10 | conn.query_fold(...) | conn.query_fold(...) | +| test.rs:106:14:106:15 | v1 | test.rs:105:24:105:33 | row.get(...) | test.rs:106:14:106:15 | v1 | $@ | test.rs:105:24:105:33 | row.get(...) | row.get(...) | +| test.rs:109:14:109:15 | v2 | test.rs:108:24:108:37 | row.get_opt(...) | test.rs:109:14:109:15 | v2 | $@ | test.rs:108:24:108:37 | row.get_opt(...) | row.get_opt(...) | +| test.rs:112:14:112:15 | v3 | test.rs:111:24:111:34 | row.take(...) | test.rs:112:14:112:15 | v3 | $@ | test.rs:111:24:111:34 | row.take(...) | row.take(...) | +| test.rs:115:14:115:15 | v4 | test.rs:114:24:114:38 | row.take_opt(...) | test.rs:115:14:115:15 | v4 | $@ | test.rs:114:24:114:38 | row.take_opt(...) | row.take_opt(...) | +| test.rs:138:22:138:27 | values | test.rs:135:17:140:9 | conn.query_map(...) | test.rs:138:22:138:27 | values | $@ | test.rs:135:17:140:9 | conn.query_map(...) | conn.query_map(...) | +| test.rs:145:22:145:29 | values.0 | test.rs:142:17:149:9 | conn.query_map(...) | test.rs:145:22:145:29 | values.0 | $@ | test.rs:142:17:149:9 | conn.query_map(...) | conn.query_map(...) | +| test.rs:146:22:146:29 | values.1 | test.rs:142:17:149:9 | conn.query_map(...) | test.rs:146:22:146:29 | values.1 | $@ | test.rs:142:17:149:9 | conn.query_map(...) | conn.query_map(...) | +| test.rs:147:22:147:29 | values.2 | test.rs:142:17:149:9 | conn.query_map(...) | test.rs:147:22:147:29 | values.2 | $@ | test.rs:142:17:149:9 | conn.query_map(...) | conn.query_map(...) | +| test.rs:152:18:152:20 | row | test.rs:151:21:154:10 | conn.query_fold(...) | test.rs:152:18:152:20 | row | $@ | test.rs:151:21:154:10 | conn.query_fold(...) | conn.query_fold(...) | +| test.rs:155:14:155:18 | total | test.rs:151:21:154:10 | conn.query_fold(...) | test.rs:155:14:155:18 | total | $@ | test.rs:151:21:154:10 | conn.query_fold(...) | conn.query_fold(...) | +| test.rs:161:18:161:19 | id | test.rs:157:17:165:10 | conn.query_fold(...) | test.rs:161:18:161:19 | id | $@ | test.rs:157:17:165:10 | conn.query_fold(...) | conn.query_fold(...) | +| test.rs:162:18:162:21 | name | test.rs:157:17:165:10 | conn.query_fold(...) | test.rs:162:18:162:21 | name | $@ | test.rs:157:17:165:10 | conn.query_fold(...) | conn.query_fold(...) | +| test.rs:163:18:163:20 | age | test.rs:157:17:165:10 | conn.query_fold(...) | test.rs:163:18:163:20 | age | $@ | test.rs:157:17:165:10 | conn.query_fold(...) | conn.query_fold(...) | diff --git a/rust/ql/test/library-tests/dataflow/sources/database/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/database/TaintSources.expected index 9132dfaa2b0f..d9dd12bd90f5 100644 --- a/rust/ql/test/library-tests/dataflow/sources/database/TaintSources.expected +++ b/rust/ql/test/library-tests/dataflow/sources/database/TaintSources.expected @@ -1,25 +1,25 @@ -| test.rs:15:47:15:51 | query | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:18:28:18:30 | get | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:21:28:21:34 | get_opt | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:24:28:24:31 | take | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:27:28:27:35 | take_opt | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:30:26:30:31 | as_ref | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:37:28:37:38 | query_first | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:40:27:40:35 | exec_iter | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:41:42:41:44 | get | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:48:22:48:30 | query_map | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:55:22:55:30 | query_map | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:64:26:64:35 | query_fold | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:70:22:70:31 | query_fold | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:102:53:102:57 | query | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:105:28:105:30 | get | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:108:28:108:34 | get_opt | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:111:28:111:31 | take | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:114:28:114:35 | take_opt | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:117:26:117:31 | as_ref | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:124:28:124:38 | query_first | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:127:27:127:35 | exec_iter | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:135:22:135:30 | query_map | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:142:22:142:30 | query_map | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:151:26:151:35 | query_fold | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:157:22:157:31 | query_fold | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:15:42:15:87 | conn.query(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:18:24:18:33 | row.get(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:21:24:21:37 | row.get_opt(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:24:24:24:34 | row.take(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:27:24:27:38 | row.take_opt(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:30:22:30:34 | row.as_ref(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:37:23:37:63 | conn.query_first(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:40:22:40:71 | conn.exec_iter(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:41:14:41:61 | ... .get(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:48:17:53:9 | conn.query_map(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:55:17:62:9 | conn.query_map(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:64:21:67:10 | conn.query_fold(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:70:17:78:10 | conn.query_fold(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:102:48:102:93 | conn.query(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:105:24:105:33 | row.get(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:108:24:108:37 | row.get_opt(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:111:24:111:34 | row.take(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:114:24:114:38 | row.take_opt(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:117:22:117:34 | row.as_ref(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:124:23:124:63 | conn.query_first(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:127:22:127:71 | conn.exec_iter(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:135:17:140:9 | conn.query_map(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:142:17:149:9 | conn.query_map(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:151:21:154:10 | conn.query_fold(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:157:17:165:10 | conn.query_fold(...) | Flow source 'DatabaseSource' of type database (DEFAULT). | diff --git a/rust/ql/test/library-tests/dataflow/sources/database/test.rs b/rust/ql/test/library-tests/dataflow/sources/database/test.rs index 618830091a6c..b9fe325ea136 100644 --- a/rust/ql/test/library-tests/dataflow/sources/database/test.rs +++ b/rust/ql/test/library-tests/dataflow/sources/database/test.rs @@ -45,29 +45,29 @@ mod test_mysql { } } - let _ = conn.query_map( // $ Alert[rust/summary/taint-sources] + let _ = conn.query_map( "SELECT id FROM person", |values: i64| -> () { sink(values); // $ hasTaintFlow } - )?; + )?; // $ Alert[rust/summary/taint-sources] - let _ = conn.query_map( // $ Alert[rust/summary/taint-sources] + let _ = conn.query_map( "SELECT id, name, age FROM person", |values: (i64, String, i32)| -> () { sink(values.0); // $ hasTaintFlow sink(values.1); // $ hasTaintFlow sink(values.2); // $ hasTaintFlow } - )?; + )?; // $ Alert[rust/summary/taint-sources] - let total = conn.query_fold("SELECT id FROM person", 0, |acc: i64, row: i64| { // $ Alert[rust/summary/taint-sources] + let total = conn.query_fold("SELECT id FROM person", 0, |acc: i64, row: i64| { sink(row); // $ hasTaintFlow acc + row - })?; + })?; // $ Alert[rust/summary/taint-sources] sink(total); // $ hasTaintFlow - let _ = conn.query_fold("SELECT id, name, age FROM person", 0, |acc: i64, row: (i64, String, i32)| { // $ Alert[rust/summary/taint-sources] + let _ = conn.query_fold("SELECT id, name, age FROM person", 0, |acc: i64, row: (i64, String, i32)| { let id: i64 = row.0; let name: String = row.1; let age: i32 = row.2; @@ -75,7 +75,7 @@ mod test_mysql { sink(name); // $ hasTaintFlow sink(age); // $ hasTaintFlow acc + 1 - })?; + })?; // $ Alert[rust/summary/taint-sources] Ok(()) } @@ -132,29 +132,29 @@ mod test_mysql_async { } } - let _ = conn.query_map( // $ Alert[rust/summary/taint-sources] + let _ = conn.query_map( "SELECT id FROM person", |values: i64| -> () { sink(values); // $ hasTaintFlow } - ).await?; + ).await?; // $ Alert[rust/summary/taint-sources] - let _ = conn.query_map( // $ Alert[rust/summary/taint-sources] + let _ = conn.query_map( "SELECT id, name, age FROM person", |values: (i64, String, i32)| -> () { sink(values.0); // $ hasTaintFlow sink(values.1); // $ hasTaintFlow sink(values.2); // $ hasTaintFlow } - ).await?; + ).await?; // $ Alert[rust/summary/taint-sources] - let total = conn.query_fold("SELECT id FROM person", 0, |acc: i64, row: i64| { // $ Alert[rust/summary/taint-sources] + let total = conn.query_fold("SELECT id FROM person", 0, |acc: i64, row: i64| { sink(row); // $ hasTaintFlow acc + row - }).await?; + }).await?; // $ Alert[rust/summary/taint-sources] sink(total); // $ hasTaintFlow - let _ = conn.query_fold("SELECT id, name, age FROM person", 0, |acc: i64, row: (i64, String, i32)| { // $ Alert[rust/summary/taint-sources] + let _ = conn.query_fold("SELECT id, name, age FROM person", 0, |acc: i64, row: (i64, String, i32)| { let id: i64 = row.0; let name: String = row.1; let age: i32 = row.2; @@ -162,7 +162,7 @@ mod test_mysql_async { sink(name); // $ hasTaintFlow sink(age); // $ hasTaintFlow acc + 1 - }).await?; + }).await?; // $ Alert[rust/summary/taint-sources] let ids = "SELECT id FROM person".with(()).map(&mut conn, |person: i64| -> i64 { 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 78527083096e..30c4e844c41e 100644 --- a/rust/ql/test/library-tests/dataflow/sources/env/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/env/InlineFlow.expected @@ -17,27 +17,27 @@ models | 16 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | | 17 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | 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:6:10:6:30 | ...::var(...) | test.rs:6:10:6:30 | ...::var(...) | provenance | Src:MaD:6 | +| test.rs:7:10:7:33 | ...::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(...) | 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:16 | | 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(...) | 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:15 | | test.rs:10:16:10:48 | ... .unwrap() | test.rs:10:9:10:12 | var2 | provenance | | | test.rs:15:9:15:20 | TuplePat | test.rs:16:14:16:16 | key | provenance | | | test.rs:15:9:15:20 | TuplePat | test.rs:17:14:17:18 | value | provenance | | -| test.rs:15:25:15:38 | ...::vars | test.rs:15:25:15:40 | ...::vars(...) [element] | provenance | Src:MaD:8 | +| test.rs:15:25:15:40 | ...::vars(...) | test.rs:15:25:15:40 | ...::vars(...) [element] | provenance | Src:MaD:8 | | test.rs:15:25:15:40 | ...::vars(...) [element] | test.rs:15:9:15:20 | TuplePat | provenance | | | test.rs:20:9:20:20 | TuplePat | test.rs:21:14:21:16 | key | provenance | | | test.rs:20:9:20:20 | TuplePat | test.rs:22:14:22:18 | value | provenance | | -| test.rs:20:25:20:41 | ...::vars_os | test.rs:20:25:20:43 | ...::vars_os(...) [element] | provenance | Src:MaD:9 | +| test.rs:20:25:20:43 | ...::vars_os(...) | test.rs:20:25:20:43 | ...::vars_os(...) [element] | provenance | Src:MaD:9 | | test.rs:20:25:20:43 | ...::vars_os(...) [element] | test.rs:20:9:20:20 | TuplePat | 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 | | -| test.rs:27:29:27:42 | ...::args | test.rs:27:29:27:44 | ...::args(...) [element] | provenance | Src:MaD:1 | +| test.rs:27:29:27:44 | ...::args(...) | test.rs:27:29:27:44 | ...::args(...) [element] | provenance | Src:MaD:1 | | test.rs:27:29:27:44 | ...::args(...) [element] | test.rs:27:29:27:54 | ... .collect() [element] | provenance | MaD:10 | | 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 | | @@ -49,67 +49,67 @@ edges | test.rs:29:17:29:20 | args [element] | test.rs:29:17:29:23 | args[1] | provenance | MaD:12 | | 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(...) | 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:11 | | test.rs:30:16:30:38 | ... .nth(...) [Some] | test.rs:30:16:30:47 | ... .unwrap() | provenance | MaD:15 | | 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(...) | 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:11 | | test.rs:31:16:31:41 | ... .nth(...) [Some] | test.rs:31:16:31:50 | ... .unwrap() | provenance | MaD:15 | | 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(...) | 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:11 | | test.rs:32:16:32:38 | ... .nth(...) [Some] | test.rs:32:16:32:47 | ... .unwrap() | provenance | MaD:15 | | test.rs:32:16:32:47 | ... .unwrap() | test.rs:32:16:32:64 | ... .parse() [Ok] | provenance | MaD:13 | | test.rs:32:16:32:64 | ... .parse() [Ok] | test.rs:32:16:32:73 | ... .unwrap() | provenance | MaD:17 | | 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 | +| test.rs:40:16:40:31 | ...::args(...) | test.rs:40:16:40:31 | ...::args(...) [element] | provenance | Src:MaD:1 | | test.rs:40:16:40:31 | ...::args(...) [element] | test.rs:40:9:40:11 | arg | provenance | | | test.rs:44:9:44:11 | arg | test.rs:45:14:45:16 | arg | provenance | | -| test.rs:44:16:44:32 | ...::args_os | test.rs:44:16:44:34 | ...::args_os(...) [element] | provenance | Src:MaD:2 | +| test.rs:44:16:44:34 | ...::args_os(...) | test.rs:44:16:44:34 | ...::args_os(...) [element] | provenance | Src:MaD:2 | | 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(...) | 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:16 | | 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(...) | 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:16 | | 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(...) | 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:14 | | 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 | | test.rs:6:10:6:30 | ...::var(...) | semmle.label | ...::var(...) | -| test.rs:7:10:7:25 | ...::var_os | semmle.label | ...::var_os | +| test.rs:6:10:6:30 | ...::var(...) | semmle.label | ...::var(...) | +| test.rs:7:10:7:33 | ...::var_os(...) | semmle.label | ...::var_os(...) | | test.rs:7:10:7:33 | ...::var_os(...) | semmle.label | ...::var_os(...) | | test.rs:9:9:9:12 | var1 | semmle.label | var1 | -| test.rs:9:16:9:28 | ...::var | semmle.label | ...::var | +| test.rs:9:16:9:36 | ...::var(...) | semmle.label | ...::var(...) | | test.rs:9:16:9:36 | ...::var(...) [Ok] | semmle.label | ...::var(...) [Ok] | | test.rs:9:16:9:59 | ... .expect(...) | semmle.label | ... .expect(...) | | test.rs:10:9:10:12 | var2 | semmle.label | var2 | -| test.rs:10:16:10:31 | ...::var_os | semmle.label | ...::var_os | +| test.rs:10:16:10:39 | ...::var_os(...) | semmle.label | ...::var_os(...) | | test.rs:10:16:10:39 | ...::var_os(...) [Some] | semmle.label | ...::var_os(...) [Some] | | test.rs:10:16:10:48 | ... .unwrap() | semmle.label | ... .unwrap() | | test.rs:12:10:12:13 | var1 | semmle.label | var1 | | test.rs:13:10:13:13 | var2 | semmle.label | var2 | | test.rs:15:9:15:20 | TuplePat | semmle.label | TuplePat | -| test.rs:15:25:15:38 | ...::vars | semmle.label | ...::vars | +| test.rs:15:25:15:40 | ...::vars(...) | semmle.label | ...::vars(...) | | test.rs:15:25:15:40 | ...::vars(...) [element] | semmle.label | ...::vars(...) [element] | | test.rs:16:14:16:16 | key | semmle.label | key | | test.rs:17:14:17:18 | value | semmle.label | value | | test.rs:20:9:20:20 | TuplePat | semmle.label | TuplePat | -| test.rs:20:25:20:41 | ...::vars_os | semmle.label | ...::vars_os | +| test.rs:20:25:20:43 | ...::vars_os(...) | semmle.label | ...::vars_os(...) | | test.rs:20:25:20:43 | ...::vars_os(...) [element] | semmle.label | ...::vars_os(...) [element] | | test.rs:21:14:21:16 | key | semmle.label | key | | test.rs:22:14:22:18 | value | semmle.label | value | | test.rs:27:9:27:12 | args [element] | semmle.label | args [element] | -| test.rs:27:29:27:42 | ...::args | semmle.label | ...::args | +| test.rs:27:29:27:44 | ...::args(...) | semmle.label | ...::args(...) | | test.rs:27:29:27:44 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | | test.rs:27:29:27:54 | ... .collect() [element] | semmle.label | ... .collect() [element] | | test.rs:28:9:28:15 | my_path [&ref] | semmle.label | my_path [&ref] | @@ -121,17 +121,17 @@ nodes | test.rs:29:17:29:20 | args [element] | semmle.label | args [element] | | test.rs:29:17:29:23 | args[1] | semmle.label | args[1] | | test.rs:30:9:30:12 | arg2 | semmle.label | arg2 | -| test.rs:30:16:30:29 | ...::args | semmle.label | ...::args | +| test.rs:30:16:30:31 | ...::args(...) | semmle.label | ...::args(...) | | test.rs:30:16:30:31 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | | test.rs:30:16:30:38 | ... .nth(...) [Some] | semmle.label | ... .nth(...) [Some] | | test.rs:30:16:30:47 | ... .unwrap() | semmle.label | ... .unwrap() | | test.rs:31:9:31:12 | arg3 | semmle.label | arg3 | -| test.rs:31:16:31:32 | ...::args_os | semmle.label | ...::args_os | +| test.rs:31:16:31:34 | ...::args_os(...) | semmle.label | ...::args_os(...) | | test.rs:31:16:31:34 | ...::args_os(...) [element] | semmle.label | ...::args_os(...) [element] | | test.rs:31:16:31:41 | ... .nth(...) [Some] | semmle.label | ... .nth(...) [Some] | | test.rs:31:16:31:50 | ... .unwrap() | semmle.label | ... .unwrap() | | test.rs:32:9:32:12 | arg4 | semmle.label | arg4 | -| test.rs:32:16:32:29 | ...::args | semmle.label | ...::args | +| test.rs:32:16:32:31 | ...::args(...) | semmle.label | ...::args(...) | | test.rs:32:16:32:31 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | | test.rs:32:16:32:38 | ... .nth(...) [Some] | semmle.label | ... .nth(...) [Some] | | test.rs:32:16:32:47 | ... .unwrap() | semmle.label | ... .unwrap() | @@ -143,23 +143,23 @@ nodes | test.rs:37:10:37:13 | arg3 | semmle.label | arg3 | | test.rs:38:10:38:13 | arg4 | semmle.label | arg4 | | test.rs:40:9:40:11 | arg | semmle.label | arg | -| test.rs:40:16:40:29 | ...::args | semmle.label | ...::args | +| test.rs:40:16:40:31 | ...::args(...) | semmle.label | ...::args(...) | | test.rs:40:16:40:31 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | | test.rs:41:14:41:16 | arg | semmle.label | arg | | test.rs:44:9:44:11 | arg | semmle.label | arg | -| test.rs:44:16:44:32 | ...::args_os | semmle.label | ...::args_os | +| test.rs:44:16:44:34 | ...::args_os(...) | semmle.label | ...::args_os(...) | | test.rs:44:16:44:34 | ...::args_os(...) [element] | semmle.label | ...::args_os(...) [element] | | test.rs:45:14:45:16 | arg | semmle.label | arg | | test.rs:50:9:50:11 | dir | semmle.label | dir | -| test.rs:50:15:50:35 | ...::current_dir | semmle.label | ...::current_dir | +| test.rs:50:15:50:37 | ...::current_dir(...) | semmle.label | ...::current_dir(...) | | test.rs:50:15:50:37 | ...::current_dir(...) [Ok] | semmle.label | ...::current_dir(...) [Ok] | | test.rs:50:15:50:54 | ... .expect(...) | semmle.label | ... .expect(...) | | test.rs:51:9:51:11 | exe | semmle.label | exe | -| test.rs:51:15:51:35 | ...::current_exe | semmle.label | ...::current_exe | +| test.rs:51:15:51:37 | ...::current_exe(...) | semmle.label | ...::current_exe(...) | | test.rs:51:15:51:37 | ...::current_exe(...) [Ok] | semmle.label | ...::current_exe(...) [Ok] | | test.rs:51:15:51:54 | ... .expect(...) | semmle.label | ... .expect(...) | | test.rs:52:9:52:12 | home | semmle.label | home | -| test.rs:52:16:52:33 | ...::home_dir | semmle.label | ...::home_dir | +| test.rs:52:16:52:35 | ...::home_dir(...) | semmle.label | ...::home_dir(...) | | test.rs:52:16:52:35 | ...::home_dir(...) [Some] | semmle.label | ...::home_dir(...) [Some] | | test.rs:52:16:52:52 | ... .expect(...) | semmle.label | ... .expect(...) | | test.rs:54:10:54:12 | dir | semmle.label | dir | @@ -168,21 +168,21 @@ nodes subpaths testFailures #select -| test.rs:6:10:6:30 | ...::var(...) | test.rs:6:10:6:22 | ...::var | test.rs:6:10:6:30 | ...::var(...) | $@ | test.rs:6:10:6:22 | ...::var | ...::var | -| test.rs:7:10:7:33 | ...::var_os(...) | test.rs:7:10:7:25 | ...::var_os | test.rs:7:10:7:33 | ...::var_os(...) | $@ | test.rs:7:10:7:25 | ...::var_os | ...::var_os | -| test.rs:12:10:12:13 | var1 | test.rs:9:16:9:28 | ...::var | test.rs:12:10:12:13 | var1 | $@ | test.rs:9:16:9:28 | ...::var | ...::var | -| test.rs:13:10:13:13 | var2 | test.rs:10:16:10:31 | ...::var_os | test.rs:13:10:13:13 | var2 | $@ | test.rs:10:16:10:31 | ...::var_os | ...::var_os | -| test.rs:16:14:16:16 | key | test.rs:15:25:15:38 | ...::vars | test.rs:16:14:16:16 | key | $@ | test.rs:15:25:15:38 | ...::vars | ...::vars | -| test.rs:17:14:17:18 | value | test.rs:15:25:15:38 | ...::vars | test.rs:17:14:17:18 | value | $@ | test.rs:15:25:15:38 | ...::vars | ...::vars | -| test.rs:21:14:21:16 | key | test.rs:20:25:20:41 | ...::vars_os | test.rs:21:14:21:16 | key | $@ | test.rs:20:25:20:41 | ...::vars_os | ...::vars_os | -| test.rs:22:14:22:18 | value | test.rs:20:25:20:41 | ...::vars_os | test.rs:22:14:22:18 | value | $@ | test.rs:20:25:20:41 | ...::vars_os | ...::vars_os | -| test.rs:34:10:34:16 | my_path | test.rs:27:29:27:42 | ...::args | test.rs:34:10:34:16 | my_path | $@ | test.rs:27:29:27:42 | ...::args | ...::args | -| test.rs:35:10:35:13 | arg1 | test.rs:27:29:27:42 | ...::args | test.rs:35:10:35:13 | arg1 | $@ | test.rs:27:29:27:42 | ...::args | ...::args | -| test.rs:36:10:36:13 | arg2 | test.rs:30:16:30:29 | ...::args | test.rs:36:10:36:13 | arg2 | $@ | test.rs:30:16:30:29 | ...::args | ...::args | -| test.rs:37:10:37:13 | arg3 | test.rs:31:16:31:32 | ...::args_os | test.rs:37:10:37:13 | arg3 | $@ | test.rs:31:16:31:32 | ...::args_os | ...::args_os | -| test.rs:38:10:38:13 | arg4 | test.rs:32:16:32:29 | ...::args | test.rs:38:10:38:13 | arg4 | $@ | test.rs:32:16:32:29 | ...::args | ...::args | -| test.rs:41:14:41:16 | arg | test.rs:40:16:40:29 | ...::args | test.rs:41:14:41:16 | arg | $@ | test.rs:40:16:40:29 | ...::args | ...::args | -| test.rs:45:14:45:16 | arg | test.rs:44:16:44:32 | ...::args_os | test.rs:45:14:45:16 | arg | $@ | test.rs:44:16:44:32 | ...::args_os | ...::args_os | -| test.rs:54:10:54:12 | dir | test.rs:50:15:50:35 | ...::current_dir | test.rs:54:10:54:12 | dir | $@ | test.rs:50:15:50:35 | ...::current_dir | ...::current_dir | -| test.rs:55:10:55:12 | exe | test.rs:51:15:51:35 | ...::current_exe | test.rs:55:10:55:12 | exe | $@ | test.rs:51:15:51:35 | ...::current_exe | ...::current_exe | -| test.rs:56:10:56:13 | home | test.rs:52:16:52:33 | ...::home_dir | test.rs:56:10:56:13 | home | $@ | test.rs:52:16:52:33 | ...::home_dir | ...::home_dir | +| test.rs:6:10:6:30 | ...::var(...) | test.rs:6:10:6:30 | ...::var(...) | test.rs:6:10:6:30 | ...::var(...) | $@ | test.rs:6:10:6:30 | ...::var(...) | ...::var(...) | +| test.rs:7:10:7:33 | ...::var_os(...) | test.rs:7:10:7:33 | ...::var_os(...) | test.rs:7:10:7:33 | ...::var_os(...) | $@ | test.rs:7:10:7:33 | ...::var_os(...) | ...::var_os(...) | +| test.rs:12:10:12:13 | var1 | test.rs:9:16:9:36 | ...::var(...) | test.rs:12:10:12:13 | var1 | $@ | test.rs:9:16:9:36 | ...::var(...) | ...::var(...) | +| test.rs:13:10:13:13 | var2 | test.rs:10:16:10:39 | ...::var_os(...) | test.rs:13:10:13:13 | var2 | $@ | test.rs:10:16:10:39 | ...::var_os(...) | ...::var_os(...) | +| test.rs:16:14:16:16 | key | test.rs:15:25:15:40 | ...::vars(...) | test.rs:16:14:16:16 | key | $@ | test.rs:15:25:15:40 | ...::vars(...) | ...::vars(...) | +| test.rs:17:14:17:18 | value | test.rs:15:25:15:40 | ...::vars(...) | test.rs:17:14:17:18 | value | $@ | test.rs:15:25:15:40 | ...::vars(...) | ...::vars(...) | +| test.rs:21:14:21:16 | key | test.rs:20:25:20:43 | ...::vars_os(...) | test.rs:21:14:21:16 | key | $@ | test.rs:20:25:20:43 | ...::vars_os(...) | ...::vars_os(...) | +| test.rs:22:14:22:18 | value | test.rs:20:25:20:43 | ...::vars_os(...) | test.rs:22:14:22:18 | value | $@ | test.rs:20:25:20:43 | ...::vars_os(...) | ...::vars_os(...) | +| test.rs:34:10:34:16 | my_path | test.rs:27:29:27:44 | ...::args(...) | test.rs:34:10:34:16 | my_path | $@ | test.rs:27:29:27:44 | ...::args(...) | ...::args(...) | +| test.rs:35:10:35:13 | arg1 | test.rs:27:29:27:44 | ...::args(...) | test.rs:35:10:35:13 | arg1 | $@ | test.rs:27:29:27:44 | ...::args(...) | ...::args(...) | +| test.rs:36:10:36:13 | arg2 | test.rs:30:16:30:31 | ...::args(...) | test.rs:36:10:36:13 | arg2 | $@ | test.rs:30:16:30:31 | ...::args(...) | ...::args(...) | +| test.rs:37:10:37:13 | arg3 | test.rs:31:16:31:34 | ...::args_os(...) | test.rs:37:10:37:13 | arg3 | $@ | test.rs:31:16:31:34 | ...::args_os(...) | ...::args_os(...) | +| test.rs:38:10:38:13 | arg4 | test.rs:32:16:32:31 | ...::args(...) | test.rs:38:10:38:13 | arg4 | $@ | test.rs:32:16:32:31 | ...::args(...) | ...::args(...) | +| test.rs:41:14:41:16 | arg | test.rs:40:16:40:31 | ...::args(...) | test.rs:41:14:41:16 | arg | $@ | test.rs:40:16:40:31 | ...::args(...) | ...::args(...) | +| test.rs:45:14:45:16 | arg | test.rs:44:16:44:34 | ...::args_os(...) | test.rs:45:14:45:16 | arg | $@ | test.rs:44:16:44:34 | ...::args_os(...) | ...::args_os(...) | +| test.rs:54:10:54:12 | dir | test.rs:50:15:50:37 | ...::current_dir(...) | test.rs:54:10:54:12 | dir | $@ | test.rs:50:15:50:37 | ...::current_dir(...) | ...::current_dir(...) | +| test.rs:55:10:55:12 | exe | test.rs:51:15:51:37 | ...::current_exe(...) | test.rs:55:10:55:12 | exe | $@ | test.rs:51:15:51:37 | ...::current_exe(...) | ...::current_exe(...) | +| test.rs:56:10:56:13 | home | test.rs:52:16:52:35 | ...::home_dir(...) | test.rs:56:10:56:13 | home | $@ | test.rs:52:16:52:35 | ...::home_dir(...) | ...::home_dir(...) | diff --git a/rust/ql/test/library-tests/dataflow/sources/env/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/env/TaintSources.expected index 16f43eff9147..f686e4f83a90 100644 --- a/rust/ql/test/library-tests/dataflow/sources/env/TaintSources.expected +++ b/rust/ql/test/library-tests/dataflow/sources/env/TaintSources.expected @@ -1,15 +1,15 @@ -| test.rs:6:10:6:22 | ...::var | Flow source 'EnvironmentSource' of type environment (DEFAULT). | -| test.rs:7:10:7:25 | ...::var_os | Flow source 'EnvironmentSource' of type environment (DEFAULT). | -| test.rs:9:16:9:28 | ...::var | Flow source 'EnvironmentSource' of type environment (DEFAULT). | -| test.rs:10:16:10:31 | ...::var_os | Flow source 'EnvironmentSource' of type environment (DEFAULT). | -| test.rs:15:25:15:38 | ...::vars | Flow source 'EnvironmentSource' of type environment (DEFAULT). | -| test.rs:20:25:20:41 | ...::vars_os | Flow source 'EnvironmentSource' of type environment (DEFAULT). | -| test.rs:27:29:27:42 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | -| test.rs:30:16:30:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | -| test.rs:31:16:31:32 | ...::args_os | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | -| test.rs:32:16:32:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | -| test.rs:40:16:40:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | -| test.rs:44:16:44:32 | ...::args_os | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | -| test.rs:50:15:50:35 | ...::current_dir | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | -| test.rs:51:15:51:35 | ...::current_exe | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | -| test.rs:52:16:52:33 | ...::home_dir | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:6:10:6:30 | ...::var(...) | Flow source 'EnvironmentSource' of type environment (DEFAULT). | +| test.rs:7:10:7:33 | ...::var_os(...) | Flow source 'EnvironmentSource' of type environment (DEFAULT). | +| test.rs:9:16:9:36 | ...::var(...) | Flow source 'EnvironmentSource' of type environment (DEFAULT). | +| test.rs:10:16:10:39 | ...::var_os(...) | Flow source 'EnvironmentSource' of type environment (DEFAULT). | +| test.rs:15:25:15:40 | ...::vars(...) | Flow source 'EnvironmentSource' of type environment (DEFAULT). | +| test.rs:20:25:20:43 | ...::vars_os(...) | Flow source 'EnvironmentSource' of type environment (DEFAULT). | +| test.rs:27:29:27:44 | ...::args(...) | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:30:16:30:31 | ...::args(...) | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:31:16:31:34 | ...::args_os(...) | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:32:16:32:31 | ...::args(...) | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:40:16:40:31 | ...::args(...) | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:44:16:44:34 | ...::args_os(...) | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:50:15:50:37 | ...::current_dir(...) | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:51:15:51:37 | ...::current_exe(...) | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:52:16:52:35 | ...::home_dir(...) | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | diff --git a/rust/ql/test/library-tests/dataflow/sources/file/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/file/InlineFlow.expected index 27d884fe565b..dbfcd3ab6ea6 100644 --- a/rust/ql/test/library-tests/dataflow/sources/file/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/file/InlineFlow.expected @@ -47,15 +47,15 @@ models | 46 | Summary: ::into_os_string; Argument[self].Field[std::path::PathBuf::inner]; ReturnValue; value | edges | test.rs:12:13:12:18 | buffer | test.rs:13:14:13:19 | buffer | provenance | | -| test.rs:12:31:12:43 | ...::read | test.rs:12:31:12:55 | ...::read(...) [Ok] | provenance | Src:MaD:11 | +| test.rs:12:31:12:55 | ...::read(...) | test.rs:12:31:12:55 | ...::read(...) [Ok] | provenance | Src:MaD:11 | | test.rs:12:31:12:55 | ...::read(...) [Ok] | test.rs:12:31:12:56 | TryExpr | provenance | | | test.rs:12:31:12:56 | TryExpr | test.rs:12:13:12:18 | buffer | provenance | | | test.rs:17:13:17:18 | buffer | test.rs:18:14:18:19 | buffer | provenance | | -| test.rs:17:31:17:38 | ...::read | test.rs:17:31:17:50 | ...::read(...) [Ok] | provenance | Src:MaD:11 | +| test.rs:17:31:17:50 | ...::read(...) | test.rs:17:31:17:50 | ...::read(...) [Ok] | provenance | Src:MaD:11 | | test.rs:17:31:17:50 | ...::read(...) [Ok] | test.rs:17:31:17:51 | TryExpr | provenance | | | test.rs:17:31:17:51 | TryExpr | test.rs:17:13:17:18 | buffer | provenance | | | test.rs:22:13:22:18 | buffer | test.rs:23:14:23:19 | buffer | provenance | | -| test.rs:22:22:22:39 | ...::read_to_string | test.rs:22:22:22:51 | ...::read_to_string(...) [Ok] | provenance | Src:MaD:13 | +| test.rs:22:22:22:51 | ...::read_to_string(...) | test.rs:22:22:22:51 | ...::read_to_string(...) [Ok] | provenance | Src:MaD:13 | | test.rs:22:22:22:51 | ...::read_to_string(...) [Ok] | test.rs:22:22:22:52 | TryExpr | provenance | | | test.rs:22:22:22:52 | TryExpr | test.rs:22:13:22:18 | buffer | provenance | | | test.rs:30:13:30:16 | path | test.rs:31:14:31:17 | path | provenance | | @@ -70,8 +70,7 @@ edges | test.rs:30:13:30:16 | path | test.rs:40:14:40:17 | path | provenance | | | test.rs:30:13:30:16 | path | test.rs:41:14:41:17 | path | provenance | | | test.rs:30:13:30:16 | path | test.rs:42:14:42:17 | path | provenance | | -| test.rs:30:20:30:27 | e.path() | test.rs:30:13:30:16 | path | provenance | | -| test.rs:30:22:30:25 | path | test.rs:30:20:30:27 | e.path() | provenance | Src:MaD:4 MaD:4 | +| test.rs:30:20:30:27 | e.path() | test.rs:30:13:30:16 | path | provenance | Src:MaD:4 MaD:4 | | test.rs:31:14:31:17 | path | test.rs:31:14:31:25 | path.clone() | provenance | MaD:18 | | test.rs:32:14:32:17 | path | test.rs:32:14:32:25 | path.clone() | provenance | MaD:18 | | test.rs:32:14:32:25 | path.clone() | test.rs:32:14:32:35 | ... .as_path() | provenance | MaD:44 | @@ -98,8 +97,7 @@ edges | test.rs:44:13:44:21 | file_name | test.rs:48:14:48:22 | file_name | provenance | | | test.rs:44:13:44:21 | file_name | test.rs:49:14:49:22 | file_name | provenance | | | test.rs:44:13:44:21 | file_name | test.rs:50:14:50:22 | file_name | provenance | | -| test.rs:44:25:44:37 | e.file_name() | test.rs:44:13:44:21 | file_name | provenance | | -| test.rs:44:27:44:35 | file_name | test.rs:44:25:44:37 | e.file_name() | provenance | Src:MaD:3 MaD:3 | +| test.rs:44:25:44:37 | e.file_name() | test.rs:44:13:44:21 | file_name | provenance | Src:MaD:3 MaD:3 | | test.rs:45:14:45:22 | file_name | test.rs:45:14:45:30 | file_name.clone() | provenance | MaD:18 | | test.rs:46:14:46:22 | file_name | test.rs:46:14:46:30 | file_name.clone() | provenance | MaD:18 | | test.rs:46:14:46:30 | file_name.clone() | test.rs:46:14:46:44 | ... .into_string() [Ok, String] | provenance | MaD:39 | @@ -111,32 +109,30 @@ edges | test.rs:49:14:49:22 | file_name | test.rs:49:14:49:30 | file_name.clone() | provenance | MaD:18 | | test.rs:49:14:49:30 | file_name.clone() | test.rs:49:14:49:49 | ... .as_encoded_bytes() | provenance | MaD:38 | | test.rs:68:13:68:18 | target | test.rs:69:14:69:19 | target | provenance | | -| test.rs:68:22:68:34 | ...::read_link | test.rs:68:22:68:49 | ...::read_link(...) [Ok] | provenance | Src:MaD:12 | +| test.rs:68:22:68:49 | ...::read_link(...) | test.rs:68:22:68:49 | ...::read_link(...) [Ok] | provenance | Src:MaD:12 | | test.rs:68:22:68:49 | ...::read_link(...) [Ok] | test.rs:68:22:68:50 | TryExpr | provenance | | | test.rs:68:22:68:50 | TryExpr | test.rs:68:13:68:18 | target | provenance | | | test.rs:77:13:77:18 | buffer | test.rs:78:14:78:19 | buffer | provenance | | -| test.rs:77:31:77:45 | ...::read | test.rs:77:31:77:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:14 | +| test.rs:77:31:77:57 | ...::read(...) | test.rs:77:31:77:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:14 | | test.rs:77:31:77:57 | ...::read(...) [future, Ok] | test.rs:77:31:77:63 | await ... [Ok] | provenance | | | test.rs:77:31:77:63 | await ... [Ok] | test.rs:77:31:77:64 | TryExpr | provenance | | | test.rs:77:31:77:64 | TryExpr | test.rs:77:13:77:18 | buffer | provenance | | | test.rs:82:13:82:18 | buffer | test.rs:83:14:83:19 | buffer | provenance | | -| test.rs:82:31:82:45 | ...::read | test.rs:82:31:82:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:14 | +| test.rs:82:31:82:57 | ...::read(...) | test.rs:82:31:82:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:14 | | test.rs:82:31:82:57 | ...::read(...) [future, Ok] | test.rs:82:31:82:63 | await ... [Ok] | provenance | | | test.rs:82:31:82:63 | await ... [Ok] | test.rs:82:31:82:64 | TryExpr | provenance | | | test.rs:82:31:82:64 | TryExpr | test.rs:82:13:82:18 | buffer | provenance | | | test.rs:87:13:87:18 | buffer | test.rs:88:14:88:19 | buffer | provenance | | -| test.rs:87:22:87:46 | ...::read_to_string | test.rs:87:22:87:58 | ...::read_to_string(...) [future, Ok] | provenance | Src:MaD:16 | +| test.rs:87:22:87:58 | ...::read_to_string(...) | test.rs:87:22:87:58 | ...::read_to_string(...) [future, Ok] | provenance | Src:MaD:16 | | test.rs:87:22:87:58 | ...::read_to_string(...) [future, Ok] | test.rs:87:22:87:64 | await ... [Ok] | provenance | | | test.rs:87:22:87:64 | await ... [Ok] | test.rs:87:22:87:65 | TryExpr | provenance | | | test.rs:87:22:87:65 | TryExpr | test.rs:87:13:87:18 | buffer | provenance | | | test.rs:93:13:93:16 | path | test.rs:95:14:95:17 | path | provenance | | -| test.rs:93:20:93:31 | entry.path() | test.rs:93:13:93:16 | path | provenance | | -| test.rs:93:26:93:29 | path | test.rs:93:20:93:31 | entry.path() | provenance | Src:MaD:10 MaD:10 | +| test.rs:93:20:93:31 | entry.path() | test.rs:93:13:93:16 | path | provenance | Src:MaD:10 MaD:10 | | test.rs:94:13:94:21 | file_name | test.rs:96:14:96:22 | file_name | provenance | | -| test.rs:94:25:94:41 | entry.file_name() | test.rs:94:13:94:21 | file_name | provenance | | -| test.rs:94:31:94:39 | file_name | test.rs:94:25:94:41 | entry.file_name() | provenance | Src:MaD:9 MaD:9 | +| test.rs:94:25:94:41 | entry.file_name() | test.rs:94:13:94:21 | file_name | provenance | Src:MaD:9 MaD:9 | | test.rs:100:13:100:18 | target | test.rs:101:14:101:19 | target | provenance | | -| test.rs:100:22:100:41 | ...::read_link | test.rs:100:22:100:56 | ...::read_link(...) [future, Ok] | provenance | Src:MaD:15 | +| test.rs:100:22:100:56 | ...::read_link(...) | test.rs:100:22:100:56 | ...::read_link(...) [future, Ok] | provenance | Src:MaD:15 | | test.rs:100:22:100:56 | ...::read_link(...) [future, Ok] | test.rs:100:22:100:62 | await ... [Ok] | provenance | | | test.rs:100:22:100:62 | await ... [Ok] | test.rs:100:22:100:63 | TryExpr | provenance | | | test.rs:100:22:100:63 | TryExpr | test.rs:100:13:100:18 | target | provenance | | @@ -145,7 +141,7 @@ edges | test.rs:110:9:110:16 | mut file | test.rs:126:22:126:25 | file | provenance | | | test.rs:110:9:110:16 | mut file | test.rs:132:9:132:12 | file | provenance | | | test.rs:110:9:110:16 | mut file | test.rs:136:17:136:20 | file | provenance | | -| test.rs:110:20:110:38 | ...::open | test.rs:110:20:110:50 | ...::open(...) [Ok] | provenance | Src:MaD:5 | +| test.rs:110:20:110:50 | ...::open(...) | test.rs:110:20:110:50 | ...::open(...) [Ok] | provenance | Src:MaD:5 | | test.rs:110:20:110:50 | ...::open(...) [Ok] | test.rs:110:20:110:51 | TryExpr | provenance | | | test.rs:110:20:110:51 | TryExpr | test.rs:110:9:110:16 | mut file | provenance | | | test.rs:114:22:114:25 | file | test.rs:114:32:114:42 | [post] &mut buffer [&ref] | provenance | MaD:22 | @@ -167,35 +163,35 @@ edges | test.rs:136:17:136:20 | file | test.rs:136:17:136:28 | file.bytes() | provenance | MaD:19 | | test.rs:136:17:136:28 | file.bytes() | test.rs:137:14:137:17 | byte | provenance | | | test.rs:143:13:143:18 | mut f1 | test.rs:145:22:145:23 | f1 | provenance | | +| test.rs:143:22:143:63 | ... .open(...) | test.rs:143:22:143:63 | ... .open(...) [Ok] | provenance | Src:MaD:6 | | test.rs:143:22:143:63 | ... .open(...) [Ok] | test.rs:143:22:143:72 | ... .unwrap() | provenance | MaD:37 | | test.rs:143:22:143:72 | ... .unwrap() | test.rs:143:13:143:18 | mut f1 | provenance | | -| test.rs:143:50:143:53 | open | test.rs:143:22:143:63 | ... .open(...) [Ok] | provenance | Src:MaD:6 | | test.rs:145:22:145:23 | f1 | test.rs:145:30:145:40 | [post] &mut buffer [&ref] | provenance | MaD:22 | | test.rs:145:30:145:40 | [post] &mut buffer [&ref] | test.rs:145:35:145:40 | [post] buffer | provenance | | | test.rs:145:35:145:40 | [post] buffer | test.rs:146:15:146:20 | buffer | provenance | | | test.rs:146:15:146:20 | buffer | test.rs:146:14:146:20 | &buffer | provenance | | | test.rs:150:13:150:18 | mut f2 | test.rs:155:22:155:23 | f2 | provenance | | +| test.rs:150:22:152:27 | ... .open(...) | test.rs:150:22:152:27 | ... .open(...) [Ok] | provenance | Src:MaD:6 | | test.rs:150:22:152:27 | ... .open(...) [Ok] | test.rs:150:22:153:21 | ... .unwrap() | provenance | MaD:37 | | test.rs:150:22:153:21 | ... .unwrap() | test.rs:150:13:150:18 | mut f2 | provenance | | -| test.rs:152:14:152:17 | open | test.rs:150:22:152:27 | ... .open(...) [Ok] | provenance | Src:MaD:6 | | test.rs:155:22:155:23 | f2 | test.rs:155:30:155:40 | [post] &mut buffer [&ref] | provenance | MaD:22 | | test.rs:155:30:155:40 | [post] &mut buffer [&ref] | test.rs:155:35:155:40 | [post] buffer | provenance | | | test.rs:155:35:155:40 | [post] buffer | test.rs:156:15:156:20 | buffer | provenance | | | test.rs:156:15:156:20 | buffer | test.rs:156:14:156:20 | &buffer | provenance | | | test.rs:160:13:160:18 | mut f3 | test.rs:168:22:168:23 | f3 | provenance | | +| test.rs:160:22:165:27 | ... .open(...) | test.rs:160:22:165:27 | ... .open(...) [Ok] | provenance | Src:MaD:6 | | test.rs:160:22:165:27 | ... .open(...) [Ok] | test.rs:160:22:166:21 | ... .unwrap() | provenance | MaD:37 | | test.rs:160:22:166:21 | ... .unwrap() | test.rs:160:13:160:18 | mut f3 | provenance | | -| test.rs:165:14:165:17 | open | test.rs:160:22:165:27 | ... .open(...) [Ok] | provenance | Src:MaD:6 | | test.rs:168:22:168:23 | f3 | test.rs:168:30:168:40 | [post] &mut buffer [&ref] | provenance | MaD:22 | | test.rs:168:30:168:40 | [post] &mut buffer [&ref] | test.rs:168:35:168:40 | [post] buffer | provenance | | | test.rs:168:35:168:40 | [post] buffer | test.rs:169:15:169:20 | buffer | provenance | | | test.rs:169:15:169:20 | buffer | test.rs:169:14:169:20 | &buffer | provenance | | | test.rs:176:13:176:17 | file1 | test.rs:178:26:178:30 | file1 | provenance | | -| test.rs:176:21:176:39 | ...::open | test.rs:176:21:176:51 | ...::open(...) [Ok] | provenance | Src:MaD:5 | +| test.rs:176:21:176:51 | ...::open(...) | test.rs:176:21:176:51 | ...::open(...) [Ok] | provenance | Src:MaD:5 | | test.rs:176:21:176:51 | ...::open(...) [Ok] | test.rs:176:21:176:52 | TryExpr | provenance | | | test.rs:176:21:176:52 | TryExpr | test.rs:176:13:176:17 | file1 | provenance | | | test.rs:177:13:177:17 | file2 | test.rs:178:38:178:42 | file2 | provenance | | -| test.rs:177:21:177:39 | ...::open | test.rs:177:21:177:59 | ...::open(...) [Ok] | provenance | Src:MaD:5 | +| test.rs:177:21:177:59 | ...::open(...) | test.rs:177:21:177:59 | ...::open(...) [Ok] | provenance | Src:MaD:5 | | test.rs:177:21:177:59 | ...::open(...) [Ok] | test.rs:177:21:177:60 | TryExpr | provenance | | | test.rs:177:21:177:60 | TryExpr | test.rs:177:13:177:17 | file2 | provenance | | | test.rs:178:13:178:22 | mut reader | test.rs:179:9:179:14 | reader | provenance | | @@ -207,7 +203,7 @@ edges | test.rs:179:36:179:41 | [post] buffer | test.rs:180:15:180:20 | buffer | provenance | | | test.rs:180:15:180:20 | buffer | test.rs:180:14:180:20 | &buffer | provenance | | | test.rs:185:13:185:17 | file1 | test.rs:186:26:186:30 | file1 | provenance | | -| test.rs:185:21:185:39 | ...::open | test.rs:185:21:185:51 | ...::open(...) [Ok] | provenance | Src:MaD:5 | +| test.rs:185:21:185:51 | ...::open(...) | test.rs:185:21:185:51 | ...::open(...) [Ok] | provenance | Src:MaD:5 | | test.rs:185:21:185:51 | ...::open(...) [Ok] | test.rs:185:21:185:52 | TryExpr | provenance | | | test.rs:185:21:185:52 | TryExpr | test.rs:185:13:185:17 | file1 | provenance | | | test.rs:186:13:186:22 | mut reader | test.rs:187:9:187:14 | reader | provenance | | @@ -226,7 +222,7 @@ edges | test.rs:197:9:197:16 | mut file | test.rs:226:18:226:21 | file | provenance | | | test.rs:197:9:197:16 | mut file | test.rs:227:18:227:21 | file | provenance | | | test.rs:197:9:197:16 | mut file | test.rs:236:9:236:12 | file | provenance | | -| test.rs:197:20:197:40 | ...::open | test.rs:197:20:197:52 | ...::open(...) [future, Ok] | provenance | Src:MaD:7 | +| test.rs:197:20:197:52 | ...::open(...) | test.rs:197:20:197:52 | ...::open(...) [future, Ok] | provenance | Src:MaD:7 | | test.rs:197:20:197:52 | ...::open(...) [future, Ok] | test.rs:197:20:197:58 | await ... [Ok] | provenance | | | test.rs:197:20:197:58 | await ... [Ok] | test.rs:197:20:197:59 | TryExpr | provenance | | | test.rs:197:20:197:59 | TryExpr | test.rs:197:9:197:16 | mut file | provenance | | @@ -271,16 +267,16 @@ edges | test.rs:236:28:236:33 | [post] buffer | test.rs:237:15:237:20 | buffer | provenance | | | test.rs:237:15:237:20 | buffer | test.rs:237:14:237:20 | &buffer | provenance | | | test.rs:243:13:243:18 | mut f1 | test.rs:245:22:245:23 | f1 | provenance | | +| test.rs:243:22:243:65 | ... .open(...) | test.rs:243:22:243:65 | ... .open(...) [future, Ok] | provenance | Src:MaD:8 | | test.rs:243:22:243:65 | ... .open(...) [future, Ok] | test.rs:243:22:243:71 | await ... [Ok] | provenance | | | test.rs:243:22:243:71 | await ... [Ok] | test.rs:243:22:243:72 | TryExpr | provenance | | | test.rs:243:22:243:72 | TryExpr | test.rs:243:13:243:18 | mut f1 | provenance | | -| test.rs:243:52:243:55 | open | test.rs:243:22:243:65 | ... .open(...) [future, Ok] | provenance | Src:MaD:8 | | test.rs:245:22:245:23 | f1 | test.rs:245:30:245:40 | [post] &mut buffer [&ref] | provenance | MaD:26 | | test.rs:245:30:245:40 | [post] &mut buffer [&ref] | test.rs:245:35:245:40 | [post] buffer | provenance | | | test.rs:245:35:245:40 | [post] buffer | test.rs:246:15:246:20 | buffer | provenance | | | test.rs:246:15:246:20 | buffer | test.rs:246:14:246:20 | &buffer | provenance | | | test.rs:274:9:274:16 | mut file | test.rs:278:22:278:25 | file | provenance | | -| test.rs:274:20:274:44 | ...::open | test.rs:274:20:274:56 | ...::open(...) [future, Ok] | provenance | Src:MaD:1 | +| test.rs:274:20:274:56 | ...::open(...) | test.rs:274:20:274:56 | ...::open(...) [future, Ok] | provenance | Src:MaD:1 | | test.rs:274:20:274:56 | ...::open(...) [future, Ok] | test.rs:274:20:274:62 | await ... [Ok] | provenance | | | test.rs:274:20:274:62 | await ... [Ok] | test.rs:274:20:274:63 | TryExpr | provenance | | | test.rs:274:20:274:63 | TryExpr | test.rs:274:9:274:16 | mut file | provenance | | @@ -289,33 +285,32 @@ edges | test.rs:278:37:278:42 | [post] buffer | test.rs:279:15:279:20 | buffer | provenance | | | test.rs:279:15:279:20 | buffer | test.rs:279:14:279:20 | &buffer | provenance | | | test.rs:285:13:285:18 | mut f1 | test.rs:287:22:287:23 | f1 | provenance | | +| test.rs:285:22:285:69 | ... .open(...) | test.rs:285:22:285:69 | ... .open(...) [future, Ok] | provenance | Src:MaD:2 | | test.rs:285:22:285:69 | ... .open(...) [future, Ok] | test.rs:285:22:285:75 | await ... [Ok] | provenance | | | test.rs:285:22:285:75 | await ... [Ok] | test.rs:285:22:285:76 | TryExpr | provenance | | | test.rs:285:22:285:76 | TryExpr | test.rs:285:13:285:18 | mut f1 | provenance | | -| test.rs:285:56:285:59 | open | test.rs:285:22:285:69 | ... .open(...) [future, Ok] | provenance | Src:MaD:2 | | test.rs:287:22:287:23 | f1 | test.rs:287:30:287:40 | [post] &mut buffer [&ref] | provenance | MaD:17 | | test.rs:287:30:287:40 | [post] &mut buffer [&ref] | test.rs:287:35:287:40 | [post] buffer | provenance | | | test.rs:287:35:287:40 | [post] buffer | test.rs:288:15:288:20 | buffer | provenance | | | test.rs:288:15:288:20 | buffer | test.rs:288:14:288:20 | &buffer | provenance | | nodes | test.rs:12:13:12:18 | buffer | semmle.label | buffer | -| test.rs:12:31:12:43 | ...::read | semmle.label | ...::read | +| test.rs:12:31:12:55 | ...::read(...) | semmle.label | ...::read(...) | | test.rs:12:31:12:55 | ...::read(...) [Ok] | semmle.label | ...::read(...) [Ok] | | test.rs:12:31:12:56 | TryExpr | semmle.label | TryExpr | | test.rs:13:14:13:19 | buffer | semmle.label | buffer | | test.rs:17:13:17:18 | buffer | semmle.label | buffer | -| test.rs:17:31:17:38 | ...::read | semmle.label | ...::read | +| test.rs:17:31:17:50 | ...::read(...) | semmle.label | ...::read(...) | | test.rs:17:31:17:50 | ...::read(...) [Ok] | semmle.label | ...::read(...) [Ok] | | test.rs:17:31:17:51 | TryExpr | semmle.label | TryExpr | | test.rs:18:14:18:19 | buffer | semmle.label | buffer | | test.rs:22:13:22:18 | buffer | semmle.label | buffer | -| test.rs:22:22:22:39 | ...::read_to_string | semmle.label | ...::read_to_string | +| test.rs:22:22:22:51 | ...::read_to_string(...) | semmle.label | ...::read_to_string(...) | | test.rs:22:22:22:51 | ...::read_to_string(...) [Ok] | semmle.label | ...::read_to_string(...) [Ok] | | test.rs:22:22:22:52 | TryExpr | semmle.label | TryExpr | | test.rs:23:14:23:19 | buffer | semmle.label | buffer | | test.rs:30:13:30:16 | path | semmle.label | path | | test.rs:30:20:30:27 | e.path() | semmle.label | e.path() | -| test.rs:30:22:30:25 | path | semmle.label | path | | test.rs:31:14:31:17 | path | semmle.label | path | | test.rs:31:14:31:25 | path.clone() | semmle.label | path.clone() | | test.rs:32:14:32:17 | path | semmle.label | path | @@ -350,7 +345,6 @@ nodes | test.rs:42:14:42:17 | path | semmle.label | path | | test.rs:44:13:44:21 | file_name | semmle.label | file_name | | test.rs:44:25:44:37 | e.file_name() | semmle.label | e.file_name() | -| test.rs:44:27:44:35 | file_name | semmle.label | file_name | | test.rs:45:14:45:22 | file_name | semmle.label | file_name | | test.rs:45:14:45:30 | file_name.clone() | semmle.label | file_name.clone() | | test.rs:46:14:46:22 | file_name | semmle.label | file_name | @@ -368,44 +362,42 @@ nodes | test.rs:49:14:49:49 | ... .as_encoded_bytes() | semmle.label | ... .as_encoded_bytes() | | test.rs:50:14:50:22 | file_name | semmle.label | file_name | | test.rs:68:13:68:18 | target | semmle.label | target | -| test.rs:68:22:68:34 | ...::read_link | semmle.label | ...::read_link | +| test.rs:68:22:68:49 | ...::read_link(...) | semmle.label | ...::read_link(...) | | test.rs:68:22:68:49 | ...::read_link(...) [Ok] | semmle.label | ...::read_link(...) [Ok] | | test.rs:68:22:68:50 | TryExpr | semmle.label | TryExpr | | test.rs:69:14:69:19 | target | semmle.label | target | | test.rs:77:13:77:18 | buffer | semmle.label | buffer | -| test.rs:77:31:77:45 | ...::read | semmle.label | ...::read | +| test.rs:77:31:77:57 | ...::read(...) | semmle.label | ...::read(...) | | test.rs:77:31:77:57 | ...::read(...) [future, Ok] | semmle.label | ...::read(...) [future, Ok] | | test.rs:77:31:77:63 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:77:31:77:64 | TryExpr | semmle.label | TryExpr | | test.rs:78:14:78:19 | buffer | semmle.label | buffer | | test.rs:82:13:82:18 | buffer | semmle.label | buffer | -| test.rs:82:31:82:45 | ...::read | semmle.label | ...::read | +| test.rs:82:31:82:57 | ...::read(...) | semmle.label | ...::read(...) | | test.rs:82:31:82:57 | ...::read(...) [future, Ok] | semmle.label | ...::read(...) [future, Ok] | | test.rs:82:31:82:63 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:82:31:82:64 | TryExpr | semmle.label | TryExpr | | test.rs:83:14:83:19 | buffer | semmle.label | buffer | | test.rs:87:13:87:18 | buffer | semmle.label | buffer | -| test.rs:87:22:87:46 | ...::read_to_string | semmle.label | ...::read_to_string | +| test.rs:87:22:87:58 | ...::read_to_string(...) | semmle.label | ...::read_to_string(...) | | test.rs:87:22:87:58 | ...::read_to_string(...) [future, Ok] | semmle.label | ...::read_to_string(...) [future, Ok] | | test.rs:87:22:87:64 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:87:22:87:65 | TryExpr | semmle.label | TryExpr | | test.rs:88:14:88:19 | buffer | semmle.label | buffer | | test.rs:93:13:93:16 | path | semmle.label | path | | test.rs:93:20:93:31 | entry.path() | semmle.label | entry.path() | -| test.rs:93:26:93:29 | path | semmle.label | path | | test.rs:94:13:94:21 | file_name | semmle.label | file_name | | test.rs:94:25:94:41 | entry.file_name() | semmle.label | entry.file_name() | -| test.rs:94:31:94:39 | file_name | semmle.label | file_name | | test.rs:95:14:95:17 | path | semmle.label | path | | test.rs:96:14:96:22 | file_name | semmle.label | file_name | | test.rs:100:13:100:18 | target | semmle.label | target | -| test.rs:100:22:100:41 | ...::read_link | semmle.label | ...::read_link | +| test.rs:100:22:100:56 | ...::read_link(...) | semmle.label | ...::read_link(...) | | test.rs:100:22:100:56 | ...::read_link(...) [future, Ok] | semmle.label | ...::read_link(...) [future, Ok] | | test.rs:100:22:100:62 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:100:22:100:63 | TryExpr | semmle.label | TryExpr | | test.rs:101:14:101:19 | target | semmle.label | target | | test.rs:110:9:110:16 | mut file | semmle.label | mut file | -| test.rs:110:20:110:38 | ...::open | semmle.label | ...::open | +| test.rs:110:20:110:50 | ...::open(...) | semmle.label | ...::open(...) | | test.rs:110:20:110:50 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] | | test.rs:110:20:110:51 | TryExpr | semmle.label | TryExpr | | test.rs:114:22:114:25 | file | semmle.label | file | @@ -432,38 +424,38 @@ nodes | test.rs:136:17:136:28 | file.bytes() | semmle.label | file.bytes() | | test.rs:137:14:137:17 | byte | semmle.label | byte | | test.rs:143:13:143:18 | mut f1 | semmle.label | mut f1 | +| test.rs:143:22:143:63 | ... .open(...) | semmle.label | ... .open(...) | | test.rs:143:22:143:63 | ... .open(...) [Ok] | semmle.label | ... .open(...) [Ok] | | test.rs:143:22:143:72 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:143:50:143:53 | open | semmle.label | open | | test.rs:145:22:145:23 | f1 | semmle.label | f1 | | test.rs:145:30:145:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:145:35:145:40 | [post] buffer | semmle.label | [post] buffer | | test.rs:146:14:146:20 | &buffer | semmle.label | &buffer | | test.rs:146:15:146:20 | buffer | semmle.label | buffer | | test.rs:150:13:150:18 | mut f2 | semmle.label | mut f2 | +| test.rs:150:22:152:27 | ... .open(...) | semmle.label | ... .open(...) | | test.rs:150:22:152:27 | ... .open(...) [Ok] | semmle.label | ... .open(...) [Ok] | | test.rs:150:22:153:21 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:152:14:152:17 | open | semmle.label | open | | test.rs:155:22:155:23 | f2 | semmle.label | f2 | | test.rs:155:30:155:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:155:35:155:40 | [post] buffer | semmle.label | [post] buffer | | test.rs:156:14:156:20 | &buffer | semmle.label | &buffer | | test.rs:156:15:156:20 | buffer | semmle.label | buffer | | test.rs:160:13:160:18 | mut f3 | semmle.label | mut f3 | +| test.rs:160:22:165:27 | ... .open(...) | semmle.label | ... .open(...) | | test.rs:160:22:165:27 | ... .open(...) [Ok] | semmle.label | ... .open(...) [Ok] | | test.rs:160:22:166:21 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:165:14:165:17 | open | semmle.label | open | | test.rs:168:22:168:23 | f3 | semmle.label | f3 | | test.rs:168:30:168:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:168:35:168:40 | [post] buffer | semmle.label | [post] buffer | | test.rs:169:14:169:20 | &buffer | semmle.label | &buffer | | test.rs:169:15:169:20 | buffer | semmle.label | buffer | | test.rs:176:13:176:17 | file1 | semmle.label | file1 | -| test.rs:176:21:176:39 | ...::open | semmle.label | ...::open | +| test.rs:176:21:176:51 | ...::open(...) | semmle.label | ...::open(...) | | test.rs:176:21:176:51 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] | | test.rs:176:21:176:52 | TryExpr | semmle.label | TryExpr | | test.rs:177:13:177:17 | file2 | semmle.label | file2 | -| test.rs:177:21:177:39 | ...::open | semmle.label | ...::open | +| test.rs:177:21:177:59 | ...::open(...) | semmle.label | ...::open(...) | | test.rs:177:21:177:59 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] | | test.rs:177:21:177:60 | TryExpr | semmle.label | TryExpr | | test.rs:178:13:178:22 | mut reader | semmle.label | mut reader | @@ -476,7 +468,7 @@ nodes | test.rs:180:14:180:20 | &buffer | semmle.label | &buffer | | test.rs:180:15:180:20 | buffer | semmle.label | buffer | | test.rs:185:13:185:17 | file1 | semmle.label | file1 | -| test.rs:185:21:185:39 | ...::open | semmle.label | ...::open | +| test.rs:185:21:185:51 | ...::open(...) | semmle.label | ...::open(...) | | test.rs:185:21:185:51 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] | | test.rs:185:21:185:52 | TryExpr | semmle.label | TryExpr | | test.rs:186:13:186:22 | mut reader | semmle.label | mut reader | @@ -488,7 +480,7 @@ nodes | test.rs:188:14:188:20 | &buffer | semmle.label | &buffer | | test.rs:188:15:188:20 | buffer | semmle.label | buffer | | test.rs:197:9:197:16 | mut file | semmle.label | mut file | -| test.rs:197:20:197:40 | ...::open | semmle.label | ...::open | +| test.rs:197:20:197:52 | ...::open(...) | semmle.label | ...::open(...) | | test.rs:197:20:197:52 | ...::open(...) [future, Ok] | semmle.label | ...::open(...) [future, Ok] | | test.rs:197:20:197:58 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:197:20:197:59 | TryExpr | semmle.label | TryExpr | @@ -542,17 +534,17 @@ nodes | test.rs:237:14:237:20 | &buffer | semmle.label | &buffer | | test.rs:237:15:237:20 | buffer | semmle.label | buffer | | test.rs:243:13:243:18 | mut f1 | semmle.label | mut f1 | +| test.rs:243:22:243:65 | ... .open(...) | semmle.label | ... .open(...) | | test.rs:243:22:243:65 | ... .open(...) [future, Ok] | semmle.label | ... .open(...) [future, Ok] | | test.rs:243:22:243:71 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:243:22:243:72 | TryExpr | semmle.label | TryExpr | -| test.rs:243:52:243:55 | open | semmle.label | open | | test.rs:245:22:245:23 | f1 | semmle.label | f1 | | test.rs:245:30:245:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:245:35:245:40 | [post] buffer | semmle.label | [post] buffer | | test.rs:246:14:246:20 | &buffer | semmle.label | &buffer | | test.rs:246:15:246:20 | buffer | semmle.label | buffer | | test.rs:274:9:274:16 | mut file | semmle.label | mut file | -| test.rs:274:20:274:44 | ...::open | semmle.label | ...::open | +| test.rs:274:20:274:56 | ...::open(...) | semmle.label | ...::open(...) | | test.rs:274:20:274:56 | ...::open(...) [future, Ok] | semmle.label | ...::open(...) [future, Ok] | | test.rs:274:20:274:62 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:274:20:274:63 | TryExpr | semmle.label | TryExpr | @@ -562,10 +554,10 @@ nodes | test.rs:279:14:279:20 | &buffer | semmle.label | &buffer | | test.rs:279:15:279:20 | buffer | semmle.label | buffer | | test.rs:285:13:285:18 | mut f1 | semmle.label | mut f1 | +| test.rs:285:22:285:69 | ... .open(...) | semmle.label | ... .open(...) | | test.rs:285:22:285:69 | ... .open(...) [future, Ok] | semmle.label | ... .open(...) [future, Ok] | | test.rs:285:22:285:75 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:285:22:285:76 | TryExpr | semmle.label | TryExpr | -| test.rs:285:56:285:59 | open | semmle.label | open | | test.rs:287:22:287:23 | f1 | semmle.label | f1 | | test.rs:287:30:287:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:287:35:287:40 | [post] buffer | semmle.label | [post] buffer | @@ -574,54 +566,54 @@ nodes subpaths testFailures #select -| test.rs:13:14:13:19 | buffer | test.rs:12:31:12:43 | ...::read | test.rs:13:14:13:19 | buffer | $@ | test.rs:12:31:12:43 | ...::read | ...::read | -| test.rs:18:14:18:19 | buffer | test.rs:17:31:17:38 | ...::read | test.rs:18:14:18:19 | buffer | $@ | test.rs:17:31:17:38 | ...::read | ...::read | -| test.rs:23:14:23:19 | buffer | test.rs:22:22:22:39 | ...::read_to_string | test.rs:23:14:23:19 | buffer | $@ | test.rs:22:22:22:39 | ...::read_to_string | ...::read_to_string | -| test.rs:31:14:31:25 | path.clone() | test.rs:30:22:30:25 | path | test.rs:31:14:31:25 | path.clone() | $@ | test.rs:30:22:30:25 | path | path | -| test.rs:32:14:32:35 | ... .as_path() | test.rs:30:22:30:25 | path | test.rs:32:14:32:35 | ... .as_path() | $@ | test.rs:30:22:30:25 | path | path | -| test.rs:33:14:33:42 | ... .into_os_string() | test.rs:30:22:30:25 | path | test.rs:33:14:33:42 | ... .into_os_string() | $@ | test.rs:30:22:30:25 | path | path | -| test.rs:34:14:34:69 | ...::from(...) | test.rs:30:22:30:25 | path | test.rs:34:14:34:69 | ...::from(...) | $@ | test.rs:30:22:30:25 | path | path | -| test.rs:35:14:35:37 | ... .as_os_str() | test.rs:30:22:30:25 | path | test.rs:35:14:35:37 | ... .as_os_str() | $@ | test.rs:30:22:30:25 | path | path | -| test.rs:36:14:36:41 | ... .as_mut_os_str() | test.rs:30:22:30:25 | path | test.rs:36:14:36:41 | ... .as_mut_os_str() | $@ | test.rs:30:22:30:25 | path | path | -| test.rs:37:14:37:26 | path.to_str() | test.rs:30:22:30:25 | path | test.rs:37:14:37:26 | path.to_str() | $@ | test.rs:30:22:30:25 | path | path | -| test.rs:38:14:38:31 | path.to_path_buf() | test.rs:30:22:30:25 | path | test.rs:38:14:38:31 | path.to_path_buf() | $@ | test.rs:30:22:30:25 | path | path | -| test.rs:39:14:39:38 | ... .unwrap() | test.rs:30:22:30:25 | path | test.rs:39:14:39:38 | ... .unwrap() | $@ | test.rs:30:22:30:25 | path | path | -| test.rs:40:14:40:38 | ... .unwrap() | test.rs:30:22:30:25 | path | test.rs:40:14:40:38 | ... .unwrap() | $@ | test.rs:30:22:30:25 | path | path | -| test.rs:41:14:41:41 | ... .unwrap() | test.rs:30:22:30:25 | path | test.rs:41:14:41:41 | ... .unwrap() | $@ | test.rs:30:22:30:25 | path | path | -| test.rs:42:14:42:17 | path | test.rs:30:22:30:25 | path | test.rs:42:14:42:17 | path | $@ | test.rs:30:22:30:25 | path | path | -| test.rs:45:14:45:30 | file_name.clone() | test.rs:44:27:44:35 | file_name | test.rs:45:14:45:30 | file_name.clone() | $@ | test.rs:44:27:44:35 | file_name | file_name | -| test.rs:46:14:46:53 | ... .unwrap() | test.rs:44:27:44:35 | file_name | test.rs:46:14:46:53 | ... .unwrap() | $@ | test.rs:44:27:44:35 | file_name | file_name | -| test.rs:47:14:47:40 | ... .unwrap() | test.rs:44:27:44:35 | file_name | test.rs:47:14:47:40 | ... .unwrap() | $@ | test.rs:44:27:44:35 | file_name | file_name | -| test.rs:48:14:48:49 | ... .to_mut() | test.rs:44:27:44:35 | file_name | test.rs:48:14:48:49 | ... .to_mut() | $@ | test.rs:44:27:44:35 | file_name | file_name | -| test.rs:49:14:49:49 | ... .as_encoded_bytes() | test.rs:44:27:44:35 | file_name | test.rs:49:14:49:49 | ... .as_encoded_bytes() | $@ | test.rs:44:27:44:35 | file_name | file_name | -| test.rs:50:14:50:22 | file_name | test.rs:44:27:44:35 | file_name | test.rs:50:14:50:22 | file_name | $@ | test.rs:44:27:44:35 | file_name | file_name | -| test.rs:69:14:69:19 | target | test.rs:68:22:68:34 | ...::read_link | test.rs:69:14:69:19 | target | $@ | test.rs:68:22:68:34 | ...::read_link | ...::read_link | -| test.rs:78:14:78:19 | buffer | test.rs:77:31:77:45 | ...::read | test.rs:78:14:78:19 | buffer | $@ | test.rs:77:31:77:45 | ...::read | ...::read | -| test.rs:83:14:83:19 | buffer | test.rs:82:31:82:45 | ...::read | test.rs:83:14:83:19 | buffer | $@ | test.rs:82:31:82:45 | ...::read | ...::read | -| test.rs:88:14:88:19 | buffer | test.rs:87:22:87:46 | ...::read_to_string | test.rs:88:14:88:19 | buffer | $@ | test.rs:87:22:87:46 | ...::read_to_string | ...::read_to_string | -| test.rs:95:14:95:17 | path | test.rs:93:26:93:29 | path | test.rs:95:14:95:17 | path | $@ | test.rs:93:26:93:29 | path | path | -| test.rs:96:14:96:22 | file_name | test.rs:94:31:94:39 | file_name | test.rs:96:14:96:22 | file_name | $@ | test.rs:94:31:94:39 | file_name | file_name | -| test.rs:101:14:101:19 | target | test.rs:100:22:100:41 | ...::read_link | test.rs:101:14:101:19 | target | $@ | test.rs:100:22:100:41 | ...::read_link | ...::read_link | -| test.rs:115:14:115:20 | &buffer | test.rs:110:20:110:38 | ...::open | test.rs:115:14:115:20 | &buffer | $@ | test.rs:110:20:110:38 | ...::open | ...::open | -| test.rs:121:14:121:20 | &buffer | test.rs:110:20:110:38 | ...::open | test.rs:121:14:121:20 | &buffer | $@ | test.rs:110:20:110:38 | ...::open | ...::open | -| test.rs:127:14:127:20 | &buffer | test.rs:110:20:110:38 | ...::open | test.rs:127:14:127:20 | &buffer | $@ | test.rs:110:20:110:38 | ...::open | ...::open | -| test.rs:133:14:133:20 | &buffer | test.rs:110:20:110:38 | ...::open | test.rs:133:14:133:20 | &buffer | $@ | test.rs:110:20:110:38 | ...::open | ...::open | -| test.rs:137:14:137:17 | byte | test.rs:110:20:110:38 | ...::open | test.rs:137:14:137:17 | byte | $@ | test.rs:110:20:110:38 | ...::open | ...::open | -| test.rs:146:14:146:20 | &buffer | test.rs:143:50:143:53 | open | test.rs:146:14:146:20 | &buffer | $@ | test.rs:143:50:143:53 | open | open | -| test.rs:156:14:156:20 | &buffer | test.rs:152:14:152:17 | open | test.rs:156:14:156:20 | &buffer | $@ | test.rs:152:14:152:17 | open | open | -| test.rs:169:14:169:20 | &buffer | test.rs:165:14:165:17 | open | test.rs:169:14:169:20 | &buffer | $@ | test.rs:165:14:165:17 | open | open | -| test.rs:180:14:180:20 | &buffer | test.rs:176:21:176:39 | ...::open | test.rs:180:14:180:20 | &buffer | $@ | test.rs:176:21:176:39 | ...::open | ...::open | -| test.rs:180:14:180:20 | &buffer | test.rs:177:21:177:39 | ...::open | test.rs:180:14:180:20 | &buffer | $@ | test.rs:177:21:177:39 | ...::open | ...::open | -| test.rs:188:14:188:20 | &buffer | test.rs:185:21:185:39 | ...::open | test.rs:188:14:188:20 | &buffer | $@ | test.rs:185:21:185:39 | ...::open | ...::open | -| test.rs:202:14:202:20 | &buffer | test.rs:197:20:197:40 | ...::open | test.rs:202:14:202:20 | &buffer | $@ | test.rs:197:20:197:40 | ...::open | ...::open | -| test.rs:208:14:208:20 | &buffer | test.rs:197:20:197:40 | ...::open | test.rs:208:14:208:20 | &buffer | $@ | test.rs:197:20:197:40 | ...::open | ...::open | -| test.rs:214:14:214:20 | &buffer | test.rs:197:20:197:40 | ...::open | test.rs:214:14:214:20 | &buffer | $@ | test.rs:197:20:197:40 | ...::open | ...::open | -| test.rs:220:14:220:20 | &buffer | test.rs:197:20:197:40 | ...::open | test.rs:220:14:220:20 | &buffer | $@ | test.rs:197:20:197:40 | ...::open | ...::open | -| test.rs:228:14:228:15 | v1 | test.rs:197:20:197:40 | ...::open | test.rs:228:14:228:15 | v1 | $@ | test.rs:197:20:197:40 | ...::open | ...::open | -| test.rs:229:14:229:15 | v2 | test.rs:197:20:197:40 | ...::open | test.rs:229:14:229:15 | v2 | $@ | test.rs:197:20:197:40 | ...::open | ...::open | -| test.rs:230:14:230:15 | v3 | test.rs:197:20:197:40 | ...::open | test.rs:230:14:230:15 | v3 | $@ | test.rs:197:20:197:40 | ...::open | ...::open | -| test.rs:231:14:231:15 | v4 | test.rs:197:20:197:40 | ...::open | test.rs:231:14:231:15 | v4 | $@ | test.rs:197:20:197:40 | ...::open | ...::open | -| test.rs:237:14:237:20 | &buffer | test.rs:197:20:197:40 | ...::open | test.rs:237:14:237:20 | &buffer | $@ | test.rs:197:20:197:40 | ...::open | ...::open | -| test.rs:246:14:246:20 | &buffer | test.rs:243:52:243:55 | open | test.rs:246:14:246:20 | &buffer | $@ | test.rs:243:52:243:55 | open | open | -| test.rs:279:14:279:20 | &buffer | test.rs:274:20:274:44 | ...::open | test.rs:279:14:279:20 | &buffer | $@ | test.rs:274:20:274:44 | ...::open | ...::open | -| test.rs:288:14:288:20 | &buffer | test.rs:285:56:285:59 | open | test.rs:288:14:288:20 | &buffer | $@ | test.rs:285:56:285:59 | open | open | +| test.rs:13:14:13:19 | buffer | test.rs:12:31:12:55 | ...::read(...) | test.rs:13:14:13:19 | buffer | $@ | test.rs:12:31:12:55 | ...::read(...) | ...::read(...) | +| test.rs:18:14:18:19 | buffer | test.rs:17:31:17:50 | ...::read(...) | test.rs:18:14:18:19 | buffer | $@ | test.rs:17:31:17:50 | ...::read(...) | ...::read(...) | +| test.rs:23:14:23:19 | buffer | test.rs:22:22:22:51 | ...::read_to_string(...) | test.rs:23:14:23:19 | buffer | $@ | test.rs:22:22:22:51 | ...::read_to_string(...) | ...::read_to_string(...) | +| test.rs:31:14:31:25 | path.clone() | test.rs:30:20:30:27 | e.path() | test.rs:31:14:31:25 | path.clone() | $@ | test.rs:30:20:30:27 | e.path() | e.path() | +| test.rs:32:14:32:35 | ... .as_path() | test.rs:30:20:30:27 | e.path() | test.rs:32:14:32:35 | ... .as_path() | $@ | test.rs:30:20:30:27 | e.path() | e.path() | +| test.rs:33:14:33:42 | ... .into_os_string() | test.rs:30:20:30:27 | e.path() | test.rs:33:14:33:42 | ... .into_os_string() | $@ | test.rs:30:20:30:27 | e.path() | e.path() | +| test.rs:34:14:34:69 | ...::from(...) | test.rs:30:20:30:27 | e.path() | test.rs:34:14:34:69 | ...::from(...) | $@ | test.rs:30:20:30:27 | e.path() | e.path() | +| test.rs:35:14:35:37 | ... .as_os_str() | test.rs:30:20:30:27 | e.path() | test.rs:35:14:35:37 | ... .as_os_str() | $@ | test.rs:30:20:30:27 | e.path() | e.path() | +| test.rs:36:14:36:41 | ... .as_mut_os_str() | test.rs:30:20:30:27 | e.path() | test.rs:36:14:36:41 | ... .as_mut_os_str() | $@ | test.rs:30:20:30:27 | e.path() | e.path() | +| test.rs:37:14:37:26 | path.to_str() | test.rs:30:20:30:27 | e.path() | test.rs:37:14:37:26 | path.to_str() | $@ | test.rs:30:20:30:27 | e.path() | e.path() | +| test.rs:38:14:38:31 | path.to_path_buf() | test.rs:30:20:30:27 | e.path() | test.rs:38:14:38:31 | path.to_path_buf() | $@ | test.rs:30:20:30:27 | e.path() | e.path() | +| test.rs:39:14:39:38 | ... .unwrap() | test.rs:30:20:30:27 | e.path() | test.rs:39:14:39:38 | ... .unwrap() | $@ | test.rs:30:20:30:27 | e.path() | e.path() | +| test.rs:40:14:40:38 | ... .unwrap() | test.rs:30:20:30:27 | e.path() | test.rs:40:14:40:38 | ... .unwrap() | $@ | test.rs:30:20:30:27 | e.path() | e.path() | +| test.rs:41:14:41:41 | ... .unwrap() | test.rs:30:20:30:27 | e.path() | test.rs:41:14:41:41 | ... .unwrap() | $@ | test.rs:30:20:30:27 | e.path() | e.path() | +| test.rs:42:14:42:17 | path | test.rs:30:20:30:27 | e.path() | test.rs:42:14:42:17 | path | $@ | test.rs:30:20:30:27 | e.path() | e.path() | +| test.rs:45:14:45:30 | file_name.clone() | test.rs:44:25:44:37 | e.file_name() | test.rs:45:14:45:30 | file_name.clone() | $@ | test.rs:44:25:44:37 | e.file_name() | e.file_name() | +| test.rs:46:14:46:53 | ... .unwrap() | test.rs:44:25:44:37 | e.file_name() | test.rs:46:14:46:53 | ... .unwrap() | $@ | test.rs:44:25:44:37 | e.file_name() | e.file_name() | +| test.rs:47:14:47:40 | ... .unwrap() | test.rs:44:25:44:37 | e.file_name() | test.rs:47:14:47:40 | ... .unwrap() | $@ | test.rs:44:25:44:37 | e.file_name() | e.file_name() | +| test.rs:48:14:48:49 | ... .to_mut() | test.rs:44:25:44:37 | e.file_name() | test.rs:48:14:48:49 | ... .to_mut() | $@ | test.rs:44:25:44:37 | e.file_name() | e.file_name() | +| test.rs:49:14:49:49 | ... .as_encoded_bytes() | test.rs:44:25:44:37 | e.file_name() | test.rs:49:14:49:49 | ... .as_encoded_bytes() | $@ | test.rs:44:25:44:37 | e.file_name() | e.file_name() | +| test.rs:50:14:50:22 | file_name | test.rs:44:25:44:37 | e.file_name() | test.rs:50:14:50:22 | file_name | $@ | test.rs:44:25:44:37 | e.file_name() | e.file_name() | +| test.rs:69:14:69:19 | target | test.rs:68:22:68:49 | ...::read_link(...) | test.rs:69:14:69:19 | target | $@ | test.rs:68:22:68:49 | ...::read_link(...) | ...::read_link(...) | +| test.rs:78:14:78:19 | buffer | test.rs:77:31:77:57 | ...::read(...) | test.rs:78:14:78:19 | buffer | $@ | test.rs:77:31:77:57 | ...::read(...) | ...::read(...) | +| test.rs:83:14:83:19 | buffer | test.rs:82:31:82:57 | ...::read(...) | test.rs:83:14:83:19 | buffer | $@ | test.rs:82:31:82:57 | ...::read(...) | ...::read(...) | +| test.rs:88:14:88:19 | buffer | test.rs:87:22:87:58 | ...::read_to_string(...) | test.rs:88:14:88:19 | buffer | $@ | test.rs:87:22:87:58 | ...::read_to_string(...) | ...::read_to_string(...) | +| test.rs:95:14:95:17 | path | test.rs:93:20:93:31 | entry.path() | test.rs:95:14:95:17 | path | $@ | test.rs:93:20:93:31 | entry.path() | entry.path() | +| test.rs:96:14:96:22 | file_name | test.rs:94:25:94:41 | entry.file_name() | test.rs:96:14:96:22 | file_name | $@ | test.rs:94:25:94:41 | entry.file_name() | entry.file_name() | +| test.rs:101:14:101:19 | target | test.rs:100:22:100:56 | ...::read_link(...) | test.rs:101:14:101:19 | target | $@ | test.rs:100:22:100:56 | ...::read_link(...) | ...::read_link(...) | +| test.rs:115:14:115:20 | &buffer | test.rs:110:20:110:50 | ...::open(...) | test.rs:115:14:115:20 | &buffer | $@ | test.rs:110:20:110:50 | ...::open(...) | ...::open(...) | +| test.rs:121:14:121:20 | &buffer | test.rs:110:20:110:50 | ...::open(...) | test.rs:121:14:121:20 | &buffer | $@ | test.rs:110:20:110:50 | ...::open(...) | ...::open(...) | +| test.rs:127:14:127:20 | &buffer | test.rs:110:20:110:50 | ...::open(...) | test.rs:127:14:127:20 | &buffer | $@ | test.rs:110:20:110:50 | ...::open(...) | ...::open(...) | +| test.rs:133:14:133:20 | &buffer | test.rs:110:20:110:50 | ...::open(...) | test.rs:133:14:133:20 | &buffer | $@ | test.rs:110:20:110:50 | ...::open(...) | ...::open(...) | +| test.rs:137:14:137:17 | byte | test.rs:110:20:110:50 | ...::open(...) | test.rs:137:14:137:17 | byte | $@ | test.rs:110:20:110:50 | ...::open(...) | ...::open(...) | +| test.rs:146:14:146:20 | &buffer | test.rs:143:22:143:63 | ... .open(...) | test.rs:146:14:146:20 | &buffer | $@ | test.rs:143:22:143:63 | ... .open(...) | ... .open(...) | +| test.rs:156:14:156:20 | &buffer | test.rs:150:22:152:27 | ... .open(...) | test.rs:156:14:156:20 | &buffer | $@ | test.rs:150:22:152:27 | ... .open(...) | ... .open(...) | +| test.rs:169:14:169:20 | &buffer | test.rs:160:22:165:27 | ... .open(...) | test.rs:169:14:169:20 | &buffer | $@ | test.rs:160:22:165:27 | ... .open(...) | ... .open(...) | +| test.rs:180:14:180:20 | &buffer | test.rs:176:21:176:51 | ...::open(...) | test.rs:180:14:180:20 | &buffer | $@ | test.rs:176:21:176:51 | ...::open(...) | ...::open(...) | +| test.rs:180:14:180:20 | &buffer | test.rs:177:21:177:59 | ...::open(...) | test.rs:180:14:180:20 | &buffer | $@ | test.rs:177:21:177:59 | ...::open(...) | ...::open(...) | +| test.rs:188:14:188:20 | &buffer | test.rs:185:21:185:51 | ...::open(...) | test.rs:188:14:188:20 | &buffer | $@ | test.rs:185:21:185:51 | ...::open(...) | ...::open(...) | +| test.rs:202:14:202:20 | &buffer | test.rs:197:20:197:52 | ...::open(...) | test.rs:202:14:202:20 | &buffer | $@ | test.rs:197:20:197:52 | ...::open(...) | ...::open(...) | +| test.rs:208:14:208:20 | &buffer | test.rs:197:20:197:52 | ...::open(...) | test.rs:208:14:208:20 | &buffer | $@ | test.rs:197:20:197:52 | ...::open(...) | ...::open(...) | +| test.rs:214:14:214:20 | &buffer | test.rs:197:20:197:52 | ...::open(...) | test.rs:214:14:214:20 | &buffer | $@ | test.rs:197:20:197:52 | ...::open(...) | ...::open(...) | +| test.rs:220:14:220:20 | &buffer | test.rs:197:20:197:52 | ...::open(...) | test.rs:220:14:220:20 | &buffer | $@ | test.rs:197:20:197:52 | ...::open(...) | ...::open(...) | +| test.rs:228:14:228:15 | v1 | test.rs:197:20:197:52 | ...::open(...) | test.rs:228:14:228:15 | v1 | $@ | test.rs:197:20:197:52 | ...::open(...) | ...::open(...) | +| test.rs:229:14:229:15 | v2 | test.rs:197:20:197:52 | ...::open(...) | test.rs:229:14:229:15 | v2 | $@ | test.rs:197:20:197:52 | ...::open(...) | ...::open(...) | +| test.rs:230:14:230:15 | v3 | test.rs:197:20:197:52 | ...::open(...) | test.rs:230:14:230:15 | v3 | $@ | test.rs:197:20:197:52 | ...::open(...) | ...::open(...) | +| test.rs:231:14:231:15 | v4 | test.rs:197:20:197:52 | ...::open(...) | test.rs:231:14:231:15 | v4 | $@ | test.rs:197:20:197:52 | ...::open(...) | ...::open(...) | +| test.rs:237:14:237:20 | &buffer | test.rs:197:20:197:52 | ...::open(...) | test.rs:237:14:237:20 | &buffer | $@ | test.rs:197:20:197:52 | ...::open(...) | ...::open(...) | +| test.rs:246:14:246:20 | &buffer | test.rs:243:22:243:65 | ... .open(...) | test.rs:246:14:246:20 | &buffer | $@ | test.rs:243:22:243:65 | ... .open(...) | ... .open(...) | +| test.rs:279:14:279:20 | &buffer | test.rs:274:20:274:56 | ...::open(...) | test.rs:279:14:279:20 | &buffer | $@ | test.rs:274:20:274:56 | ...::open(...) | ...::open(...) | +| test.rs:288:14:288:20 | &buffer | test.rs:285:22:285:69 | ... .open(...) | test.rs:288:14:288:20 | &buffer | $@ | test.rs:285:22:285:69 | ... .open(...) | ... .open(...) | diff --git a/rust/ql/test/library-tests/dataflow/sources/file/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/file/TaintSources.expected index dc17269abe81..70a9ed34806f 100644 --- a/rust/ql/test/library-tests/dataflow/sources/file/TaintSources.expected +++ b/rust/ql/test/library-tests/dataflow/sources/file/TaintSources.expected @@ -1,33 +1,33 @@ -| test.rs:12:31:12:43 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:17:31:17:38 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:22:22:22:39 | ...::read_to_string | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:27:26:27:37 | ...::read_dir | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:30:22:30:25 | path | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:44:27:44:35 | file_name | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:53:60:53:67 | read_dir | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:56:22:56:25 | path | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:57:27:57:35 | file_name | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:60:64:60:71 | read_dir | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:63:22:63:25 | path | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:64:27:64:35 | file_name | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:68:22:68:34 | ...::read_link | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:77:31:77:45 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:82:31:82:45 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:87:22:87:46 | ...::read_to_string | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:93:26:93:29 | path | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:94:31:94:39 | file_name | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:100:22:100:41 | ...::read_link | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:110:20:110:38 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:143:50:143:53 | open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:152:14:152:17 | open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:165:14:165:17 | open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:176:21:176:39 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:177:21:177:39 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:185:21:185:39 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:197:20:197:40 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:243:52:243:55 | open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:253:21:253:41 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:254:21:254:41 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:262:21:262:41 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:274:20:274:44 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:285:56:285:59 | open | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:12:31:12:55 | ...::read(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:17:31:17:50 | ...::read(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:22:22:22:51 | ...::read_to_string(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:27:26:27:50 | ...::read_dir(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:30:20:30:27 | e.path() | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:44:25:44:37 | e.file_name() | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:53:26:53:69 | ... .read_dir() | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:56:20:56:27 | e.path() | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:57:25:57:37 | e.file_name() | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:60:26:60:73 | ... .read_dir() | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:63:20:63:27 | e.path() | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:64:25:64:37 | e.file_name() | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:68:22:68:49 | ...::read_link(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:77:31:77:57 | ...::read(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:82:31:82:57 | ...::read(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:87:22:87:58 | ...::read_to_string(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:93:20:93:31 | entry.path() | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:94:25:94:41 | entry.file_name() | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:100:22:100:56 | ...::read_link(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:110:20:110:50 | ...::open(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:143:22:143:63 | ... .open(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:150:22:152:27 | ... .open(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:160:22:165:27 | ... .open(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:176:21:176:51 | ...::open(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:177:21:177:59 | ...::open(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:185:21:185:51 | ...::open(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:197:20:197:52 | ...::open(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:243:22:243:65 | ... .open(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:253:21:253:53 | ...::open(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:254:21:254:61 | ...::open(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:262:21:262:53 | ...::open(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:274:20:274:56 | ...::open(...) | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:285:22:285:69 | ... .open(...) | Flow source 'FileSource' of type file (DEFAULT). | 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 b5a008f98388..8e44873ec860 100644 --- a/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.expected @@ -45,31 +45,31 @@ models | 44 | 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:7 | +| test.rs:11:26:11:62 | ...::get(...) | test.rs:11:26:11:62 | ...::get(...) [Ok] | provenance | Src:MaD:7 | | 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:38 | | 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:7 | +| test.rs:14:26:14:62 | ...::get(...) | test.rs:14:26:14:62 | ...::get(...) [Ok] | provenance | Src:MaD:7 | | test.rs:14:26:14:62 | ...::get(...) [Ok] | test.rs:14:26:14:71 | ... .unwrap() | provenance | MaD:28 | | test.rs:14:26:14:71 | ... .unwrap() | test.rs:14:26:14:78 | ... .text() [Ok] | provenance | MaD:38 | | test.rs:14:26:14:78 | ... .text() [Ok] | test.rs:14:26:14:87 | ... .unwrap() | provenance | MaD:28 | | 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:7 | +| test.rs:17:26:17:62 | ...::get(...) | test.rs:17:26:17:62 | ...::get(...) [Ok] | provenance | Src:MaD:7 | | test.rs:17:26:17:62 | ...::get(...) [Ok] | test.rs:17:26:17:71 | ... .unwrap() | provenance | MaD:28 | | test.rs:17:26:17:71 | ... .unwrap() | test.rs:17:26:17:98 | ... .text_with_charset(...) [Ok] | provenance | MaD:39 | | test.rs:17:26:17:98 | ... .text_with_charset(...) [Ok] | test.rs:17:26:17:107 | ... .unwrap() | provenance | MaD:28 | | 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:7 | +| test.rs:20:26:20:62 | ...::get(...) | test.rs:20:26:20:62 | ...::get(...) [Ok] | provenance | Src:MaD:7 | | test.rs:20:26:20:62 | ...::get(...) [Ok] | test.rs:20:26:20:71 | ... .unwrap() | provenance | MaD:28 | | test.rs:20:26:20:71 | ... .unwrap() | test.rs:20:26:20:79 | ... .bytes() [Ok] | provenance | MaD:37 | | test.rs:20:26:20:79 | ... .bytes() [Ok] | test.rs:20:26:20:88 | ... .unwrap() | provenance | MaD:28 | | 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:8 | +| test.rs:23:26:23:52 | ...::get(...) | test.rs:23:26:23:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:8 | | 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:36 | @@ -77,7 +77,7 @@ edges | 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 | | | test.rs:26:9:26:22 | remote_string6 | test.rs:27:10:27:23 | remote_string6 | provenance | | -| test.rs:26:26:26:37 | ...::get | test.rs:26:26:26:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:8 | +| test.rs:26:26:26:52 | ...::get(...) | test.rs:26:26:26:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:8 | | 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:34 | @@ -86,7 +86,7 @@ edges | test.rs:26:26:26:74 | TryExpr | test.rs:26:9:26:22 | remote_string6 | provenance | | | test.rs:29:9:29:20 | mut request1 | test.rs:30:10:30:17 | request1 | provenance | | | test.rs:29:9:29:20 | mut request1 | test.rs:31:29:31:36 | request1 | provenance | | -| test.rs:29:24:29:35 | ...::get | test.rs:29:24:29:50 | ...::get(...) [future, Ok] | provenance | Src:MaD:8 | +| test.rs:29:24:29:50 | ...::get(...) | test.rs:29:24:29:50 | ...::get(...) [future, Ok] | provenance | Src:MaD:8 | | 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 | | @@ -102,19 +102,19 @@ edges | test.rs:31:29:31:51 | TryExpr [Some] | test.rs:31:15:31:25 | Some(...) [Some] | provenance | | | test.rs:60:13:60:20 | response | test.rs:61:15:61:22 | response | provenance | | | test.rs:60:13:60:20 | response | test.rs:62:14:62:21 | response | provenance | | +| test.rs:60:24:60:51 | sender.send_request(...) | test.rs:60:24:60:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:2 | | test.rs:60:24:60:51 | sender.send_request(...) [future, Ok] | test.rs:60:24:60:57 | await ... [Ok] | provenance | | | test.rs:60:24:60:57 | await ... [Ok] | test.rs:60:24:60:58 | TryExpr | provenance | | | test.rs:60:24:60:58 | TryExpr | test.rs:60:13:60:20 | response | provenance | | -| test.rs:60:31:60:42 | send_request | test.rs:60:24:60:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:2 | | test.rs:61:15:61:22 | response | test.rs:61:14:61:22 | &response | provenance | | | test.rs:67:9:67:20 | mut response | test.rs:68:11:68:18 | response | provenance | | | test.rs:67:9:67:20 | mut response | test.rs:76:18:76:25 | response | provenance | | | test.rs:67:9:67:20 | mut response | test.rs:77:18:77:25 | response | provenance | | | test.rs:67:9:67:20 | mut response | test.rs:79:24:79:31 | response | provenance | | +| test.rs:67:24:67:51 | sender.send_request(...) | test.rs:67:24:67:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:2 | | test.rs:67:24:67:51 | sender.send_request(...) [future, Ok] | test.rs:67:24:67:57 | await ... [Ok] | provenance | | | test.rs:67:24:67:57 | await ... [Ok] | test.rs:67:24:67:58 | TryExpr | provenance | | | test.rs:67:24:67:58 | TryExpr | test.rs:67:9:67:20 | mut response | provenance | | -| test.rs:67:31:67:42 | send_request | test.rs:67:24:67:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:2 | | test.rs:68:11:68:18 | response | test.rs:68:10:68:18 | &response | provenance | | | test.rs:76:18:76:25 | response | test.rs:76:18:76:32 | response.body() | provenance | MaD:31 | | test.rs:77:18:77:25 | response | test.rs:77:18:77:36 | response.body_mut() | provenance | MaD:32 | @@ -123,7 +123,7 @@ edges | test.rs:79:24:79:43 | response.into_body() | test.rs:79:17:79:20 | body | provenance | | | test.rs:80:19:80:22 | body | test.rs:80:18:80:22 | &body | provenance | | | test.rs:155:13:155:22 | mut stream | test.rs:162:17:162:22 | stream | provenance | | -| test.rs:155:26:155:53 | ...::connect | test.rs:155:26:155:62 | ...::connect(...) [Ok] | provenance | Src:MaD:4 | +| test.rs:155:26:155:62 | ...::connect(...) | test.rs:155:26:155:62 | ...::connect(...) [Ok] | provenance | Src:MaD:4 | | 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:20 | @@ -134,7 +134,7 @@ edges | test.rs:166:14:166:19 | buffer | test.rs:166:14:166:22 | buffer[0] | provenance | MaD:10 | | test.rs:174:13:174:22 | mut stream | test.rs:182:58:182:63 | stream | provenance | | | test.rs:174:13:174:22 | mut stream | test.rs:203:54:203:59 | stream | provenance | | -| test.rs:174:26:174:61 | ...::connect_timeout | test.rs:174:26:174:105 | ...::connect_timeout(...) [Ok] | provenance | Src:MaD:5 | +| test.rs:174:26:174:105 | ...::connect_timeout(...) | test.rs:174:26:174:105 | ...::connect_timeout(...) [Ok] | provenance | Src:MaD:5 | | 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 | | @@ -158,7 +158,7 @@ edges | test.rs:224:9:224:24 | mut tokio_stream | test.rs:236:18:236:29 | tokio_stream | provenance | | | test.rs:224:9:224:24 | mut tokio_stream | test.rs:252:19:252:30 | tokio_stream | provenance | | | test.rs:224:9:224:24 | mut tokio_stream | test.rs:275:19:275:30 | tokio_stream | provenance | | -| test.rs:224:28:224:57 | ...::connect | test.rs:224:28:224:66 | ...::connect(...) [future, Ok] | provenance | Src:MaD:6 | +| test.rs:224:28:224:66 | ...::connect(...) | test.rs:224:28:224:66 | ...::connect(...) [future, Ok] | provenance | Src:MaD:6 | | 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 | | @@ -183,7 +183,7 @@ edges | 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 | | | test.rs:332:9:332:18 | mut client | test.rs:333:22:333:27 | client | provenance | | -| test.rs:332:22:332:50 | ...::new | test.rs:332:22:332:75 | ...::new(...) [Ok] | provenance | Src:MaD:3 | +| test.rs:332:22:332:75 | ...::new(...) | test.rs:332:22:332:75 | ...::new(...) [Ok] | provenance | Src:MaD:3 | | test.rs:332:22:332:75 | ...::new(...) [Ok] | test.rs:332:22:332:84 | ... .unwrap() | provenance | MaD:28 | | test.rs:332:22:332:84 | ... .unwrap() | test.rs:332:9:332:18 | mut client | provenance | | | test.rs:333:9:333:18 | mut reader | test.rs:334:11:334:16 | reader | provenance | | @@ -207,7 +207,7 @@ edges | test.rs:351:15:351:20 | buffer | test.rs:351:14:351:20 | &buffer | provenance | | | test.rs:373:13:373:15 | tcp | test.rs:374:15:374:17 | tcp | provenance | | | test.rs:373:13:373:15 | tcp | test.rs:380:57:380:59 | tcp | provenance | | -| test.rs:373:19:373:36 | ...::connect | test.rs:373:19:373:41 | ...::connect(...) [future, Ok] | provenance | Src:MaD:1 | +| test.rs:373:19:373:41 | ...::connect(...) | test.rs:373:19:373:41 | ...::connect(...) [future, Ok] | provenance | Src:MaD:1 | | test.rs:373:19:373:41 | ...::connect(...) [future, Ok] | test.rs:373:19:373:47 | await ... [Ok] | provenance | | | test.rs:373:19:373:47 | await ... [Ok] | test.rs:373:19:373:48 | TryExpr | provenance | | | test.rs:373:19:373:48 | TryExpr | test.rs:373:13:373:15 | tcp | provenance | | @@ -370,35 +370,35 @@ edges | test.rs:501:19:501:24 | buffer | test.rs:501:18:501:24 | &buffer | provenance | | nodes | test.rs:11:9:11:22 | remote_string1 | semmle.label | remote_string1 | -| test.rs:11:26:11:47 | ...::get | semmle.label | ...::get | +| test.rs:11:26:11:62 | ...::get(...) | semmle.label | ...::get(...) | | test.rs:11:26:11:62 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | | test.rs:11:26:11:63 | TryExpr | semmle.label | TryExpr | | test.rs:11:26:11:70 | ... .text() [Ok] | semmle.label | ... .text() [Ok] | | test.rs:11:26:11:71 | TryExpr | semmle.label | TryExpr | | test.rs:12:10:12:23 | remote_string1 | semmle.label | remote_string1 | | test.rs:14:9:14:22 | remote_string2 | semmle.label | remote_string2 | -| test.rs:14:26:14:47 | ...::get | semmle.label | ...::get | +| test.rs:14:26:14:62 | ...::get(...) | semmle.label | ...::get(...) | | test.rs:14:26:14:62 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | | test.rs:14:26:14:71 | ... .unwrap() | semmle.label | ... .unwrap() | | test.rs:14:26:14:78 | ... .text() [Ok] | semmle.label | ... .text() [Ok] | | test.rs:14:26:14:87 | ... .unwrap() | semmle.label | ... .unwrap() | | test.rs:15:10:15:23 | remote_string2 | semmle.label | remote_string2 | | test.rs:17:9:17:22 | remote_string3 | semmle.label | remote_string3 | -| test.rs:17:26:17:47 | ...::get | semmle.label | ...::get | +| test.rs:17:26:17:62 | ...::get(...) | semmle.label | ...::get(...) | | test.rs:17:26:17:62 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | | test.rs:17:26:17:71 | ... .unwrap() | semmle.label | ... .unwrap() | | test.rs:17:26:17:98 | ... .text_with_charset(...) [Ok] | semmle.label | ... .text_with_charset(...) [Ok] | | test.rs:17:26:17:107 | ... .unwrap() | semmle.label | ... .unwrap() | | test.rs:18:10:18:23 | remote_string3 | semmle.label | remote_string3 | | test.rs:20:9:20:22 | remote_string4 | semmle.label | remote_string4 | -| test.rs:20:26:20:47 | ...::get | semmle.label | ...::get | +| test.rs:20:26:20:62 | ...::get(...) | semmle.label | ...::get(...) | | test.rs:20:26:20:62 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | | test.rs:20:26:20:71 | ... .unwrap() | semmle.label | ... .unwrap() | | test.rs:20:26:20:79 | ... .bytes() [Ok] | semmle.label | ... .bytes() [Ok] | | test.rs:20:26:20:88 | ... .unwrap() | semmle.label | ... .unwrap() | | test.rs:21:10:21:23 | remote_string4 | semmle.label | remote_string4 | | test.rs:23:9:23:22 | remote_string5 | semmle.label | remote_string5 | -| test.rs:23:26:23:37 | ...::get | semmle.label | ...::get | +| test.rs:23:26:23:52 | ...::get(...) | semmle.label | ...::get(...) | | test.rs:23:26:23:52 | ...::get(...) [future, Ok] | semmle.label | ...::get(...) [future, Ok] | | test.rs:23:26:23:58 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:23:26:23:59 | TryExpr | semmle.label | TryExpr | @@ -407,7 +407,7 @@ nodes | test.rs:23:26:23:73 | TryExpr | semmle.label | TryExpr | | test.rs:24:10:24:23 | remote_string5 | semmle.label | remote_string5 | | test.rs:26:9:26:22 | remote_string6 | semmle.label | remote_string6 | -| test.rs:26:26:26:37 | ...::get | semmle.label | ...::get | +| test.rs:26:26:26:52 | ...::get(...) | semmle.label | ...::get(...) | | test.rs:26:26:26:52 | ...::get(...) [future, Ok] | semmle.label | ...::get(...) [future, Ok] | | test.rs:26:26:26:58 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:26:26:26:59 | TryExpr | semmle.label | TryExpr | @@ -416,7 +416,7 @@ nodes | test.rs:26:26:26:74 | TryExpr | semmle.label | TryExpr | | test.rs:27:10:27:23 | remote_string6 | semmle.label | remote_string6 | | test.rs:29:9:29:20 | mut request1 | semmle.label | mut request1 | -| test.rs:29:24:29:35 | ...::get | semmle.label | ...::get | +| test.rs:29:24:29:50 | ...::get(...) | semmle.label | ...::get(...) | | test.rs:29:24:29:50 | ...::get(...) [future, Ok] | semmle.label | ...::get(...) [future, Ok] | | test.rs:29:24:29:56 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:29:24:29:57 | TryExpr | semmle.label | TryExpr | @@ -433,18 +433,18 @@ nodes | test.rs:31:29:31:51 | TryExpr [Some] | semmle.label | TryExpr [Some] | | test.rs:32:14:32:18 | chunk | semmle.label | chunk | | test.rs:60:13:60:20 | response | semmle.label | response | +| test.rs:60:24:60:51 | sender.send_request(...) | semmle.label | sender.send_request(...) | | test.rs:60:24:60:51 | sender.send_request(...) [future, Ok] | semmle.label | sender.send_request(...) [future, Ok] | | test.rs:60:24:60:57 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:60:24:60:58 | TryExpr | semmle.label | TryExpr | -| test.rs:60:31:60:42 | send_request | semmle.label | send_request | | test.rs:61:14:61:22 | &response | semmle.label | &response | | test.rs:61:15:61:22 | response | semmle.label | response | | test.rs:62:14:62:21 | response | semmle.label | response | | test.rs:67:9:67:20 | mut response | semmle.label | mut response | +| test.rs:67:24:67:51 | sender.send_request(...) | semmle.label | sender.send_request(...) | | test.rs:67:24:67:51 | sender.send_request(...) [future, Ok] | semmle.label | sender.send_request(...) [future, Ok] | | test.rs:67:24:67:57 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:67:24:67:58 | TryExpr | semmle.label | TryExpr | -| test.rs:67:31:67:42 | send_request | semmle.label | send_request | | test.rs:68:10:68:18 | &response | semmle.label | &response | | test.rs:68:11:68:18 | response | semmle.label | response | | test.rs:76:18:76:25 | response | semmle.label | response | @@ -457,7 +457,7 @@ nodes | test.rs:80:18:80:22 | &body | semmle.label | &body | | test.rs:80:19:80:22 | body | semmle.label | body | | test.rs:155:13:155:22 | mut stream | semmle.label | mut stream | -| test.rs:155:26:155:53 | ...::connect | semmle.label | ...::connect | +| test.rs:155:26:155:62 | ...::connect(...) | semmle.label | ...::connect(...) | | test.rs:155:26:155:62 | ...::connect(...) [Ok] | semmle.label | ...::connect(...) [Ok] | | test.rs:155:26:155:63 | TryExpr | semmle.label | TryExpr | | test.rs:162:17:162:22 | stream | semmle.label | stream | @@ -468,7 +468,7 @@ nodes | 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 | +| test.rs:174:26:174:105 | ...::connect_timeout(...) | semmle.label | ...::connect_timeout(...) | | test.rs:174:26:174:105 | ...::connect_timeout(...) [Ok] | semmle.label | ...::connect_timeout(...) [Ok] | | test.rs:174:26:174:106 | TryExpr | semmle.label | TryExpr | | test.rs:182:21:182:30 | mut reader | semmle.label | mut reader | @@ -491,7 +491,7 @@ nodes | test.rs:205:28:205:37 | Ok(...) | semmle.label | Ok(...) | | test.rs:207:30:207:35 | string | semmle.label | string | | test.rs:224:9:224:24 | mut tokio_stream | semmle.label | mut tokio_stream | -| test.rs:224:28:224:57 | ...::connect | semmle.label | ...::connect | +| test.rs:224:28:224:66 | ...::connect(...) | semmle.label | ...::connect(...) | | test.rs:224:28:224:66 | ...::connect(...) [future, Ok] | semmle.label | ...::connect(...) [future, Ok] | | test.rs:224:28:224:72 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:224:28:224:73 | TryExpr | semmle.label | TryExpr | @@ -520,7 +520,7 @@ nodes | test.rs:282:26:282:32 | &buffer | semmle.label | &buffer | | test.rs:282:27:282:32 | buffer | semmle.label | buffer | | test.rs:332:9:332:18 | mut client | semmle.label | mut client | -| test.rs:332:22:332:50 | ...::new | semmle.label | ...::new | +| test.rs:332:22:332:75 | ...::new(...) | semmle.label | ...::new(...) | | test.rs:332:22:332:75 | ...::new(...) [Ok] | semmle.label | ...::new(...) [Ok] | | test.rs:332:22:332:84 | ... .unwrap() | semmle.label | ... .unwrap() | | test.rs:333:9:333:18 | mut reader | semmle.label | mut reader | @@ -544,7 +544,7 @@ nodes | test.rs:351:14:351:20 | &buffer | semmle.label | &buffer | | test.rs:351:15:351:20 | buffer | semmle.label | buffer | | test.rs:373:13:373:15 | tcp | semmle.label | tcp | -| test.rs:373:19:373:36 | ...::connect | semmle.label | ...::connect | +| test.rs:373:19:373:41 | ...::connect(...) | semmle.label | ...::connect(...) | | test.rs:373:19:373:41 | ...::connect(...) [future, Ok] | semmle.label | ...::connect(...) [future, Ok] | | test.rs:373:19:373:47 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:373:19:373:48 | TryExpr | semmle.label | TryExpr | @@ -700,57 +700,57 @@ nodes subpaths testFailures #select -| test.rs:12:10:12:23 | remote_string1 | test.rs:11:26:11:47 | ...::get | test.rs:12:10:12:23 | remote_string1 | $@ | test.rs:11:26:11:47 | ...::get | ...::get | -| test.rs:15:10:15:23 | remote_string2 | test.rs:14:26:14:47 | ...::get | test.rs:15:10:15:23 | remote_string2 | $@ | test.rs:14:26:14:47 | ...::get | ...::get | -| test.rs:18:10:18:23 | remote_string3 | test.rs:17:26:17:47 | ...::get | test.rs:18:10:18:23 | remote_string3 | $@ | test.rs:17:26:17:47 | ...::get | ...::get | -| test.rs:21:10:21:23 | remote_string4 | test.rs:20:26:20:47 | ...::get | test.rs:21:10:21:23 | remote_string4 | $@ | test.rs:20:26:20:47 | ...::get | ...::get | -| test.rs:24:10:24:23 | remote_string5 | test.rs:23:26:23:37 | ...::get | test.rs:24:10:24:23 | remote_string5 | $@ | test.rs:23:26:23:37 | ...::get | ...::get | -| test.rs:27:10:27:23 | remote_string6 | test.rs:26:26:26:37 | ...::get | test.rs:27:10:27:23 | remote_string6 | $@ | test.rs:26:26:26:37 | ...::get | ...::get | -| test.rs:30:10:30:41 | ... .unwrap() | test.rs:29:24:29:35 | ...::get | test.rs:30:10:30:41 | ... .unwrap() | $@ | test.rs:29:24:29:35 | ...::get | ...::get | -| test.rs:32:14:32:18 | chunk | test.rs:29:24:29:35 | ...::get | test.rs:32:14:32:18 | chunk | $@ | test.rs:29:24:29:35 | ...::get | ...::get | -| test.rs:61:14:61:22 | &response | test.rs:60:31:60:42 | send_request | test.rs:61:14:61:22 | &response | $@ | test.rs:60:31:60:42 | send_request | send_request | -| test.rs:62:14:62:21 | response | test.rs:60:31:60:42 | send_request | test.rs:62:14:62:21 | response | $@ | test.rs:60:31:60:42 | send_request | send_request | -| test.rs:68:10:68:18 | &response | test.rs:67:31:67:42 | send_request | test.rs:68:10:68:18 | &response | $@ | test.rs:67:31:67:42 | send_request | send_request | -| test.rs:76:18:76:32 | response.body() | test.rs:67:31:67:42 | send_request | test.rs:76:18:76:32 | response.body() | $@ | test.rs:67:31:67:42 | send_request | send_request | -| test.rs:77:18:77:36 | response.body_mut() | test.rs:67:31:67:42 | send_request | test.rs:77:18:77:36 | response.body_mut() | $@ | test.rs:67:31:67:42 | send_request | send_request | -| test.rs:80:18:80:22 | &body | test.rs:67:31:67:42 | send_request | test.rs:80:18:80:22 | &body | $@ | test.rs:67:31:67:42 | send_request | send_request | -| test.rs:165:14:165:20 | &buffer | test.rs:155:26:155:53 | ...::connect | test.rs:165:14:165:20 | &buffer | $@ | test.rs:155:26:155:53 | ...::connect | ...::connect | -| test.rs:166:14:166:22 | buffer[0] | test.rs:155:26:155:53 | ...::connect | test.rs:166:14:166:22 | buffer[0] | $@ | test.rs:155:26:155:53 | ...::connect | ...::connect | -| test.rs:192:34:192:38 | &line | test.rs:174:26:174:61 | ...::connect_timeout | test.rs:192:34:192:38 | &line | $@ | test.rs:174:26:174:61 | ...::connect_timeout | ...::connect_timeout | -| test.rs:207:30:207:35 | string | test.rs:174:26:174:61 | ...::connect_timeout | test.rs:207:30:207:35 | string | $@ | test.rs:174:26:174:61 | ...::connect_timeout | ...::connect_timeout | -| test.rs:239:14:239:21 | &buffer1 | test.rs:224:28:224:57 | ...::connect | test.rs:239:14:239:21 | &buffer1 | $@ | test.rs:224:28:224:57 | ...::connect | ...::connect | -| test.rs:240:14:240:23 | buffer1[0] | test.rs:224:28:224:57 | ...::connect | test.rs:240:14:240:23 | buffer1[0] | $@ | test.rs:224:28:224:57 | ...::connect | ...::connect | -| test.rs:243:14:243:21 | &buffer2 | test.rs:224:28:224:57 | ...::connect | test.rs:243:14:243:21 | &buffer2 | $@ | test.rs:224:28:224:57 | ...::connect | ...::connect | -| test.rs:244:14:244:23 | buffer2[0] | test.rs:224:28:224:57 | ...::connect | test.rs:244:14:244:23 | buffer2[0] | $@ | test.rs:224:28:224:57 | ...::connect | ...::connect | -| test.rs:259:26:259:32 | &buffer | test.rs:224:28:224:57 | ...::connect | test.rs:259:26:259:32 | &buffer | $@ | test.rs:224:28:224:57 | ...::connect | ...::connect | -| test.rs:282:26:282:32 | &buffer | test.rs:224:28:224:57 | ...::connect | test.rs:282:26:282:32 | &buffer | $@ | test.rs:224:28:224:57 | ...::connect | ...::connect | -| test.rs:334:10:334:16 | &reader | test.rs:332:22:332:50 | ...::new | test.rs:334:10:334:16 | &reader | $@ | test.rs:332:22:332:50 | ...::new | ...::new | -| test.rs:339:14:339:20 | &buffer | test.rs:332:22:332:50 | ...::new | test.rs:339:14:339:20 | &buffer | $@ | test.rs:332:22:332:50 | ...::new | ...::new | -| test.rs:345:14:345:20 | &buffer | test.rs:332:22:332:50 | ...::new | test.rs:345:14:345:20 | &buffer | $@ | test.rs:332:22:332:50 | ...::new | ...::new | -| test.rs:351:14:351:20 | &buffer | test.rs:332:22:332:50 | ...::new | test.rs:351:14:351:20 | &buffer | $@ | test.rs:332:22:332:50 | ...::new | ...::new | -| test.rs:374:14:374:17 | &tcp | test.rs:373:19:373:36 | ...::connect | test.rs:374:14:374:17 | &tcp | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:381:14:381:20 | &reader | test.rs:373:19:373:36 | ...::connect | test.rs:381:14:381:20 | &reader | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:387:18:387:24 | &pinned | test.rs:373:19:373:36 | ...::connect | test.rs:387:18:387:24 | &pinned | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:391:22:391:28 | &buffer | test.rs:373:19:373:36 | ...::connect | test.rs:391:22:391:28 | &buffer | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:392:22:392:33 | &... | test.rs:373:19:373:36 | ...::connect | test.rs:392:22:392:33 | &... | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:400:18:400:40 | &... | test.rs:373:19:373:36 | ...::connect | test.rs:400:18:400:40 | &... | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:405:18:405:40 | &... | test.rs:373:19:373:36 | ...::connect | test.rs:405:18:405:40 | &... | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:409:14:409:21 | &reader2 | test.rs:373:19:373:36 | ...::connect | test.rs:409:14:409:21 | &reader2 | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:414:18:414:24 | &pinned | test.rs:373:19:373:36 | ...::connect | test.rs:414:18:414:24 | &pinned | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:418:22:418:28 | &buffer | test.rs:373:19:373:36 | ...::connect | test.rs:418:22:418:28 | &buffer | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:419:22:419:24 | buf | test.rs:373:19:373:36 | ...::connect | test.rs:419:22:419:24 | buf | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:426:26:426:33 | &buffer2 | test.rs:373:19:373:36 | ...::connect | test.rs:426:26:426:33 | &buffer2 | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:427:26:427:28 | buf | test.rs:373:19:373:36 | ...::connect | test.rs:427:26:427:28 | buf | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:438:18:438:23 | buffer | test.rs:373:19:373:36 | ...::connect | test.rs:438:18:438:23 | buffer | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:445:18:445:24 | &pinned | test.rs:373:19:373:36 | ...::connect | test.rs:445:18:445:24 | &pinned | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:448:18:448:24 | &buffer | test.rs:373:19:373:36 | ...::connect | test.rs:448:18:448:24 | &buffer | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:450:22:450:33 | &... | test.rs:373:19:373:36 | ...::connect | test.rs:450:22:450:33 | &... | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:458:18:458:40 | &... | test.rs:373:19:373:36 | ...::connect | test.rs:458:18:458:40 | &... | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:462:18:462:40 | &... | test.rs:373:19:373:36 | ...::connect | test.rs:462:18:462:40 | &... | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:468:18:468:24 | &pinned | test.rs:373:19:373:36 | ...::connect | test.rs:468:18:468:24 | &pinned | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:471:18:471:24 | &buffer | test.rs:373:19:373:36 | ...::connect | test.rs:471:18:471:24 | &buffer | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:473:22:473:24 | buf | test.rs:373:19:373:36 | ...::connect | test.rs:473:22:473:24 | buf | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:480:18:480:23 | buffer | test.rs:373:19:373:36 | ...::connect | test.rs:480:18:480:23 | buffer | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:487:18:487:22 | &line | test.rs:373:19:373:36 | ...::connect | test.rs:487:18:487:22 | &line | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:494:18:494:22 | &line | test.rs:373:19:373:36 | ...::connect | test.rs:494:18:494:22 | &line | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | -| test.rs:501:18:501:24 | &buffer | test.rs:373:19:373:36 | ...::connect | test.rs:501:18:501:24 | &buffer | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:12:10:12:23 | remote_string1 | test.rs:11:26:11:62 | ...::get(...) | test.rs:12:10:12:23 | remote_string1 | $@ | test.rs:11:26:11:62 | ...::get(...) | ...::get(...) | +| test.rs:15:10:15:23 | remote_string2 | test.rs:14:26:14:62 | ...::get(...) | test.rs:15:10:15:23 | remote_string2 | $@ | test.rs:14:26:14:62 | ...::get(...) | ...::get(...) | +| test.rs:18:10:18:23 | remote_string3 | test.rs:17:26:17:62 | ...::get(...) | test.rs:18:10:18:23 | remote_string3 | $@ | test.rs:17:26:17:62 | ...::get(...) | ...::get(...) | +| test.rs:21:10:21:23 | remote_string4 | test.rs:20:26:20:62 | ...::get(...) | test.rs:21:10:21:23 | remote_string4 | $@ | test.rs:20:26:20:62 | ...::get(...) | ...::get(...) | +| test.rs:24:10:24:23 | remote_string5 | test.rs:23:26:23:52 | ...::get(...) | test.rs:24:10:24:23 | remote_string5 | $@ | test.rs:23:26:23:52 | ...::get(...) | ...::get(...) | +| test.rs:27:10:27:23 | remote_string6 | test.rs:26:26:26:52 | ...::get(...) | test.rs:27:10:27:23 | remote_string6 | $@ | test.rs:26:26:26:52 | ...::get(...) | ...::get(...) | +| test.rs:30:10:30:41 | ... .unwrap() | test.rs:29:24:29:50 | ...::get(...) | test.rs:30:10:30:41 | ... .unwrap() | $@ | test.rs:29:24:29:50 | ...::get(...) | ...::get(...) | +| test.rs:32:14:32:18 | chunk | test.rs:29:24:29:50 | ...::get(...) | test.rs:32:14:32:18 | chunk | $@ | test.rs:29:24:29:50 | ...::get(...) | ...::get(...) | +| test.rs:61:14:61:22 | &response | test.rs:60:24:60:51 | sender.send_request(...) | test.rs:61:14:61:22 | &response | $@ | test.rs:60:24:60:51 | sender.send_request(...) | sender.send_request(...) | +| test.rs:62:14:62:21 | response | test.rs:60:24:60:51 | sender.send_request(...) | test.rs:62:14:62:21 | response | $@ | test.rs:60:24:60:51 | sender.send_request(...) | sender.send_request(...) | +| test.rs:68:10:68:18 | &response | test.rs:67:24:67:51 | sender.send_request(...) | test.rs:68:10:68:18 | &response | $@ | test.rs:67:24:67:51 | sender.send_request(...) | sender.send_request(...) | +| test.rs:76:18:76:32 | response.body() | test.rs:67:24:67:51 | sender.send_request(...) | test.rs:76:18:76:32 | response.body() | $@ | test.rs:67:24:67:51 | sender.send_request(...) | sender.send_request(...) | +| test.rs:77:18:77:36 | response.body_mut() | test.rs:67:24:67:51 | sender.send_request(...) | test.rs:77:18:77:36 | response.body_mut() | $@ | test.rs:67:24:67:51 | sender.send_request(...) | sender.send_request(...) | +| test.rs:80:18:80:22 | &body | test.rs:67:24:67:51 | sender.send_request(...) | test.rs:80:18:80:22 | &body | $@ | test.rs:67:24:67:51 | sender.send_request(...) | sender.send_request(...) | +| test.rs:165:14:165:20 | &buffer | test.rs:155:26:155:62 | ...::connect(...) | test.rs:165:14:165:20 | &buffer | $@ | test.rs:155:26:155:62 | ...::connect(...) | ...::connect(...) | +| test.rs:166:14:166:22 | buffer[0] | test.rs:155:26:155:62 | ...::connect(...) | test.rs:166:14:166:22 | buffer[0] | $@ | test.rs:155:26:155:62 | ...::connect(...) | ...::connect(...) | +| test.rs:192:34:192:38 | &line | test.rs:174:26:174:105 | ...::connect_timeout(...) | test.rs:192:34:192:38 | &line | $@ | test.rs:174:26:174:105 | ...::connect_timeout(...) | ...::connect_timeout(...) | +| test.rs:207:30:207:35 | string | test.rs:174:26:174:105 | ...::connect_timeout(...) | test.rs:207:30:207:35 | string | $@ | test.rs:174:26:174:105 | ...::connect_timeout(...) | ...::connect_timeout(...) | +| test.rs:239:14:239:21 | &buffer1 | test.rs:224:28:224:66 | ...::connect(...) | test.rs:239:14:239:21 | &buffer1 | $@ | test.rs:224:28:224:66 | ...::connect(...) | ...::connect(...) | +| test.rs:240:14:240:23 | buffer1[0] | test.rs:224:28:224:66 | ...::connect(...) | test.rs:240:14:240:23 | buffer1[0] | $@ | test.rs:224:28:224:66 | ...::connect(...) | ...::connect(...) | +| test.rs:243:14:243:21 | &buffer2 | test.rs:224:28:224:66 | ...::connect(...) | test.rs:243:14:243:21 | &buffer2 | $@ | test.rs:224:28:224:66 | ...::connect(...) | ...::connect(...) | +| test.rs:244:14:244:23 | buffer2[0] | test.rs:224:28:224:66 | ...::connect(...) | test.rs:244:14:244:23 | buffer2[0] | $@ | test.rs:224:28:224:66 | ...::connect(...) | ...::connect(...) | +| test.rs:259:26:259:32 | &buffer | test.rs:224:28:224:66 | ...::connect(...) | test.rs:259:26:259:32 | &buffer | $@ | test.rs:224:28:224:66 | ...::connect(...) | ...::connect(...) | +| test.rs:282:26:282:32 | &buffer | test.rs:224:28:224:66 | ...::connect(...) | test.rs:282:26:282:32 | &buffer | $@ | test.rs:224:28:224:66 | ...::connect(...) | ...::connect(...) | +| test.rs:334:10:334:16 | &reader | test.rs:332:22:332:75 | ...::new(...) | test.rs:334:10:334:16 | &reader | $@ | test.rs:332:22:332:75 | ...::new(...) | ...::new(...) | +| test.rs:339:14:339:20 | &buffer | test.rs:332:22:332:75 | ...::new(...) | test.rs:339:14:339:20 | &buffer | $@ | test.rs:332:22:332:75 | ...::new(...) | ...::new(...) | +| test.rs:345:14:345:20 | &buffer | test.rs:332:22:332:75 | ...::new(...) | test.rs:345:14:345:20 | &buffer | $@ | test.rs:332:22:332:75 | ...::new(...) | ...::new(...) | +| test.rs:351:14:351:20 | &buffer | test.rs:332:22:332:75 | ...::new(...) | test.rs:351:14:351:20 | &buffer | $@ | test.rs:332:22:332:75 | ...::new(...) | ...::new(...) | +| test.rs:374:14:374:17 | &tcp | test.rs:373:19:373:41 | ...::connect(...) | test.rs:374:14:374:17 | &tcp | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:381:14:381:20 | &reader | test.rs:373:19:373:41 | ...::connect(...) | test.rs:381:14:381:20 | &reader | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:387:18:387:24 | &pinned | test.rs:373:19:373:41 | ...::connect(...) | test.rs:387:18:387:24 | &pinned | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:391:22:391:28 | &buffer | test.rs:373:19:373:41 | ...::connect(...) | test.rs:391:22:391:28 | &buffer | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:392:22:392:33 | &... | test.rs:373:19:373:41 | ...::connect(...) | test.rs:392:22:392:33 | &... | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:400:18:400:40 | &... | test.rs:373:19:373:41 | ...::connect(...) | test.rs:400:18:400:40 | &... | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:405:18:405:40 | &... | test.rs:373:19:373:41 | ...::connect(...) | test.rs:405:18:405:40 | &... | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:409:14:409:21 | &reader2 | test.rs:373:19:373:41 | ...::connect(...) | test.rs:409:14:409:21 | &reader2 | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:414:18:414:24 | &pinned | test.rs:373:19:373:41 | ...::connect(...) | test.rs:414:18:414:24 | &pinned | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:418:22:418:28 | &buffer | test.rs:373:19:373:41 | ...::connect(...) | test.rs:418:22:418:28 | &buffer | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:419:22:419:24 | buf | test.rs:373:19:373:41 | ...::connect(...) | test.rs:419:22:419:24 | buf | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:426:26:426:33 | &buffer2 | test.rs:373:19:373:41 | ...::connect(...) | test.rs:426:26:426:33 | &buffer2 | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:427:26:427:28 | buf | test.rs:373:19:373:41 | ...::connect(...) | test.rs:427:26:427:28 | buf | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:438:18:438:23 | buffer | test.rs:373:19:373:41 | ...::connect(...) | test.rs:438:18:438:23 | buffer | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:445:18:445:24 | &pinned | test.rs:373:19:373:41 | ...::connect(...) | test.rs:445:18:445:24 | &pinned | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:448:18:448:24 | &buffer | test.rs:373:19:373:41 | ...::connect(...) | test.rs:448:18:448:24 | &buffer | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:450:22:450:33 | &... | test.rs:373:19:373:41 | ...::connect(...) | test.rs:450:22:450:33 | &... | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:458:18:458:40 | &... | test.rs:373:19:373:41 | ...::connect(...) | test.rs:458:18:458:40 | &... | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:462:18:462:40 | &... | test.rs:373:19:373:41 | ...::connect(...) | test.rs:462:18:462:40 | &... | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:468:18:468:24 | &pinned | test.rs:373:19:373:41 | ...::connect(...) | test.rs:468:18:468:24 | &pinned | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:471:18:471:24 | &buffer | test.rs:373:19:373:41 | ...::connect(...) | test.rs:471:18:471:24 | &buffer | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:473:22:473:24 | buf | test.rs:373:19:373:41 | ...::connect(...) | test.rs:473:22:473:24 | buf | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:480:18:480:23 | buffer | test.rs:373:19:373:41 | ...::connect(...) | test.rs:480:18:480:23 | buffer | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:487:18:487:22 | &line | test.rs:373:19:373:41 | ...::connect(...) | test.rs:487:18:487:22 | &line | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:494:18:494:22 | &line | test.rs:373:19:373:41 | ...::connect(...) | test.rs:494:18:494:22 | &line | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:501:18:501:24 | &buffer | test.rs:373:19:373:41 | ...::connect(...) | test.rs:501:18:501:24 | &buffer | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | diff --git a/rust/ql/test/library-tests/dataflow/sources/net/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/net/TaintSources.expected index bfe1ce0e56bc..bf0333168e4b 100644 --- a/rust/ql/test/library-tests/dataflow/sources/net/TaintSources.expected +++ b/rust/ql/test/library-tests/dataflow/sources/net/TaintSources.expected @@ -1,17 +1,17 @@ -| test.rs:11:26:11:47 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:14:26:14:47 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:17:26:17:47 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:20:26:20:47 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:23:26:23:37 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:26:26:26:37 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:29:24:29:35 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:45:18:45:47 | ...::connect | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:60:31:60:42 | send_request | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:67:31:67:42 | send_request | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:155:26:155:53 | ...::connect | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:174:26:174:61 | ...::connect_timeout | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:224:28:224:57 | ...::connect | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:306:22:306:49 | ...::connect | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:332:22:332:50 | ...::new | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:373:19:373:36 | ...::connect | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:519:16:519:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:11:26:11:62 | ...::get(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:14:26:14:62 | ...::get(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:17:26:17:62 | ...::get(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:20:26:20:62 | ...::get(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:23:26:23:52 | ...::get(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:26:26:26:52 | ...::get(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:29:24:29:50 | ...::get(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:45:18:45:56 | ...::connect(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:60:24:60:51 | sender.send_request(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:67:24:67:51 | sender.send_request(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:155:26:155:62 | ...::connect(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:174:26:174:105 | ...::connect_timeout(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:224:28:224:66 | ...::connect(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:306:22:306:58 | ...::connect(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:332:22:332:75 | ...::new(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:373:19:373:41 | ...::connect(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:519:16:519:31 | ...::args(...) | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | 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 c407a05f90d2..9ab00ca84e9f 100644 --- a/rust/ql/test/library-tests/dataflow/sources/stdin/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/stdin/InlineFlow.expected @@ -40,39 +40,39 @@ models | 39 | Summary: ::next_line; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | | 40 | 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: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:31 | | 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: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:33 | | 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: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:34 | | 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:37 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | | test.rs:31:22:31:37 | ...::stdin(...) | test.rs:31:22:31:44 | ... .lock() | provenance | MaD:35 | | test.rs:31:22:31:44 | ... .lock() | test.rs:31:61:31:71 | [post] &mut buffer [&ref] | provenance | MaD:36 | | 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: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:32 | | 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:32 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | | test.rs:41:17:41:32 | ...::stdin(...) | test.rs:41:17:41:40 | ... .bytes() | provenance | MaD:10 | | 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:30 | +| test.rs:48:50:48:65 | ...::stdin(...) | test.rs:48:50:48:65 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | | 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:28 | | test.rs:49:20:49:36 | reader.fill_buf() [Ok] | test.rs:49:20:49:37 | TryExpr | provenance | | @@ -80,24 +80,24 @@ edges | 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:30 | +| test.rs:54:46:54:61 | ...::stdin(...) | test.rs:54:46:54:61 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | | 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:29 | | 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:30 | +| test.rs:61:50:61:65 | ...::stdin(...) | test.rs:61:50:61:65 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | | test.rs:62:9:62:14 | reader | test.rs:62:26:62:36 | [post] &mut buffer [&ref] | provenance | MaD:7 | | 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:30 | +| test.rs:68:50:68:65 | ...::stdin(...) | test.rs:68:50:68:65 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | | test.rs:69:9:69:14 | reader | test.rs:69:33:69:43 | [post] &mut buffer [&ref] | provenance | MaD:8 | | 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 | | @@ -108,8 +108,8 @@ edges | 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:9 | | 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:30 | +| test.rs:75:56:75:71 | ...::stdin(...) | test.rs:75:56:75:71 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | | test.rs:76:14:76:25 | reader_split | test.rs:76:14:76:32 | reader_split.next() [Some, Ok] | provenance | MaD:27 | | test.rs:76:14:76:32 | reader_split.next() [Some, Ok] | test.rs:76:14:76:41 | ... .unwrap() [Ok] | provenance | MaD:25 | | test.rs:76:14:76:41 | ... .unwrap() [Ok] | test.rs:76:14:76:50 | ... .unwrap() | provenance | MaD:26 | @@ -120,14 +120,14 @@ edges | test.rs:78:18:78:22 | chunk [Ok] | test.rs:78:18:78:31 | chunk.unwrap() | provenance | MaD:26 | | 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:30 | +| test.rs:83:46:83:61 | ...::stdin(...) | test.rs:83:46:83:61 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | | test.rs:84:21:84:26 | reader | test.rs:84:21:84:34 | reader.lines() | provenance | MaD:6 | | test.rs:84:21:84:34 | reader.lines() | test.rs:85:18:85:21 | line | provenance | | | test.rs:90:13:90:18 | reader | test.rs:91:20:91:25 | reader | provenance | | | test.rs:90:22:90:62 | ...::new(...) | test.rs:90:13:90:18 | reader | provenance | | -| test.rs:90:46:90:59 | ...::stdin | test.rs:90:46:90:61 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | | test.rs:90:46:90:61 | ...::stdin(...) | test.rs:90:22:90:62 | ...::new(...) | provenance | MaD:30 | +| test.rs:90:46:90:61 | ...::stdin(...) | test.rs:90:46:90:61 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | | test.rs:91:13:91:16 | line | test.rs:92:14:92:17 | line | provenance | | | test.rs:91:20:91:25 | reader | test.rs:91:20:91:33 | reader.lines() | provenance | MaD:6 | | test.rs:91:20:91:33 | reader.lines() | test.rs:91:20:91:40 | ... .nth(...) [Some] | provenance | MaD:4 | @@ -136,29 +136,25 @@ edges | test.rs:92:14:92:17 | line | test.rs:92:14:92:26 | line.unwrap() | provenance | MaD:26 | | test.rs:92:14:92:26 | line.unwrap() | test.rs:92:14:92:34 | ... .clone() | provenance | MaD:3 | | 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:109:25:109:42 | ...::stdin(...) | test.rs:109:13:109:21 | mut stdin | provenance | Src:MaD:2 MaD:2 | | test.rs:111:22:111:26 | stdin | test.rs:111:33:111:43 | [post] &mut buffer [&ref] | provenance | MaD:16 | | 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:116:25:116:42 | ...::stdin(...) | test.rs:116:13:116:21 | mut stdin | provenance | Src:MaD:2 MaD:2 | | test.rs:118:22:118:26 | stdin | test.rs:118:40:118:50 | [post] &mut buffer [&ref] | provenance | MaD:22 | | 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:123:25:123:42 | ...::stdin(...) | test.rs:123:13:123:21 | mut stdin | provenance | Src:MaD:2 MaD:2 | | test.rs:125:22:125:26 | stdin | test.rs:125:43:125:53 | [post] &mut buffer [&ref] | provenance | MaD:23 | | 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:130:25:130:42 | ...::stdin(...) | test.rs:130:13:130:21 | mut stdin | provenance | Src:MaD:2 MaD:2 | | test.rs:132:9:132:13 | stdin | test.rs:132:26:132:36 | [post] &mut buffer [&ref] | provenance | MaD:18 | | 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 | | @@ -167,8 +163,7 @@ edges | test.rs:137:13:137:21 | mut stdin | test.rs:139:18:139:22 | stdin | provenance | | | test.rs:137:13:137:21 | mut stdin | test.rs:140:18:140:22 | stdin | provenance | | | test.rs:137:13:137:21 | mut stdin | test.rs:141:18:141:22 | stdin | provenance | | -| 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:137:25:137:42 | ...::stdin(...) | test.rs:137:13:137:21 | mut stdin | provenance | Src:MaD:2 MaD:2 | | 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:24 | | test.rs:138:18:138:32 | stdin.read_u8() [future, Ok] | test.rs:138:18:138:38 | await ... [Ok] | provenance | | @@ -190,16 +185,15 @@ edges | 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:149:25:149:42 | ...::stdin(...) | test.rs:149:13:149:21 | mut stdin | provenance | Src:MaD:2 MaD:2 | | test.rs:151:9:151:13 | stdin | test.rs:151:24:151:34 | [post] &mut buffer [&ref] | provenance | MaD:17 | | 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:38 | +| test.rs:158:52:158:69 | ...::stdin(...) | test.rs:158:52:158:69 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | | 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:11 | | test.rs:159:20:159:36 | reader.fill_buf() [future, Ok] | test.rs:159:20:159:42 | await ... [Ok] | provenance | | @@ -208,24 +202,24 @@ edges | test.rs:160:15:160:18 | data | test.rs:160:14:160:18 | &data | provenance | | | 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:38 | +| test.rs:164:48:164:65 | ...::stdin(...) | test.rs:164:48:164:65 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | | 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:37 | | 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:38 | +| test.rs:171:52:171:69 | ...::stdin(...) | test.rs:171:52:171:69 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | | test.rs:172:9:172:14 | reader | test.rs:172:26:172:36 | [post] &mut buffer [&ref] | provenance | MaD:13 | | 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:38 | +| test.rs:178:52:178:69 | ...::stdin(...) | test.rs:178:52:178:69 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | | test.rs:179:9:179:14 | reader | test.rs:179:33:179:43 | [post] &mut buffer [&ref] | provenance | MaD:14 | | 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 | | @@ -236,8 +230,8 @@ edges | 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:15 | | 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:38 | +| test.rs:185:58:185:75 | ...::stdin(...) | test.rs:185:58:185:75 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | | test.rs:186:14:186:25 | reader_split | test.rs:186:14:186:40 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:40 | | 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 | | @@ -250,8 +244,8 @@ edges | 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:38 | +| test.rs:193:48:193:65 | ...::stdin(...) | test.rs:193:48:193:65 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | | 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:12 | @@ -267,44 +261,44 @@ edges | 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 | | nodes -| test.rs:13:22:13:35 | ...::stdin | semmle.label | ...::stdin | +| test.rs:13:22:13:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:13:22:13:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:13:44:13:54 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:13:49:13:54 | [post] buffer | semmle.label | [post] buffer | | test.rs:14:14:14:20 | &buffer | semmle.label | &buffer | | test.rs:14:15:14:20 | buffer | semmle.label | buffer | -| test.rs:19:22:19:35 | ...::stdin | semmle.label | ...::stdin | +| test.rs:19:22:19:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:19:22:19:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:19:51:19:61 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:19:56:19:61 | [post] buffer | semmle.label | [post] buffer | | test.rs:20:14:20:20 | &buffer | semmle.label | &buffer | | test.rs:20:15:20:20 | buffer | semmle.label | buffer | -| test.rs:25:22:25:35 | ...::stdin | semmle.label | ...::stdin | +| test.rs:25:22:25:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:25:22:25:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:25:54:25:64 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:25:59:25:64 | [post] buffer | semmle.label | [post] buffer | | test.rs:26:14:26:20 | &buffer | semmle.label | &buffer | | test.rs:26:15:26:20 | buffer | semmle.label | buffer | -| test.rs:31:22:31:35 | ...::stdin | semmle.label | ...::stdin | +| test.rs:31:22:31:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:31:22:31:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:31:22:31:44 | ... .lock() | semmle.label | ... .lock() | | test.rs:31:61:31:71 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:31:66:31:71 | [post] buffer | semmle.label | [post] buffer | | test.rs:32:14:32:20 | &buffer | semmle.label | &buffer | | test.rs:32:15:32:20 | buffer | semmle.label | buffer | -| test.rs:37:9:37:22 | ...::stdin | semmle.label | ...::stdin | +| test.rs:37:9:37:24 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:37:9:37:24 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:37:37:37:47 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | | test.rs:37:42:37:47 | [post] buffer | semmle.label | [post] buffer | | test.rs:38:14:38:20 | &buffer | semmle.label | &buffer | | test.rs:38:15:38:20 | buffer | semmle.label | buffer | -| test.rs:41:17:41:30 | ...::stdin | semmle.label | ...::stdin | +| test.rs:41:17:41:32 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:41:17:41:32 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:41:17:41:40 | ... .bytes() | semmle.label | ... .bytes() | | test.rs:42:14:42:17 | byte | semmle.label | byte | | test.rs:48:13:48:22 | mut reader | semmle.label | mut reader | | test.rs:48:26:48:66 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:48:50:48:63 | ...::stdin | semmle.label | ...::stdin | +| test.rs:48:50:48:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:48:50:48:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:49:13:49:16 | data | semmle.label | data | | test.rs:49:20:49:25 | reader | semmle.label | reader | @@ -314,7 +308,7 @@ nodes | test.rs:50:15:50:18 | data | semmle.label | data | | test.rs:54:13:54:18 | reader | semmle.label | reader | | test.rs:54:22:54:62 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:54:46:54:59 | ...::stdin | semmle.label | ...::stdin | +| test.rs:54:46:54:61 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:54:46:54:61 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:55:13:55:16 | data [&ref] | semmle.label | data [&ref] | | test.rs:55:20:55:25 | reader | semmle.label | reader | @@ -323,7 +317,7 @@ nodes | test.rs:56:15:56:18 | data [&ref] | semmle.label | data [&ref] | | test.rs:61:13:61:22 | mut reader | semmle.label | mut reader | | test.rs:61:26:61:66 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:61:50:61:63 | ...::stdin | semmle.label | ...::stdin | +| test.rs:61:50:61:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:61:50:61:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:62:9:62:14 | reader | semmle.label | reader | | test.rs:62:26:62:36 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | @@ -332,7 +326,7 @@ nodes | test.rs:63:15:63:20 | buffer | semmle.label | buffer | | test.rs:68:13:68:22 | mut reader | semmle.label | mut reader | | test.rs:68:26:68:66 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:68:50:68:63 | ...::stdin | semmle.label | ...::stdin | +| test.rs:68:50:68:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:68:50:68:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:69:9:69:14 | reader | semmle.label | reader | | test.rs:69:33:69:43 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | @@ -344,7 +338,7 @@ nodes | test.rs:75:13:75:28 | mut reader_split | semmle.label | mut reader_split | | test.rs:75:32:75:72 | ...::new(...) | semmle.label | ...::new(...) | | test.rs:75:32:75:84 | ... .split(...) | semmle.label | ... .split(...) | -| test.rs:75:56:75:69 | ...::stdin | semmle.label | ...::stdin | +| test.rs:75:56:75:71 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:75:56:75:71 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:76:14:76:25 | reader_split | semmle.label | reader_split | | test.rs:76:14:76:32 | reader_split.next() [Some, Ok] | semmle.label | reader_split.next() [Some, Ok] | @@ -358,14 +352,14 @@ nodes | test.rs:78:18:78:31 | chunk.unwrap() | semmle.label | chunk.unwrap() | | test.rs:83:13:83:18 | reader | semmle.label | reader | | test.rs:83:22:83:62 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:83:46:83:59 | ...::stdin | semmle.label | ...::stdin | +| test.rs:83:46:83:61 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:83:46:83:61 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:84:21:84:26 | reader | semmle.label | reader | | test.rs:84:21:84:34 | reader.lines() | semmle.label | reader.lines() | | test.rs:85:18:85:21 | line | semmle.label | line | | test.rs:90:13:90:18 | reader | semmle.label | reader | | test.rs:90:22:90:62 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:90:46:90:59 | ...::stdin | semmle.label | ...::stdin | +| test.rs:90:46:90:61 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:90:46:90:61 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:91:13:91:16 | line | semmle.label | line | | test.rs:91:20:91:25 | reader | semmle.label | reader | @@ -376,7 +370,6 @@ nodes | test.rs:92:14:92:26 | line.unwrap() | semmle.label | line.unwrap() | | test.rs:92:14:92:34 | ... .clone() | semmle.label | ... .clone() | | test.rs:109:13:109:21 | mut stdin | semmle.label | mut stdin | -| test.rs:109:25:109:40 | ...::stdin | semmle.label | ...::stdin | | test.rs:109:25:109:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:111:22:111:26 | stdin | semmle.label | stdin | | test.rs:111:33:111:43 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | @@ -384,7 +377,6 @@ nodes | test.rs:112:14:112:20 | &buffer | semmle.label | &buffer | | test.rs:112:15:112:20 | buffer | semmle.label | buffer | | test.rs:116:13:116:21 | mut stdin | semmle.label | mut stdin | -| test.rs:116:25:116:40 | ...::stdin | semmle.label | ...::stdin | | test.rs:116:25:116:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:118:22:118:26 | stdin | semmle.label | stdin | | test.rs:118:40:118:50 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | @@ -392,7 +384,6 @@ nodes | test.rs:119:14:119:20 | &buffer | semmle.label | &buffer | | test.rs:119:15:119:20 | buffer | semmle.label | buffer | | test.rs:123:13:123:21 | mut stdin | semmle.label | mut stdin | -| test.rs:123:25:123:40 | ...::stdin | semmle.label | ...::stdin | | test.rs:123:25:123:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:125:22:125:26 | stdin | semmle.label | stdin | | test.rs:125:43:125:53 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | @@ -400,7 +391,6 @@ nodes | test.rs:126:14:126:20 | &buffer | semmle.label | &buffer | | test.rs:126:15:126:20 | buffer | semmle.label | buffer | | test.rs:130:13:130:21 | mut stdin | semmle.label | mut stdin | -| test.rs:130:25:130:40 | ...::stdin | semmle.label | ...::stdin | | test.rs:130:25:130:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:132:9:132:13 | stdin | semmle.label | stdin | | test.rs:132:26:132:36 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | @@ -408,7 +398,6 @@ nodes | test.rs:133:14:133:20 | &buffer | semmle.label | &buffer | | test.rs:133:15:133:20 | buffer | semmle.label | buffer | | test.rs:137:13:137:21 | mut stdin | semmle.label | mut stdin | -| test.rs:137:25:137:40 | ...::stdin | semmle.label | ...::stdin | | test.rs:137:25:137:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:138:13:138:14 | v1 | semmle.label | v1 | | test.rs:138:18:138:22 | stdin | semmle.label | stdin | @@ -435,7 +424,6 @@ nodes | test.rs:144:14:144:15 | v3 | semmle.label | v3 | | test.rs:145:14:145:15 | v4 | semmle.label | v4 | | test.rs:149:13:149:21 | mut stdin | semmle.label | mut stdin | -| test.rs:149:25:149:40 | ...::stdin | semmle.label | ...::stdin | | test.rs:149:25:149:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:151:9:151:13 | stdin | semmle.label | stdin | | test.rs:151:24:151:34 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | @@ -444,7 +432,7 @@ nodes | test.rs:152:15:152:20 | buffer | semmle.label | buffer | | test.rs:158:13:158:22 | mut reader | semmle.label | mut reader | | test.rs:158:26:158:70 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:158:52:158:67 | ...::stdin | semmle.label | ...::stdin | +| test.rs:158:52:158:69 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:158:52:158:69 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:159:13:159:16 | data | semmle.label | data | | test.rs:159:20:159:25 | reader | semmle.label | reader | @@ -455,7 +443,7 @@ nodes | test.rs:160:15:160:18 | data | semmle.label | data | | test.rs:164:13:164:18 | reader | semmle.label | reader | | test.rs:164:22:164:66 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:164:48:164:63 | ...::stdin | semmle.label | ...::stdin | +| test.rs:164:48:164:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:164:48:164:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:165:13:165:16 | data [&ref] | semmle.label | data [&ref] | | test.rs:165:20:165:25 | reader | semmle.label | reader | @@ -464,7 +452,7 @@ nodes | test.rs:166:15:166:18 | data [&ref] | semmle.label | data [&ref] | | test.rs:171:13:171:22 | mut reader | semmle.label | mut reader | | test.rs:171:26:171:70 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:171:52:171:67 | ...::stdin | semmle.label | ...::stdin | +| test.rs:171:52:171:69 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:171:52:171:69 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:172:9:172:14 | reader | semmle.label | reader | | test.rs:172:26:172:36 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | @@ -473,7 +461,7 @@ nodes | test.rs:173:15:173:20 | buffer | semmle.label | buffer | | test.rs:178:13:178:22 | mut reader | semmle.label | mut reader | | test.rs:178:26:178:70 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:178:52:178:67 | ...::stdin | semmle.label | ...::stdin | +| test.rs:178:52:178:69 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:178:52:178:69 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:179:9:179:14 | reader | semmle.label | reader | | test.rs:179:33:179:43 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | @@ -485,7 +473,7 @@ nodes | test.rs:185:13:185:28 | mut reader_split | semmle.label | mut reader_split | | test.rs:185:32:185:76 | ...::new(...) | semmle.label | ...::new(...) | | test.rs:185:32:185:88 | ... .split(...) | semmle.label | ... .split(...) | -| test.rs:185:58:185:73 | ...::stdin | semmle.label | ...::stdin | +| test.rs:185:58:185:75 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:185:58:185:75 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:186:14:186:25 | reader_split | semmle.label | reader_split | | test.rs:186:14:186:40 | reader_split.next_segment() [future, Ok, Some] | semmle.label | reader_split.next_segment() [future, Ok, Some] | @@ -501,7 +489,7 @@ nodes | test.rs:188:18:188:22 | chunk | semmle.label | chunk | | test.rs:193:13:193:18 | reader | semmle.label | reader | | test.rs:193:22:193:66 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:193:48:193:63 | ...::stdin | semmle.label | ...::stdin | +| test.rs:193:48:193:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:193:48:193:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | | test.rs:194:13:194:21 | mut lines | semmle.label | mut lines | | test.rs:194:25:194:30 | reader | semmle.label | reader | @@ -521,36 +509,36 @@ nodes subpaths testFailures #select -| test.rs:14:14:14:20 | &buffer | test.rs:13:22:13:35 | ...::stdin | test.rs:14:14:14:20 | &buffer | $@ | test.rs:13:22:13:35 | ...::stdin | ...::stdin | -| test.rs:20:14:20:20 | &buffer | test.rs:19:22:19:35 | ...::stdin | test.rs:20:14:20:20 | &buffer | $@ | test.rs:19:22:19:35 | ...::stdin | ...::stdin | -| test.rs:26:14:26:20 | &buffer | test.rs:25:22:25:35 | ...::stdin | test.rs:26:14:26:20 | &buffer | $@ | test.rs:25:22:25:35 | ...::stdin | ...::stdin | -| test.rs:32:14:32:20 | &buffer | test.rs:31:22:31:35 | ...::stdin | test.rs:32:14:32:20 | &buffer | $@ | test.rs:31:22:31:35 | ...::stdin | ...::stdin | -| test.rs:38:14:38:20 | &buffer | test.rs:37:9:37:22 | ...::stdin | test.rs:38:14:38:20 | &buffer | $@ | test.rs:37:9:37:22 | ...::stdin | ...::stdin | -| test.rs:42:14:42:17 | byte | test.rs:41:17:41:30 | ...::stdin | test.rs:42:14:42:17 | byte | $@ | test.rs:41:17:41:30 | ...::stdin | ...::stdin | -| test.rs:50:14:50:18 | &data | test.rs:48:50:48:63 | ...::stdin | test.rs:50:14:50:18 | &data | $@ | test.rs:48:50:48:63 | ...::stdin | ...::stdin | -| test.rs:56:14:56:18 | &data | test.rs:54:46:54:59 | ...::stdin | test.rs:56:14:56:18 | &data | $@ | test.rs:54:46:54:59 | ...::stdin | ...::stdin | -| test.rs:63:14:63:20 | &buffer | test.rs:61:50:61:63 | ...::stdin | test.rs:63:14:63:20 | &buffer | $@ | test.rs:61:50:61:63 | ...::stdin | ...::stdin | -| test.rs:70:14:70:20 | &buffer | test.rs:68:50:68:63 | ...::stdin | test.rs:70:14:70:20 | &buffer | $@ | test.rs:68:50:68:63 | ...::stdin | ...::stdin | -| test.rs:71:14:71:22 | buffer[0] | test.rs:68:50:68:63 | ...::stdin | test.rs:71:14:71:22 | buffer[0] | $@ | test.rs:68:50:68:63 | ...::stdin | ...::stdin | -| test.rs:76:14:76:50 | ... .unwrap() | test.rs:75:56:75:69 | ...::stdin | test.rs:76:14:76:50 | ... .unwrap() | $@ | test.rs:75:56:75:69 | ...::stdin | ...::stdin | -| test.rs:78:18:78:31 | chunk.unwrap() | test.rs:75:56:75:69 | ...::stdin | test.rs:78:18:78:31 | chunk.unwrap() | $@ | test.rs:75:56:75:69 | ...::stdin | ...::stdin | -| test.rs:85:18:85:21 | line | test.rs:83:46:83:59 | ...::stdin | test.rs:85:18:85:21 | line | $@ | test.rs:83:46:83:59 | ...::stdin | ...::stdin | -| test.rs:92:14:92:34 | ... .clone() | test.rs:90:46:90:59 | ...::stdin | test.rs:92:14:92:34 | ... .clone() | $@ | test.rs:90:46:90:59 | ...::stdin | ...::stdin | -| test.rs:112:14:112:20 | &buffer | test.rs:109:25:109:40 | ...::stdin | test.rs:112:14:112:20 | &buffer | $@ | test.rs:109:25:109:40 | ...::stdin | ...::stdin | -| test.rs:119:14:119:20 | &buffer | test.rs:116:25:116:40 | ...::stdin | test.rs:119:14:119:20 | &buffer | $@ | test.rs:116:25:116:40 | ...::stdin | ...::stdin | -| test.rs:126:14:126:20 | &buffer | test.rs:123:25:123:40 | ...::stdin | test.rs:126:14:126:20 | &buffer | $@ | test.rs:123:25:123:40 | ...::stdin | ...::stdin | -| test.rs:133:14:133:20 | &buffer | test.rs:130:25:130:40 | ...::stdin | test.rs:133:14:133:20 | &buffer | $@ | test.rs:130:25:130:40 | ...::stdin | ...::stdin | -| test.rs:142:14:142:15 | v1 | test.rs:137:25:137:40 | ...::stdin | test.rs:142:14:142:15 | v1 | $@ | test.rs:137:25:137:40 | ...::stdin | ...::stdin | -| test.rs:143:14:143:15 | v2 | test.rs:137:25:137:40 | ...::stdin | test.rs:143:14:143:15 | v2 | $@ | test.rs:137:25:137:40 | ...::stdin | ...::stdin | -| test.rs:144:14:144:15 | v3 | test.rs:137:25:137:40 | ...::stdin | test.rs:144:14:144:15 | v3 | $@ | test.rs:137:25:137:40 | ...::stdin | ...::stdin | -| test.rs:145:14:145:15 | v4 | test.rs:137:25:137:40 | ...::stdin | test.rs:145:14:145:15 | v4 | $@ | test.rs:137:25:137:40 | ...::stdin | ...::stdin | -| test.rs:152:14:152:20 | &buffer | test.rs:149:25:149:40 | ...::stdin | test.rs:152:14:152:20 | &buffer | $@ | test.rs:149:25:149:40 | ...::stdin | ...::stdin | -| test.rs:160:14:160:18 | &data | test.rs:158:52:158:67 | ...::stdin | test.rs:160:14:160:18 | &data | $@ | test.rs:158:52:158:67 | ...::stdin | ...::stdin | -| test.rs:166:14:166:18 | &data | test.rs:164:48:164:63 | ...::stdin | test.rs:166:14:166:18 | &data | $@ | test.rs:164:48:164:63 | ...::stdin | ...::stdin | -| test.rs:173:14:173:20 | &buffer | test.rs:171:52:171:67 | ...::stdin | test.rs:173:14:173:20 | &buffer | $@ | test.rs:171:52:171:67 | ...::stdin | ...::stdin | -| test.rs:180:14:180:20 | &buffer | test.rs:178:52:178:67 | ...::stdin | test.rs:180:14:180:20 | &buffer | $@ | test.rs:178:52:178:67 | ...::stdin | ...::stdin | -| test.rs:181:14:181:22 | buffer[0] | test.rs:178:52:178:67 | ...::stdin | test.rs:181:14:181:22 | buffer[0] | $@ | test.rs:178:52:178:67 | ...::stdin | ...::stdin | -| test.rs:186:14:186:56 | ... .unwrap() | test.rs:185:58:185:73 | ...::stdin | test.rs:186:14:186:56 | ... .unwrap() | $@ | test.rs:185:58:185:73 | ...::stdin | ...::stdin | -| test.rs:188:18:188:22 | chunk | test.rs:185:58:185:73 | ...::stdin | test.rs:188:18:188:22 | chunk | $@ | test.rs:185:58:185:73 | ...::stdin | ...::stdin | -| test.rs:195:14:195:46 | ... .unwrap() | test.rs:193:48:193:63 | ...::stdin | test.rs:195:14:195:46 | ... .unwrap() | $@ | test.rs:193:48:193:63 | ...::stdin | ...::stdin | -| test.rs:197:18:197:21 | line | test.rs:193:48:193:63 | ...::stdin | test.rs:197:18:197:21 | line | $@ | test.rs:193:48:193:63 | ...::stdin | ...::stdin | +| test.rs:14:14:14:20 | &buffer | test.rs:13:22:13:37 | ...::stdin(...) | test.rs:14:14:14:20 | &buffer | $@ | test.rs:13:22:13:37 | ...::stdin(...) | ...::stdin(...) | +| test.rs:20:14:20:20 | &buffer | test.rs:19:22:19:37 | ...::stdin(...) | test.rs:20:14:20:20 | &buffer | $@ | test.rs:19:22:19:37 | ...::stdin(...) | ...::stdin(...) | +| test.rs:26:14:26:20 | &buffer | test.rs:25:22:25:37 | ...::stdin(...) | test.rs:26:14:26:20 | &buffer | $@ | test.rs:25:22:25:37 | ...::stdin(...) | ...::stdin(...) | +| test.rs:32:14:32:20 | &buffer | test.rs:31:22:31:37 | ...::stdin(...) | test.rs:32:14:32:20 | &buffer | $@ | test.rs:31:22:31:37 | ...::stdin(...) | ...::stdin(...) | +| test.rs:38:14:38:20 | &buffer | test.rs:37:9:37:24 | ...::stdin(...) | test.rs:38:14:38:20 | &buffer | $@ | test.rs:37:9:37:24 | ...::stdin(...) | ...::stdin(...) | +| test.rs:42:14:42:17 | byte | test.rs:41:17:41:32 | ...::stdin(...) | test.rs:42:14:42:17 | byte | $@ | test.rs:41:17:41:32 | ...::stdin(...) | ...::stdin(...) | +| test.rs:50:14:50:18 | &data | test.rs:48:50:48:65 | ...::stdin(...) | test.rs:50:14:50:18 | &data | $@ | test.rs:48:50:48:65 | ...::stdin(...) | ...::stdin(...) | +| test.rs:56:14:56:18 | &data | test.rs:54:46:54:61 | ...::stdin(...) | test.rs:56:14:56:18 | &data | $@ | test.rs:54:46:54:61 | ...::stdin(...) | ...::stdin(...) | +| test.rs:63:14:63:20 | &buffer | test.rs:61:50:61:65 | ...::stdin(...) | test.rs:63:14:63:20 | &buffer | $@ | test.rs:61:50:61:65 | ...::stdin(...) | ...::stdin(...) | +| test.rs:70:14:70:20 | &buffer | test.rs:68:50:68:65 | ...::stdin(...) | test.rs:70:14:70:20 | &buffer | $@ | test.rs:68:50:68:65 | ...::stdin(...) | ...::stdin(...) | +| test.rs:71:14:71:22 | buffer[0] | test.rs:68:50:68:65 | ...::stdin(...) | test.rs:71:14:71:22 | buffer[0] | $@ | test.rs:68:50:68:65 | ...::stdin(...) | ...::stdin(...) | +| test.rs:76:14:76:50 | ... .unwrap() | test.rs:75:56:75:71 | ...::stdin(...) | test.rs:76:14:76:50 | ... .unwrap() | $@ | test.rs:75:56:75:71 | ...::stdin(...) | ...::stdin(...) | +| test.rs:78:18:78:31 | chunk.unwrap() | test.rs:75:56:75:71 | ...::stdin(...) | test.rs:78:18:78:31 | chunk.unwrap() | $@ | test.rs:75:56:75:71 | ...::stdin(...) | ...::stdin(...) | +| test.rs:85:18:85:21 | line | test.rs:83:46:83:61 | ...::stdin(...) | test.rs:85:18:85:21 | line | $@ | test.rs:83:46:83:61 | ...::stdin(...) | ...::stdin(...) | +| test.rs:92:14:92:34 | ... .clone() | test.rs:90:46:90:61 | ...::stdin(...) | test.rs:92:14:92:34 | ... .clone() | $@ | test.rs:90:46:90:61 | ...::stdin(...) | ...::stdin(...) | +| test.rs:112:14:112:20 | &buffer | test.rs:109:25:109:42 | ...::stdin(...) | test.rs:112:14:112:20 | &buffer | $@ | test.rs:109:25:109:42 | ...::stdin(...) | ...::stdin(...) | +| test.rs:119:14:119:20 | &buffer | test.rs:116:25:116:42 | ...::stdin(...) | test.rs:119:14:119:20 | &buffer | $@ | test.rs:116:25:116:42 | ...::stdin(...) | ...::stdin(...) | +| test.rs:126:14:126:20 | &buffer | test.rs:123:25:123:42 | ...::stdin(...) | test.rs:126:14:126:20 | &buffer | $@ | test.rs:123:25:123:42 | ...::stdin(...) | ...::stdin(...) | +| test.rs:133:14:133:20 | &buffer | test.rs:130:25:130:42 | ...::stdin(...) | test.rs:133:14:133:20 | &buffer | $@ | test.rs:130:25:130:42 | ...::stdin(...) | ...::stdin(...) | +| test.rs:142:14:142:15 | v1 | test.rs:137:25:137:42 | ...::stdin(...) | test.rs:142:14:142:15 | v1 | $@ | test.rs:137:25:137:42 | ...::stdin(...) | ...::stdin(...) | +| test.rs:143:14:143:15 | v2 | test.rs:137:25:137:42 | ...::stdin(...) | test.rs:143:14:143:15 | v2 | $@ | test.rs:137:25:137:42 | ...::stdin(...) | ...::stdin(...) | +| test.rs:144:14:144:15 | v3 | test.rs:137:25:137:42 | ...::stdin(...) | test.rs:144:14:144:15 | v3 | $@ | test.rs:137:25:137:42 | ...::stdin(...) | ...::stdin(...) | +| test.rs:145:14:145:15 | v4 | test.rs:137:25:137:42 | ...::stdin(...) | test.rs:145:14:145:15 | v4 | $@ | test.rs:137:25:137:42 | ...::stdin(...) | ...::stdin(...) | +| test.rs:152:14:152:20 | &buffer | test.rs:149:25:149:42 | ...::stdin(...) | test.rs:152:14:152:20 | &buffer | $@ | test.rs:149:25:149:42 | ...::stdin(...) | ...::stdin(...) | +| test.rs:160:14:160:18 | &data | test.rs:158:52:158:69 | ...::stdin(...) | test.rs:160:14:160:18 | &data | $@ | test.rs:158:52:158:69 | ...::stdin(...) | ...::stdin(...) | +| test.rs:166:14:166:18 | &data | test.rs:164:48:164:65 | ...::stdin(...) | test.rs:166:14:166:18 | &data | $@ | test.rs:164:48:164:65 | ...::stdin(...) | ...::stdin(...) | +| test.rs:173:14:173:20 | &buffer | test.rs:171:52:171:69 | ...::stdin(...) | test.rs:173:14:173:20 | &buffer | $@ | test.rs:171:52:171:69 | ...::stdin(...) | ...::stdin(...) | +| test.rs:180:14:180:20 | &buffer | test.rs:178:52:178:69 | ...::stdin(...) | test.rs:180:14:180:20 | &buffer | $@ | test.rs:178:52:178:69 | ...::stdin(...) | ...::stdin(...) | +| test.rs:181:14:181:22 | buffer[0] | test.rs:178:52:178:69 | ...::stdin(...) | test.rs:181:14:181:22 | buffer[0] | $@ | test.rs:178:52:178:69 | ...::stdin(...) | ...::stdin(...) | +| test.rs:186:14:186:56 | ... .unwrap() | test.rs:185:58:185:75 | ...::stdin(...) | test.rs:186:14:186:56 | ... .unwrap() | $@ | test.rs:185:58:185:75 | ...::stdin(...) | ...::stdin(...) | +| test.rs:188:18:188:22 | chunk | test.rs:185:58:185:75 | ...::stdin(...) | test.rs:188:18:188:22 | chunk | $@ | test.rs:185:58:185:75 | ...::stdin(...) | ...::stdin(...) | +| test.rs:195:14:195:46 | ... .unwrap() | test.rs:193:48:193:65 | ...::stdin(...) | test.rs:195:14:195:46 | ... .unwrap() | $@ | test.rs:193:48:193:65 | ...::stdin(...) | ...::stdin(...) | +| test.rs:197:18:197:21 | line | test.rs:193:48:193:65 | ...::stdin(...) | test.rs:197:18:197:21 | line | $@ | test.rs:193:48:193:65 | ...::stdin(...) | ...::stdin(...) | diff --git a/rust/ql/test/library-tests/dataflow/sources/stdin/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/stdin/TaintSources.expected index 085237733145..aeca83904a13 100644 --- a/rust/ql/test/library-tests/dataflow/sources/stdin/TaintSources.expected +++ b/rust/ql/test/library-tests/dataflow/sources/stdin/TaintSources.expected @@ -1,26 +1,26 @@ -| test.rs:13:22:13:35 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:19:22:19:35 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:25:22:25:35 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:31:22:31:35 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:37:9:37:22 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:41:17:41:30 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:48:50:48:63 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:54:46:54:59 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:61:50:61:63 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:68:50:68:63 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:75:56:75:69 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:83:46:83:59 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:90:46:90:59 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:96:46:96:59 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:109:25:109:40 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:116:25:116:40 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:123:25:123:40 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:130:25:130:40 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:137:25:137:40 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:149:25:149:40 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:158:52:158:67 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:164:48:164:63 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:171:52:171:67 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:178:52:178:67 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:185:58:185:73 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:193:48:193:63 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:13:22:13:37 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:19:22:19:37 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:25:22:25:37 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:31:22:31:37 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:37:9:37:24 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:41:17:41:32 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:48:50:48:65 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:54:46:54:61 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:61:50:61:65 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:68:50:68:65 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:75:56:75:71 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:83:46:83:61 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:90:46:90:61 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:96:46:96:61 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:109:25:109:42 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:116:25:116:42 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:123:25:123:42 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:130:25:130:42 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:137:25:137:42 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:149:25:149:42 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:158:52:158:69 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:164:48:164:65 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:171:52:171:69 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:178:52:178:69 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:185:58:185:75 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:193:48:193:65 | ...::stdin(...) | Flow source 'StdInSource' of type stdin (DEFAULT). | diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/InlineFlow.expected index d3c65fac62ff..d49a0cead03d 100644 --- a/rust/ql/test/library-tests/dataflow/sources/web_frameworks/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/InlineFlow.expected @@ -39,14 +39,14 @@ edges | test.rs:107:22:107:25 | path | test.rs:107:22:107:38 | path.into_inner() | provenance | MaD:11 | | test.rs:107:22:107:38 | path.into_inner() | test.rs:107:13:107:18 | TuplePat | provenance | | | test.rs:115:33:115:65 | ...: ...::Query::<...> | test.rs:116:14:116:14 | a | provenance | | -| test.rs:121:5:121:20 | to | test.rs:122:33:122:55 | ...: ...::Path::<...> | provenance | Src:MaD:4 | +| test.rs:121:11:122:31 | ... .to(...) | test.rs:122:33:122:55 | ...: ...::Path::<...> | provenance | Src:MaD:4 | | test.rs:122:33:122:55 | ...: ...::Path::<...> | test.rs:123:17:123:20 | path | provenance | | | test.rs:123:13:123:13 | a | test.rs:124:14:124:14 | a | provenance | | | test.rs:123:17:123:20 | path | test.rs:123:17:123:33 | path.into_inner() | provenance | MaD:11 | | test.rs:123:17:123:33 | path.into_inner() | test.rs:123:13:123:13 | a | provenance | | -| test.rs:131:41:131:42 | to | test.rs:97:33:97:55 | ...: ...::Path::<...> | provenance | Src:MaD:5 | -| test.rs:132:45:132:46 | to | test.rs:106:33:106:65 | ...: ...::Path::<...> | provenance | Src:MaD:5 | -| test.rs:133:41:133:42 | to | test.rs:115:33:115:65 | ...: ...::Query::<...> | provenance | Src:MaD:5 | +| test.rs:131:30:131:62 | ... .to(...) | test.rs:97:33:97:55 | ...: ...::Path::<...> | provenance | Src:MaD:5 | +| test.rs:132:34:132:66 | ... .to(...) | test.rs:106:33:106:65 | ...: ...::Path::<...> | provenance | Src:MaD:5 | +| test.rs:133:30:133:62 | ... .to(...) | test.rs:115:33:115:65 | ...: ...::Query::<...> | provenance | Src:MaD:5 | | test.rs:147:32:147:52 | ...: Path::<...> | test.rs:148:14:148:14 | a | provenance | | | test.rs:147:32:147:52 | ...: Path::<...> | test.rs:149:14:149:14 | a | provenance | | | test.rs:147:32:147:52 | ...: Path::<...> | test.rs:150:14:150:14 | a | provenance | | @@ -59,19 +59,19 @@ edges | test.rs:179:32:179:69 | ...: Json::<...> | test.rs:181:14:181:20 | payload | provenance | | | test.rs:186:32:186:43 | ...: String | test.rs:187:14:187:17 | body | provenance | | | test.rs:192:32:192:43 | ...: String | test.rs:193:14:193:17 | body | provenance | | -| test.rs:200:30:200:32 | get | test.rs:147:32:147:52 | ...: Path::<...> | provenance | Src:MaD:8 | -| test.rs:201:34:201:37 | post | test.rs:155:32:155:67 | ...: Path::<...> | provenance | Src:MaD:9 | -| test.rs:202:29:202:31 | put | test.rs:162:32:162:76 | ...: Query::<...> | provenance | Src:MaD:10 | -| test.rs:205:40:205:41 | on | test.rs:179:32:179:69 | ...: Json::<...> | provenance | Src:MaD:7 | -| test.rs:207:29:207:31 | get | test.rs:186:32:186:43 | ...: String | provenance | Src:MaD:8 | -| test.rs:207:52:207:54 | get | test.rs:192:32:192:43 | ...: String | provenance | Src:MaD:6 | -| test.rs:222:33:222:35 | map | test.rs:222:38:222:46 | ...: String | provenance | Src:MaD:2 | +| test.rs:200:30:200:51 | get(...) | test.rs:147:32:147:52 | ...: Path::<...> | provenance | Src:MaD:8 | +| test.rs:201:34:201:56 | post(...) | test.rs:155:32:155:67 | ...: Path::<...> | provenance | Src:MaD:9 | +| test.rs:202:29:202:50 | put(...) | test.rs:162:32:162:76 | ...: Query::<...> | provenance | Src:MaD:10 | +| test.rs:205:17:205:82 | ... .on(...) | test.rs:179:32:179:69 | ...: Json::<...> | provenance | Src:MaD:7 | +| test.rs:207:29:207:50 | get(...) | test.rs:186:32:186:43 | ...: String | provenance | Src:MaD:8 | +| test.rs:207:29:207:73 | ... .get(...) | test.rs:192:32:192:43 | ...: String | provenance | Src:MaD:6 | +| test.rs:222:13:227:10 | ... .map(...) | test.rs:222:38:222:46 | ...: String | provenance | Src:MaD:2 | | test.rs:222:38:222:46 | ...: String | test.rs:224:18:224:18 | a | provenance | | -| test.rs:230:46:230:49 | then | test.rs:231:25:231:33 | ...: String | provenance | Src:MaD:3 | +| test.rs:230:26:236:9 | ... .then(...) | test.rs:231:25:231:33 | ...: String | provenance | Src:MaD:3 | | test.rs:231:25:231:33 | ...: String | test.rs:232:22:232:22 | a | provenance | | -| test.rs:239:50:239:57 | and_then | test.rs:240:26:240:32 | ...: u64 | provenance | Src:MaD:1 | +| test.rs:239:30:249:9 | ... .and_then(...) | test.rs:240:26:240:32 | ...: u64 | provenance | Src:MaD:1 | | test.rs:240:26:240:32 | ...: u64 | test.rs:243:22:243:23 | id | provenance | | -| test.rs:252:75:252:77 | map | test.rs:253:15:253:23 | ...: String | provenance | Src:MaD:2 | +| test.rs:252:34:259:9 | ... .map(...) | test.rs:253:15:253:23 | ...: String | provenance | Src:MaD:2 | | test.rs:253:15:253:23 | ...: String | test.rs:255:22:255:22 | a | provenance | | nodes | test.rs:11:31:11:31 | a | semmle.label | a | @@ -108,15 +108,15 @@ nodes | test.rs:110:14:110:14 | b | semmle.label | b | | test.rs:115:33:115:65 | ...: ...::Query::<...> | semmle.label | ...: ...::Query::<...> | | test.rs:116:14:116:14 | a | semmle.label | a | -| test.rs:121:5:121:20 | to | semmle.label | to | +| test.rs:121:11:122:31 | ... .to(...) | semmle.label | ... .to(...) | | test.rs:122:33:122:55 | ...: ...::Path::<...> | semmle.label | ...: ...::Path::<...> | | test.rs:123:13:123:13 | a | semmle.label | a | | test.rs:123:17:123:20 | path | semmle.label | path | | test.rs:123:17:123:33 | path.into_inner() | semmle.label | path.into_inner() | | test.rs:124:14:124:14 | a | semmle.label | a | -| test.rs:131:41:131:42 | to | semmle.label | to | -| test.rs:132:45:132:46 | to | semmle.label | to | -| test.rs:133:41:133:42 | to | semmle.label | to | +| test.rs:131:30:131:62 | ... .to(...) | semmle.label | ... .to(...) | +| test.rs:132:34:132:66 | ... .to(...) | semmle.label | ... .to(...) | +| test.rs:133:30:133:62 | ... .to(...) | semmle.label | ... .to(...) | | test.rs:147:32:147:52 | ...: Path::<...> | semmle.label | ...: Path::<...> | | test.rs:148:14:148:14 | a | semmle.label | a | | test.rs:148:14:148:23 | a.as_str() | semmle.label | a.as_str() | @@ -135,22 +135,22 @@ nodes | test.rs:187:14:187:17 | body | semmle.label | body | | test.rs:192:32:192:43 | ...: String | semmle.label | ...: String | | test.rs:193:14:193:17 | body | semmle.label | body | -| test.rs:200:30:200:32 | get | semmle.label | get | -| test.rs:201:34:201:37 | post | semmle.label | post | -| test.rs:202:29:202:31 | put | semmle.label | put | -| test.rs:205:40:205:41 | on | semmle.label | on | -| test.rs:207:29:207:31 | get | semmle.label | get | -| test.rs:207:52:207:54 | get | semmle.label | get | -| test.rs:222:33:222:35 | map | semmle.label | map | +| test.rs:200:30:200:51 | get(...) | semmle.label | get(...) | +| test.rs:201:34:201:56 | post(...) | semmle.label | post(...) | +| test.rs:202:29:202:50 | put(...) | semmle.label | put(...) | +| test.rs:205:17:205:82 | ... .on(...) | semmle.label | ... .on(...) | +| test.rs:207:29:207:50 | get(...) | semmle.label | get(...) | +| test.rs:207:29:207:73 | ... .get(...) | semmle.label | ... .get(...) | +| test.rs:222:13:227:10 | ... .map(...) | semmle.label | ... .map(...) | | test.rs:222:38:222:46 | ...: String | semmle.label | ...: String | | test.rs:224:18:224:18 | a | semmle.label | a | -| test.rs:230:46:230:49 | then | semmle.label | then | +| test.rs:230:26:236:9 | ... .then(...) | semmle.label | ... .then(...) | | test.rs:231:25:231:33 | ...: String | semmle.label | ...: String | | test.rs:232:22:232:22 | a | semmle.label | a | -| test.rs:239:50:239:57 | and_then | semmle.label | and_then | +| test.rs:239:30:249:9 | ... .and_then(...) | semmle.label | ... .and_then(...) | | test.rs:240:26:240:32 | ...: u64 | semmle.label | ...: u64 | | test.rs:243:22:243:23 | id | semmle.label | id | -| test.rs:252:75:252:77 | map | semmle.label | map | +| test.rs:252:34:259:9 | ... .map(...) | semmle.label | ... .map(...) | | test.rs:253:15:253:23 | ...: String | semmle.label | ...: String | | test.rs:255:22:255:22 | a | semmle.label | a | subpaths @@ -166,24 +166,24 @@ testFailures | test.rs:60:14:60:17 | ms.a | test.rs:58:14:58:15 | ms | test.rs:60:14:60:17 | ms.a | $@ | test.rs:58:14:58:15 | ms | ms | | test.rs:61:14:61:17 | ms.b | test.rs:58:14:58:15 | ms | test.rs:61:14:61:17 | ms.b | $@ | test.rs:58:14:58:15 | ms | ms | | test.rs:70:14:70:14 | a | test.rs:68:15:68:15 | a | test.rs:70:14:70:14 | a | $@ | test.rs:68:15:68:15 | a | a | -| test.rs:99:14:99:23 | a.as_str() | test.rs:131:41:131:42 | to | test.rs:99:14:99:23 | a.as_str() | $@ | test.rs:131:41:131:42 | to | to | -| test.rs:100:14:100:25 | a.as_bytes() | test.rs:131:41:131:42 | to | test.rs:100:14:100:25 | a.as_bytes() | $@ | test.rs:131:41:131:42 | to | to | -| test.rs:101:14:101:14 | a | test.rs:131:41:131:42 | to | test.rs:101:14:101:14 | a | $@ | test.rs:131:41:131:42 | to | to | -| test.rs:109:14:109:14 | a | test.rs:132:45:132:46 | to | test.rs:109:14:109:14 | a | $@ | test.rs:132:45:132:46 | to | to | -| test.rs:110:14:110:14 | b | test.rs:132:45:132:46 | to | test.rs:110:14:110:14 | b | $@ | test.rs:132:45:132:46 | to | to | -| test.rs:116:14:116:14 | a | test.rs:133:41:133:42 | to | test.rs:116:14:116:14 | a | $@ | test.rs:133:41:133:42 | to | to | -| test.rs:124:14:124:14 | a | test.rs:121:5:121:20 | to | test.rs:124:14:124:14 | a | $@ | test.rs:121:5:121:20 | to | to | -| test.rs:148:14:148:23 | a.as_str() | test.rs:200:30:200:32 | get | test.rs:148:14:148:23 | a.as_str() | $@ | test.rs:200:30:200:32 | get | get | -| test.rs:149:14:149:25 | a.as_bytes() | test.rs:200:30:200:32 | get | test.rs:149:14:149:25 | a.as_bytes() | $@ | test.rs:200:30:200:32 | get | get | -| test.rs:150:14:150:14 | a | test.rs:200:30:200:32 | get | test.rs:150:14:150:14 | a | $@ | test.rs:200:30:200:32 | get | get | -| test.rs:156:14:156:14 | a | test.rs:201:34:201:37 | post | test.rs:156:14:156:14 | a | $@ | test.rs:201:34:201:37 | post | post | -| test.rs:157:14:157:14 | b | test.rs:201:34:201:37 | post | test.rs:157:14:157:14 | b | $@ | test.rs:201:34:201:37 | post | post | -| test.rs:164:18:164:20 | key | test.rs:202:29:202:31 | put | test.rs:164:18:164:20 | key | $@ | test.rs:202:29:202:31 | put | put | -| test.rs:165:18:165:22 | value | test.rs:202:29:202:31 | put | test.rs:165:18:165:22 | value | $@ | test.rs:202:29:202:31 | put | put | -| test.rs:181:14:181:20 | payload | test.rs:205:40:205:41 | on | test.rs:181:14:181:20 | payload | $@ | test.rs:205:40:205:41 | on | on | -| test.rs:187:14:187:17 | body | test.rs:207:29:207:31 | get | test.rs:187:14:187:17 | body | $@ | test.rs:207:29:207:31 | get | get | -| test.rs:193:14:193:17 | body | test.rs:207:52:207:54 | get | test.rs:193:14:193:17 | body | $@ | test.rs:207:52:207:54 | get | get | -| test.rs:224:18:224:18 | a | test.rs:222:33:222:35 | map | test.rs:224:18:224:18 | a | $@ | test.rs:222:33:222:35 | map | map | -| test.rs:232:22:232:22 | a | test.rs:230:46:230:49 | then | test.rs:232:22:232:22 | a | $@ | test.rs:230:46:230:49 | then | then | -| test.rs:243:22:243:23 | id | test.rs:239:50:239:57 | and_then | test.rs:243:22:243:23 | id | $@ | test.rs:239:50:239:57 | and_then | and_then | -| test.rs:255:22:255:22 | a | test.rs:252:75:252:77 | map | test.rs:255:22:255:22 | a | $@ | test.rs:252:75:252:77 | map | map | +| test.rs:99:14:99:23 | a.as_str() | test.rs:131:30:131:62 | ... .to(...) | test.rs:99:14:99:23 | a.as_str() | $@ | test.rs:131:30:131:62 | ... .to(...) | ... .to(...) | +| test.rs:100:14:100:25 | a.as_bytes() | test.rs:131:30:131:62 | ... .to(...) | test.rs:100:14:100:25 | a.as_bytes() | $@ | test.rs:131:30:131:62 | ... .to(...) | ... .to(...) | +| test.rs:101:14:101:14 | a | test.rs:131:30:131:62 | ... .to(...) | test.rs:101:14:101:14 | a | $@ | test.rs:131:30:131:62 | ... .to(...) | ... .to(...) | +| test.rs:109:14:109:14 | a | test.rs:132:34:132:66 | ... .to(...) | test.rs:109:14:109:14 | a | $@ | test.rs:132:34:132:66 | ... .to(...) | ... .to(...) | +| test.rs:110:14:110:14 | b | test.rs:132:34:132:66 | ... .to(...) | test.rs:110:14:110:14 | b | $@ | test.rs:132:34:132:66 | ... .to(...) | ... .to(...) | +| test.rs:116:14:116:14 | a | test.rs:133:30:133:62 | ... .to(...) | test.rs:116:14:116:14 | a | $@ | test.rs:133:30:133:62 | ... .to(...) | ... .to(...) | +| test.rs:124:14:124:14 | a | test.rs:121:11:122:31 | ... .to(...) | test.rs:124:14:124:14 | a | $@ | test.rs:121:11:122:31 | ... .to(...) | ... .to(...) | +| test.rs:148:14:148:23 | a.as_str() | test.rs:200:30:200:51 | get(...) | test.rs:148:14:148:23 | a.as_str() | $@ | test.rs:200:30:200:51 | get(...) | get(...) | +| test.rs:149:14:149:25 | a.as_bytes() | test.rs:200:30:200:51 | get(...) | test.rs:149:14:149:25 | a.as_bytes() | $@ | test.rs:200:30:200:51 | get(...) | get(...) | +| test.rs:150:14:150:14 | a | test.rs:200:30:200:51 | get(...) | test.rs:150:14:150:14 | a | $@ | test.rs:200:30:200:51 | get(...) | get(...) | +| test.rs:156:14:156:14 | a | test.rs:201:34:201:56 | post(...) | test.rs:156:14:156:14 | a | $@ | test.rs:201:34:201:56 | post(...) | post(...) | +| test.rs:157:14:157:14 | b | test.rs:201:34:201:56 | post(...) | test.rs:157:14:157:14 | b | $@ | test.rs:201:34:201:56 | post(...) | post(...) | +| test.rs:164:18:164:20 | key | test.rs:202:29:202:50 | put(...) | test.rs:164:18:164:20 | key | $@ | test.rs:202:29:202:50 | put(...) | put(...) | +| test.rs:165:18:165:22 | value | test.rs:202:29:202:50 | put(...) | test.rs:165:18:165:22 | value | $@ | test.rs:202:29:202:50 | put(...) | put(...) | +| test.rs:181:14:181:20 | payload | test.rs:205:17:205:82 | ... .on(...) | test.rs:181:14:181:20 | payload | $@ | test.rs:205:17:205:82 | ... .on(...) | ... .on(...) | +| test.rs:187:14:187:17 | body | test.rs:207:29:207:50 | get(...) | test.rs:187:14:187:17 | body | $@ | test.rs:207:29:207:50 | get(...) | get(...) | +| test.rs:193:14:193:17 | body | test.rs:207:29:207:73 | ... .get(...) | test.rs:193:14:193:17 | body | $@ | test.rs:207:29:207:73 | ... .get(...) | ... .get(...) | +| test.rs:224:18:224:18 | a | test.rs:222:13:227:10 | ... .map(...) | test.rs:224:18:224:18 | a | $@ | test.rs:222:13:227:10 | ... .map(...) | ... .map(...) | +| test.rs:232:22:232:22 | a | test.rs:230:26:236:9 | ... .then(...) | test.rs:232:22:232:22 | a | $@ | test.rs:230:26:236:9 | ... .then(...) | ... .then(...) | +| test.rs:243:22:243:23 | id | test.rs:239:30:249:9 | ... .and_then(...) | test.rs:243:22:243:23 | id | $@ | test.rs:239:30:249:9 | ... .and_then(...) | ... .and_then(...) | +| test.rs:255:22:255:22 | a | test.rs:252:34:259:9 | ... .map(...) | test.rs:255:22:255:22 | a | $@ | test.rs:252:34:259:9 | ... .map(...) | ... .map(...) | diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/TaintSources.expected index 146406e7192c..fd680a76a626 100644 --- a/rust/ql/test/library-tests/dataflow/sources/web_frameworks/TaintSources.expected +++ b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/TaintSources.expected @@ -3,123 +3,18 @@ | test.rs:48:14:48:30 | MyStruct {...} | Flow source 'RemoteSource' of type remote (DEFAULT). | | test.rs:58:14:58:15 | ms | Flow source 'RemoteSource' of type remote (DEFAULT). | | test.rs:68:15:68:15 | a | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:121:5:121:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:121:5:121:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:121:5:121:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:121:5:121:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:121:5:121:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:121:5:121:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:121:5:121:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:121:5:121:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:131:41:131:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:131:41:131:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:131:41:131:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:131:41:131:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:131:41:131:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:131:41:131:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:131:41:131:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:131:41:131:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:132:45:132:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:132:45:132:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:132:45:132:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:132:45:132:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:132:45:132:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:132:45:132:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:132:45:132:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:132:45:132:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:133:41:133:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:133:41:133:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:133:41:133:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:133:41:133:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:133:41:133:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:133:41:133:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:133:41:133:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:133:41:133:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:200:30:200:32 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:200:30:200:32 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:200:30:200:32 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:200:30:200:32 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:200:30:200:32 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:200:30:200:32 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:200:30:200:32 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:200:30:200:32 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:201:34:201:37 | post | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:201:34:201:37 | post | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:201:34:201:37 | post | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:201:34:201:37 | post | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:201:34:201:37 | post | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:201:34:201:37 | post | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:201:34:201:37 | post | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:201:34:201:37 | post | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:202:29:202:31 | put | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:202:29:202:31 | put | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:202:29:202:31 | put | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:202:29:202:31 | put | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:202:29:202:31 | put | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:202:29:202:31 | put | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:202:29:202:31 | put | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:202:29:202:31 | put | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:205:17:205:19 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:205:17:205:19 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:205:17:205:19 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:205:17:205:19 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:205:17:205:19 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:205:17:205:19 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:205:17:205:19 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:205:17:205:19 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:205:40:205:41 | on | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:205:40:205:41 | on | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:205:40:205:41 | on | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:205:40:205:41 | on | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:205:40:205:41 | on | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:205:40:205:41 | on | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:205:40:205:41 | on | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:205:40:205:41 | on | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:207:29:207:31 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:207:29:207:31 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:207:29:207:31 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:207:29:207:31 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:207:29:207:31 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:207:29:207:31 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:207:29:207:31 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:207:29:207:31 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:207:52:207:54 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:207:52:207:54 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:207:52:207:54 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:207:52:207:54 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:207:52:207:54 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:207:52:207:54 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:207:52:207:54 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:207:52:207:54 | get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:222:33:222:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:222:33:222:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:222:33:222:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:222:33:222:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:222:33:222:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:222:33:222:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:222:33:222:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:222:33:222:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:230:46:230:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:230:46:230:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:230:46:230:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:230:46:230:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:230:46:230:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:230:46:230:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:230:46:230:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:230:46:230:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:239:50:239:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:239:50:239:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:239:50:239:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:239:50:239:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:239:50:239:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:239:50:239:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:239:50:239:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:239:50:239:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:252:75:252:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:252:75:252:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:252:75:252:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:252:75:252:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:252:75:252:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:252:75:252:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:252:75:252:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:252:75:252:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:121:11:122:31 | ... .to(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:131:30:131:62 | ... .to(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:132:34:132:66 | ... .to(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:133:30:133:62 | ... .to(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:200:30:200:51 | get(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:201:34:201:56 | post(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:202:29:202:50 | put(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:205:17:205:38 | get(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:205:17:205:82 | ... .on(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:207:29:207:50 | get(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:207:29:207:73 | ... .get(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:222:13:227:10 | ... .map(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:230:26:236:9 | ... .then(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:239:30:249:9 | ... .and_then(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:252:34:259:9 | ... .map(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks/test.rs b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/test.rs index c6c487fed28d..c18052dab208 100644 --- a/rust/ql/test/library-tests/dataflow/sources/web_frameworks/test.rs +++ b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/test.rs @@ -118,8 +118,8 @@ mod actix_test { "".to_string() } - #[get("/4/{a}")] // $ Alert[rust/summary/taint-sources] - async fn my_actix_handler_4(path: web::Path) -> String { + #[get("/4/{a}")] + async fn my_actix_handler_4(path: web::Path) -> String { // $ Alert[rust/summary/taint-sources] let a = path.into_inner(); sink(a); // $ hasTaintFlow=my_actix_handler_4 @@ -219,24 +219,24 @@ mod warp_test { async fn test_warp() { // A route with parameter and `map` let map_route = - warp::path::param().map(|a: String| // $ Alert[rust/summary/taint-sources] + warp::path::param().map(|a: String| { sink(a); // $ hasTaintFlow "".to_string() - }); + }); // $ Alert[rust/summary/taint-sources] // A route with parameter and `then` - let then_route = warp::path::param().then( // $ Alert[rust/summary/taint-sources] + let then_route = warp::path::param().then( async move |a: String| { sink(a); // $ hasTaintFlow "".to_string() }, - ); + ); // $ Alert[rust/summary/taint-sources] // A route with parameter and `and_then` - let and_then_route = warp::path::param().and_then( // $ Alert[rust/summary/taint-sources] + let and_then_route = warp::path::param().and_then( async move | id: u64 | { if id != 0 { @@ -246,17 +246,17 @@ mod warp_test { Err(warp::reject::not_found()) } }, - ); + ); // $ Alert[rust/summary/taint-sources] // A route with path, parameter, and `and_then` - let path_and_map_route = warp::path("1").and(warp::path::param()).map( // $ Alert[rust/summary/taint-sources] + let path_and_map_route = warp::path("1").and(warp::path::param()).map( | a: String | { sink(a); // $ hasTaintFlow "".to_string() }, - ); + ); // $ Alert[rust/summary/taint-sources] let routes = warp::get().and( map_route diff --git a/rust/ql/test/library-tests/frameworks/postgres/main.rs b/rust/ql/test/library-tests/frameworks/postgres/main.rs index 262e22855bf1..64844da4b238 100644 --- a/rust/ql/test/library-tests/frameworks/postgres/main.rs +++ b/rust/ql/test/library-tests/frameworks/postgres/main.rs @@ -7,12 +7,12 @@ fn main() -> Result<(), Box> { let mut conn = postgres::Client::connect("host=localhost user=postgres", postgres::NoTls)?; - conn.execute( // $ sql-sink + conn.execute( "CREATE TABLE person ( id SERIAL PRIMARY KEY, name VARCHAR NOT NULL, age INT NOT NULL - )", + )", // $ sql-sink &[], )?; diff --git a/rust/ql/test/library-tests/frameworks/rusqlite/main.rs b/rust/ql/test/library-tests/frameworks/rusqlite/main.rs index 441aa35f798b..58fb407e12e9 100644 --- a/rust/ql/test/library-tests/frameworks/rusqlite/main.rs +++ b/rust/ql/test/library-tests/frameworks/rusqlite/main.rs @@ -16,12 +16,12 @@ fn main() -> Result<(), Box> { let connection = Connection::open_in_memory()?; - connection.execute( // $ sql-sink + connection.execute( "CREATE TABLE person ( id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR NOT NULL, age INT NOT NULL - )", + )", // $ sql-sink (), )?; diff --git a/rust/ql/test/query-tests/security/CWE-020/RegexInjection.expected b/rust/ql/test/query-tests/security/CWE-020/RegexInjection.expected index 2814af2b5ede..952fbcef17ff 100644 --- a/rust/ql/test/query-tests/security/CWE-020/RegexInjection.expected +++ b/rust/ql/test/query-tests/security/CWE-020/RegexInjection.expected @@ -1,8 +1,8 @@ #select -| main.rs:6:25:6:30 | ®ex | main.rs:4:20:4:32 | ...::var | main.rs:6:25:6:30 | ®ex | This regular expression is constructed from a $@. | main.rs:4:20:4:32 | ...::var | user-provided value | +| main.rs:6:25:6:30 | ®ex | main.rs:4:20:4:40 | ...::var(...) | main.rs:6:25:6:30 | ®ex | This regular expression is constructed from a $@. | main.rs:4:20:4:40 | ...::var(...) | user-provided value | edges | main.rs:4:9:4:16 | username | main.rs:5:25:5:44 | MacroExpr | provenance | | -| main.rs:4:20:4:32 | ...::var | main.rs:4:20:4:40 | ...::var(...) [Ok] | provenance | Src:MaD:1 | +| main.rs:4:20:4:40 | ...::var(...) | main.rs:4:20:4:40 | ...::var(...) [Ok] | provenance | Src:MaD:1 | | main.rs:4:20:4:40 | ...::var(...) [Ok] | main.rs:4:20:4:66 | ... .unwrap_or(...) | provenance | MaD:2 | | main.rs:4:20:4:66 | ... .unwrap_or(...) | main.rs:4:9:4:16 | username | provenance | | | main.rs:5:9:5:13 | regex | main.rs:6:26:6:30 | regex | provenance | | @@ -18,7 +18,7 @@ models | 4 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | nodes | main.rs:4:9:4:16 | username | semmle.label | username | -| main.rs:4:20:4:32 | ...::var | semmle.label | ...::var | +| main.rs:4:20:4:40 | ...::var(...) | semmle.label | ...::var(...) | | main.rs:4:20:4:40 | ...::var(...) [Ok] | semmle.label | ...::var(...) [Ok] | | main.rs:4:20:4:66 | ... .unwrap_or(...) | semmle.label | ... .unwrap_or(...) | | main.rs:5:9:5:13 | regex | semmle.label | regex | diff --git a/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected b/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected index 182648d9caf6..a38dd15253a3 100644 --- a/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected +++ b/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected @@ -1,58 +1,53 @@ #select -| src/main.rs:11:5:11:22 | ...::read_to_string | src/main.rs:7:11:7:19 | file_name | src/main.rs:11:5:11:22 | ...::read_to_string | This path depends on a $@. | src/main.rs:7:11:7:19 | file_name | user-provided value | -| src/main.rs:46:5:46:22 | ...::read_to_string | src/main.rs:38:11:38:19 | file_path | src/main.rs:46:5:46:22 | ...::read_to_string | This path depends on a $@. | src/main.rs:38:11:38:19 | file_path | user-provided value | -| src/main.rs:71:5:71:22 | ...::read_to_string | src/main.rs:63:11:63:19 | file_path | src/main.rs:71:5:71:22 | ...::read_to_string | This path depends on a $@. | src/main.rs:63:11:63:19 | file_path | user-provided value | -| src/main.rs:85:5:85:22 | ...::read_to_string | src/main.rs:76:11:76:19 | file_path | src/main.rs:85:5:85:22 | ...::read_to_string | This path depends on a $@. | src/main.rs:76:11:76:19 | file_path | user-provided value | -| src/main.rs:99:5:99:22 | ...::read_to_string | src/main.rs:90:11:90:19 | file_path | src/main.rs:99:5:99:22 | ...::read_to_string | This path depends on a $@. | src/main.rs:90:11:90:19 | file_path | user-provided value | -| src/main.rs:104:13:104:31 | ...::open | src/main.rs:103:17:103:30 | ...::args | src/main.rs:104:13:104:31 | ...::open | This path depends on a $@. | src/main.rs:103:17:103:30 | ...::args | user-provided value | -| src/main.rs:107:13:107:31 | ...::open | src/main.rs:103:17:103:30 | ...::args | src/main.rs:107:13:107:31 | ...::open | This path depends on a $@. | src/main.rs:103:17:103:30 | ...::args | user-provided value | -| src/main.rs:110:13:110:33 | ...::open | src/main.rs:103:17:103:30 | ...::args | src/main.rs:110:13:110:33 | ...::open | This path depends on a $@. | src/main.rs:103:17:103:30 | ...::args | user-provided value | -| src/main.rs:113:13:113:37 | ...::open | src/main.rs:103:17:103:30 | ...::args | src/main.rs:113:13:113:37 | ...::open | This path depends on a $@. | src/main.rs:103:17:103:30 | ...::args | user-provided value | -| src/main.rs:116:13:116:31 | ...::open | src/main.rs:103:17:103:30 | ...::args | src/main.rs:116:13:116:31 | ...::open | This path depends on a $@. | src/main.rs:103:17:103:30 | ...::args | user-provided value | -| src/main.rs:119:13:119:31 | ...::open | src/main.rs:103:17:103:30 | ...::args | src/main.rs:119:13:119:31 | ...::open | This path depends on a $@. | src/main.rs:103:17:103:30 | ...::args | user-provided value | -| src/main.rs:122:13:122:25 | ...::copy | src/main.rs:103:17:103:30 | ...::args | src/main.rs:122:13:122:25 | ...::copy | This path depends on a $@. | src/main.rs:103:17:103:30 | ...::args | user-provided value | -| src/main.rs:123:13:123:25 | ...::copy | src/main.rs:103:17:103:30 | ...::args | src/main.rs:123:13:123:25 | ...::copy | This path depends on a $@. | src/main.rs:103:17:103:30 | ...::args | user-provided value | -| src/main.rs:173:13:173:18 | exists | src/main.rs:185:17:185:30 | ...::args | src/main.rs:173:13:173:18 | exists | This path depends on a $@. | src/main.rs:185:17:185:30 | ...::args | user-provided value | -| src/main.rs:174:25:174:34 | ...::open | src/main.rs:185:17:185:30 | ...::args | src/main.rs:174:25:174:34 | ...::open | This path depends on a $@. | src/main.rs:185:17:185:30 | ...::args | user-provided value | -| src/main.rs:177:25:177:34 | ...::open | src/main.rs:185:17:185:30 | ...::args | src/main.rs:177:25:177:34 | ...::open | This path depends on a $@. | src/main.rs:185:17:185:30 | ...::args | user-provided value | +| src/main.rs:11:24:11:32 | file_path | src/main.rs:7:11:7:19 | file_name | src/main.rs:11:24:11:32 | file_path | This path depends on a $@. | src/main.rs:7:11:7:19 | file_name | user-provided value | +| src/main.rs:46:24:46:32 | file_path | src/main.rs:38:11:38:19 | file_path | src/main.rs:46:24:46:32 | file_path | This path depends on a $@. | src/main.rs:38:11:38:19 | file_path | user-provided value | +| src/main.rs:71:24:71:32 | file_path | src/main.rs:63:11:63:19 | file_path | src/main.rs:71:24:71:32 | file_path | This path depends on a $@. | src/main.rs:63:11:63:19 | file_path | user-provided value | +| src/main.rs:85:24:85:32 | file_path | src/main.rs:76:11:76:19 | file_path | src/main.rs:85:24:85:32 | file_path | This path depends on a $@. | src/main.rs:76:11:76:19 | file_path | user-provided value | +| src/main.rs:99:24:99:32 | file_path | src/main.rs:90:11:90:19 | file_path | src/main.rs:99:24:99:32 | file_path | This path depends on a $@. | src/main.rs:90:11:90:19 | file_path | user-provided value | +| src/main.rs:104:33:104:45 | path1.clone() | src/main.rs:103:17:103:32 | ...::args(...) | src/main.rs:104:33:104:45 | path1.clone() | This path depends on a $@. | src/main.rs:103:17:103:32 | ...::args(...) | user-provided value | +| src/main.rs:107:33:107:37 | path2 | src/main.rs:103:17:103:32 | ...::args(...) | src/main.rs:107:33:107:37 | path2 | This path depends on a $@. | src/main.rs:103:17:103:32 | ...::args(...) | user-provided value | +| src/main.rs:110:35:110:39 | path3 | src/main.rs:103:17:103:32 | ...::args(...) | src/main.rs:110:35:110:39 | path3 | This path depends on a $@. | src/main.rs:103:17:103:32 | ...::args(...) | user-provided value | +| src/main.rs:113:39:113:43 | path4 | src/main.rs:103:17:103:32 | ...::args(...) | src/main.rs:113:39:113:43 | path4 | This path depends on a $@. | src/main.rs:103:17:103:32 | ...::args(...) | user-provided value | +| src/main.rs:116:33:116:37 | path5 | src/main.rs:103:17:103:32 | ...::args(...) | src/main.rs:116:33:116:37 | path5 | This path depends on a $@. | src/main.rs:103:17:103:32 | ...::args(...) | user-provided value | +| src/main.rs:119:33:119:37 | path6 | src/main.rs:103:17:103:32 | ...::args(...) | src/main.rs:119:33:119:37 | path6 | This path depends on a $@. | src/main.rs:103:17:103:32 | ...::args(...) | user-provided value | +| src/main.rs:122:27:122:39 | path1.clone() | src/main.rs:103:17:103:32 | ...::args(...) | src/main.rs:122:27:122:39 | path1.clone() | This path depends on a $@. | src/main.rs:103:17:103:32 | ...::args(...) | user-provided value | +| src/main.rs:123:37:123:49 | path1.clone() | src/main.rs:103:17:103:32 | ...::args(...) | src/main.rs:123:37:123:49 | path1.clone() | This path depends on a $@. | src/main.rs:103:17:103:32 | ...::args(...) | user-provided value | +| src/main.rs:173:8:173:11 | path | src/main.rs:185:17:185:32 | ...::args(...) | src/main.rs:173:8:173:11 | path | This path depends on a $@. | src/main.rs:185:17:185:32 | ...::args(...) | user-provided value | +| src/main.rs:174:36:174:43 | path_str | src/main.rs:185:17:185:32 | ...::args(...) | src/main.rs:174:36:174:43 | path_str | This path depends on a $@. | src/main.rs:185:17:185:32 | ...::args(...) | user-provided value | +| src/main.rs:177:36:177:39 | path | src/main.rs:185:17:185:32 | ...::args(...) | src/main.rs:177:36:177:39 | path | This path depends on a $@. | src/main.rs:185:17:185:32 | ...::args(...) | user-provided value | edges | src/main.rs:7:11:7:19 | file_name | src/main.rs:9:35:9:43 | file_name | provenance | | -| src/main.rs:9:9:9:17 | file_path | src/main.rs:11:24:11:32 | file_path | provenance | | +| src/main.rs:9:9:9:17 | file_path | src/main.rs:11:24:11:32 | file_path | provenance | MaD:6 Sink:MaD:6 | | src/main.rs:9:21:9:44 | ...::from(...) | src/main.rs:9:9:9:17 | file_path | provenance | | | src/main.rs:9:35:9:43 | file_name | src/main.rs:9:21:9:44 | ...::from(...) | provenance | MaD:14 | -| src/main.rs:11:24:11:32 | file_path | src/main.rs:11:5:11:22 | ...::read_to_string | provenance | MaD:6 Sink:MaD:6 | | src/main.rs:38:11:38:19 | file_path | src/main.rs:41:52:41:60 | file_path | provenance | | -| src/main.rs:41:9:41:17 | file_path | src/main.rs:46:24:46:32 | file_path | provenance | | +| src/main.rs:41:9:41:17 | file_path | src/main.rs:46:24:46:32 | file_path | provenance | MaD:6 Sink:MaD:6 | | src/main.rs:41:21:41:62 | public_path.join(...) | src/main.rs:41:9:41:17 | file_path | provenance | | | src/main.rs:41:38:41:61 | ...::from(...) | src/main.rs:41:21:41:62 | public_path.join(...) | provenance | MaD:12 | | src/main.rs:41:52:41:60 | file_path | src/main.rs:41:38:41:61 | ...::from(...) | provenance | MaD:14 | -| src/main.rs:46:24:46:32 | file_path | src/main.rs:46:5:46:22 | ...::read_to_string | provenance | MaD:6 Sink:MaD:6 | | src/main.rs:63:11:63:19 | file_path | src/main.rs:66:32:66:40 | file_path | provenance | | -| src/main.rs:66:9:66:17 | file_path [&ref] | src/main.rs:71:24:71:32 | file_path [&ref] | provenance | | +| src/main.rs:66:9:66:17 | file_path [&ref] | src/main.rs:71:24:71:32 | file_path | provenance | MaD:6 Sink:MaD:6 | | src/main.rs:66:21:66:41 | ...::new(...) [&ref] | src/main.rs:66:9:66:17 | file_path [&ref] | provenance | | | src/main.rs:66:31:66:40 | &file_path [&ref] | src/main.rs:66:21:66:41 | ...::new(...) [&ref] | provenance | MaD:13 | | src/main.rs:66:32:66:40 | file_path | src/main.rs:66:31:66:40 | &file_path [&ref] | provenance | | -| src/main.rs:71:24:71:32 | file_path [&ref] | src/main.rs:71:5:71:22 | ...::read_to_string | provenance | MaD:6 Sink:MaD:6 | | src/main.rs:76:11:76:19 | file_path | src/main.rs:79:52:79:60 | file_path | provenance | | | src/main.rs:79:9:79:17 | file_path | src/main.rs:80:21:80:29 | file_path | provenance | | | src/main.rs:79:21:79:62 | public_path.join(...) | src/main.rs:79:9:79:17 | file_path | provenance | | | src/main.rs:79:38:79:61 | ...::from(...) | src/main.rs:79:21:79:62 | public_path.join(...) | provenance | MaD:12 | | src/main.rs:79:52:79:60 | file_path | src/main.rs:79:38:79:61 | ...::from(...) | provenance | MaD:14 | -| src/main.rs:80:9:80:17 | file_path | src/main.rs:85:24:85:32 | file_path | provenance | | +| src/main.rs:80:9:80:17 | file_path | src/main.rs:85:24:85:32 | file_path | provenance | MaD:6 Sink:MaD:6 | | src/main.rs:80:21:80:29 | file_path | src/main.rs:80:21:80:44 | file_path.canonicalize() [Ok] | provenance | MaD:15 | | src/main.rs:80:21:80:44 | file_path.canonicalize() [Ok] | src/main.rs:80:21:80:53 | ... .unwrap() | provenance | MaD:11 | | src/main.rs:80:21:80:53 | ... .unwrap() | src/main.rs:80:9:80:17 | file_path | provenance | | -| src/main.rs:85:24:85:32 | file_path | src/main.rs:85:5:85:22 | ...::read_to_string | provenance | MaD:6 Sink:MaD:6 | | src/main.rs:90:11:90:19 | file_path | src/main.rs:93:32:93:40 | file_path | provenance | | | src/main.rs:93:9:93:17 | file_path [&ref] | src/main.rs:98:21:98:29 | file_path [&ref] | provenance | | | src/main.rs:93:21:93:41 | ...::new(...) [&ref] | src/main.rs:93:9:93:17 | file_path [&ref] | provenance | | | src/main.rs:93:31:93:40 | &file_path [&ref] | src/main.rs:93:21:93:41 | ...::new(...) [&ref] | provenance | MaD:13 | | src/main.rs:93:32:93:40 | file_path | src/main.rs:93:31:93:40 | &file_path [&ref] | provenance | | -| src/main.rs:98:9:98:17 | file_path | src/main.rs:99:24:99:32 | file_path | provenance | | +| src/main.rs:98:9:98:17 | file_path | src/main.rs:99:24:99:32 | file_path | provenance | MaD:6 Sink:MaD:6 | | src/main.rs:98:21:98:29 | file_path [&ref] | src/main.rs:98:21:98:44 | file_path.canonicalize() [Ok] | provenance | Config | | src/main.rs:98:21:98:44 | file_path.canonicalize() [Ok] | src/main.rs:98:21:98:53 | ... .unwrap() | provenance | MaD:11 | | src/main.rs:98:21:98:53 | ... .unwrap() | src/main.rs:98:9:98:17 | file_path | provenance | | -| src/main.rs:99:24:99:32 | file_path | src/main.rs:99:5:99:22 | ...::read_to_string | provenance | MaD:6 Sink:MaD:6 | | src/main.rs:103:9:103:13 | path1 | src/main.rs:104:33:104:37 | path1 | provenance | | | src/main.rs:103:9:103:13 | path1 | src/main.rs:106:39:106:43 | path1 | provenance | | | src/main.rs:103:9:103:13 | path1 | src/main.rs:109:41:109:45 | path1 | provenance | | @@ -60,58 +55,50 @@ edges | src/main.rs:103:9:103:13 | path1 | src/main.rs:115:39:115:43 | path1 | provenance | | | src/main.rs:103:9:103:13 | path1 | src/main.rs:122:27:122:31 | path1 | provenance | | | src/main.rs:103:9:103:13 | path1 | src/main.rs:123:37:123:41 | path1 | provenance | | -| src/main.rs:103:17:103:30 | ...::args | src/main.rs:103:17:103:32 | ...::args(...) [element] | provenance | Src:MaD:7 | +| src/main.rs:103:17:103:32 | ...::args(...) | src/main.rs:103:17:103:32 | ...::args(...) [element] | provenance | Src:MaD:7 | | src/main.rs:103:17:103:32 | ...::args(...) [element] | src/main.rs:103:17:103:39 | ... .nth(...) [Some] | provenance | MaD:9 | | src/main.rs:103:17:103:39 | ... .nth(...) [Some] | src/main.rs:103:17:103:48 | ... .unwrap() | provenance | MaD:10 | | src/main.rs:103:17:103:48 | ... .unwrap() | src/main.rs:103:9:103:13 | path1 | provenance | | | src/main.rs:104:33:104:37 | path1 | src/main.rs:104:33:104:45 | path1.clone() | provenance | MaD:8 | -| src/main.rs:104:33:104:45 | path1.clone() | src/main.rs:104:13:104:31 | ...::open | provenance | MaD:2 Sink:MaD:2 | -| src/main.rs:106:9:106:13 | path2 | src/main.rs:107:33:107:37 | path2 | provenance | | +| src/main.rs:104:33:104:45 | path1.clone() | src/main.rs:104:33:104:45 | path1.clone() | provenance | MaD:2 Sink:MaD:2 | +| src/main.rs:106:9:106:13 | path2 | src/main.rs:107:33:107:37 | path2 | provenance | MaD:2 Sink:MaD:2 | | src/main.rs:106:17:106:52 | ...::canonicalize(...) [Ok] | src/main.rs:106:17:106:61 | ... .unwrap() | provenance | MaD:11 | | src/main.rs:106:17:106:61 | ... .unwrap() | src/main.rs:106:9:106:13 | path2 | provenance | | | src/main.rs:106:39:106:43 | path1 | src/main.rs:106:39:106:51 | path1.clone() | provenance | MaD:8 | | src/main.rs:106:39:106:51 | path1.clone() | src/main.rs:106:17:106:52 | ...::canonicalize(...) [Ok] | provenance | Config | -| src/main.rs:107:33:107:37 | path2 | src/main.rs:107:13:107:31 | ...::open | provenance | MaD:2 Sink:MaD:2 | -| src/main.rs:109:9:109:13 | path3 | src/main.rs:110:35:110:39 | path3 | provenance | | +| src/main.rs:109:9:109:13 | path3 | src/main.rs:110:35:110:39 | path3 | provenance | MaD:4 Sink:MaD:4 | | src/main.rs:109:17:109:54 | ...::canonicalize(...) [future, Ok] | src/main.rs:109:17:109:60 | await ... [Ok] | provenance | | | src/main.rs:109:17:109:60 | await ... [Ok] | src/main.rs:109:17:109:69 | ... .unwrap() | provenance | MaD:11 | | src/main.rs:109:17:109:69 | ... .unwrap() | src/main.rs:109:9:109:13 | path3 | provenance | | | src/main.rs:109:41:109:45 | path1 | src/main.rs:109:41:109:53 | path1.clone() | provenance | MaD:8 | | src/main.rs:109:41:109:53 | path1.clone() | src/main.rs:109:17:109:54 | ...::canonicalize(...) [future, Ok] | provenance | Config | -| src/main.rs:110:35:110:39 | path3 | src/main.rs:110:13:110:33 | ...::open | provenance | MaD:4 Sink:MaD:4 | -| src/main.rs:112:9:112:13 | path4 | src/main.rs:113:39:113:43 | path4 | provenance | | +| src/main.rs:112:9:112:13 | path4 | src/main.rs:113:39:113:43 | path4 | provenance | MaD:1 Sink:MaD:1 | | src/main.rs:112:17:112:58 | ...::canonicalize(...) [future, Ok] | src/main.rs:112:17:112:64 | await ... [Ok] | provenance | | | src/main.rs:112:17:112:64 | await ... [Ok] | src/main.rs:112:17:112:73 | ... .unwrap() | provenance | MaD:11 | | src/main.rs:112:17:112:73 | ... .unwrap() | src/main.rs:112:9:112:13 | path4 | provenance | | | src/main.rs:112:45:112:49 | path1 | src/main.rs:112:45:112:57 | path1.clone() | provenance | MaD:8 | | src/main.rs:112:45:112:57 | path1.clone() | src/main.rs:112:17:112:58 | ...::canonicalize(...) [future, Ok] | provenance | Config | -| src/main.rs:113:39:113:43 | path4 | src/main.rs:113:13:113:37 | ...::open | provenance | MaD:1 Sink:MaD:1 | -| src/main.rs:115:9:115:13 | path5 [&ref] | src/main.rs:116:33:116:37 | path5 [&ref] | provenance | | +| src/main.rs:115:9:115:13 | path5 [&ref] | src/main.rs:116:33:116:37 | path5 | provenance | MaD:2 Sink:MaD:2 | +| src/main.rs:115:9:115:13 | path5 [&ref] | src/main.rs:118:17:118:21 | path5 [&ref] | provenance | | | src/main.rs:115:17:115:44 | ...::new(...) [&ref] | src/main.rs:115:9:115:13 | path5 [&ref] | provenance | | | src/main.rs:115:38:115:43 | &path1 [&ref] | src/main.rs:115:17:115:44 | ...::new(...) [&ref] | provenance | MaD:13 | | src/main.rs:115:39:115:43 | path1 | src/main.rs:115:38:115:43 | &path1 [&ref] | provenance | | -| src/main.rs:116:33:116:37 | path5 [&ref] | src/main.rs:116:13:116:31 | ...::open | provenance | MaD:2 Sink:MaD:2 | -| src/main.rs:116:33:116:37 | path5 [&ref] | src/main.rs:118:17:118:21 | path5 [&ref] | provenance | | -| src/main.rs:118:9:118:13 | path6 | src/main.rs:119:33:119:37 | path6 | provenance | | +| src/main.rs:118:9:118:13 | path6 | src/main.rs:119:33:119:37 | path6 | provenance | MaD:2 Sink:MaD:2 | | src/main.rs:118:17:118:21 | path5 [&ref] | src/main.rs:118:17:118:36 | path5.canonicalize() [Ok] | provenance | Config | | src/main.rs:118:17:118:36 | path5.canonicalize() [Ok] | src/main.rs:118:17:118:45 | ... .unwrap() | provenance | MaD:11 | | src/main.rs:118:17:118:45 | ... .unwrap() | src/main.rs:118:9:118:13 | path6 | provenance | | -| src/main.rs:119:33:119:37 | path6 | src/main.rs:119:13:119:31 | ...::open | provenance | MaD:2 Sink:MaD:2 | | src/main.rs:122:27:122:31 | path1 | src/main.rs:122:27:122:39 | path1.clone() | provenance | MaD:8 | -| src/main.rs:122:27:122:39 | path1.clone() | src/main.rs:122:13:122:25 | ...::copy | provenance | MaD:5 Sink:MaD:5 | +| src/main.rs:122:27:122:39 | path1.clone() | src/main.rs:122:27:122:39 | path1.clone() | provenance | MaD:5 Sink:MaD:5 | | src/main.rs:123:37:123:41 | path1 | src/main.rs:123:37:123:49 | path1.clone() | provenance | MaD:8 | -| src/main.rs:123:37:123:49 | path1.clone() | src/main.rs:123:13:123:25 | ...::copy | provenance | MaD:5 Sink:MaD:5 | +| src/main.rs:123:37:123:49 | path1.clone() | src/main.rs:123:37:123:49 | path1.clone() | provenance | MaD:5 Sink:MaD:5 | | src/main.rs:170:16:170:29 | ...: ... [&ref] | src/main.rs:172:26:172:33 | path_str [&ref] | provenance | | -| src/main.rs:170:16:170:29 | ...: ... [&ref] | src/main.rs:174:36:174:43 | path_str [&ref] | provenance | | -| src/main.rs:172:9:172:12 | path [&ref] | src/main.rs:173:8:173:11 | path [&ref] | provenance | | +| src/main.rs:170:16:170:29 | ...: ... [&ref] | src/main.rs:174:36:174:43 | path_str | provenance | MaD:2 Sink:MaD:2 | +| src/main.rs:172:9:172:12 | path [&ref] | src/main.rs:173:8:173:11 | path | provenance | MaD:3 Sink:MaD:3 | +| src/main.rs:172:9:172:12 | path [&ref] | src/main.rs:177:36:177:39 | path | provenance | MaD:2 Sink:MaD:2 | | src/main.rs:172:16:172:34 | ...::new(...) [&ref] | src/main.rs:172:9:172:12 | path [&ref] | provenance | | | src/main.rs:172:26:172:33 | path_str [&ref] | src/main.rs:172:16:172:34 | ...::new(...) [&ref] | provenance | MaD:13 | -| src/main.rs:173:8:173:11 | path [&ref] | src/main.rs:173:13:173:18 | exists | provenance | MaD:3 Sink:MaD:3 | -| src/main.rs:173:8:173:11 | path [&ref] | src/main.rs:177:36:177:39 | path [&ref] | provenance | | -| src/main.rs:174:36:174:43 | path_str [&ref] | src/main.rs:174:25:174:34 | ...::open | provenance | MaD:2 Sink:MaD:2 | -| src/main.rs:177:36:177:39 | path [&ref] | src/main.rs:177:25:177:34 | ...::open | provenance | MaD:2 Sink:MaD:2 | | src/main.rs:185:9:185:13 | path1 | src/main.rs:186:18:186:22 | path1 | provenance | | -| src/main.rs:185:17:185:30 | ...::args | src/main.rs:185:17:185:32 | ...::args(...) [element] | provenance | Src:MaD:7 | +| src/main.rs:185:17:185:32 | ...::args(...) | src/main.rs:185:17:185:32 | ...::args(...) [element] | provenance | Src:MaD:7 | | src/main.rs:185:17:185:32 | ...::args(...) [element] | src/main.rs:185:17:185:39 | ... .nth(...) [Some] | provenance | MaD:9 | | src/main.rs:185:17:185:39 | ... .nth(...) [Some] | src/main.rs:185:17:185:48 | ... .unwrap() | provenance | MaD:10 | | src/main.rs:185:17:185:48 | ... .unwrap() | src/main.rs:185:9:185:13 | path1 | provenance | | @@ -138,22 +125,19 @@ nodes | src/main.rs:9:9:9:17 | file_path | semmle.label | file_path | | src/main.rs:9:21:9:44 | ...::from(...) | semmle.label | ...::from(...) | | src/main.rs:9:35:9:43 | file_name | semmle.label | file_name | -| src/main.rs:11:5:11:22 | ...::read_to_string | semmle.label | ...::read_to_string | | src/main.rs:11:24:11:32 | file_path | semmle.label | file_path | | src/main.rs:38:11:38:19 | file_path | semmle.label | file_path | | src/main.rs:41:9:41:17 | file_path | semmle.label | file_path | | src/main.rs:41:21:41:62 | public_path.join(...) | semmle.label | public_path.join(...) | | src/main.rs:41:38:41:61 | ...::from(...) | semmle.label | ...::from(...) | | src/main.rs:41:52:41:60 | file_path | semmle.label | file_path | -| src/main.rs:46:5:46:22 | ...::read_to_string | semmle.label | ...::read_to_string | | src/main.rs:46:24:46:32 | file_path | semmle.label | file_path | | src/main.rs:63:11:63:19 | file_path | semmle.label | file_path | | src/main.rs:66:9:66:17 | file_path [&ref] | semmle.label | file_path [&ref] | | src/main.rs:66:21:66:41 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | | src/main.rs:66:31:66:40 | &file_path [&ref] | semmle.label | &file_path [&ref] | | src/main.rs:66:32:66:40 | file_path | semmle.label | file_path | -| src/main.rs:71:5:71:22 | ...::read_to_string | semmle.label | ...::read_to_string | -| src/main.rs:71:24:71:32 | file_path [&ref] | semmle.label | file_path [&ref] | +| src/main.rs:71:24:71:32 | file_path | semmle.label | file_path | | src/main.rs:76:11:76:19 | file_path | semmle.label | file_path | | src/main.rs:79:9:79:17 | file_path | semmle.label | file_path | | src/main.rs:79:21:79:62 | public_path.join(...) | semmle.label | public_path.join(...) | @@ -163,7 +147,6 @@ nodes | src/main.rs:80:21:80:29 | file_path | semmle.label | file_path | | src/main.rs:80:21:80:44 | file_path.canonicalize() [Ok] | semmle.label | file_path.canonicalize() [Ok] | | src/main.rs:80:21:80:53 | ... .unwrap() | semmle.label | ... .unwrap() | -| src/main.rs:85:5:85:22 | ...::read_to_string | semmle.label | ...::read_to_string | | src/main.rs:85:24:85:32 | file_path | semmle.label | file_path | | src/main.rs:90:11:90:19 | file_path | semmle.label | file_path | | src/main.rs:93:9:93:17 | file_path [&ref] | semmle.label | file_path [&ref] | @@ -174,22 +157,20 @@ nodes | src/main.rs:98:21:98:29 | file_path [&ref] | semmle.label | file_path [&ref] | | src/main.rs:98:21:98:44 | file_path.canonicalize() [Ok] | semmle.label | file_path.canonicalize() [Ok] | | src/main.rs:98:21:98:53 | ... .unwrap() | semmle.label | ... .unwrap() | -| src/main.rs:99:5:99:22 | ...::read_to_string | semmle.label | ...::read_to_string | | src/main.rs:99:24:99:32 | file_path | semmle.label | file_path | | src/main.rs:103:9:103:13 | path1 | semmle.label | path1 | -| src/main.rs:103:17:103:30 | ...::args | semmle.label | ...::args | +| src/main.rs:103:17:103:32 | ...::args(...) | semmle.label | ...::args(...) | | src/main.rs:103:17:103:32 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | | src/main.rs:103:17:103:39 | ... .nth(...) [Some] | semmle.label | ... .nth(...) [Some] | | src/main.rs:103:17:103:48 | ... .unwrap() | semmle.label | ... .unwrap() | -| src/main.rs:104:13:104:31 | ...::open | semmle.label | ...::open | | src/main.rs:104:33:104:37 | path1 | semmle.label | path1 | | src/main.rs:104:33:104:45 | path1.clone() | semmle.label | path1.clone() | +| src/main.rs:104:33:104:45 | path1.clone() | semmle.label | path1.clone() | | src/main.rs:106:9:106:13 | path2 | semmle.label | path2 | | src/main.rs:106:17:106:52 | ...::canonicalize(...) [Ok] | semmle.label | ...::canonicalize(...) [Ok] | | src/main.rs:106:17:106:61 | ... .unwrap() | semmle.label | ... .unwrap() | | src/main.rs:106:39:106:43 | path1 | semmle.label | path1 | | src/main.rs:106:39:106:51 | path1.clone() | semmle.label | path1.clone() | -| src/main.rs:107:13:107:31 | ...::open | semmle.label | ...::open | | src/main.rs:107:33:107:37 | path2 | semmle.label | path2 | | src/main.rs:109:9:109:13 | path3 | semmle.label | path3 | | src/main.rs:109:17:109:54 | ...::canonicalize(...) [future, Ok] | semmle.label | ...::canonicalize(...) [future, Ok] | @@ -197,7 +178,6 @@ nodes | src/main.rs:109:17:109:69 | ... .unwrap() | semmle.label | ... .unwrap() | | src/main.rs:109:41:109:45 | path1 | semmle.label | path1 | | src/main.rs:109:41:109:53 | path1.clone() | semmle.label | path1.clone() | -| src/main.rs:110:13:110:33 | ...::open | semmle.label | ...::open | | src/main.rs:110:35:110:39 | path3 | semmle.label | path3 | | src/main.rs:112:9:112:13 | path4 | semmle.label | path4 | | src/main.rs:112:17:112:58 | ...::canonicalize(...) [future, Ok] | semmle.label | ...::canonicalize(...) [future, Ok] | @@ -205,38 +185,32 @@ nodes | src/main.rs:112:17:112:73 | ... .unwrap() | semmle.label | ... .unwrap() | | src/main.rs:112:45:112:49 | path1 | semmle.label | path1 | | src/main.rs:112:45:112:57 | path1.clone() | semmle.label | path1.clone() | -| src/main.rs:113:13:113:37 | ...::open | semmle.label | ...::open | | src/main.rs:113:39:113:43 | path4 | semmle.label | path4 | | src/main.rs:115:9:115:13 | path5 [&ref] | semmle.label | path5 [&ref] | | src/main.rs:115:17:115:44 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | | src/main.rs:115:38:115:43 | &path1 [&ref] | semmle.label | &path1 [&ref] | | src/main.rs:115:39:115:43 | path1 | semmle.label | path1 | -| src/main.rs:116:13:116:31 | ...::open | semmle.label | ...::open | -| src/main.rs:116:33:116:37 | path5 [&ref] | semmle.label | path5 [&ref] | +| src/main.rs:116:33:116:37 | path5 | semmle.label | path5 | | src/main.rs:118:9:118:13 | path6 | semmle.label | path6 | | src/main.rs:118:17:118:21 | path5 [&ref] | semmle.label | path5 [&ref] | | src/main.rs:118:17:118:36 | path5.canonicalize() [Ok] | semmle.label | path5.canonicalize() [Ok] | | src/main.rs:118:17:118:45 | ... .unwrap() | semmle.label | ... .unwrap() | -| src/main.rs:119:13:119:31 | ...::open | semmle.label | ...::open | | src/main.rs:119:33:119:37 | path6 | semmle.label | path6 | -| src/main.rs:122:13:122:25 | ...::copy | semmle.label | ...::copy | | src/main.rs:122:27:122:31 | path1 | semmle.label | path1 | | src/main.rs:122:27:122:39 | path1.clone() | semmle.label | path1.clone() | -| src/main.rs:123:13:123:25 | ...::copy | semmle.label | ...::copy | +| src/main.rs:122:27:122:39 | path1.clone() | semmle.label | path1.clone() | | src/main.rs:123:37:123:41 | path1 | semmle.label | path1 | | src/main.rs:123:37:123:49 | path1.clone() | semmle.label | path1.clone() | +| src/main.rs:123:37:123:49 | path1.clone() | semmle.label | path1.clone() | | src/main.rs:170:16:170:29 | ...: ... [&ref] | semmle.label | ...: ... [&ref] | | src/main.rs:172:9:172:12 | path [&ref] | semmle.label | path [&ref] | | src/main.rs:172:16:172:34 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | | src/main.rs:172:26:172:33 | path_str [&ref] | semmle.label | path_str [&ref] | -| src/main.rs:173:8:173:11 | path [&ref] | semmle.label | path [&ref] | -| src/main.rs:173:13:173:18 | exists | semmle.label | exists | -| src/main.rs:174:25:174:34 | ...::open | semmle.label | ...::open | -| src/main.rs:174:36:174:43 | path_str [&ref] | semmle.label | path_str [&ref] | -| src/main.rs:177:25:177:34 | ...::open | semmle.label | ...::open | -| src/main.rs:177:36:177:39 | path [&ref] | semmle.label | path [&ref] | +| src/main.rs:173:8:173:11 | path | semmle.label | path | +| src/main.rs:174:36:174:43 | path_str | semmle.label | path_str | +| src/main.rs:177:36:177:39 | path | semmle.label | path | | src/main.rs:185:9:185:13 | path1 | semmle.label | path1 | -| src/main.rs:185:17:185:30 | ...::args | semmle.label | ...::args | +| src/main.rs:185:17:185:32 | ...::args(...) | semmle.label | ...::args(...) | | src/main.rs:185:17:185:32 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | | src/main.rs:185:17:185:39 | ... .nth(...) [Some] | semmle.label | ... .nth(...) [Some] | | src/main.rs:185:17:185:48 | ... .unwrap() | semmle.label | ... .unwrap() | diff --git a/rust/ql/test/query-tests/security/CWE-022/TaintedPathSinks.ql b/rust/ql/test/query-tests/security/CWE-022/TaintedPathSinks.ql index 8660d779e2f0..a38213ae466c 100644 --- a/rust/ql/test/query-tests/security/CWE-022/TaintedPathSinks.ql +++ b/rust/ql/test/query-tests/security/CWE-022/TaintedPathSinks.ql @@ -15,42 +15,45 @@ module TaintedPathSinksTest implements TestSig { } predicate hasActualResult(Location location, string element, string tag, string value) { - exists(TaintedPath::Sink sink | - location = sink.getLocation() and - location.getFile().getBaseName() != "" and - element = sink.toString() and - tag = "path-injection-sink" and - value = "" - ) - or - exists(DataFlow::Node node | - ( - node instanceof TaintedPath::Barrier or - node instanceof TaintedPath::SanitizerGuard // tends to label the node *after* the check - ) and - location = node.getLocation() and - location.getFile().getBaseName() != "" and - element = node.toString() and - tag = "path-injection-barrier" and - value = "" - ) - or - exists(DataFlow::Node node | - DataflowImpl::optionalBarrier(node, "normalize-path") and - location = node.getLocation() and - location.getFile().getBaseName() != "" and - element = node.toString() and - tag = "path-injection-normalize" and - value = "" - ) - or - exists(DataFlow::Node node | - node instanceof Path::SafeAccessCheck and // tends to label the node *after* the check - location = node.getLocation() and - location.getFile().getBaseName() != "" and - element = node.toString() and - tag = "path-injection-checked" and - value = "" + location.fromSource() and + ( + exists(TaintedPath::Sink sink | + location = sink.getLocation() and + location.getFile().getBaseName() != "" and + element = sink.toString() and + tag = "path-injection-sink" and + value = "" + ) + or + exists(DataFlow::Node node | + ( + node instanceof TaintedPath::Barrier or + node instanceof TaintedPath::SanitizerGuard // tends to label the node *after* the check + ) and + location = node.getLocation() and + location.getFile().getBaseName() != "" and + element = node.toString() and + tag = "path-injection-barrier" and + value = "" + ) + or + exists(DataFlow::Node node | + DataflowImpl::optionalBarrier(node, "normalize-path") and + location = node.getLocation() and + location.getFile().getBaseName() != "" and + element = node.toString() and + tag = "path-injection-normalize" and + value = "" + ) + or + exists(DataFlow::Node node | + node instanceof Path::SafeAccessCheck and // tends to label the node *after* the check + location = node.getLocation() and + location.getFile().getBaseName() != "" and + element = node.toString() and + tag = "path-injection-checked" and + value = "" + ) ) } } diff --git a/rust/ql/test/query-tests/security/CWE-079/actix/XSS.expected b/rust/ql/test/query-tests/security/CWE-079/actix/XSS.expected index 9667a9216e6f..48908af92c89 100644 --- a/rust/ql/test/query-tests/security/CWE-079/actix/XSS.expected +++ b/rust/ql/test/query-tests/security/CWE-079/actix/XSS.expected @@ -1,17 +1,16 @@ #select -| main.rs:25:5:25:13 | ...::new | main.rs:8:1:8:18 | to | main.rs:25:5:25:13 | ...::new | Cross-site scripting vulnerability due to a $@. | main.rs:8:1:8:18 | to | user-provided value | +| main.rs:25:15:25:18 | html | main.rs:8:7:9:27 | ... .to(...) | main.rs:25:15:25:18 | html | Cross-site scripting vulnerability due to a $@. | main.rs:8:7:9:27 | ... .to(...) | user-provided value | edges -| main.rs:8:1:8:18 | to | main.rs:9:29:9:51 | ...: ...::Path::<...> | provenance | Src:MaD:2 | +| main.rs:8:7:9:27 | ... .to(...) | main.rs:9:29:9:51 | ...: ...::Path::<...> | provenance | Src:MaD:2 | | main.rs:9:29:9:51 | ...: ...::Path::<...> | main.rs:10:22:10:25 | path | provenance | | | main.rs:10:9:10:18 | user_input | main.rs:13:9:22:18 | MacroExpr | provenance | | | main.rs:10:22:10:25 | path | main.rs:10:22:10:38 | path.into_inner() | provenance | MaD:3 | | main.rs:10:22:10:38 | path.into_inner() | main.rs:10:9:10:18 | user_input | provenance | | -| main.rs:12:9:12:12 | html | main.rs:25:15:25:18 | html | provenance | | +| main.rs:12:9:12:12 | html | main.rs:25:15:25:18 | html | provenance | MaD:1 Sink:MaD:1 | | main.rs:13:9:22:18 | ...::format(...) | main.rs:13:9:22:18 | { ... } | provenance | | | main.rs:13:9:22:18 | ...::must_use(...) | main.rs:12:9:12:12 | html | provenance | | | main.rs:13:9:22:18 | MacroExpr | main.rs:13:9:22:18 | ...::format(...) | provenance | MaD:4 | | main.rs:13:9:22:18 | { ... } | main.rs:13:9:22:18 | ...::must_use(...) | provenance | MaD:5 | -| main.rs:25:15:25:18 | html | main.rs:25:5:25:13 | ...::new | provenance | MaD:1 Sink:MaD:1 | models | 1 | Sink: ::new; Argument[0]; html-injection | | 2 | Source: ::to; Argument[0].Parameter[0..7]; remote | @@ -19,7 +18,7 @@ models | 4 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | | 5 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | nodes -| main.rs:8:1:8:18 | to | semmle.label | to | +| main.rs:8:7:9:27 | ... .to(...) | semmle.label | ... .to(...) | | main.rs:9:29:9:51 | ...: ...::Path::<...> | semmle.label | ...: ...::Path::<...> | | main.rs:10:9:10:18 | user_input | semmle.label | user_input | | main.rs:10:22:10:25 | path | semmle.label | path | @@ -29,6 +28,5 @@ nodes | main.rs:13:9:22:18 | ...::must_use(...) | semmle.label | ...::must_use(...) | | main.rs:13:9:22:18 | MacroExpr | semmle.label | MacroExpr | | main.rs:13:9:22:18 | { ... } | semmle.label | { ... } | -| main.rs:25:5:25:13 | ...::new | semmle.label | ...::new | | main.rs:25:15:25:18 | html | semmle.label | html | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-079/actix/main.rs b/rust/ql/test/query-tests/security/CWE-079/actix/main.rs index 42cd760ca6cb..9a0cb5def4e2 100644 --- a/rust/ql/test/query-tests/security/CWE-079/actix/main.rs +++ b/rust/ql/test/query-tests/security/CWE-079/actix/main.rs @@ -5,8 +5,8 @@ use actix_web::{ }; // The "bad" example from the qldoc -#[get("/bad/{a}")] // $ Source=a -async fn vulnerable_handler(path: web::Path) -> impl Responder { +#[get("/bad/{a}")] +async fn vulnerable_handler(path: web::Path) -> impl Responder { // $ Source=a let user_input = path.into_inner(); let html = format!( diff --git a/rust/ql/test/query-tests/security/CWE-079/axum/XSS.expected b/rust/ql/test/query-tests/security/CWE-079/axum/XSS.expected index 385ce0f58c48..a7387e05f7dd 100644 --- a/rust/ql/test/query-tests/security/CWE-079/axum/XSS.expected +++ b/rust/ql/test/query-tests/security/CWE-079/axum/XSS.expected @@ -1,5 +1,5 @@ #select -| main.rs:10:10:10:21 | html_content | main.rs:15:51:15:53 | get | main.rs:10:10:10:21 | html_content | Cross-site scripting vulnerability due to a $@. | main.rs:15:51:15:53 | get | user-provided value | +| main.rs:10:10:10:21 | html_content | main.rs:15:51:15:68 | get(...) | main.rs:10:10:10:21 | html_content | Cross-site scripting vulnerability due to a $@. | main.rs:15:51:15:68 | get(...) | user-provided value | edges | main.rs:8:24:8:59 | ...: Query::<...> | main.rs:9:32:9:63 | MacroExpr | provenance | | | main.rs:9:9:9:20 | html_content | main.rs:10:10:10:21 | html_content | provenance | | @@ -7,7 +7,7 @@ edges | main.rs:9:32:9:63 | ...::must_use(...) | main.rs:9:9:9:20 | html_content | provenance | | | main.rs:9:32:9:63 | MacroExpr | main.rs:9:32:9:63 | ...::format(...) | provenance | MaD:2 | | main.rs:9:32:9:63 | { ... } | main.rs:9:32:9:63 | ...::must_use(...) | provenance | MaD:3 | -| main.rs:15:51:15:53 | get | main.rs:8:24:8:59 | ...: Query::<...> | provenance | Src:MaD:1 | +| main.rs:15:51:15:68 | get(...) | main.rs:8:24:8:59 | ...: Query::<...> | provenance | Src:MaD:1 | models | 1 | Source: axum::routing::method_routing::get; Argument[0].Parameter[0..7]; remote | | 2 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | @@ -20,5 +20,5 @@ nodes | main.rs:9:32:9:63 | MacroExpr | semmle.label | MacroExpr | | main.rs:9:32:9:63 | { ... } | semmle.label | { ... } | | main.rs:10:10:10:21 | html_content | semmle.label | html_content | -| main.rs:15:51:15:53 | get | semmle.label | get | +| main.rs:15:51:15:68 | get(...) | semmle.label | get(...) | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-079/warp/XSS.expected b/rust/ql/test/query-tests/security/CWE-079/warp/XSS.expected index 8a366d3b0d54..e0a11723c406 100644 --- a/rust/ql/test/query-tests/security/CWE-079/warp/XSS.expected +++ b/rust/ql/test/query-tests/security/CWE-079/warp/XSS.expected @@ -1,27 +1,25 @@ #select -| main.rs:10:13:10:29 | ...::html | main.rs:7:10:7:12 | map | main.rs:10:13:10:29 | ...::html | Cross-site scripting vulnerability due to a $@. | main.rs:7:10:7:12 | map | user-provided value | +| main.rs:10:31:10:34 | body | main.rs:5:17:11:10 | ... .map(...) | main.rs:10:31:10:34 | body | Cross-site scripting vulnerability due to a $@. | main.rs:5:17:11:10 | ... .map(...) | user-provided value | edges -| main.rs:7:10:7:12 | map | main.rs:7:15:7:26 | ...: String | provenance | Src:MaD:2 | +| main.rs:5:17:11:10 | ... .map(...) | main.rs:7:15:7:26 | ...: String | provenance | Src:MaD:2 | | main.rs:7:15:7:26 | ...: String | main.rs:9:32:9:56 | MacroExpr | provenance | | -| main.rs:9:17:9:20 | body | main.rs:10:31:10:34 | body | provenance | | +| main.rs:9:17:9:20 | body | main.rs:10:31:10:34 | body | provenance | MaD:1 Sink:MaD:1 | | main.rs:9:32:9:56 | ...::format(...) | main.rs:9:32:9:56 | { ... } | provenance | | | main.rs:9:32:9:56 | ...::must_use(...) | main.rs:9:17:9:20 | body | provenance | | | main.rs:9:32:9:56 | MacroExpr | main.rs:9:32:9:56 | ...::format(...) | provenance | MaD:3 | | main.rs:9:32:9:56 | { ... } | main.rs:9:32:9:56 | ...::must_use(...) | provenance | MaD:4 | -| main.rs:10:31:10:34 | body | main.rs:10:13:10:29 | ...::html | provenance | MaD:1 Sink:MaD:1 | models | 1 | Sink: warp::reply::html; Argument[0]; html-injection | | 2 | Source: <_ as warp::filter::Filter>::map; Argument[0].Parameter[0..7]; remote | | 3 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | | 4 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | nodes -| main.rs:7:10:7:12 | map | semmle.label | map | +| main.rs:5:17:11:10 | ... .map(...) | semmle.label | ... .map(...) | | main.rs:7:15:7:26 | ...: String | semmle.label | ...: String | | main.rs:9:17:9:20 | body | semmle.label | body | | main.rs:9:32:9:56 | ...::format(...) | semmle.label | ...::format(...) | | main.rs:9:32:9:56 | ...::must_use(...) | semmle.label | ...::must_use(...) | | main.rs:9:32:9:56 | MacroExpr | semmle.label | MacroExpr | | main.rs:9:32:9:56 | { ... } | semmle.label | { ... } | -| main.rs:10:13:10:29 | ...::html | semmle.label | ...::html | | main.rs:10:31:10:34 | body | semmle.label | body | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-079/warp/main.rs b/rust/ql/test/query-tests/security/CWE-079/warp/main.rs index fb300f4cdd42..c40e14f39a92 100644 --- a/rust/ql/test/query-tests/security/CWE-079/warp/main.rs +++ b/rust/ql/test/query-tests/security/CWE-079/warp/main.rs @@ -4,11 +4,11 @@ use warp::Filter; pub async fn main() { let hello = warp::path("greet") .and(warp::path::param()) - .map(|name: String| { // $ Source=name + .map(|name: String| { // Vulnerable to XSS because it directly includes user input in the response let body = format!("

Hello, {name}!

"); warp::reply::html(body) // $ Alert[rust/xss]=name - }); + }); // $ Source=name // Start the web server on port 3000 warp::serve(hello).run(([127, 0, 0, 1], 3000)).await; diff --git a/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected b/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected index 570340060556..addb965cd406 100644 --- a/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected +++ b/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected @@ -1,40 +1,40 @@ #select -| mysql.rs:25:32:25:36 | query | mysql.rs:12:33:12:54 | ...::get | mysql.rs:25:32:25:36 | query | This query depends on a $@. | mysql.rs:12:33:12:54 | ...::get | user-provided value | -| mysql.rs:26:54:26:62 | query_opt | mysql.rs:12:33:12:54 | ...::get | mysql.rs:26:54:26:62 | query_opt | This query depends on a $@. | mysql.rs:12:33:12:54 | ...::get | user-provided value | -| mysql.rs:27:14:27:23 | query_drop | mysql.rs:12:33:12:54 | ...::get | mysql.rs:27:14:27:23 | query_drop | This query depends on a $@. | mysql.rs:12:33:12:54 | ...::get | user-provided value | -| mysql.rs:28:27:28:37 | query_first | mysql.rs:12:33:12:54 | ...::get | mysql.rs:28:27:28:37 | query_first | This query depends on a $@. | mysql.rs:12:33:12:54 | ...::get | user-provided value | -| mysql.rs:29:49:29:63 | query_first_opt | mysql.rs:12:33:12:54 | ...::get | mysql.rs:29:49:29:63 | query_first_opt | This query depends on a $@. | mysql.rs:12:33:12:54 | ...::get | user-provided value | -| mysql.rs:30:22:30:31 | query_fold | mysql.rs:12:33:12:54 | ...::get | mysql.rs:30:22:30:31 | query_fold | This query depends on a $@. | mysql.rs:12:33:12:54 | ...::get | user-provided value | -| mysql.rs:31:22:31:35 | query_fold_opt | mysql.rs:12:33:12:54 | ...::get | mysql.rs:31:22:31:35 | query_fold_opt | This query depends on a $@. | mysql.rs:12:33:12:54 | ...::get | user-provided value | -| mysql.rs:36:22:36:31 | query_iter | mysql.rs:12:33:12:54 | ...::get | mysql.rs:36:22:36:31 | query_iter | This query depends on a $@. | mysql.rs:12:33:12:54 | ...::get | user-provided value | -| mysql.rs:37:22:37:30 | query_map | mysql.rs:12:33:12:54 | ...::get | mysql.rs:37:22:37:30 | query_map | This query depends on a $@. | mysql.rs:12:33:12:54 | ...::get | user-provided value | -| mysql.rs:38:22:38:34 | query_map_opt | mysql.rs:12:33:12:54 | ...::get | mysql.rs:38:22:38:34 | query_map_opt | This query depends on a $@. | mysql.rs:12:33:12:54 | ...::get | user-provided value | -| mysql.rs:42:33:42:37 | query | mysql.rs:12:33:12:54 | ...::get | mysql.rs:42:33:42:37 | query | This query depends on a $@. | mysql.rs:12:33:12:54 | ...::get | user-provided value | -| mysql.rs:75:26:75:29 | prep | mysql.rs:12:33:12:54 | ...::get | mysql.rs:75:26:75:29 | prep | This query depends on a $@. | mysql.rs:12:33:12:54 | ...::get | user-provided value | -| mysql.rs:80:15:80:24 | query_drop | mysql.rs:12:33:12:54 | ...::get | mysql.rs:80:15:80:24 | query_drop | This query depends on a $@. | mysql.rs:12:33:12:54 | ...::get | user-provided value | -| mysql.rs:110:32:110:36 | query | mysql.rs:97:33:97:54 | ...::get | mysql.rs:110:32:110:36 | query | This query depends on a $@. | mysql.rs:97:33:97:54 | ...::get | user-provided value | -| mysql.rs:111:14:111:23 | query_drop | mysql.rs:97:33:97:54 | ...::get | mysql.rs:111:14:111:23 | query_drop | This query depends on a $@. | mysql.rs:97:33:97:54 | ...::get | user-provided value | -| mysql.rs:112:35:112:45 | query_first | mysql.rs:97:33:97:54 | ...::get | mysql.rs:112:35:112:45 | query_first | This query depends on a $@. | mysql.rs:97:33:97:54 | ...::get | user-provided value | -| mysql.rs:114:14:114:23 | query_fold | mysql.rs:97:33:97:54 | ...::get | mysql.rs:114:14:114:23 | query_fold | This query depends on a $@. | mysql.rs:97:33:97:54 | ...::get | user-provided value | -| mysql.rs:116:22:116:31 | query_iter | mysql.rs:97:33:97:54 | ...::get | mysql.rs:116:22:116:31 | query_iter | This query depends on a $@. | mysql.rs:97:33:97:54 | ...::get | user-provided value | -| mysql.rs:118:14:118:25 | query_stream | mysql.rs:97:33:97:54 | ...::get | mysql.rs:118:14:118:25 | query_stream | This query depends on a $@. | mysql.rs:97:33:97:54 | ...::get | user-provided value | -| mysql.rs:121:14:121:22 | query_map | mysql.rs:97:33:97:54 | ...::get | mysql.rs:121:14:121:22 | query_map | This query depends on a $@. | mysql.rs:97:33:97:54 | ...::get | user-provided value | -| mysql.rs:149:26:149:29 | prep | mysql.rs:97:33:97:54 | ...::get | mysql.rs:149:26:149:29 | prep | This query depends on a $@. | mysql.rs:97:33:97:54 | ...::get | user-provided value | -| mysql.rs:154:15:154:24 | query_drop | mysql.rs:97:33:97:54 | ...::get | mysql.rs:154:15:154:24 | query_drop | This query depends on a $@. | mysql.rs:97:33:97:54 | ...::get | user-provided value | -| sqlx.rs:78:13:78:23 | ...::query | sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:78:13:78:23 | ...::query | This query depends on a $@. | sqlx.rs:47:22:47:35 | ...::args | user-provided value | -| sqlx.rs:80:17:80:27 | ...::query | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:80:17:80:27 | ...::query | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | -| sqlx.rs:81:17:81:27 | ...::query | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:81:17:81:27 | ...::query | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | -| sqlx.rs:82:17:82:27 | ...::query | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:82:17:82:27 | ...::query | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | -| sqlx.rs:113:17:113:29 | ...::raw_sql | sqlx.rs:100:25:100:46 | ...::get | sqlx.rs:113:17:113:29 | ...::raw_sql | This query depends on a $@. | sqlx.rs:100:25:100:46 | ...::get | user-provided value | -| sqlx.rs:120:17:120:27 | ...::query | sqlx.rs:100:25:100:46 | ...::get | sqlx.rs:120:17:120:27 | ...::query | This query depends on a $@. | sqlx.rs:100:25:100:46 | ...::get | user-provided value | -| sqlx.rs:127:17:127:27 | ...::query | sqlx.rs:100:25:100:46 | ...::get | sqlx.rs:127:17:127:27 | ...::query | This query depends on a $@. | sqlx.rs:100:25:100:46 | ...::get | user-provided value | -| sqlx.rs:136:40:136:53 | ...::query_as | sqlx.rs:100:25:100:46 | ...::get | sqlx.rs:136:40:136:53 | ...::query_as | This query depends on a $@. | sqlx.rs:100:25:100:46 | ...::get | user-provided value | -| sqlx.rs:145:40:145:53 | ...::query_as | sqlx.rs:100:25:100:46 | ...::get | sqlx.rs:145:40:145:53 | ...::query_as | This query depends on a $@. | sqlx.rs:100:25:100:46 | ...::get | user-provided value | -| sqlx.rs:153:17:153:27 | ...::query | sqlx.rs:100:25:100:46 | ...::get | sqlx.rs:153:17:153:27 | ...::query | This query depends on a $@. | sqlx.rs:100:25:100:46 | ...::get | user-provided value | -| sqlx.rs:188:17:188:27 | ...::query | sqlx.rs:173:25:173:46 | ...::get | sqlx.rs:188:17:188:27 | ...::query | This query depends on a $@. | sqlx.rs:173:25:173:46 | ...::get | user-provided value | +| mysql.rs:25:38:25:58 | unsafe_query.as_str() | mysql.rs:12:33:12:77 | ...::get(...) | mysql.rs:25:38:25:58 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:12:33:12:77 | ...::get(...) | user-provided value | +| mysql.rs:26:64:26:84 | unsafe_query.as_str() | mysql.rs:12:33:12:77 | ...::get(...) | mysql.rs:26:64:26:84 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:12:33:12:77 | ...::get(...) | user-provided value | +| mysql.rs:27:25:27:45 | unsafe_query.as_str() | mysql.rs:12:33:12:77 | ...::get(...) | mysql.rs:27:25:27:45 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:12:33:12:77 | ...::get(...) | user-provided value | +| mysql.rs:28:39:28:59 | unsafe_query.as_str() | mysql.rs:12:33:12:77 | ...::get(...) | mysql.rs:28:39:28:59 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:12:33:12:77 | ...::get(...) | user-provided value | +| mysql.rs:29:65:29:85 | unsafe_query.as_str() | mysql.rs:12:33:12:77 | ...::get(...) | mysql.rs:29:65:29:85 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:12:33:12:77 | ...::get(...) | user-provided value | +| mysql.rs:30:33:30:53 | unsafe_query.as_str() | mysql.rs:12:33:12:77 | ...::get(...) | mysql.rs:30:33:30:53 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:12:33:12:77 | ...::get(...) | user-provided value | +| mysql.rs:32:13:32:33 | unsafe_query.as_str() | mysql.rs:12:33:12:77 | ...::get(...) | mysql.rs:32:13:32:33 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:12:33:12:77 | ...::get(...) | user-provided value | +| mysql.rs:36:33:36:53 | unsafe_query.as_str() | mysql.rs:12:33:12:77 | ...::get(...) | mysql.rs:36:33:36:53 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:12:33:12:77 | ...::get(...) | user-provided value | +| mysql.rs:37:32:37:52 | unsafe_query.as_str() | mysql.rs:12:33:12:77 | ...::get(...) | mysql.rs:37:32:37:52 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:12:33:12:77 | ...::get(...) | user-provided value | +| mysql.rs:39:13:39:33 | unsafe_query.as_str() | mysql.rs:12:33:12:77 | ...::get(...) | mysql.rs:39:13:39:33 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:12:33:12:77 | ...::get(...) | user-provided value | +| mysql.rs:42:39:42:59 | unsafe_query.as_str() | mysql.rs:12:33:12:77 | ...::get(...) | mysql.rs:42:39:42:59 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:12:33:12:77 | ...::get(...) | user-provided value | +| mysql.rs:75:31:75:51 | unsafe_query.as_str() | mysql.rs:12:33:12:77 | ...::get(...) | mysql.rs:75:31:75:51 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:12:33:12:77 | ...::get(...) | user-provided value | +| mysql.rs:80:26:80:46 | unsafe_query.as_str() | mysql.rs:12:33:12:77 | ...::get(...) | mysql.rs:80:26:80:46 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:12:33:12:77 | ...::get(...) | user-provided value | +| mysql.rs:110:38:110:58 | unsafe_query.as_str() | mysql.rs:97:33:97:77 | ...::get(...) | mysql.rs:110:38:110:58 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:97:33:97:77 | ...::get(...) | user-provided value | +| mysql.rs:111:25:111:45 | unsafe_query.as_str() | mysql.rs:97:33:97:77 | ...::get(...) | mysql.rs:111:25:111:45 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:97:33:97:77 | ...::get(...) | user-provided value | +| mysql.rs:112:47:112:67 | unsafe_query.as_str() | mysql.rs:97:33:97:77 | ...::get(...) | mysql.rs:112:47:112:67 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:97:33:97:77 | ...::get(...) | user-provided value | +| mysql.rs:114:25:114:45 | unsafe_query.as_str() | mysql.rs:97:33:97:77 | ...::get(...) | mysql.rs:114:25:114:45 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:97:33:97:77 | ...::get(...) | user-provided value | +| mysql.rs:116:33:116:53 | unsafe_query.as_str() | mysql.rs:97:33:97:77 | ...::get(...) | mysql.rs:116:33:116:53 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:97:33:97:77 | ...::get(...) | user-provided value | +| mysql.rs:118:40:118:60 | unsafe_query.as_str() | mysql.rs:97:33:97:77 | ...::get(...) | mysql.rs:118:40:118:60 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:97:33:97:77 | ...::get(...) | user-provided value | +| mysql.rs:121:24:121:44 | unsafe_query.as_str() | mysql.rs:97:33:97:77 | ...::get(...) | mysql.rs:121:24:121:44 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:97:33:97:77 | ...::get(...) | user-provided value | +| mysql.rs:149:31:149:51 | unsafe_query.as_str() | mysql.rs:97:33:97:77 | ...::get(...) | mysql.rs:149:31:149:51 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:97:33:97:77 | ...::get(...) | user-provided value | +| mysql.rs:154:26:154:46 | unsafe_query.as_str() | mysql.rs:97:33:97:77 | ...::get(...) | mysql.rs:154:26:154:46 | unsafe_query.as_str() | This query depends on a $@. | mysql.rs:97:33:97:77 | ...::get(...) | user-provided value | +| sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | sqlx.rs:47:22:47:37 | ...::args(...) | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | This query depends on a $@. | sqlx.rs:47:22:47:37 | ...::args(...) | user-provided value | +| sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | sqlx.rs:48:25:48:69 | ...::get(...) | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:69 | ...::get(...) | user-provided value | +| sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() | sqlx.rs:48:25:48:69 | ...::get(...) | sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:69 | ...::get(...) | user-provided value | +| sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() | sqlx.rs:48:25:48:69 | ...::get(...) | sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:69 | ...::get(...) | user-provided value | +| sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() | sqlx.rs:100:25:100:69 | ...::get(...) | sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() | This query depends on a $@. | sqlx.rs:100:25:100:69 | ...::get(...) | user-provided value | +| sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() | sqlx.rs:100:25:100:69 | ...::get(...) | sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() | This query depends on a $@. | sqlx.rs:100:25:100:69 | ...::get(...) | user-provided value | +| sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() | sqlx.rs:100:25:100:69 | ...::get(...) | sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() | This query depends on a $@. | sqlx.rs:100:25:100:69 | ...::get(...) | user-provided value | +| sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() | sqlx.rs:100:25:100:69 | ...::get(...) | sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() | This query depends on a $@. | sqlx.rs:100:25:100:69 | ...::get(...) | user-provided value | +| sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() | sqlx.rs:100:25:100:69 | ...::get(...) | sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() | This query depends on a $@. | sqlx.rs:100:25:100:69 | ...::get(...) | user-provided value | +| sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() | sqlx.rs:100:25:100:69 | ...::get(...) | sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() | This query depends on a $@. | sqlx.rs:100:25:100:69 | ...::get(...) | user-provided value | +| sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() | sqlx.rs:173:25:173:69 | ...::get(...) | sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() | This query depends on a $@. | sqlx.rs:173:25:173:69 | ...::get(...) | user-provided value | edges | mysql.rs:12:13:12:29 | mut remote_string | mysql.rs:18:71:18:83 | remote_string | provenance | | -| mysql.rs:12:33:12:54 | ...::get | mysql.rs:12:33:12:77 | ...::get(...) [Ok] | provenance | Src:MaD:23 | +| mysql.rs:12:33:12:77 | ...::get(...) | mysql.rs:12:33:12:77 | ...::get(...) [Ok] | provenance | Src:MaD:23 | | mysql.rs:12:33:12:77 | ...::get(...) [Ok] | mysql.rs:12:33:13:21 | ... .unwrap() | provenance | MaD:30 | | mysql.rs:12:33:13:21 | ... .unwrap() | mysql.rs:12:33:14:19 | ... .text() [Ok] | provenance | MaD:32 | | mysql.rs:12:33:14:19 | ... .text() [Ok] | mysql.rs:12:33:15:40 | ... .unwrap_or(...) | provenance | MaD:31 | @@ -57,33 +57,33 @@ edges | mysql.rs:18:70:18:83 | &remote_string [&ref] | mysql.rs:18:13:18:83 | ... + ... | provenance | MaD:26 | | mysql.rs:18:71:18:83 | remote_string | mysql.rs:18:70:18:83 | &remote_string [&ref] | provenance | | | mysql.rs:25:38:25:49 | unsafe_query | mysql.rs:25:38:25:58 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:25:38:25:58 | unsafe_query.as_str() [&ref] | mysql.rs:25:32:25:36 | query | provenance | MaD:1 Sink:MaD:1 | +| mysql.rs:25:38:25:58 | unsafe_query.as_str() [&ref] | mysql.rs:25:38:25:58 | unsafe_query.as_str() | provenance | MaD:1 Sink:MaD:1 | | mysql.rs:26:64:26:75 | unsafe_query | mysql.rs:26:64:26:84 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:26:64:26:84 | unsafe_query.as_str() [&ref] | mysql.rs:26:54:26:62 | query_opt | provenance | MaD:9 Sink:MaD:9 | +| mysql.rs:26:64:26:84 | unsafe_query.as_str() [&ref] | mysql.rs:26:64:26:84 | unsafe_query.as_str() | provenance | MaD:9 Sink:MaD:9 | | mysql.rs:27:25:27:36 | unsafe_query | mysql.rs:27:25:27:45 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:27:25:27:45 | unsafe_query.as_str() [&ref] | mysql.rs:27:14:27:23 | query_drop | provenance | MaD:2 Sink:MaD:2 | +| mysql.rs:27:25:27:45 | unsafe_query.as_str() [&ref] | mysql.rs:27:25:27:45 | unsafe_query.as_str() | provenance | MaD:2 Sink:MaD:2 | | mysql.rs:28:39:28:50 | unsafe_query | mysql.rs:28:39:28:59 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:28:39:28:59 | unsafe_query.as_str() [&ref] | mysql.rs:28:27:28:37 | query_first | provenance | MaD:3 Sink:MaD:3 | +| mysql.rs:28:39:28:59 | unsafe_query.as_str() [&ref] | mysql.rs:28:39:28:59 | unsafe_query.as_str() | provenance | MaD:3 Sink:MaD:3 | | mysql.rs:29:65:29:76 | unsafe_query | mysql.rs:29:65:29:85 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:29:65:29:85 | unsafe_query.as_str() [&ref] | mysql.rs:29:49:29:63 | query_first_opt | provenance | MaD:4 Sink:MaD:4 | +| mysql.rs:29:65:29:85 | unsafe_query.as_str() [&ref] | mysql.rs:29:65:29:85 | unsafe_query.as_str() | provenance | MaD:4 Sink:MaD:4 | | mysql.rs:30:33:30:44 | unsafe_query | mysql.rs:30:33:30:53 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:30:33:30:53 | unsafe_query.as_str() [&ref] | mysql.rs:30:22:30:31 | query_fold | provenance | MaD:5 Sink:MaD:5 | +| mysql.rs:30:33:30:53 | unsafe_query.as_str() [&ref] | mysql.rs:30:33:30:53 | unsafe_query.as_str() | provenance | MaD:5 Sink:MaD:5 | | mysql.rs:32:13:32:24 | unsafe_query | mysql.rs:32:13:32:33 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:32:13:32:33 | unsafe_query.as_str() [&ref] | mysql.rs:31:22:31:35 | query_fold_opt | provenance | MaD:6 Sink:MaD:6 | +| mysql.rs:32:13:32:33 | unsafe_query.as_str() [&ref] | mysql.rs:32:13:32:33 | unsafe_query.as_str() | provenance | MaD:6 Sink:MaD:6 | | mysql.rs:36:33:36:44 | unsafe_query | mysql.rs:36:33:36:53 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:36:33:36:53 | unsafe_query.as_str() [&ref] | mysql.rs:36:22:36:31 | query_iter | provenance | MaD:17 Sink:MaD:17 | +| mysql.rs:36:33:36:53 | unsafe_query.as_str() [&ref] | mysql.rs:36:33:36:53 | unsafe_query.as_str() | provenance | MaD:17 Sink:MaD:17 | | mysql.rs:37:32:37:43 | unsafe_query | mysql.rs:37:32:37:52 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:37:32:37:52 | unsafe_query.as_str() [&ref] | mysql.rs:37:22:37:30 | query_map | provenance | MaD:7 Sink:MaD:7 | +| mysql.rs:37:32:37:52 | unsafe_query.as_str() [&ref] | mysql.rs:37:32:37:52 | unsafe_query.as_str() | provenance | MaD:7 Sink:MaD:7 | | mysql.rs:39:13:39:24 | unsafe_query | mysql.rs:39:13:39:33 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:39:13:39:33 | unsafe_query.as_str() [&ref] | mysql.rs:38:22:38:34 | query_map_opt | provenance | MaD:8 Sink:MaD:8 | +| mysql.rs:39:13:39:33 | unsafe_query.as_str() [&ref] | mysql.rs:39:13:39:33 | unsafe_query.as_str() | provenance | MaD:8 Sink:MaD:8 | | mysql.rs:42:39:42:50 | unsafe_query | mysql.rs:42:39:42:59 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:42:39:42:59 | unsafe_query.as_str() [&ref] | mysql.rs:42:33:42:37 | query | provenance | MaD:1 Sink:MaD:1 | +| mysql.rs:42:39:42:59 | unsafe_query.as_str() [&ref] | mysql.rs:42:39:42:59 | unsafe_query.as_str() | provenance | MaD:1 Sink:MaD:1 | | mysql.rs:75:31:75:42 | unsafe_query | mysql.rs:75:31:75:51 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:75:31:75:51 | unsafe_query.as_str() [&ref] | mysql.rs:75:26:75:29 | prep | provenance | MaD:16 Sink:MaD:16 | +| mysql.rs:75:31:75:51 | unsafe_query.as_str() [&ref] | mysql.rs:75:31:75:51 | unsafe_query.as_str() | provenance | MaD:16 Sink:MaD:16 | | mysql.rs:80:26:80:37 | unsafe_query | mysql.rs:80:26:80:46 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:80:26:80:46 | unsafe_query.as_str() [&ref] | mysql.rs:80:15:80:24 | query_drop | provenance | MaD:2 Sink:MaD:2 | +| mysql.rs:80:26:80:46 | unsafe_query.as_str() [&ref] | mysql.rs:80:26:80:46 | unsafe_query.as_str() | provenance | MaD:2 Sink:MaD:2 | | mysql.rs:97:13:97:29 | mut remote_string | mysql.rs:103:71:103:83 | remote_string | provenance | | -| mysql.rs:97:33:97:54 | ...::get | mysql.rs:97:33:97:77 | ...::get(...) [Ok] | provenance | Src:MaD:23 | +| mysql.rs:97:33:97:77 | ...::get(...) | mysql.rs:97:33:97:77 | ...::get(...) [Ok] | provenance | Src:MaD:23 | | mysql.rs:97:33:97:77 | ...::get(...) [Ok] | mysql.rs:97:33:98:21 | ... .unwrap() | provenance | MaD:30 | | mysql.rs:97:33:98:21 | ... .unwrap() | mysql.rs:97:33:99:19 | ... .text() [Ok] | provenance | MaD:32 | | mysql.rs:97:33:99:19 | ... .text() [Ok] | mysql.rs:97:33:100:40 | ... .unwrap_or(...) | provenance | MaD:31 | @@ -102,32 +102,32 @@ edges | mysql.rs:103:70:103:83 | &remote_string [&ref] | mysql.rs:103:13:103:83 | ... + ... | provenance | MaD:26 | | mysql.rs:103:71:103:83 | remote_string | mysql.rs:103:70:103:83 | &remote_string [&ref] | provenance | | | mysql.rs:110:38:110:49 | unsafe_query | mysql.rs:110:38:110:58 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:110:38:110:58 | unsafe_query.as_str() [&ref] | mysql.rs:110:32:110:36 | query | provenance | MaD:10 Sink:MaD:10 | +| mysql.rs:110:38:110:58 | unsafe_query.as_str() [&ref] | mysql.rs:110:38:110:58 | unsafe_query.as_str() | provenance | MaD:10 Sink:MaD:10 | | mysql.rs:111:25:111:36 | unsafe_query | mysql.rs:111:25:111:45 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:111:25:111:45 | unsafe_query.as_str() [&ref] | mysql.rs:111:14:111:23 | query_drop | provenance | MaD:11 Sink:MaD:11 | +| mysql.rs:111:25:111:45 | unsafe_query.as_str() [&ref] | mysql.rs:111:25:111:45 | unsafe_query.as_str() | provenance | MaD:11 Sink:MaD:11 | | mysql.rs:112:47:112:58 | unsafe_query | mysql.rs:112:47:112:67 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:112:47:112:67 | unsafe_query.as_str() [&ref] | mysql.rs:112:35:112:45 | query_first | provenance | MaD:12 Sink:MaD:12 | +| mysql.rs:112:47:112:67 | unsafe_query.as_str() [&ref] | mysql.rs:112:47:112:67 | unsafe_query.as_str() | provenance | MaD:12 Sink:MaD:12 | | mysql.rs:114:25:114:36 | unsafe_query | mysql.rs:114:25:114:45 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:114:25:114:45 | unsafe_query.as_str() [&ref] | mysql.rs:114:14:114:23 | query_fold | provenance | MaD:13 Sink:MaD:13 | +| mysql.rs:114:25:114:45 | unsafe_query.as_str() [&ref] | mysql.rs:114:25:114:45 | unsafe_query.as_str() | provenance | MaD:13 Sink:MaD:13 | | mysql.rs:116:33:116:44 | unsafe_query | mysql.rs:116:33:116:53 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:116:33:116:53 | unsafe_query.as_str() [&ref] | mysql.rs:116:22:116:31 | query_iter | provenance | MaD:19 Sink:MaD:19 | +| mysql.rs:116:33:116:53 | unsafe_query.as_str() [&ref] | mysql.rs:116:33:116:53 | unsafe_query.as_str() | provenance | MaD:19 Sink:MaD:19 | | mysql.rs:118:40:118:51 | unsafe_query | mysql.rs:118:40:118:60 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:118:40:118:60 | unsafe_query.as_str() [&ref] | mysql.rs:118:14:118:25 | query_stream | provenance | MaD:15 Sink:MaD:15 | +| mysql.rs:118:40:118:60 | unsafe_query.as_str() [&ref] | mysql.rs:118:40:118:60 | unsafe_query.as_str() | provenance | MaD:15 Sink:MaD:15 | | mysql.rs:121:24:121:35 | unsafe_query | mysql.rs:121:24:121:44 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:121:24:121:44 | unsafe_query.as_str() [&ref] | mysql.rs:121:14:121:22 | query_map | provenance | MaD:14 Sink:MaD:14 | +| mysql.rs:121:24:121:44 | unsafe_query.as_str() [&ref] | mysql.rs:121:24:121:44 | unsafe_query.as_str() | provenance | MaD:14 Sink:MaD:14 | | mysql.rs:149:31:149:42 | unsafe_query | mysql.rs:149:31:149:51 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:149:31:149:51 | unsafe_query.as_str() [&ref] | mysql.rs:149:26:149:29 | prep | provenance | MaD:18 Sink:MaD:18 | +| mysql.rs:149:31:149:51 | unsafe_query.as_str() [&ref] | mysql.rs:149:31:149:51 | unsafe_query.as_str() | provenance | MaD:18 Sink:MaD:18 | | mysql.rs:154:26:154:37 | unsafe_query | mysql.rs:154:26:154:46 | unsafe_query.as_str() [&ref] | provenance | MaD:28 | -| mysql.rs:154:26:154:46 | unsafe_query.as_str() [&ref] | mysql.rs:154:15:154:24 | query_drop | provenance | MaD:11 Sink:MaD:11 | +| mysql.rs:154:26:154:46 | unsafe_query.as_str() [&ref] | mysql.rs:154:26:154:46 | unsafe_query.as_str() | provenance | MaD:11 Sink:MaD:11 | | sqlx.rs:47:9:47:18 | arg_string | sqlx.rs:53:27:53:36 | arg_string | provenance | | -| sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:47:22:47:37 | ...::args(...) [element] | provenance | Src:MaD:24 | +| sqlx.rs:47:22:47:37 | ...::args(...) | sqlx.rs:47:22:47:37 | ...::args(...) [element] | provenance | Src:MaD:24 | | sqlx.rs:47:22:47:37 | ...::args(...) [element] | sqlx.rs:47:22:47:44 | ... .nth(...) [Some] | provenance | MaD:25 | | sqlx.rs:47:22:47:44 | ... .nth(...) [Some] | sqlx.rs:47:22:47:77 | ... .unwrap_or(...) | provenance | MaD:29 | | sqlx.rs:47:22:47:77 | ... .unwrap_or(...) | sqlx.rs:47:9:47:18 | arg_string | provenance | | | sqlx.rs:48:9:48:21 | remote_string | sqlx.rs:54:27:54:39 | remote_string | provenance | | | sqlx.rs:48:9:48:21 | remote_string | sqlx.rs:55:84:55:96 | remote_string | provenance | | | sqlx.rs:48:9:48:21 | remote_string | sqlx.rs:59:17:59:72 | MacroExpr | provenance | | -| sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:48:25:48:69 | ...::get(...) [Ok] | provenance | Src:MaD:23 | +| sqlx.rs:48:25:48:69 | ...::get(...) | sqlx.rs:48:25:48:69 | ...::get(...) [Ok] | provenance | Src:MaD:23 | | sqlx.rs:48:25:48:69 | ...::get(...) [Ok] | sqlx.rs:48:25:48:78 | ... .unwrap() | provenance | MaD:30 | | sqlx.rs:48:25:48:78 | ... .unwrap() | sqlx.rs:48:25:48:85 | ... .text() [Ok] | provenance | MaD:32 | | sqlx.rs:48:25:48:85 | ... .text() [Ok] | sqlx.rs:48:25:48:118 | ... .unwrap_or(...) | provenance | MaD:31 | @@ -149,15 +149,15 @@ edges | sqlx.rs:59:17:59:72 | MacroExpr | sqlx.rs:59:17:59:72 | ...::format(...) | provenance | MaD:33 | | sqlx.rs:59:17:59:72 | { ... } | sqlx.rs:59:17:59:72 | ...::must_use(...) | provenance | MaD:34 | | sqlx.rs:78:25:78:38 | unsafe_query_1 [&ref] | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() [&ref] | provenance | MaD:28 | -| sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() [&ref] | sqlx.rs:78:13:78:23 | ...::query | provenance | MaD:20 Sink:MaD:20 | +| sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() [&ref] | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | provenance | MaD:20 Sink:MaD:20 | | sqlx.rs:80:29:80:42 | unsafe_query_2 [&ref] | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() [&ref] | provenance | MaD:28 | -| sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() [&ref] | sqlx.rs:80:17:80:27 | ...::query | provenance | MaD:20 Sink:MaD:20 | +| sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() [&ref] | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | provenance | MaD:20 Sink:MaD:20 | | sqlx.rs:81:29:81:42 | unsafe_query_3 | sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() [&ref] | provenance | MaD:28 | -| sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() [&ref] | sqlx.rs:81:17:81:27 | ...::query | provenance | MaD:20 Sink:MaD:20 | +| sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() [&ref] | sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() | provenance | MaD:20 Sink:MaD:20 | | sqlx.rs:82:29:82:42 | unsafe_query_4 | sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() [&ref] | provenance | MaD:28 | -| sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() [&ref] | sqlx.rs:82:17:82:27 | ...::query | provenance | MaD:20 Sink:MaD:20 | +| sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() [&ref] | sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() | provenance | MaD:20 Sink:MaD:20 | | sqlx.rs:100:9:100:21 | remote_string | sqlx.rs:102:84:102:96 | remote_string | provenance | | -| sqlx.rs:100:25:100:46 | ...::get | sqlx.rs:100:25:100:69 | ...::get(...) [Ok] | provenance | Src:MaD:23 | +| sqlx.rs:100:25:100:69 | ...::get(...) | sqlx.rs:100:25:100:69 | ...::get(...) [Ok] | provenance | Src:MaD:23 | | sqlx.rs:100:25:100:69 | ...::get(...) [Ok] | sqlx.rs:100:25:100:78 | ... .unwrap() | provenance | MaD:30 | | sqlx.rs:100:25:100:78 | ... .unwrap() | sqlx.rs:100:25:100:85 | ... .text() [Ok] | provenance | MaD:32 | | sqlx.rs:100:25:100:85 | ... .text() [Ok] | sqlx.rs:100:25:100:118 | ... .unwrap_or(...) | provenance | MaD:31 | @@ -173,19 +173,19 @@ edges | sqlx.rs:102:83:102:96 | &remote_string [&ref] | sqlx.rs:102:26:102:96 | ... + ... | provenance | MaD:26 | | sqlx.rs:102:84:102:96 | remote_string | sqlx.rs:102:83:102:96 | &remote_string [&ref] | provenance | | | sqlx.rs:113:31:113:44 | unsafe_query_1 | sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() [&ref] | provenance | MaD:28 | -| sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() [&ref] | sqlx.rs:113:17:113:29 | ...::raw_sql | provenance | MaD:22 Sink:MaD:22 | +| sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() [&ref] | sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() | provenance | MaD:22 Sink:MaD:22 | | sqlx.rs:120:29:120:42 | unsafe_query_1 | sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() [&ref] | provenance | MaD:28 | -| sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() [&ref] | sqlx.rs:120:17:120:27 | ...::query | provenance | MaD:20 Sink:MaD:20 | +| sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() [&ref] | sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() | provenance | MaD:20 Sink:MaD:20 | | sqlx.rs:127:29:127:42 | unsafe_query_1 | sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() [&ref] | provenance | MaD:28 | -| sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() [&ref] | sqlx.rs:127:17:127:27 | ...::query | provenance | MaD:20 Sink:MaD:20 | +| sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() [&ref] | sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() | provenance | MaD:20 Sink:MaD:20 | | sqlx.rs:136:55:136:68 | unsafe_query_1 | sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() [&ref] | provenance | MaD:28 | -| sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() [&ref] | sqlx.rs:136:40:136:53 | ...::query_as | provenance | MaD:21 Sink:MaD:21 | +| sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() [&ref] | sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() | provenance | MaD:21 Sink:MaD:21 | | sqlx.rs:145:55:145:68 | unsafe_query_1 | sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() [&ref] | provenance | MaD:28 | -| sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() [&ref] | sqlx.rs:145:40:145:53 | ...::query_as | provenance | MaD:21 Sink:MaD:21 | +| sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() [&ref] | sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() | provenance | MaD:21 Sink:MaD:21 | | sqlx.rs:153:29:153:42 | unsafe_query_1 | sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() [&ref] | provenance | MaD:28 | -| sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() [&ref] | sqlx.rs:153:17:153:27 | ...::query | provenance | MaD:20 Sink:MaD:20 | +| sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() [&ref] | sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() | provenance | MaD:20 Sink:MaD:20 | | sqlx.rs:173:9:173:21 | remote_string | sqlx.rs:175:84:175:96 | remote_string | provenance | | -| sqlx.rs:173:25:173:46 | ...::get | sqlx.rs:173:25:173:69 | ...::get(...) [Ok] | provenance | Src:MaD:23 | +| sqlx.rs:173:25:173:69 | ...::get(...) | sqlx.rs:173:25:173:69 | ...::get(...) [Ok] | provenance | Src:MaD:23 | | sqlx.rs:173:25:173:69 | ...::get(...) [Ok] | sqlx.rs:173:25:173:78 | ... .unwrap() | provenance | MaD:30 | | sqlx.rs:173:25:173:78 | ... .unwrap() | sqlx.rs:173:25:173:85 | ... .text() [Ok] | provenance | MaD:32 | | sqlx.rs:173:25:173:85 | ... .text() [Ok] | sqlx.rs:173:25:173:118 | ... .unwrap_or(...) | provenance | MaD:31 | @@ -196,7 +196,7 @@ edges | sqlx.rs:175:83:175:96 | &remote_string [&ref] | sqlx.rs:175:26:175:96 | ... + ... | provenance | MaD:26 | | sqlx.rs:175:84:175:96 | remote_string | sqlx.rs:175:83:175:96 | &remote_string [&ref] | provenance | | | sqlx.rs:188:29:188:42 | unsafe_query_1 | sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() [&ref] | provenance | MaD:28 | -| sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() [&ref] | sqlx.rs:188:17:188:27 | ...::query | provenance | MaD:20 Sink:MaD:20 | +| sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() [&ref] | sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() | provenance | MaD:20 Sink:MaD:20 | models | 1 | Sink: <_ as mysql::conn::queryable::Queryable>::query; Argument[0]; sql-injection | | 2 | Sink: <_ as mysql::conn::queryable::Queryable>::query_drop; Argument[0]; sql-injection | @@ -234,7 +234,7 @@ models | 34 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | nodes | mysql.rs:12:13:12:29 | mut remote_string | semmle.label | mut remote_string | -| mysql.rs:12:33:12:54 | ...::get | semmle.label | ...::get | +| mysql.rs:12:33:12:77 | ...::get(...) | semmle.label | ...::get(...) | | mysql.rs:12:33:12:77 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | | mysql.rs:12:33:13:21 | ... .unwrap() | semmle.label | ... .unwrap() | | mysql.rs:12:33:14:19 | ... .text() [Ok] | semmle.label | ... .text() [Ok] | @@ -244,47 +244,47 @@ nodes | mysql.rs:18:13:18:89 | ... + ... | semmle.label | ... + ... | | mysql.rs:18:70:18:83 | &remote_string [&ref] | semmle.label | &remote_string [&ref] | | mysql.rs:18:71:18:83 | remote_string | semmle.label | remote_string | -| mysql.rs:25:32:25:36 | query | semmle.label | query | | mysql.rs:25:38:25:49 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:25:38:25:58 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:25:38:25:58 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | -| mysql.rs:26:54:26:62 | query_opt | semmle.label | query_opt | | mysql.rs:26:64:26:75 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:26:64:26:84 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:26:64:26:84 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | -| mysql.rs:27:14:27:23 | query_drop | semmle.label | query_drop | | mysql.rs:27:25:27:36 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:27:25:27:45 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:27:25:27:45 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | -| mysql.rs:28:27:28:37 | query_first | semmle.label | query_first | | mysql.rs:28:39:28:50 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:28:39:28:59 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:28:39:28:59 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | -| mysql.rs:29:49:29:63 | query_first_opt | semmle.label | query_first_opt | | mysql.rs:29:65:29:76 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:29:65:29:85 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:29:65:29:85 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | -| mysql.rs:30:22:30:31 | query_fold | semmle.label | query_fold | | mysql.rs:30:33:30:44 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:30:33:30:53 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:30:33:30:53 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | -| mysql.rs:31:22:31:35 | query_fold_opt | semmle.label | query_fold_opt | | mysql.rs:32:13:32:24 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:32:13:32:33 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:32:13:32:33 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | -| mysql.rs:36:22:36:31 | query_iter | semmle.label | query_iter | | mysql.rs:36:33:36:44 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:36:33:36:53 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:36:33:36:53 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | -| mysql.rs:37:22:37:30 | query_map | semmle.label | query_map | | mysql.rs:37:32:37:43 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:37:32:37:52 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:37:32:37:52 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | -| mysql.rs:38:22:38:34 | query_map_opt | semmle.label | query_map_opt | | mysql.rs:39:13:39:24 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:39:13:39:33 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:39:13:39:33 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | -| mysql.rs:42:33:42:37 | query | semmle.label | query | | mysql.rs:42:39:42:50 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:42:39:42:59 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:42:39:42:59 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | -| mysql.rs:75:26:75:29 | prep | semmle.label | prep | | mysql.rs:75:31:75:42 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:75:31:75:51 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:75:31:75:51 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | -| mysql.rs:80:15:80:24 | query_drop | semmle.label | query_drop | | mysql.rs:80:26:80:37 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:80:26:80:46 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:80:26:80:46 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | mysql.rs:97:13:97:29 | mut remote_string | semmle.label | mut remote_string | -| mysql.rs:97:33:97:54 | ...::get | semmle.label | ...::get | +| mysql.rs:97:33:97:77 | ...::get(...) | semmle.label | ...::get(...) | | mysql.rs:97:33:97:77 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | | mysql.rs:97:33:98:21 | ... .unwrap() | semmle.label | ... .unwrap() | | mysql.rs:97:33:99:19 | ... .text() [Ok] | semmle.label | ... .text() [Ok] | @@ -294,40 +294,40 @@ nodes | mysql.rs:103:13:103:89 | ... + ... | semmle.label | ... + ... | | mysql.rs:103:70:103:83 | &remote_string [&ref] | semmle.label | &remote_string [&ref] | | mysql.rs:103:71:103:83 | remote_string | semmle.label | remote_string | -| mysql.rs:110:32:110:36 | query | semmle.label | query | | mysql.rs:110:38:110:49 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:110:38:110:58 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:110:38:110:58 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | -| mysql.rs:111:14:111:23 | query_drop | semmle.label | query_drop | | mysql.rs:111:25:111:36 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:111:25:111:45 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:111:25:111:45 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | -| mysql.rs:112:35:112:45 | query_first | semmle.label | query_first | | mysql.rs:112:47:112:58 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:112:47:112:67 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:112:47:112:67 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | -| mysql.rs:114:14:114:23 | query_fold | semmle.label | query_fold | | mysql.rs:114:25:114:36 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:114:25:114:45 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:114:25:114:45 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | -| mysql.rs:116:22:116:31 | query_iter | semmle.label | query_iter | | mysql.rs:116:33:116:44 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:116:33:116:53 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:116:33:116:53 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | -| mysql.rs:118:14:118:25 | query_stream | semmle.label | query_stream | | mysql.rs:118:40:118:51 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:118:40:118:60 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:118:40:118:60 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | -| mysql.rs:121:14:121:22 | query_map | semmle.label | query_map | | mysql.rs:121:24:121:35 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:121:24:121:44 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:121:24:121:44 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | -| mysql.rs:149:26:149:29 | prep | semmle.label | prep | | mysql.rs:149:31:149:42 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:149:31:149:51 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:149:31:149:51 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | -| mysql.rs:154:15:154:24 | query_drop | semmle.label | query_drop | | mysql.rs:154:26:154:37 | unsafe_query | semmle.label | unsafe_query | +| mysql.rs:154:26:154:46 | unsafe_query.as_str() | semmle.label | unsafe_query.as_str() | | mysql.rs:154:26:154:46 | unsafe_query.as_str() [&ref] | semmle.label | unsafe_query.as_str() [&ref] | | sqlx.rs:47:9:47:18 | arg_string | semmle.label | arg_string | -| sqlx.rs:47:22:47:35 | ...::args | semmle.label | ...::args | +| sqlx.rs:47:22:47:37 | ...::args(...) | semmle.label | ...::args(...) | | sqlx.rs:47:22:47:37 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | | sqlx.rs:47:22:47:44 | ... .nth(...) [Some] | semmle.label | ... .nth(...) [Some] | | sqlx.rs:47:22:47:77 | ... .unwrap_or(...) | semmle.label | ... .unwrap_or(...) | | sqlx.rs:48:9:48:21 | remote_string | semmle.label | remote_string | -| sqlx.rs:48:25:48:46 | ...::get | semmle.label | ...::get | +| sqlx.rs:48:25:48:69 | ...::get(...) | semmle.label | ...::get(...) | | sqlx.rs:48:25:48:69 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | | sqlx.rs:48:25:48:78 | ... .unwrap() | semmle.label | ... .unwrap() | | sqlx.rs:48:25:48:85 | ... .text() [Ok] | semmle.label | ... .text() [Ok] | @@ -348,20 +348,20 @@ nodes | sqlx.rs:59:17:59:72 | ...::must_use(...) | semmle.label | ...::must_use(...) | | sqlx.rs:59:17:59:72 | MacroExpr | semmle.label | MacroExpr | | sqlx.rs:59:17:59:72 | { ... } | semmle.label | { ... } | -| sqlx.rs:78:13:78:23 | ...::query | semmle.label | ...::query | | sqlx.rs:78:25:78:38 | unsafe_query_1 [&ref] | semmle.label | unsafe_query_1 [&ref] | +| sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() [&ref] | semmle.label | unsafe_query_1.as_str() [&ref] | -| sqlx.rs:80:17:80:27 | ...::query | semmle.label | ...::query | | sqlx.rs:80:29:80:42 | unsafe_query_2 [&ref] | semmle.label | unsafe_query_2 [&ref] | +| sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | semmle.label | unsafe_query_2.as_str() | | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() [&ref] | semmle.label | unsafe_query_2.as_str() [&ref] | -| sqlx.rs:81:17:81:27 | ...::query | semmle.label | ...::query | | sqlx.rs:81:29:81:42 | unsafe_query_3 | semmle.label | unsafe_query_3 | +| sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() | semmle.label | unsafe_query_3.as_str() | | sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() [&ref] | semmle.label | unsafe_query_3.as_str() [&ref] | -| sqlx.rs:82:17:82:27 | ...::query | semmle.label | ...::query | | sqlx.rs:82:29:82:42 | unsafe_query_4 | semmle.label | unsafe_query_4 | +| sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() | semmle.label | unsafe_query_4.as_str() | | sqlx.rs:82:29:82:51 | unsafe_query_4.as_str() [&ref] | semmle.label | unsafe_query_4.as_str() [&ref] | | sqlx.rs:100:9:100:21 | remote_string | semmle.label | remote_string | -| sqlx.rs:100:25:100:46 | ...::get | semmle.label | ...::get | +| sqlx.rs:100:25:100:69 | ...::get(...) | semmle.label | ...::get(...) | | sqlx.rs:100:25:100:69 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | | sqlx.rs:100:25:100:78 | ... .unwrap() | semmle.label | ... .unwrap() | | sqlx.rs:100:25:100:85 | ... .text() [Ok] | semmle.label | ... .text() [Ok] | @@ -371,26 +371,26 @@ nodes | sqlx.rs:102:26:102:102 | ... + ... | semmle.label | ... + ... | | sqlx.rs:102:83:102:96 | &remote_string [&ref] | semmle.label | &remote_string [&ref] | | sqlx.rs:102:84:102:96 | remote_string | semmle.label | remote_string | -| sqlx.rs:113:17:113:29 | ...::raw_sql | semmle.label | ...::raw_sql | | sqlx.rs:113:31:113:44 | unsafe_query_1 | semmle.label | unsafe_query_1 | +| sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | | sqlx.rs:113:31:113:53 | unsafe_query_1.as_str() [&ref] | semmle.label | unsafe_query_1.as_str() [&ref] | -| sqlx.rs:120:17:120:27 | ...::query | semmle.label | ...::query | | sqlx.rs:120:29:120:42 | unsafe_query_1 | semmle.label | unsafe_query_1 | +| sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | | sqlx.rs:120:29:120:51 | unsafe_query_1.as_str() [&ref] | semmle.label | unsafe_query_1.as_str() [&ref] | -| sqlx.rs:127:17:127:27 | ...::query | semmle.label | ...::query | | sqlx.rs:127:29:127:42 | unsafe_query_1 | semmle.label | unsafe_query_1 | +| sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | | sqlx.rs:127:29:127:51 | unsafe_query_1.as_str() [&ref] | semmle.label | unsafe_query_1.as_str() [&ref] | -| sqlx.rs:136:40:136:53 | ...::query_as | semmle.label | ...::query_as | | sqlx.rs:136:55:136:68 | unsafe_query_1 | semmle.label | unsafe_query_1 | +| sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | | sqlx.rs:136:55:136:77 | unsafe_query_1.as_str() [&ref] | semmle.label | unsafe_query_1.as_str() [&ref] | -| sqlx.rs:145:40:145:53 | ...::query_as | semmle.label | ...::query_as | | sqlx.rs:145:55:145:68 | unsafe_query_1 | semmle.label | unsafe_query_1 | +| sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | | sqlx.rs:145:55:145:77 | unsafe_query_1.as_str() [&ref] | semmle.label | unsafe_query_1.as_str() [&ref] | -| sqlx.rs:153:17:153:27 | ...::query | semmle.label | ...::query | | sqlx.rs:153:29:153:42 | unsafe_query_1 | semmle.label | unsafe_query_1 | +| sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | | sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() [&ref] | semmle.label | unsafe_query_1.as_str() [&ref] | | sqlx.rs:173:9:173:21 | remote_string | semmle.label | remote_string | -| sqlx.rs:173:25:173:46 | ...::get | semmle.label | ...::get | +| sqlx.rs:173:25:173:69 | ...::get(...) | semmle.label | ...::get(...) | | sqlx.rs:173:25:173:69 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | | sqlx.rs:173:25:173:78 | ... .unwrap() | semmle.label | ... .unwrap() | | sqlx.rs:173:25:173:85 | ... .text() [Ok] | semmle.label | ... .text() [Ok] | @@ -400,7 +400,7 @@ nodes | sqlx.rs:175:26:175:102 | ... + ... | semmle.label | ... + ... | | sqlx.rs:175:83:175:96 | &remote_string [&ref] | semmle.label | &remote_string [&ref] | | sqlx.rs:175:84:175:96 | remote_string | semmle.label | remote_string | -| sqlx.rs:188:17:188:27 | ...::query | semmle.label | ...::query | | sqlx.rs:188:29:188:42 | unsafe_query_1 | semmle.label | unsafe_query_1 | +| sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | | sqlx.rs:188:29:188:51 | unsafe_query_1.as_str() [&ref] | semmle.label | unsafe_query_1.as_str() [&ref] | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-089/mysql.rs b/rust/ql/test/query-tests/security/CWE-089/mysql.rs index 71ee265e8bab..01b5fe7299c0 100644 --- a/rust/ql/test/query-tests/security/CWE-089/mysql.rs +++ b/rust/ql/test/query-tests/security/CWE-089/mysql.rs @@ -28,15 +28,15 @@ mod sync_test { let _: i64 = conn.query_first(unsafe_query.as_str())?.unwrap(); // $ sql-sink Alert[rust/sql-injection]=remote10 let _: Result = conn.query_first_opt(unsafe_query.as_str())?.unwrap(); // $ sql-sink Alert[rust/sql-injection]=remote10 let _ = conn.query_fold(unsafe_query.as_str(), 0, |_: i64, _: i64| -> i64 { 0 })?; // $ sql-sink Alert[rust/sql-injection]=remote10 - let _ = conn.query_fold_opt( // $ sql-sink Alert[rust/sql-injection]=remote10 - unsafe_query.as_str(), + let _ = conn.query_fold_opt( + unsafe_query.as_str(), // $ sql-sink Alert[rust/sql-injection]=remote10 0, |_: i64, _: Result| -> i64 { 0 }, )?; let _ = conn.query_iter(unsafe_query.as_str())?; // $ sql-sink Alert[rust/sql-injection]=remote10 let _ = conn.query_map(unsafe_query.as_str(), |_: i64| -> () {})?; // $ sql-sink Alert[rust/sql-injection]=remote10 - let _ = conn.query_map_opt( // $ sql-sink Alert[rust/sql-injection]=remote10 - unsafe_query.as_str(), + let _ = conn.query_map_opt( + unsafe_query.as_str(), // $ sql-sink Alert[rust/sql-injection]=remote10 |_: Result| -> () {}, )?; let _: Vec = conn2.query(unsafe_query.as_str())?; // $ sql-sink Alert[rust/sql-injection]=remote10 diff --git a/rust/ql/test/query-tests/security/CWE-117/LogInjection.expected b/rust/ql/test/query-tests/security/CWE-117/LogInjection.expected index 4349f3738eb9..28b91efad6ed 100644 --- a/rust/ql/test/query-tests/security/CWE-117/LogInjection.expected +++ b/rust/ql/test/query-tests/security/CWE-117/LogInjection.expected @@ -1,67 +1,59 @@ #select -| main.rs:15:5:15:9 | ...::log | main.rs:8:29:8:37 | ...::args | main.rs:15:5:15:9 | ...::log | Log entry depends on a $@. | main.rs:8:29:8:37 | ...::args | user-provided value | -| main.rs:16:5:16:9 | ...::log | main.rs:10:22:10:34 | ...::var | main.rs:16:5:16:9 | ...::log | Log entry depends on a $@. | main.rs:10:22:10:34 | ...::var | user-provided value | -| main.rs:17:5:17:10 | ...::log | main.rs:11:23:11:44 | ...::get | main.rs:17:5:17:10 | ...::log | Log entry depends on a $@. | main.rs:11:23:11:44 | ...::get | user-provided value | -| main.rs:18:5:18:10 | ...::log | main.rs:8:29:8:37 | ...::args | main.rs:18:5:18:10 | ...::log | Log entry depends on a $@. | main.rs:8:29:8:37 | ...::args | user-provided value | -| main.rs:19:5:19:10 | ...::log | main.rs:10:22:10:34 | ...::var | main.rs:19:5:19:10 | ...::log | Log entry depends on a $@. | main.rs:10:22:10:34 | ...::var | user-provided value | -| main.rs:23:5:23:9 | ...::log | main.rs:8:29:8:37 | ...::args | main.rs:23:5:23:9 | ...::log | Log entry depends on a $@. | main.rs:8:29:8:37 | ...::args | user-provided value | -| main.rs:27:5:27:9 | ...::log | main.rs:8:29:8:37 | ...::args | main.rs:27:5:27:9 | ...::log | Log entry depends on a $@. | main.rs:8:29:8:37 | ...::args | user-provided value | -| main.rs:30:5:30:9 | ...::log | main.rs:8:29:8:37 | ...::args | main.rs:30:5:30:9 | ...::log | Log entry depends on a $@. | main.rs:8:29:8:37 | ...::args | user-provided value | -| main.rs:30:5:30:9 | ...::log | main.rs:11:23:11:44 | ...::get | main.rs:30:5:30:9 | ...::log | Log entry depends on a $@. | main.rs:11:23:11:44 | ...::get | user-provided value | -| main.rs:66:5:66:9 | ...::log | main.rs:8:29:8:37 | ...::args | main.rs:66:5:66:9 | ...::log | Log entry depends on a $@. | main.rs:8:29:8:37 | ...::args | user-provided value | -| main.rs:112:9:112:13 | ...::log | main.rs:109:25:109:38 | ...::args | main.rs:112:9:112:13 | ...::log | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | -| main.rs:113:9:113:13 | ...::log | main.rs:109:25:109:38 | ...::args | main.rs:113:9:113:13 | ...::log | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | -| main.rs:114:9:114:14 | ...::log | main.rs:109:25:109:38 | ...::args | main.rs:114:9:114:14 | ...::log | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | -| main.rs:115:9:115:14 | ...::log | main.rs:109:25:109:38 | ...::args | main.rs:115:9:115:14 | ...::log | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | -| main.rs:116:9:116:14 | ...::log | main.rs:109:25:109:38 | ...::args | main.rs:116:9:116:14 | ...::log | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | -| main.rs:119:9:119:13 | ...::log | main.rs:109:25:109:38 | ...::args | main.rs:119:9:119:13 | ...::log | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | -| main.rs:130:9:130:16 | ...::_print | main.rs:127:25:127:37 | ...::var | main.rs:130:9:130:16 | ...::_print | Log entry depends on a $@. | main.rs:127:25:127:37 | ...::var | user-provided value | -| main.rs:131:9:131:17 | ...::_eprint | main.rs:127:25:127:37 | ...::var | main.rs:131:9:131:17 | ...::_eprint | Log entry depends on a $@. | main.rs:127:25:127:37 | ...::var | user-provided value | -| main.rs:143:9:143:16 | ...::_print | main.rs:150:28:150:30 | get | main.rs:143:9:143:16 | ...::_print | Log entry depends on a $@. | main.rs:150:28:150:30 | get | user-provided value | +| main.rs:15:11:15:36 | MacroExpr | main.rs:8:29:8:39 | ...::args(...) | main.rs:15:11:15:36 | MacroExpr | Log entry depends on a $@. | main.rs:8:29:8:39 | ...::args(...) | user-provided value | +| main.rs:16:11:16:44 | MacroExpr | main.rs:10:22:10:48 | ...::var(...) | main.rs:16:11:16:44 | MacroExpr | Log entry depends on a $@. | main.rs:10:22:10:48 | ...::var(...) | user-provided value | +| main.rs:17:12:17:46 | MacroExpr | main.rs:11:23:11:71 | ...::get(...) | main.rs:17:12:17:46 | MacroExpr | Log entry depends on a $@. | main.rs:11:23:11:71 | ...::get(...) | user-provided value | +| main.rs:18:12:18:37 | MacroExpr | main.rs:8:29:8:39 | ...::args(...) | main.rs:18:12:18:37 | MacroExpr | Log entry depends on a $@. | main.rs:8:29:8:39 | ...::args(...) | user-provided value | +| main.rs:19:12:19:39 | MacroExpr | main.rs:10:22:10:48 | ...::var(...) | main.rs:19:12:19:39 | MacroExpr | Log entry depends on a $@. | main.rs:10:22:10:48 | ...::var(...) | user-provided value | +| main.rs:23:11:23:29 | MacroExpr | main.rs:8:29:8:39 | ...::args(...) | main.rs:23:11:23:29 | MacroExpr | Log entry depends on a $@. | main.rs:8:29:8:39 | ...::args(...) | user-provided value | +| main.rs:27:11:27:26 | MacroExpr | main.rs:8:29:8:39 | ...::args(...) | main.rs:27:11:27:26 | MacroExpr | Log entry depends on a $@. | main.rs:8:29:8:39 | ...::args(...) | user-provided value | +| main.rs:30:11:30:66 | MacroExpr | main.rs:8:29:8:39 | ...::args(...) | main.rs:30:11:30:66 | MacroExpr | Log entry depends on a $@. | main.rs:8:29:8:39 | ...::args(...) | user-provided value | +| main.rs:30:11:30:66 | MacroExpr | main.rs:11:23:11:71 | ...::get(...) | main.rs:30:11:30:66 | MacroExpr | Log entry depends on a $@. | main.rs:11:23:11:71 | ...::get(...) | user-provided value | +| main.rs:66:11:66:41 | MacroExpr | main.rs:8:29:8:39 | ...::args(...) | main.rs:66:11:66:41 | MacroExpr | Log entry depends on a $@. | main.rs:8:29:8:39 | ...::args(...) | user-provided value | +| main.rs:112:15:112:35 | MacroExpr | main.rs:109:25:109:40 | ...::args(...) | main.rs:112:15:112:35 | MacroExpr | Log entry depends on a $@. | main.rs:109:25:109:40 | ...::args(...) | user-provided value | +| main.rs:113:15:113:38 | MacroExpr | main.rs:109:25:109:40 | ...::args(...) | main.rs:113:15:113:38 | MacroExpr | Log entry depends on a $@. | main.rs:109:25:109:40 | ...::args(...) | user-provided value | +| main.rs:114:16:114:37 | MacroExpr | main.rs:109:25:109:40 | ...::args(...) | main.rs:114:16:114:37 | MacroExpr | Log entry depends on a $@. | main.rs:109:25:109:40 | ...::args(...) | user-provided value | +| main.rs:115:16:115:37 | MacroExpr | main.rs:109:25:109:40 | ...::args(...) | main.rs:115:16:115:37 | MacroExpr | Log entry depends on a $@. | main.rs:109:25:109:40 | ...::args(...) | user-provided value | +| main.rs:116:16:116:37 | MacroExpr | main.rs:109:25:109:40 | ...::args(...) | main.rs:116:16:116:37 | MacroExpr | Log entry depends on a $@. | main.rs:109:25:109:40 | ...::args(...) | user-provided value | +| main.rs:119:15:119:75 | MacroExpr | main.rs:109:25:109:40 | ...::args(...) | main.rs:119:15:119:75 | MacroExpr | Log entry depends on a $@. | main.rs:109:25:109:40 | ...::args(...) | user-provided value | +| main.rs:130:18:130:38 | MacroExpr | main.rs:127:25:127:45 | ...::var(...) | main.rs:130:18:130:38 | MacroExpr | Log entry depends on a $@. | main.rs:127:25:127:45 | ...::var(...) | user-provided value | +| main.rs:131:19:131:49 | MacroExpr | main.rs:127:25:127:45 | ...::var(...) | main.rs:131:19:131:49 | MacroExpr | Log entry depends on a $@. | main.rs:127:25:127:45 | ...::var(...) | user-provided value | +| main.rs:143:18:143:40 | MacroExpr | main.rs:150:28:150:49 | get(...) | main.rs:143:18:143:40 | MacroExpr | Log entry depends on a $@. | main.rs:150:28:150:49 | get(...) | user-provided value | edges | main.rs:8:9:8:12 | args [element] | main.rs:9:20:9:23 | args [element] | provenance | | -| main.rs:8:29:8:37 | ...::args | main.rs:8:29:8:39 | ...::args(...) [element] | provenance | Src:MaD:6 | +| main.rs:8:29:8:39 | ...::args(...) | main.rs:8:29:8:39 | ...::args(...) [element] | provenance | Src:MaD:6 | | main.rs:8:29:8:39 | ...::args(...) [element] | main.rs:8:29:8:49 | ... .collect() [element] | provenance | MaD:10 | | main.rs:8:29:8:49 | ... .collect() [element] | main.rs:8:9:8:12 | args [element] | provenance | | -| main.rs:9:9:9:16 | username | main.rs:15:11:15:36 | MacroExpr | provenance | | -| main.rs:9:9:9:16 | username | main.rs:18:12:18:37 | MacroExpr | provenance | | +| main.rs:9:9:9:16 | username | main.rs:15:11:15:36 | MacroExpr | provenance | MaD:1 Sink:MaD:1 | +| main.rs:9:9:9:16 | username | main.rs:18:12:18:37 | MacroExpr | provenance | MaD:1 Sink:MaD:1 | | main.rs:9:9:9:16 | username | main.rs:22:33:22:63 | MacroExpr | provenance | | | main.rs:9:9:9:16 | username | main.rs:26:55:26:62 | username | provenance | | -| main.rs:9:9:9:16 | username | main.rs:30:11:30:66 | MacroExpr | provenance | | +| main.rs:9:9:9:16 | username | main.rs:30:11:30:66 | MacroExpr | provenance | MaD:1 Sink:MaD:1 | | main.rs:9:9:9:16 | username | main.rs:52:29:52:36 | username | provenance | | | main.rs:9:20:9:23 | args [element] | main.rs:9:20:9:30 | args.get(...) [Some, &ref] | provenance | MaD:13 | | main.rs:9:20:9:30 | args.get(...) [Some, &ref] | main.rs:9:20:9:64 | ... .unwrap_or(...) [&ref] | provenance | MaD:16 | | main.rs:9:20:9:64 | ... .unwrap_or(...) [&ref] | main.rs:9:20:9:72 | ... .clone() | provenance | MaD:9 | | main.rs:9:20:9:72 | ... .clone() | main.rs:9:9:9:16 | username | provenance | | -| main.rs:10:9:10:18 | user_input | main.rs:16:11:16:44 | MacroExpr | provenance | | -| main.rs:10:9:10:18 | user_input | main.rs:19:12:19:39 | MacroExpr | provenance | | -| main.rs:10:22:10:34 | ...::var | main.rs:10:22:10:48 | ...::var(...) [Ok] | provenance | Src:MaD:7 | +| main.rs:10:9:10:18 | user_input | main.rs:16:11:16:44 | MacroExpr | provenance | MaD:1 Sink:MaD:1 | +| main.rs:10:9:10:18 | user_input | main.rs:19:12:19:39 | MacroExpr | provenance | MaD:1 Sink:MaD:1 | +| main.rs:10:22:10:48 | ...::var(...) | main.rs:10:22:10:48 | ...::var(...) [Ok] | provenance | Src:MaD:7 | | main.rs:10:22:10:48 | ...::var(...) [Ok] | main.rs:10:22:10:81 | ... .unwrap_or(...) | provenance | MaD:19 | | main.rs:10:22:10:81 | ... .unwrap_or(...) | main.rs:10:9:10:18 | user_input | provenance | | -| main.rs:11:9:11:19 | remote_data | main.rs:17:12:17:46 | MacroExpr | provenance | | -| main.rs:11:9:11:19 | remote_data | main.rs:30:11:30:66 | MacroExpr | provenance | | -| main.rs:11:23:11:44 | ...::get | main.rs:11:23:11:71 | ...::get(...) [Ok] | provenance | Src:MaD:5 | +| main.rs:11:9:11:19 | remote_data | main.rs:17:12:17:46 | MacroExpr | provenance | MaD:1 Sink:MaD:1 | +| main.rs:11:9:11:19 | remote_data | main.rs:30:11:30:66 | MacroExpr | provenance | MaD:1 Sink:MaD:1 | +| main.rs:11:23:11:71 | ...::get(...) | main.rs:11:23:11:71 | ...::get(...) [Ok] | provenance | Src:MaD:5 | | main.rs:11:23:11:71 | ...::get(...) [Ok] | main.rs:11:23:12:17 | ... .unwrap() | provenance | MaD:18 | | main.rs:11:23:12:17 | ... .unwrap() | main.rs:11:23:12:24 | ... .text() [Ok] | provenance | MaD:21 | | main.rs:11:23:12:24 | ... .text() [Ok] | main.rs:11:23:12:61 | ... .unwrap_or(...) | provenance | MaD:19 | | main.rs:11:23:12:61 | ... .unwrap_or(...) | main.rs:11:9:11:19 | remote_data | provenance | | -| main.rs:15:11:15:36 | MacroExpr | main.rs:15:5:15:9 | ...::log | provenance | MaD:1 Sink:MaD:1 | -| main.rs:16:11:16:44 | MacroExpr | main.rs:16:5:16:9 | ...::log | provenance | MaD:1 Sink:MaD:1 | -| main.rs:17:12:17:46 | MacroExpr | main.rs:17:5:17:10 | ...::log | provenance | MaD:1 Sink:MaD:1 | -| main.rs:18:12:18:37 | MacroExpr | main.rs:18:5:18:10 | ...::log | provenance | MaD:1 Sink:MaD:1 | -| main.rs:19:12:19:39 | MacroExpr | main.rs:19:5:19:10 | ...::log | provenance | MaD:1 Sink:MaD:1 | -| main.rs:22:9:22:21 | formatted_msg | main.rs:23:11:23:29 | MacroExpr | provenance | | +| main.rs:22:9:22:21 | formatted_msg | main.rs:23:11:23:29 | MacroExpr | provenance | MaD:1 Sink:MaD:1 | | main.rs:22:33:22:63 | ...::format(...) | main.rs:22:33:22:63 | { ... } | provenance | | | main.rs:22:33:22:63 | ...::must_use(...) | main.rs:22:9:22:21 | formatted_msg | provenance | | | main.rs:22:33:22:63 | MacroExpr | main.rs:22:33:22:63 | ...::format(...) | provenance | MaD:22 | | main.rs:22:33:22:63 | { ... } | main.rs:22:33:22:63 | ...::must_use(...) | provenance | MaD:23 | -| main.rs:23:11:23:29 | MacroExpr | main.rs:23:5:23:9 | ...::log | provenance | MaD:1 Sink:MaD:1 | -| main.rs:26:9:26:18 | concat_msg | main.rs:27:11:27:26 | MacroExpr | provenance | | +| main.rs:26:9:26:18 | concat_msg | main.rs:27:11:27:26 | MacroExpr | provenance | MaD:1 Sink:MaD:1 | | main.rs:26:22:26:62 | ... + ... | main.rs:26:9:26:18 | concat_msg | provenance | | | main.rs:26:54:26:62 | &username [&ref] | main.rs:26:22:26:62 | ... + ... | provenance | MaD:12 | | main.rs:26:55:26:62 | username | main.rs:26:54:26:62 | &username [&ref] | provenance | | -| main.rs:27:11:27:26 | MacroExpr | main.rs:27:5:27:9 | ...::log | provenance | MaD:1 Sink:MaD:1 | -| main.rs:30:11:30:66 | MacroExpr | main.rs:30:5:30:9 | ...::log | provenance | MaD:1 Sink:MaD:1 | | main.rs:52:28:52:36 | &username [&ref] | main.rs:56:27:56:40 | ...: ... [&ref] | provenance | | | main.rs:52:29:52:36 | username | main.rs:52:28:52:36 | &username [&ref] | provenance | | | main.rs:56:27:56:40 | ...: ... [&ref] | main.rs:65:38:65:45 | username [&ref] | provenance | | @@ -69,42 +61,32 @@ edges | main.rs:65:21:65:59 | UserInfo {...} [UserInfo] | main.rs:65:9:65:17 | user_info [UserInfo] | provenance | | | main.rs:65:38:65:45 | username [&ref] | main.rs:65:38:65:57 | username.to_string() | provenance | MaD:8 | | main.rs:65:38:65:57 | username.to_string() | main.rs:65:21:65:59 | UserInfo {...} [UserInfo] | provenance | | -| main.rs:66:11:66:41 | MacroExpr | main.rs:66:5:66:9 | ...::log | provenance | MaD:1 Sink:MaD:1 | | main.rs:66:28:66:36 | user_info [UserInfo] | main.rs:66:28:66:41 | user_info.name | provenance | | -| main.rs:66:28:66:41 | user_info.name | main.rs:66:11:66:41 | MacroExpr | provenance | | -| main.rs:109:13:109:21 | user_data | main.rs:112:15:112:35 | MacroExpr | provenance | | -| main.rs:109:13:109:21 | user_data | main.rs:113:15:113:38 | MacroExpr | provenance | | -| main.rs:109:13:109:21 | user_data | main.rs:114:16:114:37 | MacroExpr | provenance | | -| main.rs:109:13:109:21 | user_data | main.rs:115:16:115:37 | MacroExpr | provenance | | -| main.rs:109:13:109:21 | user_data | main.rs:116:16:116:37 | MacroExpr | provenance | | -| main.rs:109:13:109:21 | user_data | main.rs:119:15:119:75 | MacroExpr | provenance | | -| main.rs:109:25:109:38 | ...::args | main.rs:109:25:109:40 | ...::args(...) [element] | provenance | Src:MaD:6 | +| main.rs:66:28:66:41 | user_info.name | main.rs:66:11:66:41 | MacroExpr | provenance | MaD:1 Sink:MaD:1 | +| main.rs:109:13:109:21 | user_data | main.rs:112:15:112:35 | MacroExpr | provenance | MaD:1 Sink:MaD:1 | +| main.rs:109:13:109:21 | user_data | main.rs:113:15:113:38 | MacroExpr | provenance | MaD:1 Sink:MaD:1 | +| main.rs:109:13:109:21 | user_data | main.rs:114:16:114:37 | MacroExpr | provenance | MaD:1 Sink:MaD:1 | +| main.rs:109:13:109:21 | user_data | main.rs:115:16:115:37 | MacroExpr | provenance | MaD:1 Sink:MaD:1 | +| main.rs:109:13:109:21 | user_data | main.rs:116:16:116:37 | MacroExpr | provenance | MaD:1 Sink:MaD:1 | +| main.rs:109:13:109:21 | user_data | main.rs:119:15:119:75 | MacroExpr | provenance | MaD:1 Sink:MaD:1 | +| main.rs:109:25:109:40 | ...::args(...) | main.rs:109:25:109:40 | ...::args(...) [element] | provenance | Src:MaD:6 | | main.rs:109:25:109:40 | ...::args(...) [element] | main.rs:109:25:109:47 | ... .nth(...) [Some] | provenance | MaD:11 | | main.rs:109:25:109:47 | ... .nth(...) [Some] | main.rs:109:25:109:67 | ... .unwrap_or_default() | provenance | MaD:17 | | main.rs:109:25:109:67 | ... .unwrap_or_default() | main.rs:109:13:109:21 | user_data | provenance | | -| main.rs:112:15:112:35 | MacroExpr | main.rs:112:9:112:13 | ...::log | provenance | MaD:1 Sink:MaD:1 | -| main.rs:113:15:113:38 | MacroExpr | main.rs:113:9:113:13 | ...::log | provenance | MaD:1 Sink:MaD:1 | -| main.rs:114:16:114:37 | MacroExpr | main.rs:114:9:114:14 | ...::log | provenance | MaD:1 Sink:MaD:1 | -| main.rs:115:16:115:37 | MacroExpr | main.rs:115:9:115:14 | ...::log | provenance | MaD:1 Sink:MaD:1 | -| main.rs:116:16:116:37 | MacroExpr | main.rs:116:9:116:14 | ...::log | provenance | MaD:1 Sink:MaD:1 | -| main.rs:119:15:119:75 | MacroExpr | main.rs:119:9:119:13 | ...::log | provenance | MaD:1 Sink:MaD:1 | -| main.rs:127:13:127:21 | user_data | main.rs:130:18:130:38 | MacroExpr | provenance | | -| main.rs:127:13:127:21 | user_data | main.rs:131:19:131:49 | MacroExpr | provenance | | -| main.rs:127:25:127:37 | ...::var | main.rs:127:25:127:45 | ...::var(...) [Ok] | provenance | Src:MaD:7 | +| main.rs:127:13:127:21 | user_data | main.rs:130:18:130:38 | MacroExpr | provenance | MaD:3 Sink:MaD:3 | +| main.rs:127:13:127:21 | user_data | main.rs:131:19:131:49 | MacroExpr | provenance | MaD:2 Sink:MaD:2 | +| main.rs:127:25:127:45 | ...::var(...) | main.rs:127:25:127:45 | ...::var(...) [Ok] | provenance | Src:MaD:7 | | main.rs:127:25:127:45 | ...::var(...) [Ok] | main.rs:127:25:127:65 | ... .unwrap_or_default() | provenance | MaD:20 | | main.rs:127:25:127:65 | ... .unwrap_or_default() | main.rs:127:13:127:21 | user_data | provenance | | -| main.rs:130:18:130:38 | MacroExpr | main.rs:130:9:130:16 | ...::_print | provenance | MaD:3 Sink:MaD:3 | -| main.rs:131:19:131:49 | MacroExpr | main.rs:131:9:131:17 | ...::_eprint | provenance | MaD:2 Sink:MaD:2 | | main.rs:140:32:140:59 | ...: Option::<...> | main.rs:141:22:141:27 | o_path | provenance | | | main.rs:141:13:141:18 | m_path [Some] | main.rs:143:26:143:31 | m_path [Some] | provenance | | | main.rs:141:22:141:27 | o_path | main.rs:141:22:141:38 | o_path.map(...) [Some] | provenance | MaD:14 | | main.rs:141:22:141:27 | o_path | main.rs:141:34:141:34 | ... | provenance | MaD:14 | | main.rs:141:22:141:38 | o_path.map(...) [Some] | main.rs:141:13:141:18 | m_path [Some] | provenance | | | main.rs:141:34:141:34 | ... | main.rs:141:37:141:37 | x | provenance | | -| main.rs:143:18:143:40 | MacroExpr | main.rs:143:9:143:16 | ...::_print | provenance | MaD:3 Sink:MaD:3 | | main.rs:143:26:143:31 | m_path [Some] | main.rs:143:26:143:40 | m_path.unwrap() | provenance | MaD:15 | -| main.rs:143:26:143:40 | m_path.unwrap() | main.rs:143:18:143:40 | MacroExpr | provenance | | -| main.rs:150:28:150:30 | get | main.rs:140:32:140:59 | ...: Option::<...> | provenance | Src:MaD:4 | +| main.rs:143:26:143:40 | m_path.unwrap() | main.rs:143:18:143:40 | MacroExpr | provenance | MaD:3 Sink:MaD:3 | +| main.rs:150:28:150:49 | get(...) | main.rs:140:32:140:59 | ...: Option::<...> | provenance | Src:MaD:4 | models | 1 | Sink: log::__private_api::log; Argument[0]; log-injection | | 2 | Sink: std::io::stdio::_eprint; Argument[0]; log-injection | @@ -131,7 +113,7 @@ models | 23 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | nodes | main.rs:8:9:8:12 | args [element] | semmle.label | args [element] | -| main.rs:8:29:8:37 | ...::args | semmle.label | ...::args | +| main.rs:8:29:8:39 | ...::args(...) | semmle.label | ...::args(...) | | main.rs:8:29:8:39 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | | main.rs:8:29:8:49 | ... .collect() [element] | semmle.label | ... .collect() [element] | | main.rs:9:9:9:16 | username | semmle.label | username | @@ -140,39 +122,31 @@ nodes | main.rs:9:20:9:64 | ... .unwrap_or(...) [&ref] | semmle.label | ... .unwrap_or(...) [&ref] | | main.rs:9:20:9:72 | ... .clone() | semmle.label | ... .clone() | | main.rs:10:9:10:18 | user_input | semmle.label | user_input | -| main.rs:10:22:10:34 | ...::var | semmle.label | ...::var | +| main.rs:10:22:10:48 | ...::var(...) | semmle.label | ...::var(...) | | main.rs:10:22:10:48 | ...::var(...) [Ok] | semmle.label | ...::var(...) [Ok] | | main.rs:10:22:10:81 | ... .unwrap_or(...) | semmle.label | ... .unwrap_or(...) | | main.rs:11:9:11:19 | remote_data | semmle.label | remote_data | -| main.rs:11:23:11:44 | ...::get | semmle.label | ...::get | +| main.rs:11:23:11:71 | ...::get(...) | semmle.label | ...::get(...) | | main.rs:11:23:11:71 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | | main.rs:11:23:12:17 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:11:23:12:24 | ... .text() [Ok] | semmle.label | ... .text() [Ok] | | main.rs:11:23:12:61 | ... .unwrap_or(...) | semmle.label | ... .unwrap_or(...) | -| main.rs:15:5:15:9 | ...::log | semmle.label | ...::log | | main.rs:15:11:15:36 | MacroExpr | semmle.label | MacroExpr | -| main.rs:16:5:16:9 | ...::log | semmle.label | ...::log | | main.rs:16:11:16:44 | MacroExpr | semmle.label | MacroExpr | -| main.rs:17:5:17:10 | ...::log | semmle.label | ...::log | | main.rs:17:12:17:46 | MacroExpr | semmle.label | MacroExpr | -| main.rs:18:5:18:10 | ...::log | semmle.label | ...::log | | main.rs:18:12:18:37 | MacroExpr | semmle.label | MacroExpr | -| main.rs:19:5:19:10 | ...::log | semmle.label | ...::log | | main.rs:19:12:19:39 | MacroExpr | semmle.label | MacroExpr | | main.rs:22:9:22:21 | formatted_msg | semmle.label | formatted_msg | | main.rs:22:33:22:63 | ...::format(...) | semmle.label | ...::format(...) | | main.rs:22:33:22:63 | ...::must_use(...) | semmle.label | ...::must_use(...) | | main.rs:22:33:22:63 | MacroExpr | semmle.label | MacroExpr | | main.rs:22:33:22:63 | { ... } | semmle.label | { ... } | -| main.rs:23:5:23:9 | ...::log | semmle.label | ...::log | | main.rs:23:11:23:29 | MacroExpr | semmle.label | MacroExpr | | main.rs:26:9:26:18 | concat_msg | semmle.label | concat_msg | | main.rs:26:22:26:62 | ... + ... | semmle.label | ... + ... | | main.rs:26:54:26:62 | &username [&ref] | semmle.label | &username [&ref] | | main.rs:26:55:26:62 | username | semmle.label | username | -| main.rs:27:5:27:9 | ...::log | semmle.label | ...::log | | main.rs:27:11:27:26 | MacroExpr | semmle.label | MacroExpr | -| main.rs:30:5:30:9 | ...::log | semmle.label | ...::log | | main.rs:30:11:30:66 | MacroExpr | semmle.label | MacroExpr | | main.rs:52:28:52:36 | &username [&ref] | semmle.label | &username [&ref] | | main.rs:52:29:52:36 | username | semmle.label | username | @@ -181,34 +155,25 @@ nodes | main.rs:65:21:65:59 | UserInfo {...} [UserInfo] | semmle.label | UserInfo {...} [UserInfo] | | main.rs:65:38:65:45 | username [&ref] | semmle.label | username [&ref] | | main.rs:65:38:65:57 | username.to_string() | semmle.label | username.to_string() | -| main.rs:66:5:66:9 | ...::log | semmle.label | ...::log | | main.rs:66:11:66:41 | MacroExpr | semmle.label | MacroExpr | | main.rs:66:28:66:36 | user_info [UserInfo] | semmle.label | user_info [UserInfo] | | main.rs:66:28:66:41 | user_info.name | semmle.label | user_info.name | | main.rs:109:13:109:21 | user_data | semmle.label | user_data | -| main.rs:109:25:109:38 | ...::args | semmle.label | ...::args | +| main.rs:109:25:109:40 | ...::args(...) | semmle.label | ...::args(...) | | main.rs:109:25:109:40 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | | main.rs:109:25:109:47 | ... .nth(...) [Some] | semmle.label | ... .nth(...) [Some] | | main.rs:109:25:109:67 | ... .unwrap_or_default() | semmle.label | ... .unwrap_or_default() | -| main.rs:112:9:112:13 | ...::log | semmle.label | ...::log | | main.rs:112:15:112:35 | MacroExpr | semmle.label | MacroExpr | -| main.rs:113:9:113:13 | ...::log | semmle.label | ...::log | | main.rs:113:15:113:38 | MacroExpr | semmle.label | MacroExpr | -| main.rs:114:9:114:14 | ...::log | semmle.label | ...::log | | main.rs:114:16:114:37 | MacroExpr | semmle.label | MacroExpr | -| main.rs:115:9:115:14 | ...::log | semmle.label | ...::log | | main.rs:115:16:115:37 | MacroExpr | semmle.label | MacroExpr | -| main.rs:116:9:116:14 | ...::log | semmle.label | ...::log | | main.rs:116:16:116:37 | MacroExpr | semmle.label | MacroExpr | -| main.rs:119:9:119:13 | ...::log | semmle.label | ...::log | | main.rs:119:15:119:75 | MacroExpr | semmle.label | MacroExpr | | main.rs:127:13:127:21 | user_data | semmle.label | user_data | -| main.rs:127:25:127:37 | ...::var | semmle.label | ...::var | +| main.rs:127:25:127:45 | ...::var(...) | semmle.label | ...::var(...) | | main.rs:127:25:127:45 | ...::var(...) [Ok] | semmle.label | ...::var(...) [Ok] | | main.rs:127:25:127:65 | ... .unwrap_or_default() | semmle.label | ... .unwrap_or_default() | -| main.rs:130:9:130:16 | ...::_print | semmle.label | ...::_print | | main.rs:130:18:130:38 | MacroExpr | semmle.label | MacroExpr | -| main.rs:131:9:131:17 | ...::_eprint | semmle.label | ...::_eprint | | main.rs:131:19:131:49 | MacroExpr | semmle.label | MacroExpr | | main.rs:140:32:140:59 | ...: Option::<...> | semmle.label | ...: Option::<...> | | main.rs:141:13:141:18 | m_path [Some] | semmle.label | m_path [Some] | @@ -216,10 +181,9 @@ nodes | main.rs:141:22:141:38 | o_path.map(...) [Some] | semmle.label | o_path.map(...) [Some] | | main.rs:141:34:141:34 | ... | semmle.label | ... | | main.rs:141:37:141:37 | x | semmle.label | x | -| main.rs:143:9:143:16 | ...::_print | semmle.label | ...::_print | | main.rs:143:18:143:40 | MacroExpr | semmle.label | MacroExpr | | main.rs:143:26:143:31 | m_path [Some] | semmle.label | m_path [Some] | | main.rs:143:26:143:40 | m_path.unwrap() | semmle.label | m_path.unwrap() | -| main.rs:150:28:150:30 | get | semmle.label | get | +| main.rs:150:28:150:49 | get(...) | semmle.label | get(...) | subpaths | main.rs:141:22:141:27 | o_path | main.rs:141:34:141:34 | ... | main.rs:141:37:141:37 | x | main.rs:141:22:141:38 | o_path.map(...) [Some] | diff --git a/rust/ql/test/query-tests/security/CWE-295/DisabledCertificateCheck.expected b/rust/ql/test/query-tests/security/CWE-295/DisabledCertificateCheck.expected index c807bc739fd0..f67760771482 100644 --- a/rust/ql/test/query-tests/security/CWE-295/DisabledCertificateCheck.expected +++ b/rust/ql/test/query-tests/security/CWE-295/DisabledCertificateCheck.expected @@ -1,72 +1,63 @@ #select -| main.rs:4:4:4:30 | danger_accept_invalid_certs | main.rs:4:32:4:35 | true | main.rs:4:4:4:30 | danger_accept_invalid_certs | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | -| main.rs:9:4:9:34 | danger_accept_invalid_hostnames | main.rs:9:36:9:39 | true | main.rs:9:4:9:34 | danger_accept_invalid_hostnames | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | -| main.rs:16:4:16:30 | danger_accept_invalid_certs | main.rs:16:32:16:35 | true | main.rs:16:4:16:30 | danger_accept_invalid_certs | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | -| main.rs:17:4:17:34 | danger_accept_invalid_hostnames | main.rs:17:36:17:39 | true | main.rs:17:4:17:34 | danger_accept_invalid_hostnames | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | -| main.rs:37:4:37:30 | danger_accept_invalid_certs | main.rs:37:32:37:35 | true | main.rs:37:4:37:30 | danger_accept_invalid_certs | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | -| main.rs:42:4:42:34 | danger_accept_invalid_hostnames | main.rs:42:36:42:39 | true | main.rs:42:4:42:34 | danger_accept_invalid_hostnames | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | -| main.rs:47:4:47:30 | danger_accept_invalid_certs | main.rs:47:32:47:35 | true | main.rs:47:4:47:30 | danger_accept_invalid_certs | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | -| main.rs:48:4:48:34 | danger_accept_invalid_hostnames | main.rs:48:36:48:39 | true | main.rs:48:4:48:34 | danger_accept_invalid_hostnames | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | -| main.rs:55:4:55:30 | danger_accept_invalid_certs | main.rs:55:32:55:35 | true | main.rs:55:4:55:30 | danger_accept_invalid_certs | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | -| main.rs:56:4:56:34 | danger_accept_invalid_hostnames | main.rs:56:36:56:39 | true | main.rs:56:4:56:34 | danger_accept_invalid_hostnames | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | -| main.rs:83:4:83:30 | danger_accept_invalid_certs | main.rs:74:15:74:18 | true | main.rs:83:4:83:30 | danger_accept_invalid_certs | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | -| main.rs:88:4:88:30 | danger_accept_invalid_certs | main.rs:75:22:75:25 | true | main.rs:88:4:88:30 | danger_accept_invalid_certs | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | -| main.rs:93:4:93:30 | danger_accept_invalid_certs | main.rs:154:17:154:20 | true | main.rs:93:4:93:30 | danger_accept_invalid_certs | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | -| main.rs:109:4:109:34 | danger_accept_invalid_hostnames | main.rs:107:17:107:31 | ...::exists | main.rs:109:4:109:34 | danger_accept_invalid_hostnames | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | -| main.rs:115:4:115:34 | danger_accept_invalid_hostnames | main.rs:113:43:113:50 | metadata | main.rs:115:4:115:34 | danger_accept_invalid_hostnames | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | -| main.rs:121:4:121:34 | danger_accept_invalid_hostnames | main.rs:119:11:119:27 | ...::metadata | main.rs:121:4:121:34 | danger_accept_invalid_hostnames | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | -| main.rs:134:4:134:34 | danger_accept_invalid_hostnames | main.rs:129:14:129:27 | ...::stdin | main.rs:134:4:134:34 | danger_accept_invalid_hostnames | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | -| main.rs:146:4:146:34 | danger_accept_invalid_hostnames | main.rs:144:39:144:42 | true | main.rs:146:4:146:34 | danger_accept_invalid_hostnames | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | +| main.rs:4:32:4:35 | true | main.rs:4:32:4:35 | true | main.rs:4:32:4:35 | true | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | +| main.rs:9:36:9:39 | true | main.rs:9:36:9:39 | true | main.rs:9:36:9:39 | true | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | +| main.rs:16:32:16:35 | true | main.rs:16:32:16:35 | true | main.rs:16:32:16:35 | true | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | +| main.rs:17:36:17:39 | true | main.rs:17:36:17:39 | true | main.rs:17:36:17:39 | true | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | +| main.rs:37:32:37:35 | true | main.rs:37:32:37:35 | true | main.rs:37:32:37:35 | true | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | +| main.rs:42:36:42:39 | true | main.rs:42:36:42:39 | true | main.rs:42:36:42:39 | true | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | +| main.rs:47:32:47:35 | true | main.rs:47:32:47:35 | true | main.rs:47:32:47:35 | true | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | +| main.rs:48:36:48:39 | true | main.rs:48:36:48:39 | true | main.rs:48:36:48:39 | true | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | +| main.rs:55:32:55:35 | true | main.rs:55:32:55:35 | true | main.rs:55:32:55:35 | true | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | +| main.rs:56:36:56:39 | true | main.rs:56:36:56:39 | true | main.rs:56:36:56:39 | true | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | +| main.rs:83:32:83:37 | always | main.rs:74:15:74:18 | true | main.rs:83:32:83:37 | always | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | +| main.rs:88:32:88:40 | sometimes | main.rs:75:22:75:25 | true | main.rs:88:32:88:40 | sometimes | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | +| main.rs:93:32:93:47 | sometimes_global | main.rs:154:17:154:20 | true | main.rs:93:32:93:47 | sometimes_global | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | +| main.rs:109:36:109:37 | b1 | main.rs:107:17:107:42 | ...::exists(...) | main.rs:109:36:109:37 | b1 | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | +| main.rs:115:36:115:37 | b2 | main.rs:113:11:113:52 | ... .metadata() | main.rs:115:36:115:37 | b2 | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | +| main.rs:121:36:121:37 | b3 | main.rs:119:11:119:38 | ...::metadata(...) | main.rs:121:36:121:37 | b3 | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | +| main.rs:134:36:134:37 | b4 | main.rs:129:14:129:29 | ...::stdin(...) | main.rs:134:36:134:37 | b4 | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | +| main.rs:146:36:146:37 | b6 | main.rs:144:39:144:42 | true | main.rs:146:36:146:37 | b6 | Disabling TLS certificate validation can expose the application to man-in-the-middle attacks. | edges -| main.rs:4:32:4:35 | true | main.rs:4:4:4:30 | danger_accept_invalid_certs | provenance | MaD:1 Sink:MaD:1 | -| main.rs:9:36:9:39 | true | main.rs:9:4:9:34 | danger_accept_invalid_hostnames | provenance | MaD:2 Sink:MaD:2 | -| main.rs:16:32:16:35 | true | main.rs:16:4:16:30 | danger_accept_invalid_certs | provenance | MaD:1 Sink:MaD:1 | -| main.rs:17:36:17:39 | true | main.rs:17:4:17:34 | danger_accept_invalid_hostnames | provenance | MaD:2 Sink:MaD:2 | -| main.rs:37:32:37:35 | true | main.rs:37:4:37:30 | danger_accept_invalid_certs | provenance | MaD:3 Sink:MaD:3 | -| main.rs:42:36:42:39 | true | main.rs:42:4:42:34 | danger_accept_invalid_hostnames | provenance | MaD:6 Sink:MaD:6 | -| main.rs:47:32:47:35 | true | main.rs:47:4:47:30 | danger_accept_invalid_certs | provenance | MaD:3 Sink:MaD:3 | -| main.rs:48:36:48:39 | true | main.rs:48:4:48:34 | danger_accept_invalid_hostnames | provenance | MaD:4 Sink:MaD:4 | -| main.rs:55:32:55:35 | true | main.rs:55:4:55:30 | danger_accept_invalid_certs | provenance | MaD:5 Sink:MaD:5 | -| main.rs:56:36:56:39 | true | main.rs:56:4:56:34 | danger_accept_invalid_hostnames | provenance | MaD:6 Sink:MaD:6 | -| main.rs:73:19:73:40 | ...: bool | main.rs:93:32:93:47 | sometimes_global | provenance | | -| main.rs:74:6:74:11 | always | main.rs:83:32:83:37 | always | provenance | | +| main.rs:4:32:4:35 | true | main.rs:4:32:4:35 | true | provenance | MaD:1 Sink:MaD:1 | +| main.rs:9:36:9:39 | true | main.rs:9:36:9:39 | true | provenance | MaD:2 Sink:MaD:2 | +| main.rs:16:32:16:35 | true | main.rs:16:32:16:35 | true | provenance | MaD:1 Sink:MaD:1 | +| main.rs:17:36:17:39 | true | main.rs:17:36:17:39 | true | provenance | MaD:2 Sink:MaD:2 | +| main.rs:37:32:37:35 | true | main.rs:37:32:37:35 | true | provenance | MaD:3 Sink:MaD:3 | +| main.rs:42:36:42:39 | true | main.rs:42:36:42:39 | true | provenance | MaD:6 Sink:MaD:6 | +| main.rs:47:32:47:35 | true | main.rs:47:32:47:35 | true | provenance | MaD:3 Sink:MaD:3 | +| main.rs:48:36:48:39 | true | main.rs:48:36:48:39 | true | provenance | MaD:4 Sink:MaD:4 | +| main.rs:55:32:55:35 | true | main.rs:55:32:55:35 | true | provenance | MaD:5 Sink:MaD:5 | +| main.rs:56:36:56:39 | true | main.rs:56:36:56:39 | true | provenance | MaD:6 Sink:MaD:6 | +| main.rs:73:19:73:40 | ...: bool | main.rs:93:32:93:47 | sometimes_global | provenance | MaD:1 Sink:MaD:1 | +| main.rs:74:6:74:11 | always | main.rs:83:32:83:37 | always | provenance | MaD:1 Sink:MaD:1 | | main.rs:74:15:74:18 | true | main.rs:74:6:74:11 | always | provenance | | -| main.rs:75:6:75:18 | mut sometimes | main.rs:88:32:88:40 | sometimes | provenance | | +| main.rs:75:6:75:18 | mut sometimes | main.rs:88:32:88:40 | sometimes | provenance | MaD:1 Sink:MaD:1 | | main.rs:75:22:75:25 | true | main.rs:75:6:75:18 | mut sometimes | provenance | | -| main.rs:83:32:83:37 | always | main.rs:83:4:83:30 | danger_accept_invalid_certs | provenance | MaD:1 Sink:MaD:1 | -| main.rs:88:32:88:40 | sometimes | main.rs:88:4:88:30 | danger_accept_invalid_certs | provenance | MaD:1 Sink:MaD:1 | -| main.rs:93:32:93:47 | sometimes_global | main.rs:93:4:93:30 | danger_accept_invalid_certs | provenance | MaD:1 Sink:MaD:1 | -| main.rs:107:6:107:7 | b1 | main.rs:109:36:109:37 | b1 | provenance | | -| main.rs:107:17:107:31 | ...::exists | main.rs:107:17:107:42 | ...::exists(...) [Ok] | provenance | Src:MaD:8 | +| main.rs:107:6:107:7 | b1 | main.rs:109:36:109:37 | b1 | provenance | MaD:2 Sink:MaD:2 | +| main.rs:107:17:107:42 | ...::exists(...) | main.rs:107:17:107:42 | ...::exists(...) [Ok] | provenance | Src:MaD:8 | | main.rs:107:17:107:42 | ...::exists(...) [Ok] | main.rs:107:17:107:51 | ... .unwrap() | provenance | MaD:12 | | main.rs:107:17:107:51 | ... .unwrap() | main.rs:107:6:107:7 | b1 | provenance | | -| main.rs:109:36:109:37 | b1 | main.rs:109:4:109:34 | danger_accept_invalid_hostnames | provenance | MaD:2 Sink:MaD:2 | -| main.rs:113:6:113:7 | b2 | main.rs:115:36:115:37 | b2 | provenance | | +| main.rs:113:6:113:7 | b2 | main.rs:115:36:115:37 | b2 | provenance | MaD:2 Sink:MaD:2 | +| main.rs:113:11:113:52 | ... .metadata() | main.rs:113:11:113:52 | ... .metadata() [Ok] | provenance | Src:MaD:7 | | main.rs:113:11:113:52 | ... .metadata() [Ok] | main.rs:113:11:113:61 | ... .unwrap() | provenance | MaD:12 | | main.rs:113:11:113:61 | ... .unwrap() | main.rs:113:11:113:71 | ... .is_file() | provenance | MaD:15 | | main.rs:113:11:113:71 | ... .is_file() | main.rs:113:6:113:7 | b2 | provenance | | -| main.rs:113:43:113:50 | metadata | main.rs:113:11:113:52 | ... .metadata() [Ok] | provenance | Src:MaD:7 | -| main.rs:115:36:115:37 | b2 | main.rs:115:4:115:34 | danger_accept_invalid_hostnames | provenance | MaD:2 Sink:MaD:2 | -| main.rs:119:6:119:7 | b3 | main.rs:121:36:121:37 | b3 | provenance | | -| main.rs:119:11:119:27 | ...::metadata | main.rs:119:11:119:38 | ...::metadata(...) [Ok] | provenance | Src:MaD:9 | +| main.rs:119:6:119:7 | b3 | main.rs:121:36:121:37 | b3 | provenance | MaD:2 Sink:MaD:2 | +| main.rs:119:11:119:38 | ...::metadata(...) | main.rs:119:11:119:38 | ...::metadata(...) [Ok] | provenance | Src:MaD:9 | | main.rs:119:11:119:38 | ...::metadata(...) [Ok] | main.rs:119:11:119:47 | ... .unwrap() | provenance | MaD:12 | | main.rs:119:11:119:47 | ... .unwrap() | main.rs:119:11:119:56 | ... .is_dir() | provenance | MaD:14 | | main.rs:119:11:119:56 | ... .is_dir() | main.rs:119:6:119:7 | b3 | provenance | | -| main.rs:121:36:121:37 | b3 | main.rs:121:4:121:34 | danger_accept_invalid_hostnames | provenance | MaD:2 Sink:MaD:2 | | main.rs:129:6:129:10 | input | main.rs:130:2:130:6 | input | provenance | | -| main.rs:129:14:129:27 | ...::stdin | main.rs:129:14:129:29 | ...::stdin(...) | provenance | Src:MaD:10 MaD:10 | -| main.rs:129:14:129:29 | ...::stdin(...) | main.rs:129:6:129:10 | input | provenance | | +| main.rs:129:14:129:29 | ...::stdin(...) | main.rs:129:6:129:10 | input | provenance | Src:MaD:10 MaD:10 | | main.rs:130:2:130:6 | input | main.rs:130:18:130:32 | [post] &mut input_line [&ref] | provenance | MaD:16 | | main.rs:130:18:130:32 | [post] &mut input_line [&ref] | main.rs:130:23:130:32 | [post] input_line | provenance | | | main.rs:130:23:130:32 | [post] input_line | main.rs:132:17:132:26 | input_line | provenance | | -| main.rs:132:6:132:7 | b4 | main.rs:134:36:134:37 | b4 | provenance | | +| main.rs:132:6:132:7 | b4 | main.rs:134:36:134:37 | b4 | provenance | MaD:2 Sink:MaD:2 | | main.rs:132:17:132:26 | input_line | main.rs:132:17:132:42 | input_line.parse() [Ok] | provenance | MaD:11 | | main.rs:132:17:132:42 | input_line.parse() [Ok] | main.rs:132:17:132:59 | ... .unwrap_or(...) | provenance | MaD:13 | | main.rs:132:17:132:59 | ... .unwrap_or(...) | main.rs:132:6:132:7 | b4 | provenance | | -| main.rs:134:36:134:37 | b4 | main.rs:134:4:134:34 | danger_accept_invalid_hostnames | provenance | MaD:2 Sink:MaD:2 | -| main.rs:144:6:144:7 | b6 | main.rs:146:36:146:37 | b6 | provenance | | +| main.rs:144:6:144:7 | b6 | main.rs:146:36:146:37 | b6 | provenance | MaD:2 Sink:MaD:2 | | main.rs:144:39:144:42 | true | main.rs:144:6:144:7 | b6 | provenance | | -| main.rs:146:36:146:37 | b6 | main.rs:146:4:146:34 | danger_accept_invalid_hostnames | provenance | MaD:2 Sink:MaD:2 | | main.rs:154:17:154:20 | true | main.rs:73:19:73:40 | ...: bool | provenance | | models | 1 | Sink: ::danger_accept_invalid_certs; Argument[0]; disable-certificate | @@ -86,59 +77,52 @@ models | 15 | Summary: ::is_file; Argument[self].Reference; ReturnValue; taint | | 16 | Summary: ::read_line; Argument[self].Reference; Argument[0].Reference; taint | nodes -| main.rs:4:4:4:30 | danger_accept_invalid_certs | semmle.label | danger_accept_invalid_certs | | main.rs:4:32:4:35 | true | semmle.label | true | -| main.rs:9:4:9:34 | danger_accept_invalid_hostnames | semmle.label | danger_accept_invalid_hostnames | +| main.rs:4:32:4:35 | true | semmle.label | true | +| main.rs:9:36:9:39 | true | semmle.label | true | | main.rs:9:36:9:39 | true | semmle.label | true | -| main.rs:16:4:16:30 | danger_accept_invalid_certs | semmle.label | danger_accept_invalid_certs | | main.rs:16:32:16:35 | true | semmle.label | true | -| main.rs:17:4:17:34 | danger_accept_invalid_hostnames | semmle.label | danger_accept_invalid_hostnames | +| main.rs:16:32:16:35 | true | semmle.label | true | | main.rs:17:36:17:39 | true | semmle.label | true | -| main.rs:37:4:37:30 | danger_accept_invalid_certs | semmle.label | danger_accept_invalid_certs | +| main.rs:17:36:17:39 | true | semmle.label | true | +| main.rs:37:32:37:35 | true | semmle.label | true | | main.rs:37:32:37:35 | true | semmle.label | true | -| main.rs:42:4:42:34 | danger_accept_invalid_hostnames | semmle.label | danger_accept_invalid_hostnames | | main.rs:42:36:42:39 | true | semmle.label | true | -| main.rs:47:4:47:30 | danger_accept_invalid_certs | semmle.label | danger_accept_invalid_certs | +| main.rs:42:36:42:39 | true | semmle.label | true | +| main.rs:47:32:47:35 | true | semmle.label | true | | main.rs:47:32:47:35 | true | semmle.label | true | -| main.rs:48:4:48:34 | danger_accept_invalid_hostnames | semmle.label | danger_accept_invalid_hostnames | | main.rs:48:36:48:39 | true | semmle.label | true | -| main.rs:55:4:55:30 | danger_accept_invalid_certs | semmle.label | danger_accept_invalid_certs | +| main.rs:48:36:48:39 | true | semmle.label | true | | main.rs:55:32:55:35 | true | semmle.label | true | -| main.rs:56:4:56:34 | danger_accept_invalid_hostnames | semmle.label | danger_accept_invalid_hostnames | +| main.rs:55:32:55:35 | true | semmle.label | true | +| main.rs:56:36:56:39 | true | semmle.label | true | | main.rs:56:36:56:39 | true | semmle.label | true | | main.rs:73:19:73:40 | ...: bool | semmle.label | ...: bool | | main.rs:74:6:74:11 | always | semmle.label | always | | main.rs:74:15:74:18 | true | semmle.label | true | | main.rs:75:6:75:18 | mut sometimes | semmle.label | mut sometimes | | main.rs:75:22:75:25 | true | semmle.label | true | -| main.rs:83:4:83:30 | danger_accept_invalid_certs | semmle.label | danger_accept_invalid_certs | | main.rs:83:32:83:37 | always | semmle.label | always | -| main.rs:88:4:88:30 | danger_accept_invalid_certs | semmle.label | danger_accept_invalid_certs | | main.rs:88:32:88:40 | sometimes | semmle.label | sometimes | -| main.rs:93:4:93:30 | danger_accept_invalid_certs | semmle.label | danger_accept_invalid_certs | | main.rs:93:32:93:47 | sometimes_global | semmle.label | sometimes_global | | main.rs:107:6:107:7 | b1 | semmle.label | b1 | -| main.rs:107:17:107:31 | ...::exists | semmle.label | ...::exists | +| main.rs:107:17:107:42 | ...::exists(...) | semmle.label | ...::exists(...) | | main.rs:107:17:107:42 | ...::exists(...) [Ok] | semmle.label | ...::exists(...) [Ok] | | main.rs:107:17:107:51 | ... .unwrap() | semmle.label | ... .unwrap() | -| main.rs:109:4:109:34 | danger_accept_invalid_hostnames | semmle.label | danger_accept_invalid_hostnames | | main.rs:109:36:109:37 | b1 | semmle.label | b1 | | main.rs:113:6:113:7 | b2 | semmle.label | b2 | +| main.rs:113:11:113:52 | ... .metadata() | semmle.label | ... .metadata() | | main.rs:113:11:113:52 | ... .metadata() [Ok] | semmle.label | ... .metadata() [Ok] | | main.rs:113:11:113:61 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:113:11:113:71 | ... .is_file() | semmle.label | ... .is_file() | -| main.rs:113:43:113:50 | metadata | semmle.label | metadata | -| main.rs:115:4:115:34 | danger_accept_invalid_hostnames | semmle.label | danger_accept_invalid_hostnames | | main.rs:115:36:115:37 | b2 | semmle.label | b2 | | main.rs:119:6:119:7 | b3 | semmle.label | b3 | -| main.rs:119:11:119:27 | ...::metadata | semmle.label | ...::metadata | +| main.rs:119:11:119:38 | ...::metadata(...) | semmle.label | ...::metadata(...) | | main.rs:119:11:119:38 | ...::metadata(...) [Ok] | semmle.label | ...::metadata(...) [Ok] | | main.rs:119:11:119:47 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:119:11:119:56 | ... .is_dir() | semmle.label | ... .is_dir() | -| main.rs:121:4:121:34 | danger_accept_invalid_hostnames | semmle.label | danger_accept_invalid_hostnames | | main.rs:121:36:121:37 | b3 | semmle.label | b3 | | main.rs:129:6:129:10 | input | semmle.label | input | -| main.rs:129:14:129:27 | ...::stdin | semmle.label | ...::stdin | | main.rs:129:14:129:29 | ...::stdin(...) | semmle.label | ...::stdin(...) | | main.rs:130:2:130:6 | input | semmle.label | input | | main.rs:130:18:130:32 | [post] &mut input_line [&ref] | semmle.label | [post] &mut input_line [&ref] | @@ -147,11 +131,9 @@ nodes | main.rs:132:17:132:26 | input_line | semmle.label | input_line | | main.rs:132:17:132:42 | input_line.parse() [Ok] | semmle.label | input_line.parse() [Ok] | | main.rs:132:17:132:59 | ... .unwrap_or(...) | semmle.label | ... .unwrap_or(...) | -| main.rs:134:4:134:34 | danger_accept_invalid_hostnames | semmle.label | danger_accept_invalid_hostnames | | main.rs:134:36:134:37 | b4 | semmle.label | b4 | | main.rs:144:6:144:7 | b6 | semmle.label | b6 | | main.rs:144:39:144:42 | true | semmle.label | true | -| main.rs:146:4:146:34 | danger_accept_invalid_hostnames | semmle.label | danger_accept_invalid_hostnames | | main.rs:146:36:146:37 | b6 | semmle.label | b6 | | main.rs:154:17:154:20 | true | semmle.label | true | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-311/CleartextTransmission.expected b/rust/ql/test/query-tests/security/CWE-311/CleartextTransmission.expected index 5807220eef0c..f0c2af917868 100644 --- a/rust/ql/test/query-tests/security/CWE-311/CleartextTransmission.expected +++ b/rust/ql/test/query-tests/security/CWE-311/CleartextTransmission.expected @@ -1,50 +1,45 @@ #select -| main.rs:7:5:7:26 | ...::get | main.rs:6:50:6:57 | password | main.rs:7:5:7:26 | ...::get | This '...::get' operation transmits data which may contain unencrypted sensitive data from $@. | main.rs:6:50:6:57 | password | password | -| main.rs:14:5:14:26 | ...::get | main.rs:12:50:12:57 | password | main.rs:14:5:14:26 | ...::get | This '...::get' operation transmits data which may contain unencrypted sensitive data from $@. | main.rs:12:50:12:57 | password | password | -| main.rs:21:12:21:15 | post | main.rs:19:50:19:57 | password | main.rs:21:12:21:15 | post | This 'post' operation transmits data which may contain unencrypted sensitive data from $@. | main.rs:19:50:19:57 | password | password | -| main.rs:28:12:28:18 | request | main.rs:26:50:26:57 | password | main.rs:28:12:28:18 | request | This 'request' operation transmits data which may contain unencrypted sensitive data from $@. | main.rs:26:50:26:57 | password | password | -| main.rs:35:12:35:18 | request | main.rs:33:50:33:57 | password | main.rs:35:12:35:18 | request | This 'request' operation transmits data which may contain unencrypted sensitive data from $@. | main.rs:33:50:33:57 | password | password | +| main.rs:7:28:7:30 | url | main.rs:6:50:6:57 | password | main.rs:7:28:7:30 | url | This 'url' operation transmits data which may contain unencrypted sensitive data from $@. | main.rs:6:50:6:57 | password | password | +| main.rs:14:28:14:30 | url | main.rs:12:50:12:57 | password | main.rs:14:28:14:30 | url | This 'url' operation transmits data which may contain unencrypted sensitive data from $@. | main.rs:12:50:12:57 | password | password | +| main.rs:21:17:21:19 | url | main.rs:19:50:19:57 | password | main.rs:21:17:21:19 | url | This 'url' operation transmits data which may contain unencrypted sensitive data from $@. | main.rs:19:50:19:57 | password | password | +| main.rs:28:33:28:35 | url | main.rs:26:50:26:57 | password | main.rs:28:33:28:35 | url | This 'url' operation transmits data which may contain unencrypted sensitive data from $@. | main.rs:26:50:26:57 | password | password | +| main.rs:35:33:35:35 | url | main.rs:33:50:33:57 | password | main.rs:35:33:35:35 | url | This 'url' operation transmits data which may contain unencrypted sensitive data from $@. | main.rs:33:50:33:57 | password | password | edges -| main.rs:6:9:6:11 | url | main.rs:7:28:7:30 | url | provenance | | +| main.rs:6:9:6:11 | url | main.rs:7:28:7:30 | url | provenance | MaD:4 Sink:MaD:4 | | main.rs:6:23:6:57 | ...::format(...) | main.rs:6:23:6:57 | { ... } | provenance | | | main.rs:6:23:6:57 | ...::must_use(...) | main.rs:6:9:6:11 | url | provenance | | | main.rs:6:23:6:57 | MacroExpr | main.rs:6:23:6:57 | ...::format(...) | provenance | MaD:7 | | main.rs:6:23:6:57 | { ... } | main.rs:6:23:6:57 | ...::must_use(...) | provenance | MaD:8 | | main.rs:6:50:6:57 | password | main.rs:6:23:6:57 | MacroExpr | provenance | | -| main.rs:7:28:7:30 | url | main.rs:7:5:7:26 | ...::get | provenance | MaD:4 Sink:MaD:4 | | main.rs:12:9:12:15 | address | main.rs:13:27:13:33 | address | provenance | | | main.rs:12:27:12:59 | ...::format(...) | main.rs:12:27:12:59 | { ... } | provenance | | | main.rs:12:27:12:59 | ...::must_use(...) | main.rs:12:9:12:15 | address | provenance | | | main.rs:12:27:12:59 | MacroExpr | main.rs:12:27:12:59 | ...::format(...) | provenance | MaD:7 | | main.rs:12:27:12:59 | { ... } | main.rs:12:27:12:59 | ...::must_use(...) | provenance | MaD:8 | | main.rs:12:50:12:57 | password | main.rs:12:27:12:59 | MacroExpr | provenance | | -| main.rs:13:9:13:11 | url | main.rs:14:28:14:30 | url | provenance | | +| main.rs:13:9:13:11 | url | main.rs:14:28:14:30 | url | provenance | MaD:4 Sink:MaD:4 | | main.rs:13:15:13:34 | ...::parse(...) [Ok] | main.rs:13:15:13:43 | ... .unwrap() | provenance | MaD:5 | | main.rs:13:15:13:43 | ... .unwrap() | main.rs:13:9:13:11 | url | provenance | | | main.rs:13:26:13:33 | &address [&ref] | main.rs:13:15:13:34 | ...::parse(...) [Ok] | provenance | MaD:6 | | main.rs:13:27:13:33 | address | main.rs:13:26:13:33 | &address [&ref] | provenance | | -| main.rs:14:28:14:30 | url | main.rs:14:5:14:26 | ...::get | provenance | MaD:4 Sink:MaD:4 | -| main.rs:19:9:19:11 | url | main.rs:21:17:21:19 | url | provenance | | +| main.rs:19:9:19:11 | url | main.rs:21:17:21:19 | url | provenance | MaD:1 Sink:MaD:1 | | main.rs:19:23:19:57 | ...::format(...) | main.rs:19:23:19:57 | { ... } | provenance | | | main.rs:19:23:19:57 | ...::must_use(...) | main.rs:19:9:19:11 | url | provenance | | | main.rs:19:23:19:57 | MacroExpr | main.rs:19:23:19:57 | ...::format(...) | provenance | MaD:7 | | main.rs:19:23:19:57 | { ... } | main.rs:19:23:19:57 | ...::must_use(...) | provenance | MaD:8 | | main.rs:19:50:19:57 | password | main.rs:19:23:19:57 | MacroExpr | provenance | | -| main.rs:21:17:21:19 | url | main.rs:21:12:21:15 | post | provenance | MaD:1 Sink:MaD:1 | -| main.rs:26:9:26:11 | url | main.rs:28:33:28:35 | url | provenance | | +| main.rs:26:9:26:11 | url | main.rs:28:33:28:35 | url | provenance | MaD:3 Sink:MaD:3 | | main.rs:26:23:26:57 | ...::format(...) | main.rs:26:23:26:57 | { ... } | provenance | | | main.rs:26:23:26:57 | ...::must_use(...) | main.rs:26:9:26:11 | url | provenance | | | main.rs:26:23:26:57 | MacroExpr | main.rs:26:23:26:57 | ...::format(...) | provenance | MaD:7 | | main.rs:26:23:26:57 | { ... } | main.rs:26:23:26:57 | ...::must_use(...) | provenance | MaD:8 | | main.rs:26:50:26:57 | password | main.rs:26:23:26:57 | MacroExpr | provenance | | -| main.rs:28:33:28:35 | url | main.rs:28:12:28:18 | request | provenance | MaD:3 Sink:MaD:3 | -| main.rs:33:9:33:11 | url | main.rs:35:33:35:35 | url | provenance | | +| main.rs:33:9:33:11 | url | main.rs:35:33:35:35 | url | provenance | MaD:2 Sink:MaD:2 | | main.rs:33:23:33:57 | ...::format(...) | main.rs:33:23:33:57 | { ... } | provenance | | | main.rs:33:23:33:57 | ...::must_use(...) | main.rs:33:9:33:11 | url | provenance | | | main.rs:33:23:33:57 | MacroExpr | main.rs:33:23:33:57 | ...::format(...) | provenance | MaD:7 | | main.rs:33:23:33:57 | { ... } | main.rs:33:23:33:57 | ...::must_use(...) | provenance | MaD:8 | | main.rs:33:50:33:57 | password | main.rs:33:23:33:57 | MacroExpr | provenance | | -| main.rs:35:33:35:35 | url | main.rs:35:12:35:18 | request | provenance | MaD:2 Sink:MaD:2 | models | 1 | Sink: ::post; Argument[0]; request-url | | 2 | Sink: ::request; Argument[1]; request-url | @@ -61,7 +56,6 @@ nodes | main.rs:6:23:6:57 | MacroExpr | semmle.label | MacroExpr | | main.rs:6:23:6:57 | { ... } | semmle.label | { ... } | | main.rs:6:50:6:57 | password | semmle.label | password | -| main.rs:7:5:7:26 | ...::get | semmle.label | ...::get | | main.rs:7:28:7:30 | url | semmle.label | url | | main.rs:12:9:12:15 | address | semmle.label | address | | main.rs:12:27:12:59 | ...::format(...) | semmle.label | ...::format(...) | @@ -74,7 +68,6 @@ nodes | main.rs:13:15:13:43 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:13:26:13:33 | &address [&ref] | semmle.label | &address [&ref] | | main.rs:13:27:13:33 | address | semmle.label | address | -| main.rs:14:5:14:26 | ...::get | semmle.label | ...::get | | main.rs:14:28:14:30 | url | semmle.label | url | | main.rs:19:9:19:11 | url | semmle.label | url | | main.rs:19:23:19:57 | ...::format(...) | semmle.label | ...::format(...) | @@ -82,7 +75,6 @@ nodes | main.rs:19:23:19:57 | MacroExpr | semmle.label | MacroExpr | | main.rs:19:23:19:57 | { ... } | semmle.label | { ... } | | main.rs:19:50:19:57 | password | semmle.label | password | -| main.rs:21:12:21:15 | post | semmle.label | post | | main.rs:21:17:21:19 | url | semmle.label | url | | main.rs:26:9:26:11 | url | semmle.label | url | | main.rs:26:23:26:57 | ...::format(...) | semmle.label | ...::format(...) | @@ -90,7 +82,6 @@ nodes | main.rs:26:23:26:57 | MacroExpr | semmle.label | MacroExpr | | main.rs:26:23:26:57 | { ... } | semmle.label | { ... } | | main.rs:26:50:26:57 | password | semmle.label | password | -| main.rs:28:12:28:18 | request | semmle.label | request | | main.rs:28:33:28:35 | url | semmle.label | url | | main.rs:33:9:33:11 | url | semmle.label | url | | main.rs:33:23:33:57 | ...::format(...) | semmle.label | ...::format(...) | @@ -98,6 +89,5 @@ nodes | main.rs:33:23:33:57 | MacroExpr | semmle.label | MacroExpr | | main.rs:33:23:33:57 | { ... } | semmle.label | { ... } | | main.rs:33:50:33:57 | password | semmle.label | password | -| main.rs:35:12:35:18 | request | semmle.label | request | | main.rs:35:33:35:35 | url | semmle.label | url | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected index 61de9de03b58..4d6898c87e11 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected @@ -1,167 +1,140 @@ #select -| test_logging.rs:42:5:42:10 | ...::log | test_logging.rs:42:28:42:35 | password | test_logging.rs:42:5:42:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:42:28:42:35 | password | password | -| test_logging.rs:43:5:43:10 | ...::log | test_logging.rs:43:28:43:35 | password | test_logging.rs:43:5:43:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:43:28:43:35 | password | password | -| test_logging.rs:44:5:44:9 | ...::log | test_logging.rs:44:27:44:34 | password | test_logging.rs:44:5:44:9 | ...::log | This operation writes $@ to a log file. | test_logging.rs:44:27:44:34 | password | password | -| test_logging.rs:45:5:45:10 | ...::log | test_logging.rs:45:28:45:35 | password | test_logging.rs:45:5:45:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:45:28:45:35 | password | password | -| test_logging.rs:46:5:46:9 | ...::log | test_logging.rs:46:27:46:34 | password | test_logging.rs:46:5:46:9 | ...::log | This operation writes $@ to a log file. | test_logging.rs:46:27:46:34 | password | password | -| test_logging.rs:47:5:47:8 | ...::log | test_logging.rs:47:40:47:47 | password | test_logging.rs:47:5:47:8 | ...::log | This operation writes $@ to a log file. | test_logging.rs:47:40:47:47 | password | password | -| test_logging.rs:52:5:52:10 | ...::log | test_logging.rs:52:28:52:35 | password | test_logging.rs:52:5:52:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:52:28:52:35 | password | password | -| test_logging.rs:54:5:54:10 | ...::log | test_logging.rs:54:41:54:48 | password | test_logging.rs:54:5:54:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:54:41:54:48 | password | password | -| test_logging.rs:56:5:56:10 | ...::log | test_logging.rs:56:39:56:46 | password | test_logging.rs:56:5:56:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:56:39:56:46 | password | password | -| test_logging.rs:57:5:57:10 | ...::log | test_logging.rs:57:24:57:31 | password | test_logging.rs:57:5:57:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:57:24:57:31 | password | password | -| test_logging.rs:58:5:58:10 | ...::log | test_logging.rs:58:24:58:31 | password | test_logging.rs:58:5:58:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:58:24:58:31 | password | password | -| test_logging.rs:60:5:60:10 | ...::log | test_logging.rs:60:46:60:53 | password | test_logging.rs:60:5:60:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:60:46:60:53 | password | password | -| test_logging.rs:61:5:61:10 | ...::log | test_logging.rs:61:21:61:28 | password | test_logging.rs:61:5:61:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:61:21:61:28 | password | password | -| test_logging.rs:65:5:65:8 | ...::log | test_logging.rs:65:40:65:47 | password | test_logging.rs:65:5:65:8 | ...::log | This operation writes $@ to a log file. | test_logging.rs:65:40:65:47 | password | password | -| test_logging.rs:67:5:67:8 | ...::log | test_logging.rs:67:58:67:65 | password | test_logging.rs:67:5:67:8 | ...::log | This operation writes $@ to a log file. | test_logging.rs:67:58:67:65 | password | password | -| test_logging.rs:68:5:68:8 | ...::log | test_logging.rs:68:19:68:26 | password | test_logging.rs:68:5:68:8 | ...::log | This operation writes $@ to a log file. | test_logging.rs:68:19:68:26 | password | password | -| test_logging.rs:72:5:72:10 | ...::log | test_logging.rs:72:39:72:46 | password | test_logging.rs:72:5:72:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:72:39:72:46 | password | password | -| test_logging.rs:74:5:74:10 | ...::log | test_logging.rs:74:57:74:64 | password | test_logging.rs:74:5:74:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:74:57:74:64 | password | password | -| test_logging.rs:75:5:75:10 | ...::log | test_logging.rs:75:21:75:28 | password | test_logging.rs:75:5:75:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:75:21:75:28 | password | password | -| test_logging.rs:76:5:76:10 | ...::log | test_logging.rs:76:39:76:46 | password | test_logging.rs:76:5:76:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:76:39:76:46 | password | password | -| test_logging.rs:82:5:82:10 | ...::log | test_logging.rs:82:36:82:43 | password | test_logging.rs:82:5:82:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:82:36:82:43 | password | password | -| test_logging.rs:84:5:84:10 | ...::log | test_logging.rs:84:54:84:61 | password | test_logging.rs:84:5:84:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:84:54:84:61 | password | password | -| test_logging.rs:85:5:85:10 | ...::log | test_logging.rs:85:21:85:28 | password | test_logging.rs:85:5:85:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:85:21:85:28 | password | password | -| test_logging.rs:86:5:86:10 | ...::log | test_logging.rs:86:36:86:43 | password | test_logging.rs:86:5:86:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:86:36:86:43 | password | password | -| test_logging.rs:94:5:94:9 | ...::log | test_logging.rs:93:15:93:22 | password | test_logging.rs:94:5:94:9 | ...::log | This operation writes $@ to a log file. | test_logging.rs:93:15:93:22 | password | password | -| test_logging.rs:97:5:97:9 | ...::log | test_logging.rs:96:42:96:49 | password | test_logging.rs:97:5:97:9 | ...::log | This operation writes $@ to a log file. | test_logging.rs:96:42:96:49 | password | password | -| test_logging.rs:100:5:100:9 | ...::log | test_logging.rs:99:38:99:45 | password | test_logging.rs:100:5:100:9 | ...::log | This operation writes $@ to a log file. | test_logging.rs:99:38:99:45 | password | password | -| test_logging.rs:118:5:118:10 | ...::log | test_logging.rs:118:28:118:41 | get_password(...) | test_logging.rs:118:5:118:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:118:28:118:41 | get_password(...) | get_password(...) | -| test_logging.rs:131:5:131:10 | ...::log | test_logging.rs:129:25:129:32 | password | test_logging.rs:131:5:131:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:129:25:129:32 | password | password | -| test_logging.rs:141:5:141:9 | ...::log | test_logging.rs:141:27:141:37 | s1.password | test_logging.rs:141:5:141:9 | ...::log | This operation writes $@ to a log file. | test_logging.rs:141:27:141:37 | s1.password | s1.password | -| test_logging.rs:151:5:151:9 | ...::log | test_logging.rs:151:27:151:37 | s2.password | test_logging.rs:151:5:151:9 | ...::log | This operation writes $@ to a log file. | test_logging.rs:151:27:151:37 | s2.password | s2.password | -| test_logging.rs:176:22:176:31 | log_expect | test_logging.rs:176:70:176:78 | password2 | test_logging.rs:176:22:176:31 | log_expect | This operation writes $@ to a log file. | test_logging.rs:176:70:176:78 | password2 | password2 | -| test_logging.rs:180:24:180:33 | log_expect | test_logging.rs:180:72:180:80 | password2 | test_logging.rs:180:24:180:33 | log_expect | This operation writes $@ to a log file. | test_logging.rs:180:72:180:80 | password2 | password2 | -| test_logging.rs:184:25:184:34 | log_expect | test_logging.rs:183:51:183:59 | password2 | test_logging.rs:184:25:184:34 | log_expect | This operation writes $@ to a log file. | test_logging.rs:183:51:183:59 | password2 | password2 | -| test_logging.rs:188:25:188:34 | log_unwrap | test_logging.rs:187:51:187:59 | password2 | test_logging.rs:188:25:188:34 | log_unwrap | This operation writes $@ to a log file. | test_logging.rs:187:51:187:59 | password2 | password2 | -| test_logging.rs:192:5:192:10 | ...::_print | test_logging.rs:192:30:192:37 | password | test_logging.rs:192:5:192:10 | ...::_print | This operation writes $@ to a log file. | test_logging.rs:192:30:192:37 | password | password | -| test_logging.rs:193:5:193:12 | ...::_print | test_logging.rs:193:30:193:37 | password | test_logging.rs:193:5:193:12 | ...::_print | This operation writes $@ to a log file. | test_logging.rs:193:30:193:37 | password | password | -| test_logging.rs:194:5:194:11 | ...::_eprint | test_logging.rs:194:31:194:38 | password | test_logging.rs:194:5:194:11 | ...::_eprint | This operation writes $@ to a log file. | test_logging.rs:194:31:194:38 | password | password | -| test_logging.rs:195:5:195:13 | ...::_eprint | test_logging.rs:195:31:195:38 | password | test_logging.rs:195:5:195:13 | ...::_eprint | This operation writes $@ to a log file. | test_logging.rs:195:31:195:38 | password | password | -| test_logging.rs:199:13:199:18 | ...::panic_fmt | test_logging.rs:199:36:199:43 | password | test_logging.rs:199:13:199:18 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:199:36:199:43 | password | password | -| test_logging.rs:202:13:202:17 | ...::panic_fmt | test_logging.rs:202:35:202:42 | password | test_logging.rs:202:13:202:17 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:202:35:202:42 | password | password | -| test_logging.rs:205:13:205:26 | ...::panic_fmt | test_logging.rs:205:44:205:51 | password | test_logging.rs:205:13:205:26 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:205:44:205:51 | password | password | -| test_logging.rs:208:13:208:24 | ...::panic_fmt | test_logging.rs:208:42:208:49 | password | test_logging.rs:208:13:208:24 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:208:42:208:49 | password | password | -| test_logging.rs:211:13:211:19 | ...::panic_fmt | test_logging.rs:211:44:211:51 | password | test_logging.rs:211:13:211:19 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:211:44:211:51 | password | password | -| test_logging.rs:214:13:214:22 | ...::assert_failed | test_logging.rs:214:46:214:53 | password | test_logging.rs:214:13:214:22 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:214:46:214:53 | password | password | -| test_logging.rs:217:13:217:22 | ...::assert_failed | test_logging.rs:217:46:217:53 | password | test_logging.rs:217:13:217:22 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:217:46:217:53 | password | password | -| test_logging.rs:220:13:220:25 | ...::panic_fmt | test_logging.rs:220:50:220:57 | password | test_logging.rs:220:13:220:25 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:220:50:220:57 | password | password | -| test_logging.rs:223:13:223:28 | ...::assert_failed | test_logging.rs:223:52:223:59 | password | test_logging.rs:223:13:223:28 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:223:52:223:59 | password | password | -| test_logging.rs:226:13:226:28 | ...::assert_failed | test_logging.rs:226:52:226:59 | password | test_logging.rs:226:13:226:28 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:226:52:226:59 | password | password | -| test_logging.rs:229:23:229:28 | expect | test_logging.rs:229:54:229:61 | password | test_logging.rs:229:23:229:28 | expect | This operation writes $@ to a log file. | test_logging.rs:229:54:229:61 | password | password | -| test_logging.rs:242:10:242:14 | write | test_logging.rs:242:42:242:49 | password | test_logging.rs:242:10:242:14 | write | This operation writes $@ to a log file. | test_logging.rs:242:42:242:49 | password | password | -| test_logging.rs:245:10:245:18 | write_all | test_logging.rs:245:46:245:53 | password | test_logging.rs:245:10:245:18 | write_all | This operation writes $@ to a log file. | test_logging.rs:245:46:245:53 | password | password | -| test_logging.rs:248:9:248:13 | write | test_logging.rs:248:41:248:48 | password | test_logging.rs:248:9:248:13 | write | This operation writes $@ to a log file. | test_logging.rs:248:41:248:48 | password | password | -| test_logging.rs:251:9:251:13 | write | test_logging.rs:251:41:251:48 | password | test_logging.rs:251:9:251:13 | write | This operation writes $@ to a log file. | test_logging.rs:251:41:251:48 | password | password | +| test_logging.rs:42:12:42:35 | MacroExpr | test_logging.rs:42:28:42:35 | password | test_logging.rs:42:12:42:35 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:42:28:42:35 | password | password | +| test_logging.rs:43:12:43:35 | MacroExpr | test_logging.rs:43:28:43:35 | password | test_logging.rs:43:12:43:35 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:43:28:43:35 | password | password | +| test_logging.rs:44:11:44:34 | MacroExpr | test_logging.rs:44:27:44:34 | password | test_logging.rs:44:11:44:34 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:44:27:44:34 | password | password | +| test_logging.rs:45:12:45:35 | MacroExpr | test_logging.rs:45:28:45:35 | password | test_logging.rs:45:12:45:35 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:45:28:45:35 | password | password | +| test_logging.rs:46:11:46:34 | MacroExpr | test_logging.rs:46:27:46:34 | password | test_logging.rs:46:11:46:34 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:46:27:46:34 | password | password | +| test_logging.rs:47:24:47:47 | MacroExpr | test_logging.rs:47:40:47:47 | password | test_logging.rs:47:24:47:47 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:47:40:47:47 | password | password | +| test_logging.rs:52:12:52:35 | MacroExpr | test_logging.rs:52:28:52:35 | password | test_logging.rs:52:12:52:35 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:52:28:52:35 | password | password | +| test_logging.rs:54:12:54:48 | MacroExpr | test_logging.rs:54:41:54:48 | password | test_logging.rs:54:12:54:48 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:54:41:54:48 | password | password | +| test_logging.rs:56:12:56:46 | MacroExpr | test_logging.rs:56:39:56:46 | password | test_logging.rs:56:12:56:46 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:56:39:56:46 | password | password | +| test_logging.rs:57:12:57:33 | MacroExpr | test_logging.rs:57:24:57:31 | password | test_logging.rs:57:12:57:33 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:57:24:57:31 | password | password | +| test_logging.rs:58:12:58:35 | MacroExpr | test_logging.rs:58:24:58:31 | password | test_logging.rs:58:12:58:35 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:58:24:58:31 | password | password | +| test_logging.rs:60:30:60:53 | MacroExpr | test_logging.rs:60:46:60:53 | password | test_logging.rs:60:30:60:53 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:60:46:60:53 | password | password | +| test_logging.rs:61:20:61:28 | &... | test_logging.rs:61:21:61:28 | password | test_logging.rs:61:20:61:28 | &... | This operation writes $@ to a log file. | test_logging.rs:61:21:61:28 | password | password | +| test_logging.rs:65:24:65:47 | MacroExpr | test_logging.rs:65:40:65:47 | password | test_logging.rs:65:24:65:47 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:65:40:65:47 | password | password | +| test_logging.rs:67:42:67:65 | MacroExpr | test_logging.rs:67:58:67:65 | password | test_logging.rs:67:42:67:65 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:67:58:67:65 | password | password | +| test_logging.rs:68:18:68:26 | &... | test_logging.rs:68:19:68:26 | password | test_logging.rs:68:18:68:26 | &... | This operation writes $@ to a log file. | test_logging.rs:68:19:68:26 | password | password | +| test_logging.rs:72:23:72:46 | MacroExpr | test_logging.rs:72:39:72:46 | password | test_logging.rs:72:23:72:46 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:72:39:72:46 | password | password | +| test_logging.rs:74:41:74:64 | MacroExpr | test_logging.rs:74:57:74:64 | password | test_logging.rs:74:41:74:64 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:74:57:74:64 | password | password | +| test_logging.rs:75:20:75:28 | &... | test_logging.rs:75:21:75:28 | password | test_logging.rs:75:20:75:28 | &... | This operation writes $@ to a log file. | test_logging.rs:75:21:75:28 | password | password | +| test_logging.rs:76:23:76:46 | MacroExpr | test_logging.rs:76:39:76:46 | password | test_logging.rs:76:23:76:46 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:76:39:76:46 | password | password | +| test_logging.rs:82:20:82:43 | MacroExpr | test_logging.rs:82:36:82:43 | password | test_logging.rs:82:20:82:43 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:82:36:82:43 | password | password | +| test_logging.rs:84:38:84:61 | MacroExpr | test_logging.rs:84:54:84:61 | password | test_logging.rs:84:38:84:61 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:84:54:84:61 | password | password | +| test_logging.rs:85:20:85:28 | &... | test_logging.rs:85:21:85:28 | password | test_logging.rs:85:20:85:28 | &... | This operation writes $@ to a log file. | test_logging.rs:85:21:85:28 | password | password | +| test_logging.rs:86:20:86:43 | MacroExpr | test_logging.rs:86:36:86:43 | password | test_logging.rs:86:20:86:43 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:86:36:86:43 | password | password | +| test_logging.rs:94:11:94:28 | MacroExpr | test_logging.rs:93:15:93:22 | password | test_logging.rs:94:11:94:28 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:93:15:93:22 | password | password | +| test_logging.rs:97:11:97:18 | MacroExpr | test_logging.rs:96:42:96:49 | password | test_logging.rs:97:11:97:18 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:96:42:96:49 | password | password | +| test_logging.rs:100:11:100:18 | MacroExpr | test_logging.rs:99:38:99:45 | password | test_logging.rs:100:11:100:18 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:99:38:99:45 | password | password | +| test_logging.rs:118:12:118:41 | MacroExpr | test_logging.rs:118:28:118:41 | get_password(...) | test_logging.rs:118:12:118:41 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:118:28:118:41 | get_password(...) | get_password(...) | +| test_logging.rs:131:12:131:31 | MacroExpr | test_logging.rs:129:25:129:32 | password | test_logging.rs:131:12:131:31 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:129:25:129:32 | password | password | +| test_logging.rs:141:11:141:37 | MacroExpr | test_logging.rs:141:27:141:37 | s1.password | test_logging.rs:141:11:141:37 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:141:27:141:37 | s1.password | s1.password | +| test_logging.rs:151:11:151:37 | MacroExpr | test_logging.rs:151:27:151:37 | s2.password | test_logging.rs:151:11:151:37 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:151:27:151:37 | s2.password | s2.password | +| test_logging.rs:176:33:176:79 | &... | test_logging.rs:176:70:176:78 | password2 | test_logging.rs:176:33:176:79 | &... | This operation writes $@ to a log file. | test_logging.rs:176:70:176:78 | password2 | password2 | +| test_logging.rs:180:35:180:81 | &... | test_logging.rs:180:72:180:80 | password2 | test_logging.rs:180:35:180:81 | &... | This operation writes $@ to a log file. | test_logging.rs:180:72:180:80 | password2 | password2 | +| test_logging.rs:184:13:184:23 | err_result2 | test_logging.rs:183:51:183:59 | password2 | test_logging.rs:184:13:184:23 | err_result2 | This operation writes $@ to a log file. | test_logging.rs:183:51:183:59 | password2 | password2 | +| test_logging.rs:188:13:188:23 | err_result3 | test_logging.rs:187:51:187:59 | password2 | test_logging.rs:188:13:188:23 | err_result3 | This operation writes $@ to a log file. | test_logging.rs:187:51:187:59 | password2 | password2 | +| test_logging.rs:192:12:192:37 | MacroExpr | test_logging.rs:192:30:192:37 | password | test_logging.rs:192:12:192:37 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:192:30:192:37 | password | password | +| test_logging.rs:193:14:193:37 | MacroExpr | test_logging.rs:193:30:193:37 | password | test_logging.rs:193:14:193:37 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:193:30:193:37 | password | password | +| test_logging.rs:194:13:194:38 | MacroExpr | test_logging.rs:194:31:194:38 | password | test_logging.rs:194:13:194:38 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:194:31:194:38 | password | password | +| test_logging.rs:195:15:195:38 | MacroExpr | test_logging.rs:195:31:195:38 | password | test_logging.rs:195:15:195:38 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:195:31:195:38 | password | password | +| test_logging.rs:199:20:199:43 | MacroExpr | test_logging.rs:199:36:199:43 | password | test_logging.rs:199:20:199:43 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:199:36:199:43 | password | password | +| test_logging.rs:202:19:202:42 | MacroExpr | test_logging.rs:202:35:202:42 | password | test_logging.rs:202:19:202:42 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:202:35:202:42 | password | password | +| test_logging.rs:205:28:205:51 | MacroExpr | test_logging.rs:205:44:205:51 | password | test_logging.rs:205:28:205:51 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:205:44:205:51 | password | password | +| test_logging.rs:208:26:208:49 | MacroExpr | test_logging.rs:208:42:208:49 | password | test_logging.rs:208:26:208:49 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:208:42:208:49 | password | password | +| test_logging.rs:211:28:211:51 | MacroExpr | test_logging.rs:211:44:211:51 | password | test_logging.rs:211:28:211:51 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:211:44:211:51 | password | password | +| test_logging.rs:214:30:214:53 | ...::Some(...) | test_logging.rs:214:46:214:53 | password | test_logging.rs:214:30:214:53 | ...::Some(...) | This operation writes $@ to a log file. | test_logging.rs:214:46:214:53 | password | password | +| test_logging.rs:217:30:217:53 | ...::Some(...) | test_logging.rs:217:46:217:53 | password | test_logging.rs:217:30:217:53 | ...::Some(...) | This operation writes $@ to a log file. | test_logging.rs:217:46:217:53 | password | password | +| test_logging.rs:220:34:220:57 | MacroExpr | test_logging.rs:220:50:220:57 | password | test_logging.rs:220:34:220:57 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:220:50:220:57 | password | password | +| test_logging.rs:223:36:223:59 | ...::Some(...) | test_logging.rs:223:52:223:59 | password | test_logging.rs:223:36:223:59 | ...::Some(...) | This operation writes $@ to a log file. | test_logging.rs:223:52:223:59 | password | password | +| test_logging.rs:226:36:226:59 | ...::Some(...) | test_logging.rs:226:52:226:59 | password | test_logging.rs:226:36:226:59 | ...::Some(...) | This operation writes $@ to a log file. | test_logging.rs:226:52:226:59 | password | password | +| test_logging.rs:229:30:229:71 | ... .as_str() | test_logging.rs:229:54:229:61 | password | test_logging.rs:229:30:229:71 | ... .as_str() | This operation writes $@ to a log file. | test_logging.rs:229:54:229:61 | password | password | +| test_logging.rs:242:16:242:61 | ... .as_bytes() | test_logging.rs:242:42:242:49 | password | test_logging.rs:242:16:242:61 | ... .as_bytes() | This operation writes $@ to a log file. | test_logging.rs:242:42:242:49 | password | password | +| test_logging.rs:245:20:245:65 | ... .as_bytes() | test_logging.rs:245:46:245:53 | password | test_logging.rs:245:20:245:65 | ... .as_bytes() | This operation writes $@ to a log file. | test_logging.rs:245:46:245:53 | password | password | +| test_logging.rs:248:15:248:60 | ... .as_bytes() | test_logging.rs:248:41:248:48 | password | test_logging.rs:248:15:248:60 | ... .as_bytes() | This operation writes $@ to a log file. | test_logging.rs:248:41:248:48 | password | password | +| test_logging.rs:251:15:251:60 | ... .as_bytes() | test_logging.rs:251:41:251:48 | password | test_logging.rs:251:15:251:60 | ... .as_bytes() | This operation writes $@ to a log file. | test_logging.rs:251:41:251:48 | password | password | edges -| test_logging.rs:42:12:42:35 | MacroExpr | test_logging.rs:42:5:42:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:42:28:42:35 | password | test_logging.rs:42:12:42:35 | MacroExpr | provenance | | -| test_logging.rs:43:12:43:35 | MacroExpr | test_logging.rs:43:5:43:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:43:28:43:35 | password | test_logging.rs:43:12:43:35 | MacroExpr | provenance | | -| test_logging.rs:44:11:44:34 | MacroExpr | test_logging.rs:44:5:44:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:44:27:44:34 | password | test_logging.rs:44:11:44:34 | MacroExpr | provenance | | -| test_logging.rs:45:12:45:35 | MacroExpr | test_logging.rs:45:5:45:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:45:28:45:35 | password | test_logging.rs:45:12:45:35 | MacroExpr | provenance | | -| test_logging.rs:46:11:46:34 | MacroExpr | test_logging.rs:46:5:46:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:46:27:46:34 | password | test_logging.rs:46:11:46:34 | MacroExpr | provenance | | -| test_logging.rs:47:24:47:47 | MacroExpr | test_logging.rs:47:5:47:8 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:47:40:47:47 | password | test_logging.rs:47:24:47:47 | MacroExpr | provenance | | -| test_logging.rs:52:12:52:35 | MacroExpr | test_logging.rs:52:5:52:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:52:28:52:35 | password | test_logging.rs:52:12:52:35 | MacroExpr | provenance | | -| test_logging.rs:54:12:54:48 | MacroExpr | test_logging.rs:54:5:54:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:54:41:54:48 | password | test_logging.rs:54:12:54:48 | MacroExpr | provenance | | -| test_logging.rs:56:12:56:46 | MacroExpr | test_logging.rs:56:5:56:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:56:39:56:46 | password | test_logging.rs:56:12:56:46 | MacroExpr | provenance | | -| test_logging.rs:57:12:57:33 | MacroExpr | test_logging.rs:57:5:57:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:57:24:57:31 | password | test_logging.rs:57:12:57:33 | MacroExpr | provenance | | -| test_logging.rs:58:12:58:35 | MacroExpr | test_logging.rs:58:5:58:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:58:24:58:31 | password | test_logging.rs:58:12:58:35 | MacroExpr | provenance | | -| test_logging.rs:60:30:60:53 | MacroExpr | test_logging.rs:60:5:60:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:60:46:60:53 | password | test_logging.rs:60:30:60:53 | MacroExpr | provenance | | -| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | -| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 Sink:MaD:12 | -| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | test_logging.rs:61:5:61:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:42:28:42:35 | password | test_logging.rs:42:12:42:35 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:43:28:43:35 | password | test_logging.rs:43:12:43:35 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:44:27:44:34 | password | test_logging.rs:44:11:44:34 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:45:28:45:35 | password | test_logging.rs:45:12:45:35 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:46:27:46:34 | password | test_logging.rs:46:11:46:34 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:47:40:47:47 | password | test_logging.rs:47:24:47:47 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:52:28:52:35 | password | test_logging.rs:52:12:52:35 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:54:41:54:48 | password | test_logging.rs:54:12:54:48 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:56:39:56:46 | password | test_logging.rs:56:12:56:46 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:57:24:57:31 | password | test_logging.rs:57:12:57:33 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:58:24:58:31 | password | test_logging.rs:58:12:58:35 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:60:46:60:53 | password | test_logging.rs:60:30:60:53 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:20:61:28 | &... | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:20:61:28 | &... | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | test_logging.rs:61:20:61:28 | &... | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | | test_logging.rs:61:20:61:28 | &password | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0] | provenance | | | test_logging.rs:61:20:61:28 | &password [&ref] | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0, &ref] | provenance | | | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | provenance | | | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0] | test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | provenance | | | test_logging.rs:61:21:61:28 | password | test_logging.rs:61:20:61:28 | &password | provenance | Config | | test_logging.rs:61:21:61:28 | password | test_logging.rs:61:20:61:28 | &password [&ref] | provenance | | -| test_logging.rs:65:24:65:47 | MacroExpr | test_logging.rs:65:5:65:8 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:65:40:65:47 | password | test_logging.rs:65:24:65:47 | MacroExpr | provenance | | -| test_logging.rs:67:42:67:65 | MacroExpr | test_logging.rs:67:5:67:8 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:67:58:67:65 | password | test_logging.rs:67:42:67:65 | MacroExpr | provenance | | -| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:8 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | -| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:8 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 Sink:MaD:12 | -| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | test_logging.rs:68:5:68:8 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:65:40:65:47 | password | test_logging.rs:65:24:65:47 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:67:58:67:65 | password | test_logging.rs:67:42:67:65 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:18:68:26 | &... | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:18:68:26 | &... | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | test_logging.rs:68:18:68:26 | &... | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | | test_logging.rs:68:18:68:26 | &password | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0] | provenance | | | test_logging.rs:68:18:68:26 | &password [&ref] | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0, &ref] | provenance | | | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0, &ref] | test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | provenance | | | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0] | test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | provenance | | | test_logging.rs:68:19:68:26 | password | test_logging.rs:68:18:68:26 | &password | provenance | Config | | test_logging.rs:68:19:68:26 | password | test_logging.rs:68:18:68:26 | &password [&ref] | provenance | | -| test_logging.rs:72:23:72:46 | MacroExpr | test_logging.rs:72:5:72:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:72:39:72:46 | password | test_logging.rs:72:23:72:46 | MacroExpr | provenance | | -| test_logging.rs:74:41:74:64 | MacroExpr | test_logging.rs:74:5:74:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:74:57:74:64 | password | test_logging.rs:74:41:74:64 | MacroExpr | provenance | | -| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | -| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 Sink:MaD:12 | -| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | test_logging.rs:75:5:75:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:72:39:72:46 | password | test_logging.rs:72:23:72:46 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:74:57:74:64 | password | test_logging.rs:74:41:74:64 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:20:75:28 | &... | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:20:75:28 | &... | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | test_logging.rs:75:20:75:28 | &... | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | | test_logging.rs:75:20:75:28 | &password | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0] | provenance | | | test_logging.rs:75:20:75:28 | &password [&ref] | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0, &ref] | provenance | | | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | provenance | | | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0] | test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | provenance | | | test_logging.rs:75:21:75:28 | password | test_logging.rs:75:20:75:28 | &password | provenance | Config | | test_logging.rs:75:21:75:28 | password | test_logging.rs:75:20:75:28 | &password [&ref] | provenance | | -| test_logging.rs:76:23:76:46 | MacroExpr | test_logging.rs:76:5:76:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:76:39:76:46 | password | test_logging.rs:76:23:76:46 | MacroExpr | provenance | | -| test_logging.rs:82:20:82:43 | MacroExpr | test_logging.rs:82:5:82:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:82:36:82:43 | password | test_logging.rs:82:20:82:43 | MacroExpr | provenance | | -| test_logging.rs:84:38:84:61 | MacroExpr | test_logging.rs:84:5:84:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:84:54:84:61 | password | test_logging.rs:84:38:84:61 | MacroExpr | provenance | | -| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | -| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 Sink:MaD:12 | -| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | test_logging.rs:85:5:85:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:76:39:76:46 | password | test_logging.rs:76:23:76:46 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:82:36:82:43 | password | test_logging.rs:82:20:82:43 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:84:54:84:61 | password | test_logging.rs:84:38:84:61 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:20:85:28 | &... | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:20:85:28 | &... | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | test_logging.rs:85:20:85:28 | &... | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | | test_logging.rs:85:20:85:28 | &password | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0] | provenance | | | test_logging.rs:85:20:85:28 | &password [&ref] | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0, &ref] | provenance | | | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | provenance | | | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0] | test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | provenance | | | test_logging.rs:85:21:85:28 | password | test_logging.rs:85:20:85:28 | &password | provenance | Config | | test_logging.rs:85:21:85:28 | password | test_logging.rs:85:20:85:28 | &password [&ref] | provenance | | -| test_logging.rs:86:20:86:43 | MacroExpr | test_logging.rs:86:5:86:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:86:36:86:43 | password | test_logging.rs:86:20:86:43 | MacroExpr | provenance | | -| test_logging.rs:93:9:93:10 | m1 | test_logging.rs:94:11:94:28 | MacroExpr | provenance | | +| test_logging.rs:86:36:86:43 | password | test_logging.rs:86:20:86:43 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:93:9:93:10 | m1 | test_logging.rs:94:11:94:28 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:93:14:93:22 | &password | test_logging.rs:93:9:93:10 | m1 | provenance | | | test_logging.rs:93:15:93:22 | password | test_logging.rs:93:14:93:22 | &password | provenance | Config | -| test_logging.rs:94:11:94:28 | MacroExpr | test_logging.rs:94:5:94:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:96:9:96:10 | m2 | test_logging.rs:97:11:97:18 | MacroExpr | provenance | | +| test_logging.rs:96:9:96:10 | m2 | test_logging.rs:97:11:97:18 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:96:14:96:49 | ... + ... | test_logging.rs:96:9:96:10 | m2 | provenance | | | test_logging.rs:96:41:96:49 | &password | test_logging.rs:96:14:96:49 | ... + ... | provenance | MaD:16 | | test_logging.rs:96:41:96:49 | &password [&ref] | test_logging.rs:96:14:96:49 | ... + ... | provenance | MaD:16 | | test_logging.rs:96:42:96:49 | password | test_logging.rs:96:41:96:49 | &password | provenance | Config | | test_logging.rs:96:42:96:49 | password | test_logging.rs:96:41:96:49 | &password [&ref] | provenance | | -| test_logging.rs:97:11:97:18 | MacroExpr | test_logging.rs:97:5:97:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:99:9:99:10 | m3 | test_logging.rs:100:11:100:18 | MacroExpr | provenance | | +| test_logging.rs:99:9:99:10 | m3 | test_logging.rs:100:11:100:18 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:99:22:99:45 | ...::format(...) | test_logging.rs:99:22:99:45 | { ... } | provenance | | | test_logging.rs:99:22:99:45 | ...::must_use(...) | test_logging.rs:99:9:99:10 | m3 | provenance | | | test_logging.rs:99:22:99:45 | MacroExpr | test_logging.rs:99:22:99:45 | ...::format(...) | provenance | MaD:19 | | test_logging.rs:99:22:99:45 | { ... } | test_logging.rs:99:22:99:45 | ...::must_use(...) | provenance | MaD:20 | | test_logging.rs:99:38:99:45 | password | test_logging.rs:99:22:99:45 | MacroExpr | provenance | | -| test_logging.rs:100:11:100:18 | MacroExpr | test_logging.rs:100:5:100:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:118:12:118:41 | MacroExpr | test_logging.rs:118:5:118:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:118:28:118:41 | get_password(...) | test_logging.rs:118:12:118:41 | MacroExpr | provenance | | +| test_logging.rs:118:28:118:41 | get_password(...) | test_logging.rs:118:12:118:41 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:129:9:129:10 | t1 [tuple.1] | test_logging.rs:131:28:131:29 | t1 [tuple.1] | provenance | | | test_logging.rs:129:14:129:33 | TupleExpr [tuple.1] | test_logging.rs:129:9:129:10 | t1 [tuple.1] | provenance | | | test_logging.rs:129:25:129:32 | password | test_logging.rs:129:14:129:33 | TupleExpr [tuple.1] | provenance | | -| test_logging.rs:131:12:131:31 | MacroExpr | test_logging.rs:131:5:131:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:131:28:131:29 | t1 [tuple.1] | test_logging.rs:131:28:131:31 | t1.1 | provenance | | -| test_logging.rs:131:28:131:31 | t1.1 | test_logging.rs:131:12:131:31 | MacroExpr | provenance | | -| test_logging.rs:141:11:141:37 | MacroExpr | test_logging.rs:141:5:141:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:141:27:141:37 | s1.password | test_logging.rs:141:11:141:37 | MacroExpr | provenance | | -| test_logging.rs:151:11:151:37 | MacroExpr | test_logging.rs:151:5:151:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:151:27:151:37 | s2.password | test_logging.rs:151:11:151:37 | MacroExpr | provenance | | -| test_logging.rs:176:33:176:79 | &... | test_logging.rs:176:22:176:31 | log_expect | provenance | MaD:1 Sink:MaD:1 | -| test_logging.rs:176:33:176:79 | &... [&ref] | test_logging.rs:176:22:176:31 | log_expect | provenance | MaD:1 Sink:MaD:1 | +| test_logging.rs:131:28:131:31 | t1.1 | test_logging.rs:131:12:131:31 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:141:27:141:37 | s1.password | test_logging.rs:141:11:141:37 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:151:27:151:37 | s2.password | test_logging.rs:151:11:151:37 | MacroExpr | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:176:33:176:79 | &... | test_logging.rs:176:33:176:79 | &... | provenance | MaD:1 Sink:MaD:1 | +| test_logging.rs:176:33:176:79 | &... [&ref] | test_logging.rs:176:33:176:79 | &... | provenance | MaD:1 Sink:MaD:1 | | test_logging.rs:176:34:176:79 | MacroExpr | test_logging.rs:176:33:176:79 | &... | provenance | Config | | test_logging.rs:176:34:176:79 | MacroExpr | test_logging.rs:176:33:176:79 | &... [&ref] | provenance | | | test_logging.rs:176:42:176:78 | ...::format(...) | test_logging.rs:176:42:176:78 | { ... } | provenance | | @@ -169,8 +142,8 @@ edges | test_logging.rs:176:42:176:78 | MacroExpr | test_logging.rs:176:42:176:78 | ...::format(...) | provenance | MaD:19 | | test_logging.rs:176:42:176:78 | { ... } | test_logging.rs:176:42:176:78 | ...::must_use(...) | provenance | MaD:20 | | test_logging.rs:176:70:176:78 | password2 | test_logging.rs:176:42:176:78 | MacroExpr | provenance | | -| test_logging.rs:180:35:180:81 | &... | test_logging.rs:180:24:180:33 | log_expect | provenance | MaD:3 Sink:MaD:3 | -| test_logging.rs:180:35:180:81 | &... [&ref] | test_logging.rs:180:24:180:33 | log_expect | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:180:35:180:81 | &... | test_logging.rs:180:35:180:81 | &... | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:180:35:180:81 | &... [&ref] | test_logging.rs:180:35:180:81 | &... | provenance | MaD:3 Sink:MaD:3 | | test_logging.rs:180:36:180:81 | MacroExpr | test_logging.rs:180:35:180:81 | &... | provenance | Config | | test_logging.rs:180:36:180:81 | MacroExpr | test_logging.rs:180:35:180:81 | &... [&ref] | provenance | | | test_logging.rs:180:44:180:80 | ...::format(...) | test_logging.rs:180:44:180:80 | { ... } | provenance | | @@ -178,77 +151,65 @@ edges | test_logging.rs:180:44:180:80 | MacroExpr | test_logging.rs:180:44:180:80 | ...::format(...) | provenance | MaD:19 | | test_logging.rs:180:44:180:80 | { ... } | test_logging.rs:180:44:180:80 | ...::must_use(...) | provenance | MaD:20 | | test_logging.rs:180:72:180:80 | password2 | test_logging.rs:180:44:180:80 | MacroExpr | provenance | | -| test_logging.rs:183:9:183:19 | err_result2 [Err] | test_logging.rs:184:13:184:23 | err_result2 [Err] | provenance | | +| test_logging.rs:183:9:183:19 | err_result2 [Err] | test_logging.rs:184:13:184:23 | err_result2 | provenance | MaD:4 Sink:MaD:4 | | test_logging.rs:183:47:183:68 | Err(...) [Err] | test_logging.rs:183:9:183:19 | err_result2 [Err] | provenance | | | test_logging.rs:183:51:183:59 | password2 | test_logging.rs:183:51:183:67 | password2.clone() | provenance | MaD:15 | | test_logging.rs:183:51:183:67 | password2.clone() | test_logging.rs:183:47:183:68 | Err(...) [Err] | provenance | | -| test_logging.rs:184:13:184:23 | err_result2 [Err] | test_logging.rs:184:25:184:34 | log_expect | provenance | MaD:4 Sink:MaD:4 | -| test_logging.rs:187:9:187:19 | err_result3 [Err] | test_logging.rs:188:13:188:23 | err_result3 [Err] | provenance | | +| test_logging.rs:187:9:187:19 | err_result3 [Err] | test_logging.rs:188:13:188:23 | err_result3 | provenance | MaD:5 Sink:MaD:5 | | test_logging.rs:187:47:187:60 | Err(...) [Err] | test_logging.rs:187:9:187:19 | err_result3 [Err] | provenance | | | test_logging.rs:187:51:187:59 | password2 | test_logging.rs:187:47:187:60 | Err(...) [Err] | provenance | | -| test_logging.rs:188:13:188:23 | err_result3 [Err] | test_logging.rs:188:25:188:34 | log_unwrap | provenance | MaD:5 Sink:MaD:5 | -| test_logging.rs:192:12:192:37 | MacroExpr | test_logging.rs:192:5:192:10 | ...::_print | provenance | MaD:14 Sink:MaD:14 | -| test_logging.rs:192:30:192:37 | password | test_logging.rs:192:12:192:37 | MacroExpr | provenance | | -| test_logging.rs:193:14:193:37 | MacroExpr | test_logging.rs:193:5:193:12 | ...::_print | provenance | MaD:14 Sink:MaD:14 | -| test_logging.rs:193:30:193:37 | password | test_logging.rs:193:14:193:37 | MacroExpr | provenance | | -| test_logging.rs:194:13:194:38 | MacroExpr | test_logging.rs:194:5:194:11 | ...::_eprint | provenance | MaD:13 Sink:MaD:13 | -| test_logging.rs:194:31:194:38 | password | test_logging.rs:194:13:194:38 | MacroExpr | provenance | | -| test_logging.rs:195:15:195:38 | MacroExpr | test_logging.rs:195:5:195:13 | ...::_eprint | provenance | MaD:13 Sink:MaD:13 | -| test_logging.rs:195:31:195:38 | password | test_logging.rs:195:15:195:38 | MacroExpr | provenance | | -| test_logging.rs:199:20:199:43 | MacroExpr | test_logging.rs:199:13:199:18 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | -| test_logging.rs:199:36:199:43 | password | test_logging.rs:199:20:199:43 | MacroExpr | provenance | | -| test_logging.rs:202:19:202:42 | MacroExpr | test_logging.rs:202:13:202:17 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | -| test_logging.rs:202:35:202:42 | password | test_logging.rs:202:19:202:42 | MacroExpr | provenance | | -| test_logging.rs:205:28:205:51 | MacroExpr | test_logging.rs:205:13:205:26 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | -| test_logging.rs:205:44:205:51 | password | test_logging.rs:205:28:205:51 | MacroExpr | provenance | | -| test_logging.rs:208:26:208:49 | MacroExpr | test_logging.rs:208:13:208:24 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | -| test_logging.rs:208:42:208:49 | password | test_logging.rs:208:26:208:49 | MacroExpr | provenance | | -| test_logging.rs:211:28:211:51 | MacroExpr | test_logging.rs:211:13:211:19 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | -| test_logging.rs:211:44:211:51 | password | test_logging.rs:211:28:211:51 | MacroExpr | provenance | | -| test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | test_logging.rs:214:13:214:22 | ...::assert_failed | provenance | MaD:9 Sink:MaD:9 | +| test_logging.rs:192:30:192:37 | password | test_logging.rs:192:12:192:37 | MacroExpr | provenance | MaD:14 Sink:MaD:14 | +| test_logging.rs:193:30:193:37 | password | test_logging.rs:193:14:193:37 | MacroExpr | provenance | MaD:14 Sink:MaD:14 | +| test_logging.rs:194:31:194:38 | password | test_logging.rs:194:13:194:38 | MacroExpr | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:195:31:195:38 | password | test_logging.rs:195:15:195:38 | MacroExpr | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:199:36:199:43 | password | test_logging.rs:199:20:199:43 | MacroExpr | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:202:35:202:42 | password | test_logging.rs:202:19:202:42 | MacroExpr | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:205:44:205:51 | password | test_logging.rs:205:28:205:51 | MacroExpr | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:208:42:208:49 | password | test_logging.rs:208:26:208:49 | MacroExpr | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:211:44:211:51 | password | test_logging.rs:211:28:211:51 | MacroExpr | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | test_logging.rs:214:30:214:53 | ...::Some(...) | provenance | MaD:9 Sink:MaD:9 | | test_logging.rs:214:30:214:53 | MacroExpr | test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | provenance | | | test_logging.rs:214:46:214:53 | password | test_logging.rs:214:30:214:53 | MacroExpr | provenance | | -| test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | test_logging.rs:217:13:217:22 | ...::assert_failed | provenance | MaD:9 Sink:MaD:9 | +| test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | test_logging.rs:217:30:217:53 | ...::Some(...) | provenance | MaD:9 Sink:MaD:9 | | test_logging.rs:217:30:217:53 | MacroExpr | test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | provenance | | | test_logging.rs:217:46:217:53 | password | test_logging.rs:217:30:217:53 | MacroExpr | provenance | | -| test_logging.rs:220:34:220:57 | MacroExpr | test_logging.rs:220:13:220:25 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | -| test_logging.rs:220:50:220:57 | password | test_logging.rs:220:34:220:57 | MacroExpr | provenance | | -| test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | test_logging.rs:223:13:223:28 | ...::assert_failed | provenance | MaD:9 Sink:MaD:9 | +| test_logging.rs:220:50:220:57 | password | test_logging.rs:220:34:220:57 | MacroExpr | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | test_logging.rs:223:36:223:59 | ...::Some(...) | provenance | MaD:9 Sink:MaD:9 | | test_logging.rs:223:36:223:59 | MacroExpr | test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | provenance | | | test_logging.rs:223:52:223:59 | password | test_logging.rs:223:36:223:59 | MacroExpr | provenance | | -| test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | test_logging.rs:226:13:226:28 | ...::assert_failed | provenance | MaD:9 Sink:MaD:9 | +| test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | test_logging.rs:226:36:226:59 | ...::Some(...) | provenance | MaD:9 Sink:MaD:9 | | test_logging.rs:226:36:226:59 | MacroExpr | test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | provenance | | | test_logging.rs:226:52:226:59 | password | test_logging.rs:226:36:226:59 | MacroExpr | provenance | | | test_logging.rs:229:30:229:62 | MacroExpr | test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | provenance | MaD:18 | -| test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | test_logging.rs:229:23:229:28 | expect | provenance | MaD:2 Sink:MaD:2 | +| test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | test_logging.rs:229:30:229:71 | ... .as_str() | provenance | MaD:2 Sink:MaD:2 | | test_logging.rs:229:38:229:61 | ...::format(...) | test_logging.rs:229:38:229:61 | { ... } | provenance | | | test_logging.rs:229:38:229:61 | ...::must_use(...) | test_logging.rs:229:30:229:62 | MacroExpr | provenance | | | test_logging.rs:229:38:229:61 | MacroExpr | test_logging.rs:229:38:229:61 | ...::format(...) | provenance | MaD:19 | | test_logging.rs:229:38:229:61 | { ... } | test_logging.rs:229:38:229:61 | ...::must_use(...) | provenance | MaD:20 | | test_logging.rs:229:54:229:61 | password | test_logging.rs:229:38:229:61 | MacroExpr | provenance | | | test_logging.rs:242:16:242:50 | MacroExpr | test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref, element] | provenance | MaD:17 | -| test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref, element] | test_logging.rs:242:10:242:14 | write | provenance | MaD:7 Sink:MaD:7 Sink:MaD:7 | +| test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref, element] | test_logging.rs:242:16:242:61 | ... .as_bytes() | provenance | MaD:7 Sink:MaD:7 Sink:MaD:7 | | test_logging.rs:242:24:242:49 | ...::format(...) | test_logging.rs:242:24:242:49 | { ... } | provenance | | | test_logging.rs:242:24:242:49 | ...::must_use(...) | test_logging.rs:242:16:242:50 | MacroExpr | provenance | | | test_logging.rs:242:24:242:49 | MacroExpr | test_logging.rs:242:24:242:49 | ...::format(...) | provenance | MaD:19 | | test_logging.rs:242:24:242:49 | { ... } | test_logging.rs:242:24:242:49 | ...::must_use(...) | provenance | MaD:20 | | test_logging.rs:242:42:242:49 | password | test_logging.rs:242:24:242:49 | MacroExpr | provenance | | | test_logging.rs:245:20:245:54 | MacroExpr | test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref, element] | provenance | MaD:17 | -| test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref, element] | test_logging.rs:245:10:245:18 | write_all | provenance | MaD:8 Sink:MaD:8 Sink:MaD:8 | +| test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref, element] | test_logging.rs:245:20:245:65 | ... .as_bytes() | provenance | MaD:8 Sink:MaD:8 Sink:MaD:8 | | test_logging.rs:245:28:245:53 | ...::format(...) | test_logging.rs:245:28:245:53 | { ... } | provenance | | | test_logging.rs:245:28:245:53 | ...::must_use(...) | test_logging.rs:245:20:245:54 | MacroExpr | provenance | | | test_logging.rs:245:28:245:53 | MacroExpr | test_logging.rs:245:28:245:53 | ...::format(...) | provenance | MaD:19 | | test_logging.rs:245:28:245:53 | { ... } | test_logging.rs:245:28:245:53 | ...::must_use(...) | provenance | MaD:20 | | test_logging.rs:245:46:245:53 | password | test_logging.rs:245:28:245:53 | MacroExpr | provenance | | | test_logging.rs:248:15:248:49 | MacroExpr | test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref, element] | provenance | MaD:17 | -| test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref, element] | test_logging.rs:248:9:248:13 | write | provenance | MaD:7 Sink:MaD:7 Sink:MaD:7 | +| test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref, element] | test_logging.rs:248:15:248:60 | ... .as_bytes() | provenance | MaD:7 Sink:MaD:7 Sink:MaD:7 | | test_logging.rs:248:23:248:48 | ...::format(...) | test_logging.rs:248:23:248:48 | { ... } | provenance | | | test_logging.rs:248:23:248:48 | ...::must_use(...) | test_logging.rs:248:15:248:49 | MacroExpr | provenance | | | test_logging.rs:248:23:248:48 | MacroExpr | test_logging.rs:248:23:248:48 | ...::format(...) | provenance | MaD:19 | | test_logging.rs:248:23:248:48 | { ... } | test_logging.rs:248:23:248:48 | ...::must_use(...) | provenance | MaD:20 | | test_logging.rs:248:41:248:48 | password | test_logging.rs:248:23:248:48 | MacroExpr | provenance | | | test_logging.rs:251:15:251:49 | MacroExpr | test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref, element] | provenance | MaD:17 | -| test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref, element] | test_logging.rs:251:9:251:13 | write | provenance | MaD:6 Sink:MaD:6 Sink:MaD:6 | +| test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref, element] | test_logging.rs:251:15:251:60 | ... .as_bytes() | provenance | MaD:6 Sink:MaD:6 Sink:MaD:6 | | test_logging.rs:251:23:251:48 | ...::format(...) | test_logging.rs:251:23:251:48 | { ... } | provenance | | | test_logging.rs:251:23:251:48 | ...::must_use(...) | test_logging.rs:251:15:251:49 | MacroExpr | provenance | | | test_logging.rs:251:23:251:48 | MacroExpr | test_logging.rs:251:23:251:48 | ...::format(...) | provenance | MaD:19 | @@ -276,43 +237,31 @@ models | 19 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | | 20 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | nodes -| test_logging.rs:42:5:42:10 | ...::log | semmle.label | ...::log | | test_logging.rs:42:12:42:35 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:42:28:42:35 | password | semmle.label | password | -| test_logging.rs:43:5:43:10 | ...::log | semmle.label | ...::log | | test_logging.rs:43:12:43:35 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:43:28:43:35 | password | semmle.label | password | -| test_logging.rs:44:5:44:9 | ...::log | semmle.label | ...::log | | test_logging.rs:44:11:44:34 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:44:27:44:34 | password | semmle.label | password | -| test_logging.rs:45:5:45:10 | ...::log | semmle.label | ...::log | | test_logging.rs:45:12:45:35 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:45:28:45:35 | password | semmle.label | password | -| test_logging.rs:46:5:46:9 | ...::log | semmle.label | ...::log | | test_logging.rs:46:11:46:34 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:46:27:46:34 | password | semmle.label | password | -| test_logging.rs:47:5:47:8 | ...::log | semmle.label | ...::log | | test_logging.rs:47:24:47:47 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:47:40:47:47 | password | semmle.label | password | -| test_logging.rs:52:5:52:10 | ...::log | semmle.label | ...::log | | test_logging.rs:52:12:52:35 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:52:28:52:35 | password | semmle.label | password | -| test_logging.rs:54:5:54:10 | ...::log | semmle.label | ...::log | | test_logging.rs:54:12:54:48 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:54:41:54:48 | password | semmle.label | password | -| test_logging.rs:56:5:56:10 | ...::log | semmle.label | ...::log | | test_logging.rs:56:12:56:46 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:56:39:56:46 | password | semmle.label | password | -| test_logging.rs:57:5:57:10 | ...::log | semmle.label | ...::log | | test_logging.rs:57:12:57:33 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:57:24:57:31 | password | semmle.label | password | -| test_logging.rs:58:5:58:10 | ...::log | semmle.label | ...::log | | test_logging.rs:58:12:58:35 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:58:24:58:31 | password | semmle.label | password | -| test_logging.rs:60:5:60:10 | ...::log | semmle.label | ...::log | | test_logging.rs:60:30:60:53 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:60:46:60:53 | password | semmle.label | password | -| test_logging.rs:61:5:61:10 | ...::log | semmle.label | ...::log | +| test_logging.rs:61:20:61:28 | &... | semmle.label | &... | | test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | | test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | | test_logging.rs:61:20:61:28 | &password | semmle.label | &password | @@ -320,13 +269,11 @@ nodes | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | | test_logging.rs:61:21:61:28 | password | semmle.label | password | -| test_logging.rs:65:5:65:8 | ...::log | semmle.label | ...::log | | test_logging.rs:65:24:65:47 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:65:40:65:47 | password | semmle.label | password | -| test_logging.rs:67:5:67:8 | ...::log | semmle.label | ...::log | | test_logging.rs:67:42:67:65 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:67:58:67:65 | password | semmle.label | password | -| test_logging.rs:68:5:68:8 | ...::log | semmle.label | ...::log | +| test_logging.rs:68:18:68:26 | &... | semmle.label | &... | | test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | | test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | | test_logging.rs:68:18:68:26 | &password | semmle.label | &password | @@ -334,13 +281,11 @@ nodes | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | | test_logging.rs:68:19:68:26 | password | semmle.label | password | -| test_logging.rs:72:5:72:10 | ...::log | semmle.label | ...::log | | test_logging.rs:72:23:72:46 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:72:39:72:46 | password | semmle.label | password | -| test_logging.rs:74:5:74:10 | ...::log | semmle.label | ...::log | | test_logging.rs:74:41:74:64 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:74:57:74:64 | password | semmle.label | password | -| test_logging.rs:75:5:75:10 | ...::log | semmle.label | ...::log | +| test_logging.rs:75:20:75:28 | &... | semmle.label | &... | | test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | | test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | | test_logging.rs:75:20:75:28 | &password | semmle.label | &password | @@ -348,16 +293,13 @@ nodes | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | | test_logging.rs:75:21:75:28 | password | semmle.label | password | -| test_logging.rs:76:5:76:10 | ...::log | semmle.label | ...::log | | test_logging.rs:76:23:76:46 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:76:39:76:46 | password | semmle.label | password | -| test_logging.rs:82:5:82:10 | ...::log | semmle.label | ...::log | | test_logging.rs:82:20:82:43 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:82:36:82:43 | password | semmle.label | password | -| test_logging.rs:84:5:84:10 | ...::log | semmle.label | ...::log | | test_logging.rs:84:38:84:61 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:84:54:84:61 | password | semmle.label | password | -| test_logging.rs:85:5:85:10 | ...::log | semmle.label | ...::log | +| test_logging.rs:85:20:85:28 | &... | semmle.label | &... | | test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | | test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | | test_logging.rs:85:20:85:28 | &password | semmle.label | &password | @@ -365,20 +307,17 @@ nodes | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | | test_logging.rs:85:21:85:28 | password | semmle.label | password | -| test_logging.rs:86:5:86:10 | ...::log | semmle.label | ...::log | | test_logging.rs:86:20:86:43 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:86:36:86:43 | password | semmle.label | password | | test_logging.rs:93:9:93:10 | m1 | semmle.label | m1 | | test_logging.rs:93:14:93:22 | &password | semmle.label | &password | | test_logging.rs:93:15:93:22 | password | semmle.label | password | -| test_logging.rs:94:5:94:9 | ...::log | semmle.label | ...::log | | test_logging.rs:94:11:94:28 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:96:9:96:10 | m2 | semmle.label | m2 | | test_logging.rs:96:14:96:49 | ... + ... | semmle.label | ... + ... | | test_logging.rs:96:41:96:49 | &password | semmle.label | &password | | test_logging.rs:96:41:96:49 | &password [&ref] | semmle.label | &password [&ref] | | test_logging.rs:96:42:96:49 | password | semmle.label | password | -| test_logging.rs:97:5:97:9 | ...::log | semmle.label | ...::log | | test_logging.rs:97:11:97:18 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:99:9:99:10 | m3 | semmle.label | m3 | | test_logging.rs:99:22:99:45 | ...::format(...) | semmle.label | ...::format(...) | @@ -386,25 +325,20 @@ nodes | test_logging.rs:99:22:99:45 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:99:22:99:45 | { ... } | semmle.label | { ... } | | test_logging.rs:99:38:99:45 | password | semmle.label | password | -| test_logging.rs:100:5:100:9 | ...::log | semmle.label | ...::log | | test_logging.rs:100:11:100:18 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:118:5:118:10 | ...::log | semmle.label | ...::log | | test_logging.rs:118:12:118:41 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:118:28:118:41 | get_password(...) | semmle.label | get_password(...) | | test_logging.rs:129:9:129:10 | t1 [tuple.1] | semmle.label | t1 [tuple.1] | | test_logging.rs:129:14:129:33 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] | | test_logging.rs:129:25:129:32 | password | semmle.label | password | -| test_logging.rs:131:5:131:10 | ...::log | semmle.label | ...::log | | test_logging.rs:131:12:131:31 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:131:28:131:29 | t1 [tuple.1] | semmle.label | t1 [tuple.1] | | test_logging.rs:131:28:131:31 | t1.1 | semmle.label | t1.1 | -| test_logging.rs:141:5:141:9 | ...::log | semmle.label | ...::log | | test_logging.rs:141:11:141:37 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:141:27:141:37 | s1.password | semmle.label | s1.password | -| test_logging.rs:151:5:151:9 | ...::log | semmle.label | ...::log | | test_logging.rs:151:11:151:37 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:151:27:151:37 | s2.password | semmle.label | s2.password | -| test_logging.rs:176:22:176:31 | log_expect | semmle.label | log_expect | +| test_logging.rs:176:33:176:79 | &... | semmle.label | &... | | test_logging.rs:176:33:176:79 | &... | semmle.label | &... | | test_logging.rs:176:33:176:79 | &... [&ref] | semmle.label | &... [&ref] | | test_logging.rs:176:34:176:79 | MacroExpr | semmle.label | MacroExpr | @@ -413,7 +347,7 @@ nodes | test_logging.rs:176:42:176:78 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:176:42:176:78 | { ... } | semmle.label | { ... } | | test_logging.rs:176:70:176:78 | password2 | semmle.label | password2 | -| test_logging.rs:180:24:180:33 | log_expect | semmle.label | log_expect | +| test_logging.rs:180:35:180:81 | &... | semmle.label | &... | | test_logging.rs:180:35:180:81 | &... | semmle.label | &... | | test_logging.rs:180:35:180:81 | &... [&ref] | semmle.label | &... [&ref] | | test_logging.rs:180:36:180:81 | MacroExpr | semmle.label | MacroExpr | @@ -426,93 +360,81 @@ nodes | test_logging.rs:183:47:183:68 | Err(...) [Err] | semmle.label | Err(...) [Err] | | test_logging.rs:183:51:183:59 | password2 | semmle.label | password2 | | test_logging.rs:183:51:183:67 | password2.clone() | semmle.label | password2.clone() | -| test_logging.rs:184:13:184:23 | err_result2 [Err] | semmle.label | err_result2 [Err] | -| test_logging.rs:184:25:184:34 | log_expect | semmle.label | log_expect | +| test_logging.rs:184:13:184:23 | err_result2 | semmle.label | err_result2 | | test_logging.rs:187:9:187:19 | err_result3 [Err] | semmle.label | err_result3 [Err] | | test_logging.rs:187:47:187:60 | Err(...) [Err] | semmle.label | Err(...) [Err] | | test_logging.rs:187:51:187:59 | password2 | semmle.label | password2 | -| test_logging.rs:188:13:188:23 | err_result3 [Err] | semmle.label | err_result3 [Err] | -| test_logging.rs:188:25:188:34 | log_unwrap | semmle.label | log_unwrap | -| test_logging.rs:192:5:192:10 | ...::_print | semmle.label | ...::_print | +| test_logging.rs:188:13:188:23 | err_result3 | semmle.label | err_result3 | | test_logging.rs:192:12:192:37 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:192:30:192:37 | password | semmle.label | password | -| test_logging.rs:193:5:193:12 | ...::_print | semmle.label | ...::_print | | test_logging.rs:193:14:193:37 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:193:30:193:37 | password | semmle.label | password | -| test_logging.rs:194:5:194:11 | ...::_eprint | semmle.label | ...::_eprint | | test_logging.rs:194:13:194:38 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:194:31:194:38 | password | semmle.label | password | -| test_logging.rs:195:5:195:13 | ...::_eprint | semmle.label | ...::_eprint | | test_logging.rs:195:15:195:38 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:195:31:195:38 | password | semmle.label | password | -| test_logging.rs:199:13:199:18 | ...::panic_fmt | semmle.label | ...::panic_fmt | | test_logging.rs:199:20:199:43 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:199:36:199:43 | password | semmle.label | password | -| test_logging.rs:202:13:202:17 | ...::panic_fmt | semmle.label | ...::panic_fmt | | test_logging.rs:202:19:202:42 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:202:35:202:42 | password | semmle.label | password | -| test_logging.rs:205:13:205:26 | ...::panic_fmt | semmle.label | ...::panic_fmt | | test_logging.rs:205:28:205:51 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:205:44:205:51 | password | semmle.label | password | -| test_logging.rs:208:13:208:24 | ...::panic_fmt | semmle.label | ...::panic_fmt | | test_logging.rs:208:26:208:49 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:208:42:208:49 | password | semmle.label | password | -| test_logging.rs:211:13:211:19 | ...::panic_fmt | semmle.label | ...::panic_fmt | | test_logging.rs:211:28:211:51 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:211:44:211:51 | password | semmle.label | password | -| test_logging.rs:214:13:214:22 | ...::assert_failed | semmle.label | ...::assert_failed | +| test_logging.rs:214:30:214:53 | ...::Some(...) | semmle.label | ...::Some(...) | | test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | | test_logging.rs:214:30:214:53 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:214:46:214:53 | password | semmle.label | password | -| test_logging.rs:217:13:217:22 | ...::assert_failed | semmle.label | ...::assert_failed | +| test_logging.rs:217:30:217:53 | ...::Some(...) | semmle.label | ...::Some(...) | | test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | | test_logging.rs:217:30:217:53 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:217:46:217:53 | password | semmle.label | password | -| test_logging.rs:220:13:220:25 | ...::panic_fmt | semmle.label | ...::panic_fmt | | test_logging.rs:220:34:220:57 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:220:50:220:57 | password | semmle.label | password | -| test_logging.rs:223:13:223:28 | ...::assert_failed | semmle.label | ...::assert_failed | +| test_logging.rs:223:36:223:59 | ...::Some(...) | semmle.label | ...::Some(...) | | test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | | test_logging.rs:223:36:223:59 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:223:52:223:59 | password | semmle.label | password | -| test_logging.rs:226:13:226:28 | ...::assert_failed | semmle.label | ...::assert_failed | +| test_logging.rs:226:36:226:59 | ...::Some(...) | semmle.label | ...::Some(...) | | test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | | test_logging.rs:226:36:226:59 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:226:52:226:59 | password | semmle.label | password | -| test_logging.rs:229:23:229:28 | expect | semmle.label | expect | | test_logging.rs:229:30:229:62 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:229:30:229:71 | ... .as_str() | semmle.label | ... .as_str() | | test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | semmle.label | ... .as_str() [&ref] | | test_logging.rs:229:38:229:61 | ...::format(...) | semmle.label | ...::format(...) | | test_logging.rs:229:38:229:61 | ...::must_use(...) | semmle.label | ...::must_use(...) | | test_logging.rs:229:38:229:61 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:229:38:229:61 | { ... } | semmle.label | { ... } | | test_logging.rs:229:54:229:61 | password | semmle.label | password | -| test_logging.rs:242:10:242:14 | write | semmle.label | write | | test_logging.rs:242:16:242:50 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:242:16:242:61 | ... .as_bytes() | semmle.label | ... .as_bytes() | | test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref, element] | semmle.label | ... .as_bytes() [&ref, element] | | test_logging.rs:242:24:242:49 | ...::format(...) | semmle.label | ...::format(...) | | test_logging.rs:242:24:242:49 | ...::must_use(...) | semmle.label | ...::must_use(...) | | test_logging.rs:242:24:242:49 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:242:24:242:49 | { ... } | semmle.label | { ... } | | test_logging.rs:242:42:242:49 | password | semmle.label | password | -| test_logging.rs:245:10:245:18 | write_all | semmle.label | write_all | | test_logging.rs:245:20:245:54 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:245:20:245:65 | ... .as_bytes() | semmle.label | ... .as_bytes() | | test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref, element] | semmle.label | ... .as_bytes() [&ref, element] | | test_logging.rs:245:28:245:53 | ...::format(...) | semmle.label | ...::format(...) | | test_logging.rs:245:28:245:53 | ...::must_use(...) | semmle.label | ...::must_use(...) | | test_logging.rs:245:28:245:53 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:245:28:245:53 | { ... } | semmle.label | { ... } | | test_logging.rs:245:46:245:53 | password | semmle.label | password | -| test_logging.rs:248:9:248:13 | write | semmle.label | write | | test_logging.rs:248:15:248:49 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:248:15:248:60 | ... .as_bytes() | semmle.label | ... .as_bytes() | | test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref, element] | semmle.label | ... .as_bytes() [&ref, element] | | test_logging.rs:248:23:248:48 | ...::format(...) | semmle.label | ...::format(...) | | test_logging.rs:248:23:248:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | | test_logging.rs:248:23:248:48 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:248:23:248:48 | { ... } | semmle.label | { ... } | | test_logging.rs:248:41:248:48 | password | semmle.label | password | -| test_logging.rs:251:9:251:13 | write | semmle.label | write | | test_logging.rs:251:15:251:49 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:251:15:251:60 | ... .as_bytes() | semmle.label | ... .as_bytes() | | test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref, element] | semmle.label | ... .as_bytes() [&ref, element] | | test_logging.rs:251:23:251:48 | ...::format(...) | semmle.label | ...::format(...) | | test_logging.rs:251:23:251:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | diff --git a/rust/ql/test/query-tests/security/CWE-312/CleartextStorageDatabase.expected b/rust/ql/test/query-tests/security/CWE-312/CleartextStorageDatabase.expected index 732b422c65f2..c87c61894780 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CleartextStorageDatabase.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CleartextStorageDatabase.expected @@ -1,12 +1,12 @@ #select -| test_storage.rs:100:13:100:23 | ...::query | test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:100:13:100:23 | ...::query | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:71:97:71:114 | get_phone_number(...) | get_phone_number(...) | -| test_storage.rs:115:13:115:25 | ...::raw_sql | test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:115:13:115:25 | ...::raw_sql | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:71:97:71:114 | get_phone_number(...) | get_phone_number(...) | -| test_storage.rs:119:13:119:23 | ...::query | test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:119:13:119:23 | ...::query | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:71:97:71:114 | get_phone_number(...) | get_phone_number(...) | -| test_storage.rs:125:13:125:23 | ...::query | test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:125:13:125:23 | ...::query | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:71:97:71:114 | get_phone_number(...) | get_phone_number(...) | -| test_storage.rs:139:13:139:23 | ...::query | test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:139:13:139:23 | ...::query | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:71:97:71:114 | get_phone_number(...) | get_phone_number(...) | -| test_storage.rs:194:16:194:22 | execute | test_storage.rs:189:100:189:117 | get_phone_number(...) | test_storage.rs:194:16:194:22 | execute | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:189:100:189:117 | get_phone_number(...) | get_phone_number(...) | -| test_storage.rs:196:24:196:32 | query_row | test_storage.rs:190:86:190:103 | get_phone_number(...) | test_storage.rs:196:24:196:32 | query_row | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:190:86:190:103 | get_phone_number(...) | get_phone_number(...) | -| test_storage.rs:204:31:204:37 | prepare | test_storage.rs:190:86:190:103 | get_phone_number(...) | test_storage.rs:204:31:204:37 | prepare | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:190:86:190:103 | get_phone_number(...) | get_phone_number(...) | +| test_storage.rs:100:25:100:46 | insert_query2.as_str() | test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:100:25:100:46 | insert_query2.as_str() | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:71:97:71:114 | get_phone_number(...) | get_phone_number(...) | +| test_storage.rs:115:27:115:48 | insert_query2.as_str() | test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:115:27:115:48 | insert_query2.as_str() | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:71:97:71:114 | get_phone_number(...) | get_phone_number(...) | +| test_storage.rs:119:25:119:46 | insert_query2.as_str() | test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:119:25:119:46 | insert_query2.as_str() | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:71:97:71:114 | get_phone_number(...) | get_phone_number(...) | +| test_storage.rs:125:25:125:46 | insert_query2.as_str() | test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:125:25:125:46 | insert_query2.as_str() | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:71:97:71:114 | get_phone_number(...) | get_phone_number(...) | +| test_storage.rs:139:25:139:46 | insert_query2.as_str() | test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:139:25:139:46 | insert_query2.as_str() | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:71:97:71:114 | get_phone_number(...) | get_phone_number(...) | +| test_storage.rs:194:24:194:40 | &insert_query_bad | test_storage.rs:189:100:189:117 | get_phone_number(...) | test_storage.rs:194:24:194:40 | &insert_query_bad | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:189:100:189:117 | get_phone_number(...) | get_phone_number(...) | +| test_storage.rs:196:34:196:50 | &select_query_bad | test_storage.rs:190:86:190:103 | get_phone_number(...) | test_storage.rs:196:34:196:50 | &select_query_bad | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:190:86:190:103 | get_phone_number(...) | get_phone_number(...) | +| test_storage.rs:204:39:204:55 | &select_query_bad | test_storage.rs:190:86:190:103 | get_phone_number(...) | test_storage.rs:204:39:204:55 | &select_query_bad | This database operation may read or write unencrypted sensitive data from $@. | test_storage.rs:190:86:190:103 | get_phone_number(...) | get_phone_number(...) | edges | test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:100:25:100:37 | insert_query2 | provenance | | | test_storage.rs:71:9:71:21 | insert_query2 | test_storage.rs:115:27:115:39 | insert_query2 | provenance | | @@ -20,15 +20,15 @@ edges | test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:71:96:71:114 | &... | provenance | Config | | test_storage.rs:71:97:71:114 | get_phone_number(...) | test_storage.rs:71:96:71:114 | &... [&ref] | provenance | | | test_storage.rs:100:25:100:37 | insert_query2 | test_storage.rs:100:25:100:46 | insert_query2.as_str() [&ref] | provenance | MaD:8 | -| test_storage.rs:100:25:100:46 | insert_query2.as_str() [&ref] | test_storage.rs:100:13:100:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | +| test_storage.rs:100:25:100:46 | insert_query2.as_str() [&ref] | test_storage.rs:100:25:100:46 | insert_query2.as_str() | provenance | MaD:4 Sink:MaD:4 | | test_storage.rs:115:27:115:39 | insert_query2 | test_storage.rs:115:27:115:48 | insert_query2.as_str() [&ref] | provenance | MaD:8 | -| test_storage.rs:115:27:115:48 | insert_query2.as_str() [&ref] | test_storage.rs:115:13:115:25 | ...::raw_sql | provenance | MaD:5 Sink:MaD:5 | +| test_storage.rs:115:27:115:48 | insert_query2.as_str() [&ref] | test_storage.rs:115:27:115:48 | insert_query2.as_str() | provenance | MaD:5 Sink:MaD:5 | | test_storage.rs:119:25:119:37 | insert_query2 | test_storage.rs:119:25:119:46 | insert_query2.as_str() [&ref] | provenance | MaD:8 | -| test_storage.rs:119:25:119:46 | insert_query2.as_str() [&ref] | test_storage.rs:119:13:119:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | +| test_storage.rs:119:25:119:46 | insert_query2.as_str() [&ref] | test_storage.rs:119:25:119:46 | insert_query2.as_str() | provenance | MaD:4 Sink:MaD:4 | | test_storage.rs:125:25:125:37 | insert_query2 | test_storage.rs:125:25:125:46 | insert_query2.as_str() [&ref] | provenance | MaD:8 | -| test_storage.rs:125:25:125:46 | insert_query2.as_str() [&ref] | test_storage.rs:125:13:125:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | +| test_storage.rs:125:25:125:46 | insert_query2.as_str() [&ref] | test_storage.rs:125:25:125:46 | insert_query2.as_str() | provenance | MaD:4 Sink:MaD:4 | | test_storage.rs:139:25:139:37 | insert_query2 | test_storage.rs:139:25:139:46 | insert_query2.as_str() [&ref] | provenance | MaD:8 | -| test_storage.rs:139:25:139:46 | insert_query2.as_str() [&ref] | test_storage.rs:139:13:139:23 | ...::query | provenance | MaD:4 Sink:MaD:4 | +| test_storage.rs:139:25:139:46 | insert_query2.as_str() [&ref] | test_storage.rs:139:25:139:46 | insert_query2.as_str() | provenance | MaD:4 Sink:MaD:4 | | test_storage.rs:189:9:189:24 | insert_query_bad | test_storage.rs:194:25:194:40 | insert_query_bad | provenance | | | test_storage.rs:189:28:189:117 | ... + ... | test_storage.rs:189:28:189:124 | ... + ... | provenance | MaD:7 | | test_storage.rs:189:28:189:124 | ... + ... | test_storage.rs:189:9:189:24 | insert_query_bad | provenance | | @@ -43,17 +43,17 @@ edges | test_storage.rs:190:85:190:103 | &... [&ref] | test_storage.rs:190:28:190:103 | ... + ... | provenance | MaD:6 | | test_storage.rs:190:86:190:103 | get_phone_number(...) | test_storage.rs:190:85:190:103 | &... | provenance | Config | | test_storage.rs:190:86:190:103 | get_phone_number(...) | test_storage.rs:190:85:190:103 | &... [&ref] | provenance | | -| test_storage.rs:194:24:194:40 | &insert_query_bad | test_storage.rs:194:16:194:22 | execute | provenance | MaD:1 Sink:MaD:1 | -| test_storage.rs:194:24:194:40 | &insert_query_bad [&ref] | test_storage.rs:194:16:194:22 | execute | provenance | MaD:1 Sink:MaD:1 | +| test_storage.rs:194:24:194:40 | &insert_query_bad | test_storage.rs:194:24:194:40 | &insert_query_bad | provenance | MaD:1 Sink:MaD:1 | +| test_storage.rs:194:24:194:40 | &insert_query_bad [&ref] | test_storage.rs:194:24:194:40 | &insert_query_bad | provenance | MaD:1 Sink:MaD:1 | | test_storage.rs:194:25:194:40 | insert_query_bad | test_storage.rs:194:24:194:40 | &insert_query_bad | provenance | Config | | test_storage.rs:194:25:194:40 | insert_query_bad | test_storage.rs:194:24:194:40 | &insert_query_bad [&ref] | provenance | | -| test_storage.rs:196:34:196:50 | &select_query_bad | test_storage.rs:196:24:196:32 | query_row | provenance | MaD:3 Sink:MaD:3 | -| test_storage.rs:196:34:196:50 | &select_query_bad [&ref] | test_storage.rs:196:24:196:32 | query_row | provenance | MaD:3 Sink:MaD:3 | +| test_storage.rs:196:34:196:50 | &select_query_bad | test_storage.rs:196:34:196:50 | &select_query_bad | provenance | MaD:3 Sink:MaD:3 | +| test_storage.rs:196:34:196:50 | &select_query_bad [&ref] | test_storage.rs:196:34:196:50 | &select_query_bad | provenance | MaD:3 Sink:MaD:3 | | test_storage.rs:196:35:196:50 | select_query_bad | test_storage.rs:196:34:196:50 | &select_query_bad | provenance | Config | | test_storage.rs:196:35:196:50 | select_query_bad | test_storage.rs:196:34:196:50 | &select_query_bad [&ref] | provenance | | | test_storage.rs:196:35:196:50 | select_query_bad | test_storage.rs:204:40:204:55 | select_query_bad | provenance | | -| test_storage.rs:204:39:204:55 | &select_query_bad | test_storage.rs:204:31:204:37 | prepare | provenance | MaD:2 Sink:MaD:2 | -| test_storage.rs:204:39:204:55 | &select_query_bad [&ref] | test_storage.rs:204:31:204:37 | prepare | provenance | MaD:2 Sink:MaD:2 | +| test_storage.rs:204:39:204:55 | &select_query_bad | test_storage.rs:204:39:204:55 | &select_query_bad | provenance | MaD:2 Sink:MaD:2 | +| test_storage.rs:204:39:204:55 | &select_query_bad [&ref] | test_storage.rs:204:39:204:55 | &select_query_bad | provenance | MaD:2 Sink:MaD:2 | | test_storage.rs:204:40:204:55 | select_query_bad | test_storage.rs:204:39:204:55 | &select_query_bad | provenance | Config | | test_storage.rs:204:40:204:55 | select_query_bad | test_storage.rs:204:39:204:55 | &select_query_bad [&ref] | provenance | | models @@ -72,20 +72,20 @@ nodes | test_storage.rs:71:96:71:114 | &... | semmle.label | &... | | test_storage.rs:71:96:71:114 | &... [&ref] | semmle.label | &... [&ref] | | test_storage.rs:71:97:71:114 | get_phone_number(...) | semmle.label | get_phone_number(...) | -| test_storage.rs:100:13:100:23 | ...::query | semmle.label | ...::query | | test_storage.rs:100:25:100:37 | insert_query2 | semmle.label | insert_query2 | +| test_storage.rs:100:25:100:46 | insert_query2.as_str() | semmle.label | insert_query2.as_str() | | test_storage.rs:100:25:100:46 | insert_query2.as_str() [&ref] | semmle.label | insert_query2.as_str() [&ref] | -| test_storage.rs:115:13:115:25 | ...::raw_sql | semmle.label | ...::raw_sql | | test_storage.rs:115:27:115:39 | insert_query2 | semmle.label | insert_query2 | +| test_storage.rs:115:27:115:48 | insert_query2.as_str() | semmle.label | insert_query2.as_str() | | test_storage.rs:115:27:115:48 | insert_query2.as_str() [&ref] | semmle.label | insert_query2.as_str() [&ref] | -| test_storage.rs:119:13:119:23 | ...::query | semmle.label | ...::query | | test_storage.rs:119:25:119:37 | insert_query2 | semmle.label | insert_query2 | +| test_storage.rs:119:25:119:46 | insert_query2.as_str() | semmle.label | insert_query2.as_str() | | test_storage.rs:119:25:119:46 | insert_query2.as_str() [&ref] | semmle.label | insert_query2.as_str() [&ref] | -| test_storage.rs:125:13:125:23 | ...::query | semmle.label | ...::query | | test_storage.rs:125:25:125:37 | insert_query2 | semmle.label | insert_query2 | +| test_storage.rs:125:25:125:46 | insert_query2.as_str() | semmle.label | insert_query2.as_str() | | test_storage.rs:125:25:125:46 | insert_query2.as_str() [&ref] | semmle.label | insert_query2.as_str() [&ref] | -| test_storage.rs:139:13:139:23 | ...::query | semmle.label | ...::query | | test_storage.rs:139:25:139:37 | insert_query2 | semmle.label | insert_query2 | +| test_storage.rs:139:25:139:46 | insert_query2.as_str() | semmle.label | insert_query2.as_str() | | test_storage.rs:139:25:139:46 | insert_query2.as_str() [&ref] | semmle.label | insert_query2.as_str() [&ref] | | test_storage.rs:189:9:189:24 | insert_query_bad | semmle.label | insert_query_bad | | test_storage.rs:189:28:189:117 | ... + ... | semmle.label | ... + ... | @@ -99,15 +99,15 @@ nodes | test_storage.rs:190:85:190:103 | &... | semmle.label | &... | | test_storage.rs:190:85:190:103 | &... [&ref] | semmle.label | &... [&ref] | | test_storage.rs:190:86:190:103 | get_phone_number(...) | semmle.label | get_phone_number(...) | -| test_storage.rs:194:16:194:22 | execute | semmle.label | execute | +| test_storage.rs:194:24:194:40 | &insert_query_bad | semmle.label | &insert_query_bad | | test_storage.rs:194:24:194:40 | &insert_query_bad | semmle.label | &insert_query_bad | | test_storage.rs:194:24:194:40 | &insert_query_bad [&ref] | semmle.label | &insert_query_bad [&ref] | | test_storage.rs:194:25:194:40 | insert_query_bad | semmle.label | insert_query_bad | -| test_storage.rs:196:24:196:32 | query_row | semmle.label | query_row | +| test_storage.rs:196:34:196:50 | &select_query_bad | semmle.label | &select_query_bad | | test_storage.rs:196:34:196:50 | &select_query_bad | semmle.label | &select_query_bad | | test_storage.rs:196:34:196:50 | &select_query_bad [&ref] | semmle.label | &select_query_bad [&ref] | | test_storage.rs:196:35:196:50 | select_query_bad | semmle.label | select_query_bad | -| test_storage.rs:204:31:204:37 | prepare | semmle.label | prepare | +| test_storage.rs:204:39:204:55 | &select_query_bad | semmle.label | &select_query_bad | | test_storage.rs:204:39:204:55 | &select_query_bad | semmle.label | &select_query_bad | | test_storage.rs:204:39:204:55 | &select_query_bad [&ref] | semmle.label | &select_query_bad [&ref] | | test_storage.rs:204:40:204:55 | select_query_bad | semmle.label | select_query_bad | diff --git a/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected b/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected index 25890c769856..bfaad26fedf4 100644 --- a/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected +++ b/rust/ql/test/query-tests/security/CWE-319/UseOfHttp.expected @@ -1,15 +1,15 @@ #select -| main.rs:12:22:12:43 | ...::get | main.rs:12:45:12:68 | "http://example.com/api" | main.rs:12:22:12:43 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:12:45:12:68 | "http://example.com/api" | this HTTP URL | -| main.rs:13:22:13:43 | ...::get | main.rs:13:45:13:68 | "HTTP://EXAMPLE.COM/API" | main.rs:13:22:13:43 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:13:45:13:68 | "HTTP://EXAMPLE.COM/API" | this HTTP URL | -| main.rs:14:22:14:43 | ...::get | main.rs:14:45:14:73 | "http://api.example.com/data" | main.rs:14:22:14:43 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:14:45:14:73 | "http://api.example.com/data" | this HTTP URL | -| main.rs:26:21:26:42 | ...::get | main.rs:23:20:23:39 | "http://example.com" | main.rs:26:21:26:42 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:23:20:23:39 | "http://example.com" | this HTTP URL | -| main.rs:37:30:37:51 | ...::get | main.rs:34:20:34:28 | "http://" | main.rs:37:30:37:51 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:34:20:34:28 | "http://" | this HTTP URL | -| main.rs:60:20:60:41 | ...::get | main.rs:60:43:60:65 | "http://172.32.0.0/baz" | main.rs:60:20:60:41 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:60:43:60:65 | "http://172.32.0.0/baz" | this HTTP URL | -| main.rs:71:24:71:45 | ...::get | main.rs:68:19:68:53 | "http://example.com/sensitive-... | main.rs:71:24:71:45 | ...::get | This URL may be constructed with the HTTP protocol, from $@. | main.rs:68:19:68:53 | "http://example.com/sensitive-... | this HTTP URL | +| main.rs:12:45:12:68 | "http://example.com/api" | main.rs:12:45:12:68 | "http://example.com/api" | main.rs:12:45:12:68 | "http://example.com/api" | This URL may be constructed with the HTTP protocol, from $@. | main.rs:12:45:12:68 | "http://example.com/api" | this HTTP URL | +| main.rs:13:45:13:68 | "HTTP://EXAMPLE.COM/API" | main.rs:13:45:13:68 | "HTTP://EXAMPLE.COM/API" | main.rs:13:45:13:68 | "HTTP://EXAMPLE.COM/API" | This URL may be constructed with the HTTP protocol, from $@. | main.rs:13:45:13:68 | "HTTP://EXAMPLE.COM/API" | this HTTP URL | +| main.rs:14:45:14:73 | "http://api.example.com/data" | main.rs:14:45:14:73 | "http://api.example.com/data" | main.rs:14:45:14:73 | "http://api.example.com/data" | This URL may be constructed with the HTTP protocol, from $@. | main.rs:14:45:14:73 | "http://api.example.com/data" | this HTTP URL | +| main.rs:26:44:26:52 | &full_url | main.rs:23:20:23:39 | "http://example.com" | main.rs:26:44:26:52 | &full_url | This URL may be constructed with the HTTP protocol, from $@. | main.rs:23:20:23:39 | "http://example.com" | this HTTP URL | +| main.rs:37:53:37:65 | &insecure_url | main.rs:34:20:34:28 | "http://" | main.rs:37:53:37:65 | &insecure_url | This URL may be constructed with the HTTP protocol, from $@. | main.rs:34:20:34:28 | "http://" | this HTTP URL | +| main.rs:60:43:60:65 | "http://172.32.0.0/baz" | main.rs:60:43:60:65 | "http://172.32.0.0/baz" | main.rs:60:43:60:65 | "http://172.32.0.0/baz" | This URL may be constructed with the HTTP protocol, from $@. | main.rs:60:43:60:65 | "http://172.32.0.0/baz" | this HTTP URL | +| main.rs:71:47:71:49 | url | main.rs:68:19:68:53 | "http://example.com/sensitive-... | main.rs:71:47:71:49 | url | This URL may be constructed with the HTTP protocol, from $@. | main.rs:68:19:68:53 | "http://example.com/sensitive-... | this HTTP URL | edges -| main.rs:12:45:12:68 | "http://example.com/api" | main.rs:12:22:12:43 | ...::get | provenance | MaD:1 Sink:MaD:1 | -| main.rs:13:45:13:68 | "HTTP://EXAMPLE.COM/API" | main.rs:13:22:13:43 | ...::get | provenance | MaD:1 Sink:MaD:1 | -| main.rs:14:45:14:73 | "http://api.example.com/data" | main.rs:14:22:14:43 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| main.rs:12:45:12:68 | "http://example.com/api" | main.rs:12:45:12:68 | "http://example.com/api" | provenance | MaD:1 Sink:MaD:1 | +| main.rs:13:45:13:68 | "HTTP://EXAMPLE.COM/API" | main.rs:13:45:13:68 | "HTTP://EXAMPLE.COM/API" | provenance | MaD:1 Sink:MaD:1 | +| main.rs:14:45:14:73 | "http://api.example.com/data" | main.rs:14:45:14:73 | "http://api.example.com/data" | provenance | MaD:1 Sink:MaD:1 | | main.rs:23:9:23:16 | base_url | main.rs:25:28:25:53 | MacroExpr | provenance | | | main.rs:23:20:23:39 | "http://example.com" | main.rs:23:9:23:16 | base_url | provenance | | | main.rs:25:9:25:16 | full_url | main.rs:26:45:26:52 | full_url | provenance | | @@ -17,7 +17,7 @@ edges | main.rs:25:28:25:53 | ...::must_use(...) | main.rs:25:9:25:16 | full_url | provenance | | | main.rs:25:28:25:53 | MacroExpr | main.rs:25:28:25:53 | ...::format(...) | provenance | MaD:2 | | main.rs:25:28:25:53 | { ... } | main.rs:25:28:25:53 | ...::must_use(...) | provenance | MaD:3 | -| main.rs:26:44:26:52 | &full_url [&ref] | main.rs:26:21:26:42 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| main.rs:26:44:26:52 | &full_url [&ref] | main.rs:26:44:26:52 | &full_url | provenance | MaD:1 Sink:MaD:1 | | main.rs:26:45:26:52 | full_url | main.rs:26:44:26:52 | &full_url [&ref] | provenance | | | main.rs:34:9:34:16 | protocol | main.rs:36:32:36:53 | MacroExpr | provenance | | | main.rs:34:20:34:28 | "http://" | main.rs:34:9:34:16 | protocol | provenance | | @@ -26,22 +26,21 @@ edges | main.rs:36:32:36:53 | ...::must_use(...) | main.rs:36:9:36:20 | insecure_url | provenance | | | main.rs:36:32:36:53 | MacroExpr | main.rs:36:32:36:53 | ...::format(...) | provenance | MaD:2 | | main.rs:36:32:36:53 | { ... } | main.rs:36:32:36:53 | ...::must_use(...) | provenance | MaD:3 | -| main.rs:37:53:37:65 | &insecure_url [&ref] | main.rs:37:30:37:51 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| main.rs:37:53:37:65 | &insecure_url [&ref] | main.rs:37:53:37:65 | &insecure_url | provenance | MaD:1 Sink:MaD:1 | | main.rs:37:54:37:65 | insecure_url | main.rs:37:53:37:65 | &insecure_url [&ref] | provenance | | -| main.rs:60:43:60:65 | "http://172.32.0.0/baz" | main.rs:60:20:60:41 | ...::get | provenance | MaD:1 Sink:MaD:1 | -| main.rs:68:13:68:15 | url | main.rs:71:47:71:49 | url | provenance | | +| main.rs:60:43:60:65 | "http://172.32.0.0/baz" | main.rs:60:43:60:65 | "http://172.32.0.0/baz" | provenance | MaD:1 Sink:MaD:1 | +| main.rs:68:13:68:15 | url | main.rs:71:47:71:49 | url | provenance | MaD:1 Sink:MaD:1 | | main.rs:68:19:68:53 | "http://example.com/sensitive-... | main.rs:68:13:68:15 | url | provenance | | -| main.rs:71:47:71:49 | url | main.rs:71:24:71:45 | ...::get | provenance | MaD:1 Sink:MaD:1 | models | 1 | Sink: reqwest::blocking::get; Argument[0]; request-url | | 2 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | | 3 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | nodes -| main.rs:12:22:12:43 | ...::get | semmle.label | ...::get | | main.rs:12:45:12:68 | "http://example.com/api" | semmle.label | "http://example.com/api" | -| main.rs:13:22:13:43 | ...::get | semmle.label | ...::get | +| main.rs:12:45:12:68 | "http://example.com/api" | semmle.label | "http://example.com/api" | +| main.rs:13:45:13:68 | "HTTP://EXAMPLE.COM/API" | semmle.label | "HTTP://EXAMPLE.COM/API" | | main.rs:13:45:13:68 | "HTTP://EXAMPLE.COM/API" | semmle.label | "HTTP://EXAMPLE.COM/API" | -| main.rs:14:22:14:43 | ...::get | semmle.label | ...::get | +| main.rs:14:45:14:73 | "http://api.example.com/data" | semmle.label | "http://api.example.com/data" | | main.rs:14:45:14:73 | "http://api.example.com/data" | semmle.label | "http://api.example.com/data" | | main.rs:23:9:23:16 | base_url | semmle.label | base_url | | main.rs:23:20:23:39 | "http://example.com" | semmle.label | "http://example.com" | @@ -50,7 +49,7 @@ nodes | main.rs:25:28:25:53 | ...::must_use(...) | semmle.label | ...::must_use(...) | | main.rs:25:28:25:53 | MacroExpr | semmle.label | MacroExpr | | main.rs:25:28:25:53 | { ... } | semmle.label | { ... } | -| main.rs:26:21:26:42 | ...::get | semmle.label | ...::get | +| main.rs:26:44:26:52 | &full_url | semmle.label | &full_url | | main.rs:26:44:26:52 | &full_url [&ref] | semmle.label | &full_url [&ref] | | main.rs:26:45:26:52 | full_url | semmle.label | full_url | | main.rs:34:9:34:16 | protocol | semmle.label | protocol | @@ -60,13 +59,12 @@ nodes | main.rs:36:32:36:53 | ...::must_use(...) | semmle.label | ...::must_use(...) | | main.rs:36:32:36:53 | MacroExpr | semmle.label | MacroExpr | | main.rs:36:32:36:53 | { ... } | semmle.label | { ... } | -| main.rs:37:30:37:51 | ...::get | semmle.label | ...::get | +| main.rs:37:53:37:65 | &insecure_url | semmle.label | &insecure_url | | main.rs:37:53:37:65 | &insecure_url [&ref] | semmle.label | &insecure_url [&ref] | | main.rs:37:54:37:65 | insecure_url | semmle.label | insecure_url | -| main.rs:60:20:60:41 | ...::get | semmle.label | ...::get | +| main.rs:60:43:60:65 | "http://172.32.0.0/baz" | semmle.label | "http://172.32.0.0/baz" | | main.rs:60:43:60:65 | "http://172.32.0.0/baz" | semmle.label | "http://172.32.0.0/baz" | | main.rs:68:13:68:15 | url | semmle.label | url | | main.rs:68:19:68:53 | "http://example.com/sensitive-... | semmle.label | "http://example.com/sensitive-... | -| main.rs:71:24:71:45 | ...::get | semmle.label | ...::get | | main.rs:71:47:71:49 | url | semmle.label | url | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-327/WeakSensitiveDataHashing/CryptographicOperations.expected b/rust/ql/test/query-tests/security/CWE-327/WeakSensitiveDataHashing/CryptographicOperations.expected index a190d85cce9a..e9a73ff6fe43 100644 --- a/rust/ql/test/query-tests/security/CWE-327/WeakSensitiveDataHashing/CryptographicOperations.expected +++ b/rust/ql/test/query-tests/security/CWE-327/WeakSensitiveDataHashing/CryptographicOperations.expected @@ -1,7 +1,7 @@ -| test.rs:19:9:19:34 | ...::compute(...) | HashingAlgorithm MD5 WEAK inputs:1 | -| test.rs:20:9:20:40 | ...::compute(...) | HashingAlgorithm MD5 WEAK inputs:1 | -| test.rs:21:9:21:34 | ...::compute(...) | HashingAlgorithm MD5 WEAK inputs:1 | -| test.rs:22:9:22:44 | ...::compute(...) | HashingAlgorithm MD5 WEAK inputs:1 | +| test.rs:19:26:19:33 | harmless | HashingAlgorithm MD5 WEAK inputs:1 | +| test.rs:20:26:20:39 | credit_card_no | HashingAlgorithm MD5 WEAK inputs:1 | +| test.rs:21:26:21:33 | password | HashingAlgorithm MD5 WEAK inputs:1 | +| test.rs:22:26:22:43 | encrypted_password | HashingAlgorithm MD5 WEAK inputs:1 | | test.rs:67:26:67:40 | ...::new(...) | HashingAlgorithm MD5 WEAK | | test.rs:73:9:73:23 | ...::new(...) | HashingAlgorithm MD5 WEAK | | test.rs:74:9:74:23 | ...::new(...) | HashingAlgorithm MD5 WEAK | @@ -9,4 +9,4 @@ | test.rs:156:26:156:40 | ...::new(...) | HashingAlgorithm MD5 WEAK | | test.rs:176:13:176:24 | ...::new(...) | EncryptionAlgorithm SEED | | test.rs:199:22:199:32 | ...::new(...) | HashingAlgorithm SHA1 WEAK | -| test.rs:211:13:211:35 | ...::compute(...) | HashingAlgorithm MD5 WEAK inputs:1 | +| test.rs:211:30:211:34 | value | HashingAlgorithm MD5 WEAK inputs:1 | diff --git a/rust/ql/test/query-tests/security/CWE-327/WeakSensitiveDataHashing/WeakSensitiveDataHashing.expected b/rust/ql/test/query-tests/security/CWE-327/WeakSensitiveDataHashing/WeakSensitiveDataHashing.expected index 89078b7c4b9d..c18b907388c4 100644 --- a/rust/ql/test/query-tests/security/CWE-327/WeakSensitiveDataHashing/WeakSensitiveDataHashing.expected +++ b/rust/ql/test/query-tests/security/CWE-327/WeakSensitiveDataHashing/WeakSensitiveDataHashing.expected @@ -1,22 +1,20 @@ #select -| test.rs:20:9:20:24 | ...::compute | test.rs:20:26:20:39 | credit_card_no | test.rs:20:9:20:24 | ...::compute | $@ is used in a hashing algorithm (MD5) that is insecure. | test.rs:20:26:20:39 | credit_card_no | Sensitive data (private) | -| test.rs:21:9:21:24 | ...::compute | test.rs:21:26:21:33 | password | test.rs:21:9:21:24 | ...::compute | $@ is used in a hashing algorithm (MD5) that is insecure for password hashing, since it is not a computationally expensive hash function. | test.rs:21:26:21:33 | password | Sensitive data (password) | -| test.rs:211:13:211:28 | ...::compute | test.rs:226:29:226:36 | password | test.rs:211:13:211:28 | ...::compute | $@ is used in a hashing algorithm (MD5) that is insecure for password hashing, since it is not a computationally expensive hash function. | test.rs:226:29:226:36 | password | Sensitive data (password) | +| test.rs:20:26:20:39 | credit_card_no | test.rs:20:26:20:39 | credit_card_no | test.rs:20:26:20:39 | credit_card_no | $@ is used in a hashing algorithm (MD5) that is insecure. | test.rs:20:26:20:39 | credit_card_no | Sensitive data (private) | +| test.rs:21:26:21:33 | password | test.rs:21:26:21:33 | password | test.rs:21:26:21:33 | password | $@ is used in a hashing algorithm (MD5) that is insecure for password hashing, since it is not a computationally expensive hash function. | test.rs:21:26:21:33 | password | Sensitive data (password) | +| test.rs:211:30:211:34 | value | test.rs:226:29:226:36 | password | test.rs:211:30:211:34 | value | $@ is used in a hashing algorithm (MD5) that is insecure for password hashing, since it is not a computationally expensive hash function. | test.rs:226:29:226:36 | password | Sensitive data (password) | edges -| test.rs:20:26:20:39 | credit_card_no | test.rs:20:9:20:24 | ...::compute | provenance | MaD:1 Sink:MaD:1 | -| test.rs:21:26:21:33 | password | test.rs:21:9:21:24 | ...::compute | provenance | MaD:1 Sink:MaD:1 | -| test.rs:210:20:210:30 | ...: ... | test.rs:211:30:211:34 | value | provenance | | -| test.rs:211:30:211:34 | value | test.rs:211:13:211:28 | ...::compute | provenance | MaD:1 Sink:MaD:1 | +| test.rs:20:26:20:39 | credit_card_no | test.rs:20:26:20:39 | credit_card_no | provenance | MaD:1 Sink:MaD:1 | +| test.rs:21:26:21:33 | password | test.rs:21:26:21:33 | password | provenance | MaD:1 Sink:MaD:1 | +| test.rs:210:20:210:30 | ...: ... | test.rs:211:30:211:34 | value | provenance | MaD:1 Sink:MaD:1 | | test.rs:226:29:226:36 | password | test.rs:210:20:210:30 | ...: ... | provenance | | models | 1 | Sink: md5::compute; Argument[0]; hasher-input | nodes -| test.rs:20:9:20:24 | ...::compute | semmle.label | ...::compute | | test.rs:20:26:20:39 | credit_card_no | semmle.label | credit_card_no | -| test.rs:21:9:21:24 | ...::compute | semmle.label | ...::compute | +| test.rs:20:26:20:39 | credit_card_no | semmle.label | credit_card_no | +| test.rs:21:26:21:33 | password | semmle.label | password | | test.rs:21:26:21:33 | password | semmle.label | password | | test.rs:210:20:210:30 | ...: ... | semmle.label | ...: ... | -| test.rs:211:13:211:28 | ...::compute | semmle.label | ...::compute | | test.rs:211:30:211:34 | value | semmle.label | value | | test.rs:226:29:226:36 | password | semmle.label | password | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-614/InsecureCookie.expected b/rust/ql/test/query-tests/security/CWE-614/InsecureCookie.expected index 7decd880f595..656f2fda4619 100644 --- a/rust/ql/test/query-tests/security/CWE-614/InsecureCookie.expected +++ b/rust/ql/test/query-tests/security/CWE-614/InsecureCookie.expected @@ -1,137 +1,135 @@ #select -| main.rs:8:66:8:70 | build | main.rs:8:19:8:50 | ...::build(...) | main.rs:8:66:8:70 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:16:52:16:56 | build | main.rs:16:19:16:31 | ...::build | main.rs:16:52:16:56 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:20:56:20:60 | build | main.rs:20:5:20:36 | ...::build(...) | main.rs:20:56:20:60 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:21:57:21:61 | build | main.rs:21:5:21:36 | ...::build(...) | main.rs:21:57:21:61 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:25:54:25:58 | build | main.rs:25:5:25:36 | ...::build(...) | main.rs:25:54:25:58 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:26:52:26:56 | build | main.rs:26:5:26:36 | ...::build(...) | main.rs:26:52:26:56 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:27:53:27:57 | build | main.rs:27:5:27:36 | ...::build(...) | main.rs:27:53:27:57 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:28:62:28:66 | build | main.rs:28:5:28:36 | ...::build(...) | main.rs:28:62:28:66 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:29:62:29:66 | build | main.rs:29:5:29:36 | ...::build(...) | main.rs:29:62:29:66 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:33:60:33:64 | build | main.rs:33:9:33:40 | ...::build(...) | main.rs:33:60:33:64 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:35:60:35:64 | build | main.rs:35:9:35:40 | ...::build(...) | main.rs:35:60:35:64 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:39:55:39:59 | build | main.rs:39:5:39:39 | ...::new(...) | main.rs:39:55:39:59 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:40:66:40:70 | build | main.rs:40:5:40:50 | ... .expires(...) | main.rs:40:66:40:70 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:41:95:41:99 | build | main.rs:41:5:41:79 | ... .max_age(...) | main.rs:41:95:41:99 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:42:74:42:78 | build | main.rs:42:5:42:58 | ... .domain(...) | main.rs:42:74:42:78 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:43:62:43:66 | build | main.rs:43:5:43:46 | ... .path(...) | main.rs:43:62:43:66 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:44:68:44:72 | build | main.rs:44:5:44:52 | ... .http_only(...) | main.rs:44:68:44:72 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:45:88:45:92 | build | main.rs:45:5:45:72 | ... .same_site(...) | main.rs:45:88:45:92 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:46:64:46:68 | build | main.rs:46:5:46:48 | ... .permanent() | main.rs:46:64:46:68 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:47:62:47:66 | build | main.rs:47:5:47:46 | ... .removal() | main.rs:47:62:47:66 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:48:52:48:57 | finish | main.rs:48:5:48:36 | ...::build(...) | main.rs:48:52:48:57 | finish | Cookie attribute 'Secure' is not set to true. | -| main.rs:49:41:49:45 | build | main.rs:49:5:49:25 | ...::build(...) | main.rs:49:41:49:45 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:50:56:50:60 | build | main.rs:50:5:50:40 | ...::build(...) | main.rs:50:56:50:60 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:53:65:53:69 | build | main.rs:53:5:53:49 | ... .secure(...) | main.rs:53:65:53:69 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:59:9:59:11 | add | main.rs:58:17:58:27 | ...::new | main.rs:59:9:59:11 | add | Cookie attribute 'Secure' is not set to true. | -| main.rs:60:9:60:20 | add_original | main.rs:58:17:58:27 | ...::new | main.rs:60:9:60:20 | add_original | Cookie attribute 'Secure' is not set to true. | -| main.rs:64:9:64:11 | add | main.rs:63:5:63:5 | [SSA] a | main.rs:64:9:64:11 | add | Cookie attribute 'Secure' is not set to true. | -| main.rs:64:9:64:11 | add | main.rs:63:5:63:5 | a | main.rs:64:9:64:11 | add | Cookie attribute 'Secure' is not set to true. | -| main.rs:69:16:69:18 | add | main.rs:68:17:68:29 | ...::named | main.rs:69:16:69:18 | add | Cookie attribute 'Secure' is not set to true. | -| main.rs:70:16:70:27 | add_original | main.rs:63:5:63:5 | [SSA] a | main.rs:70:16:70:27 | add_original | Cookie attribute 'Secure' is not set to true. | -| main.rs:70:16:70:27 | add_original | main.rs:63:5:63:5 | a | main.rs:70:16:70:27 | add_original | Cookie attribute 'Secure' is not set to true. | -| main.rs:72:16:72:18 | add | main.rs:71:5:71:5 | [SSA] b | main.rs:72:16:72:18 | add | Cookie attribute 'Secure' is not set to true. | -| main.rs:72:16:72:18 | add | main.rs:71:5:71:5 | b | main.rs:72:16:72:18 | add | Cookie attribute 'Secure' is not set to true. | -| main.rs:78:17:78:19 | add | main.rs:77:17:77:28 | ...::from | main.rs:78:17:78:19 | add | Cookie attribute 'Secure' is not set to true. | -| main.rs:79:17:79:28 | add_original | main.rs:63:5:63:5 | [SSA] a | main.rs:79:17:79:28 | add_original | Cookie attribute 'Secure' is not set to true. | -| main.rs:79:17:79:28 | add_original | main.rs:63:5:63:5 | a | main.rs:79:17:79:28 | add_original | Cookie attribute 'Secure' is not set to true. | -| main.rs:83:17:83:19 | add | main.rs:77:17:77:28 | ...::from | main.rs:83:17:83:19 | add | Cookie attribute 'Secure' is not set to true. | -| main.rs:88:9:88:11 | add | main.rs:87:17:87:28 | ...::from | main.rs:88:9:88:11 | add | Cookie attribute 'Secure' is not set to true. | -| main.rs:94:9:94:11 | add | main.rs:87:17:87:28 | ...::from | main.rs:94:9:94:11 | add | Cookie attribute 'Secure' is not set to true. | -| main.rs:123:13:123:18 | insert | main.rs:122:13:122:41 | ...::new | main.rs:123:13:123:18 | insert | Cookie attribute 'Secure' is not set to true. | -| main.rs:131:13:131:18 | insert | main.rs:130:13:130:13 | b | main.rs:131:13:131:18 | insert | Cookie attribute 'Secure' is not set to true. | -| main.rs:147:13:147:18 | insert | main.rs:146:13:146:13 | f | main.rs:147:13:147:18 | insert | Cookie attribute 'Secure' is not set to true. | -| main.rs:152:13:152:18 | insert | main.rs:151:13:151:42 | ...::from | main.rs:152:13:152:18 | insert | Cookie attribute 'Secure' is not set to true. | -| main.rs:156:13:156:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:156:13:156:18 | insert | Cookie attribute 'Secure' is not set to true. | -| main.rs:157:13:157:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:157:13:157:18 | insert | Cookie attribute 'Secure' is not set to true. | -| main.rs:158:13:158:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:158:13:158:18 | insert | Cookie attribute 'Secure' is not set to true. | -| main.rs:159:13:159:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:159:13:159:18 | insert | Cookie attribute 'Secure' is not set to true. | -| main.rs:160:13:160:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:160:13:160:18 | insert | Cookie attribute 'Secure' is not set to true. | -| main.rs:161:13:161:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:161:13:161:18 | insert | Cookie attribute 'Secure' is not set to true. | -| main.rs:162:13:162:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:162:13:162:18 | insert | Cookie attribute 'Secure' is not set to true. | -| main.rs:163:13:163:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:163:13:163:18 | insert | Cookie attribute 'Secure' is not set to true. | -| main.rs:164:13:164:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:164:13:164:18 | insert | Cookie attribute 'Secure' is not set to true. | -| main.rs:165:13:165:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:165:13:165:18 | insert | Cookie attribute 'Secure' is not set to true. | -| main.rs:166:13:166:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:166:13:166:18 | insert | Cookie attribute 'Secure' is not set to true. | -| main.rs:167:13:167:18 | insert | main.rs:155:13:155:41 | ...::new | main.rs:167:13:167:18 | insert | Cookie attribute 'Secure' is not set to true. | -| main.rs:173:61:173:65 | build | main.rs:173:22:173:34 | ...::build | main.rs:173:61:173:65 | build | Cookie attribute 'Secure' is not set to true. | -| main.rs:197:55:197:60 | finish | main.rs:197:5:197:39 | ...::build(...) | main.rs:197:55:197:60 | finish | Cookie attribute 'Secure' is not set to true. | -| main.rs:198:65:198:70 | finish | main.rs:198:5:198:39 | ...::build(...) | main.rs:198:65:198:70 | finish | Cookie attribute 'Secure' is not set to true. | -| main.rs:202:9:202:11 | add | main.rs:201:5:201:11 | [SSA] cookie1 | main.rs:202:9:202:11 | add | Cookie attribute 'Secure' is not set to true. | -| main.rs:202:9:202:11 | add | main.rs:201:5:201:11 | cookie1 | main.rs:202:9:202:11 | add | Cookie attribute 'Secure' is not set to true. | -| main.rs:212:41:212:46 | finish | main.rs:212:5:212:22 | ...::build | main.rs:212:41:212:46 | finish | Cookie attribute 'Secure' is not set to true. | -| main.rs:215:9:215:11 | add | main.rs:214:19:214:34 | ...::new | main.rs:215:9:215:11 | add | Cookie attribute 'Secure' is not set to true. | -| main.rs:219:9:219:11 | add | main.rs:218:5:218:11 | [SSA] cookie2 | main.rs:219:9:219:11 | add | Cookie attribute 'Secure' is not set to true. | -| main.rs:219:9:219:11 | add | main.rs:218:5:218:11 | cookie2 | main.rs:219:9:219:11 | add | Cookie attribute 'Secure' is not set to true. | -| main.rs:229:9:229:11 | add | main.rs:228:5:228:11 | [SSA] cookie1 | main.rs:229:9:229:11 | add | Cookie attribute 'Secure' is not set to true. | -| main.rs:229:9:229:11 | add | main.rs:228:5:228:11 | cookie1 | main.rs:229:9:229:11 | add | Cookie attribute 'Secure' is not set to true. | -| main.rs:242:9:242:41 | ...::new | main.rs:241:29:241:62 | ...::new(...) | main.rs:242:9:242:41 | ...::new | Cookie attribute 'Secure' is not set to true. | -| main.rs:245:9:245:41 | ...::new | main.rs:244:30:244:63 | ...::new(...) | main.rs:245:9:245:41 | ...::new | Cookie attribute 'Secure' is not set to true. | -| main.rs:259:59:259:64 | finish | main.rs:259:5:259:43 | ...::build(...) | main.rs:259:59:259:64 | finish | Cookie attribute 'Secure' is not set to true. | -| main.rs:260:69:260:74 | finish | main.rs:260:5:260:43 | ...::build(...) | main.rs:260:69:260:74 | finish | Cookie attribute 'Secure' is not set to true. | -| main.rs:264:9:264:11 | add | main.rs:263:5:263:11 | [SSA] cookie1 | main.rs:264:9:264:11 | add | Cookie attribute 'Secure' is not set to true. | -| main.rs:264:9:264:11 | add | main.rs:263:5:263:11 | cookie1 | main.rs:264:9:264:11 | add | Cookie attribute 'Secure' is not set to true. | -| main.rs:274:45:274:50 | finish | main.rs:274:5:274:26 | ...::build | main.rs:274:45:274:50 | finish | Cookie attribute 'Secure' is not set to true. | -| main.rs:277:9:277:11 | add | main.rs:276:19:276:38 | ...::new | main.rs:277:9:277:11 | add | Cookie attribute 'Secure' is not set to true. | -| main.rs:281:9:281:11 | add | main.rs:280:5:280:11 | [SSA] cookie2 | main.rs:281:9:281:11 | add | Cookie attribute 'Secure' is not set to true. | -| main.rs:281:9:281:11 | add | main.rs:280:5:280:11 | cookie2 | main.rs:281:9:281:11 | add | Cookie attribute 'Secure' is not set to true. | +| main.rs:8:19:8:64 | ... .secure(...) | main.rs:8:19:8:50 | ...::build(...) | main.rs:8:19:8:64 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:16:19:16:50 | ...::build(...) | main.rs:16:19:16:50 | ...::build(...) | main.rs:16:19:16:50 | ...::build(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:20:5:20:54 | ... .secure(...) | main.rs:20:5:20:36 | ...::build(...) | main.rs:20:5:20:54 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:21:5:21:55 | ... .secure(...) | main.rs:21:5:21:36 | ...::build(...) | main.rs:21:5:21:55 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:25:5:25:52 | ... .secure(...) | main.rs:25:5:25:36 | ...::build(...) | main.rs:25:5:25:52 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:26:5:26:50 | ... .secure(...) | main.rs:26:5:26:36 | ...::build(...) | main.rs:26:5:26:50 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:27:5:27:51 | ... .secure(...) | main.rs:27:5:27:36 | ...::build(...) | main.rs:27:5:27:51 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:28:5:28:60 | ... .secure(...) | main.rs:28:5:28:36 | ...::build(...) | main.rs:28:5:28:60 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:29:5:29:60 | ... .secure(...) | main.rs:29:5:29:36 | ...::build(...) | main.rs:29:5:29:60 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:33:9:33:58 | ... .secure(...) | main.rs:33:9:33:40 | ...::build(...) | main.rs:33:9:33:58 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:35:9:35:58 | ... .secure(...) | main.rs:35:9:35:40 | ...::build(...) | main.rs:35:9:35:58 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:39:5:39:53 | ... .secure(...) | main.rs:39:5:39:39 | ...::new(...) | main.rs:39:5:39:53 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:40:5:40:64 | ... .secure(...) | main.rs:40:5:40:50 | ... .expires(...) | main.rs:40:5:40:64 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:41:5:41:93 | ... .secure(...) | main.rs:41:5:41:79 | ... .max_age(...) | main.rs:41:5:41:93 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:42:5:42:72 | ... .secure(...) | main.rs:42:5:42:58 | ... .domain(...) | main.rs:42:5:42:72 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:43:5:43:60 | ... .secure(...) | main.rs:43:5:43:46 | ... .path(...) | main.rs:43:5:43:60 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:44:5:44:66 | ... .secure(...) | main.rs:44:5:44:52 | ... .http_only(...) | main.rs:44:5:44:66 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:45:5:45:86 | ... .secure(...) | main.rs:45:5:45:72 | ... .same_site(...) | main.rs:45:5:45:86 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:46:5:46:62 | ... .secure(...) | main.rs:46:5:46:48 | ... .permanent() | main.rs:46:5:46:62 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:47:5:47:60 | ... .secure(...) | main.rs:47:5:47:46 | ... .removal() | main.rs:47:5:47:60 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:48:5:48:50 | ... .secure(...) | main.rs:48:5:48:36 | ...::build(...) | main.rs:48:5:48:50 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:49:5:49:39 | ... .secure(...) | main.rs:49:5:49:25 | ...::build(...) | main.rs:49:5:49:39 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:50:5:50:54 | ... .secure(...) | main.rs:50:5:50:40 | ...::build(...) | main.rs:50:5:50:54 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:53:5:53:63 | ... .secure(...) | main.rs:53:5:53:49 | ... .secure(...) | main.rs:53:5:53:63 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:59:13:59:21 | a.clone() | main.rs:58:17:58:44 | ...::new(...) | main.rs:59:13:59:21 | a.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:60:22:60:30 | a.clone() | main.rs:58:17:58:44 | ...::new(...) | main.rs:60:22:60:30 | a.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:64:13:64:21 | a.clone() | main.rs:63:5:63:5 | [SSA] a | main.rs:64:13:64:21 | a.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:64:13:64:21 | a.clone() | main.rs:63:5:63:5 | a | main.rs:64:13:64:21 | a.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:69:20:69:28 | b.clone() | main.rs:68:17:68:37 | ...::named(...) | main.rs:69:20:69:28 | b.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:70:29:70:37 | a.clone() | main.rs:63:5:63:5 | [SSA] a | main.rs:70:29:70:37 | a.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:70:29:70:37 | a.clone() | main.rs:63:5:63:5 | a | main.rs:70:29:70:37 | a.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:72:20:72:28 | b.clone() | main.rs:71:5:71:5 | [SSA] b | main.rs:72:20:72:28 | b.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:72:20:72:28 | b.clone() | main.rs:71:5:71:5 | b | main.rs:72:20:72:28 | b.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:78:21:78:29 | c.clone() | main.rs:77:17:77:36 | ...::from(...) | main.rs:78:21:78:29 | c.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:79:30:79:38 | a.clone() | main.rs:63:5:63:5 | [SSA] a | main.rs:79:30:79:38 | a.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:79:30:79:38 | a.clone() | main.rs:63:5:63:5 | a | main.rs:79:30:79:38 | a.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:83:21:83:29 | c.clone() | main.rs:77:17:77:36 | ...::from(...) | main.rs:83:21:83:29 | c.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:88:13:88:21 | d.clone() | main.rs:87:17:87:36 | ...::from(...) | main.rs:88:13:88:21 | d.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:94:13:94:21 | d.clone() | main.rs:87:17:87:36 | ...::from(...) | main.rs:94:13:94:21 | d.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:123:20:123:28 | a.clone() | main.rs:122:13:122:58 | ...::new(...) | main.rs:123:20:123:28 | a.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:131:20:131:28 | c.clone() | main.rs:130:13:130:13 | b | main.rs:131:20:131:28 | c.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:147:20:147:28 | g.clone() | main.rs:146:13:146:13 | f | main.rs:147:20:147:28 | g.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:152:20:152:20 | h | main.rs:151:13:151:61 | ...::from(...) | main.rs:152:20:152:20 | h | Cookie attribute 'Secure' is not set to true. | +| main.rs:156:20:156:46 | ... .set_name(...) | main.rs:155:13:155:58 | ...::new(...) | main.rs:156:20:156:46 | ... .set_name(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:157:20:157:48 | ... .set_value(...) | main.rs:155:13:155:58 | ...::new(...) | main.rs:157:20:157:48 | ... .set_value(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:158:20:158:48 | ... .set_http_only(...) | main.rs:155:13:155:58 | ...::new(...) | main.rs:158:20:158:48 | ... .set_http_only(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:159:20:159:70 | ... .set_same_site(...) | main.rs:155:13:155:58 | ...::new(...) | main.rs:159:20:159:70 | ... .set_same_site(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:160:20:160:46 | ... .set_max_age(...) | main.rs:155:13:155:58 | ...::new(...) | main.rs:160:20:160:46 | ... .set_max_age(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:161:20:161:42 | ... .set_path(...) | main.rs:155:13:155:58 | ...::new(...) | main.rs:161:20:161:42 | ... .set_path(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:162:20:162:41 | ... .unset_path() | main.rs:155:13:155:58 | ...::new(...) | main.rs:162:20:162:41 | ... .unset_path() | Cookie attribute 'Secure' is not set to true. | +| main.rs:163:20:163:54 | ... .set_domain(...) | main.rs:155:13:155:58 | ...::new(...) | main.rs:163:20:163:54 | ... .set_domain(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:164:20:164:43 | ... .unset_domain() | main.rs:155:13:155:58 | ...::new(...) | main.rs:164:20:164:43 | ... .unset_domain() | Cookie attribute 'Secure' is not set to true. | +| main.rs:165:20:165:46 | ... .set_expires(...) | main.rs:155:13:155:58 | ...::new(...) | main.rs:165:20:165:46 | ... .set_expires(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:166:20:166:44 | ... .unset_expires() | main.rs:155:13:155:58 | ...::new(...) | main.rs:166:20:166:44 | ... .unset_expires() | Cookie attribute 'Secure' is not set to true. | +| main.rs:167:20:167:45 | ... .make_permanent() | main.rs:155:13:155:58 | ...::new(...) | main.rs:167:20:167:45 | ... .make_permanent() | Cookie attribute 'Secure' is not set to true. | +| main.rs:173:22:173:59 | ...::build(...) | main.rs:173:22:173:59 | ...::build(...) | main.rs:173:22:173:59 | ...::build(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:197:5:197:53 | ... .secure(...) | main.rs:197:5:197:39 | ...::build(...) | main.rs:197:5:197:53 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:198:5:198:63 | ... .path(...) | main.rs:198:5:198:39 | ...::build(...) | main.rs:198:5:198:63 | ... .path(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:202:13:202:27 | cookie1.clone() | main.rs:201:5:201:11 | [SSA] cookie1 | main.rs:202:13:202:27 | cookie1.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:202:13:202:27 | cookie1.clone() | main.rs:201:5:201:11 | cookie1 | main.rs:202:13:202:27 | cookie1.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:212:5:212:39 | ...::build(...) | main.rs:212:5:212:39 | ...::build(...) | main.rs:212:5:212:39 | ...::build(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:215:13:215:27 | cookie3.clone() | main.rs:214:19:214:51 | ...::new(...) | main.rs:215:13:215:27 | cookie3.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:219:13:219:27 | cookie2.clone() | main.rs:218:5:218:11 | [SSA] cookie2 | main.rs:219:13:219:27 | cookie2.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:219:13:219:27 | cookie2.clone() | main.rs:218:5:218:11 | cookie2 | main.rs:219:13:219:27 | cookie2.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:229:13:229:27 | cookie1.clone() | main.rs:228:5:228:11 | [SSA] cookie1 | main.rs:229:13:229:27 | cookie1.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:229:13:229:27 | cookie1.clone() | main.rs:228:5:228:11 | cookie1 | main.rs:229:13:229:27 | cookie1.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:242:43:242:59 | cookie_config_bad | main.rs:241:29:241:62 | ...::new(...) | main.rs:242:43:242:59 | cookie_config_bad | Cookie attribute 'Secure' is not set to true. | +| main.rs:245:43:245:60 | cookie_config_bad2 | main.rs:244:30:244:63 | ...::new(...) | main.rs:245:43:245:60 | cookie_config_bad2 | Cookie attribute 'Secure' is not set to true. | +| main.rs:259:5:259:57 | ... .secure(...) | main.rs:259:5:259:43 | ...::build(...) | main.rs:259:5:259:57 | ... .secure(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:260:5:260:67 | ... .path(...) | main.rs:260:5:260:43 | ...::build(...) | main.rs:260:5:260:67 | ... .path(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:264:13:264:27 | cookie1.clone() | main.rs:263:5:263:11 | [SSA] cookie1 | main.rs:264:13:264:27 | cookie1.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:264:13:264:27 | cookie1.clone() | main.rs:263:5:263:11 | cookie1 | main.rs:264:13:264:27 | cookie1.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:274:5:274:43 | ...::build(...) | main.rs:274:5:274:43 | ...::build(...) | main.rs:274:5:274:43 | ...::build(...) | Cookie attribute 'Secure' is not set to true. | +| main.rs:277:13:277:27 | cookie3.clone() | main.rs:276:19:276:55 | ...::new(...) | main.rs:277:13:277:27 | cookie3.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:281:13:281:27 | cookie2.clone() | main.rs:280:5:280:11 | [SSA] cookie2 | main.rs:281:13:281:27 | cookie2.clone() | Cookie attribute 'Secure' is not set to true. | +| main.rs:281:13:281:27 | cookie2.clone() | main.rs:280:5:280:11 | cookie2 | main.rs:281:13:281:27 | cookie2.clone() | Cookie attribute 'Secure' is not set to true. | edges | main.rs:8:19:8:50 | ...::build(...) | main.rs:8:19:8:64 | ... .secure(...) | provenance | MaD:35 | -| main.rs:8:19:8:64 | ... .secure(...) | main.rs:8:66:8:70 | build | provenance | MaD:2 Sink:MaD:2 | -| main.rs:16:19:16:31 | ...::build | main.rs:16:19:16:50 | ...::build(...) | provenance | Src:MaD:15 MaD:15 | -| main.rs:16:19:16:50 | ...::build(...) | main.rs:16:52:16:56 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:8:19:8:64 | ... .secure(...) | main.rs:8:19:8:64 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | +| main.rs:16:19:16:50 | ...::build(...) | main.rs:16:19:16:50 | ...::build(...) | provenance | Src:MaD:15 MaD:15 Sink:MaD:2 | | main.rs:20:5:20:36 | ...::build(...) | main.rs:20:5:20:54 | ... .secure(...) | provenance | MaD:35 | -| main.rs:20:5:20:54 | ... .secure(...) | main.rs:20:56:20:60 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:20:5:20:54 | ... .secure(...) | main.rs:20:5:20:54 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:21:5:21:36 | ...::build(...) | main.rs:21:5:21:55 | ... .secure(...) | provenance | MaD:35 | -| main.rs:21:5:21:55 | ... .secure(...) | main.rs:21:57:21:61 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:21:5:21:55 | ... .secure(...) | main.rs:21:5:21:55 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:25:5:25:36 | ...::build(...) | main.rs:25:5:25:52 | ... .secure(...) | provenance | MaD:35 | -| main.rs:25:5:25:52 | ... .secure(...) | main.rs:25:54:25:58 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:25:5:25:52 | ... .secure(...) | main.rs:25:5:25:52 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:26:5:26:36 | ...::build(...) | main.rs:26:5:26:50 | ... .secure(...) | provenance | MaD:35 | -| main.rs:26:5:26:50 | ... .secure(...) | main.rs:26:52:26:56 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:26:5:26:50 | ... .secure(...) | main.rs:26:5:26:50 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:27:5:27:36 | ...::build(...) | main.rs:27:5:27:51 | ... .secure(...) | provenance | MaD:35 | -| main.rs:27:5:27:51 | ... .secure(...) | main.rs:27:53:27:57 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:27:5:27:51 | ... .secure(...) | main.rs:27:5:27:51 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:28:5:28:36 | ...::build(...) | main.rs:28:5:28:60 | ... .secure(...) | provenance | MaD:35 | -| main.rs:28:5:28:60 | ... .secure(...) | main.rs:28:62:28:66 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:28:5:28:60 | ... .secure(...) | main.rs:28:5:28:60 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:29:5:29:36 | ...::build(...) | main.rs:29:5:29:60 | ... .secure(...) | provenance | MaD:35 | -| main.rs:29:5:29:60 | ... .secure(...) | main.rs:29:62:29:66 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:29:5:29:60 | ... .secure(...) | main.rs:29:5:29:60 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:33:9:33:40 | ...::build(...) | main.rs:33:9:33:58 | ... .secure(...) | provenance | MaD:35 | -| main.rs:33:9:33:58 | ... .secure(...) | main.rs:33:60:33:64 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:33:9:33:58 | ... .secure(...) | main.rs:33:9:33:58 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:35:9:35:40 | ...::build(...) | main.rs:35:9:35:58 | ... .secure(...) | provenance | MaD:35 | -| main.rs:35:9:35:58 | ... .secure(...) | main.rs:35:60:35:64 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:35:9:35:58 | ... .secure(...) | main.rs:35:9:35:58 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:39:5:39:39 | ...::new(...) | main.rs:39:5:39:53 | ... .secure(...) | provenance | MaD:35 | -| main.rs:39:5:39:53 | ... .secure(...) | main.rs:39:55:39:59 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:39:5:39:53 | ... .secure(...) | main.rs:39:5:39:53 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:40:5:40:50 | ... .expires(...) | main.rs:40:5:40:64 | ... .secure(...) | provenance | MaD:35 | -| main.rs:40:5:40:64 | ... .secure(...) | main.rs:40:66:40:70 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:40:5:40:64 | ... .secure(...) | main.rs:40:5:40:64 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:41:5:41:79 | ... .max_age(...) | main.rs:41:5:41:93 | ... .secure(...) | provenance | MaD:35 | -| main.rs:41:5:41:93 | ... .secure(...) | main.rs:41:95:41:99 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:41:5:41:93 | ... .secure(...) | main.rs:41:5:41:93 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:42:5:42:58 | ... .domain(...) | main.rs:42:5:42:72 | ... .secure(...) | provenance | MaD:35 | -| main.rs:42:5:42:72 | ... .secure(...) | main.rs:42:74:42:78 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:42:5:42:72 | ... .secure(...) | main.rs:42:5:42:72 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:43:5:43:46 | ... .path(...) | main.rs:43:5:43:60 | ... .secure(...) | provenance | MaD:35 | -| main.rs:43:5:43:60 | ... .secure(...) | main.rs:43:62:43:66 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:43:5:43:60 | ... .secure(...) | main.rs:43:5:43:60 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:44:5:44:52 | ... .http_only(...) | main.rs:44:5:44:66 | ... .secure(...) | provenance | MaD:35 | -| main.rs:44:5:44:66 | ... .secure(...) | main.rs:44:68:44:72 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:44:5:44:66 | ... .secure(...) | main.rs:44:5:44:66 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:45:5:45:72 | ... .same_site(...) | main.rs:45:5:45:86 | ... .secure(...) | provenance | MaD:35 | -| main.rs:45:5:45:86 | ... .secure(...) | main.rs:45:88:45:92 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:45:5:45:86 | ... .secure(...) | main.rs:45:5:45:86 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:46:5:46:48 | ... .permanent() | main.rs:46:5:46:62 | ... .secure(...) | provenance | MaD:35 | -| main.rs:46:5:46:62 | ... .secure(...) | main.rs:46:64:46:68 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:46:5:46:62 | ... .secure(...) | main.rs:46:5:46:62 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:47:5:47:46 | ... .removal() | main.rs:47:5:47:60 | ... .secure(...) | provenance | MaD:35 | -| main.rs:47:5:47:60 | ... .secure(...) | main.rs:47:62:47:66 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:47:5:47:60 | ... .secure(...) | main.rs:47:5:47:60 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:48:5:48:36 | ...::build(...) | main.rs:48:5:48:50 | ... .secure(...) | provenance | MaD:35 | -| main.rs:48:5:48:50 | ... .secure(...) | main.rs:48:52:48:57 | finish | provenance | MaD:3 Sink:MaD:3 | +| main.rs:48:5:48:50 | ... .secure(...) | main.rs:48:5:48:50 | ... .secure(...) | provenance | MaD:3 Sink:MaD:3 | | main.rs:49:5:49:25 | ...::build(...) | main.rs:49:5:49:39 | ... .secure(...) | provenance | MaD:35 | -| main.rs:49:5:49:39 | ... .secure(...) | main.rs:49:41:49:45 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:49:5:49:39 | ... .secure(...) | main.rs:49:5:49:39 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:50:5:50:40 | ...::build(...) | main.rs:50:5:50:54 | ... .secure(...) | provenance | MaD:35 | -| main.rs:50:5:50:54 | ... .secure(...) | main.rs:50:56:50:60 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:50:5:50:54 | ... .secure(...) | main.rs:50:5:50:54 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:53:5:53:49 | ... .secure(...) | main.rs:53:5:53:63 | ... .secure(...) | provenance | MaD:35 | -| main.rs:53:5:53:63 | ... .secure(...) | main.rs:53:65:53:69 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:53:5:53:63 | ... .secure(...) | main.rs:53:5:53:63 | ... .secure(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:58:9:58:13 | mut a | main.rs:59:13:59:13 | a | provenance | | | main.rs:58:9:58:13 | mut a | main.rs:60:22:60:22 | a | provenance | | -| main.rs:58:17:58:27 | ...::new | main.rs:58:17:58:44 | ...::new(...) | provenance | Src:MaD:17 MaD:17 | -| main.rs:58:17:58:44 | ...::new(...) | main.rs:58:9:58:13 | mut a | provenance | | +| main.rs:58:17:58:44 | ...::new(...) | main.rs:58:9:58:13 | mut a | provenance | Src:MaD:17 MaD:17 | | main.rs:59:13:59:13 | a | main.rs:59:13:59:21 | a.clone() | provenance | MaD:18 | -| main.rs:59:13:59:21 | a.clone() | main.rs:59:9:59:11 | add | provenance | MaD:4 Sink:MaD:4 | +| main.rs:59:13:59:21 | a.clone() | main.rs:59:13:59:21 | a.clone() | provenance | MaD:4 Sink:MaD:4 | | main.rs:60:22:60:22 | a | main.rs:60:22:60:30 | a.clone() | provenance | MaD:18 | -| main.rs:60:22:60:30 | a.clone() | main.rs:60:9:60:20 | add_original | provenance | MaD:5 Sink:MaD:5 | +| main.rs:60:22:60:30 | a.clone() | main.rs:60:22:60:30 | a.clone() | provenance | MaD:5 Sink:MaD:5 | | main.rs:63:5:63:5 | [SSA] a | main.rs:64:13:64:13 | a | provenance | | | main.rs:63:5:63:5 | [SSA] a | main.rs:70:29:70:29 | a | provenance | | | main.rs:63:5:63:5 | [SSA] a | main.rs:79:30:79:30 | a | provenance | | @@ -139,64 +137,58 @@ edges | main.rs:63:5:63:5 | a | main.rs:70:29:70:29 | a | provenance | | | main.rs:63:5:63:5 | a | main.rs:79:30:79:30 | a | provenance | | | main.rs:64:13:64:13 | a | main.rs:64:13:64:21 | a.clone() | provenance | MaD:18 | -| main.rs:64:13:64:21 | a.clone() | main.rs:64:9:64:11 | add | provenance | MaD:4 Sink:MaD:4 | +| main.rs:64:13:64:21 | a.clone() | main.rs:64:13:64:21 | a.clone() | provenance | MaD:4 Sink:MaD:4 | | main.rs:68:9:68:13 | mut b | main.rs:69:20:69:20 | b | provenance | | -| main.rs:68:17:68:29 | ...::named | main.rs:68:17:68:37 | ...::named(...) | provenance | Src:MaD:16 MaD:16 | -| main.rs:68:17:68:37 | ...::named(...) | main.rs:68:9:68:13 | mut b | provenance | | +| main.rs:68:17:68:37 | ...::named(...) | main.rs:68:9:68:13 | mut b | provenance | Src:MaD:16 MaD:16 | | main.rs:69:20:69:20 | b | main.rs:69:20:69:28 | b.clone() | provenance | MaD:18 | -| main.rs:69:20:69:28 | b.clone() | main.rs:69:16:69:18 | add | provenance | MaD:8 Sink:MaD:8 | +| main.rs:69:20:69:28 | b.clone() | main.rs:69:20:69:28 | b.clone() | provenance | MaD:8 Sink:MaD:8 | | main.rs:70:29:70:29 | a | main.rs:70:29:70:37 | a.clone() | provenance | MaD:18 | -| main.rs:70:29:70:37 | a.clone() | main.rs:70:16:70:27 | add_original | provenance | MaD:9 Sink:MaD:9 | +| main.rs:70:29:70:37 | a.clone() | main.rs:70:29:70:37 | a.clone() | provenance | MaD:9 Sink:MaD:9 | | main.rs:71:5:71:5 | [SSA] b | main.rs:72:20:72:20 | b | provenance | | | main.rs:71:5:71:5 | b | main.rs:72:20:72:20 | b | provenance | | | main.rs:72:20:72:20 | b | main.rs:72:20:72:28 | b.clone() | provenance | MaD:18 | -| main.rs:72:20:72:28 | b.clone() | main.rs:72:16:72:18 | add | provenance | MaD:8 Sink:MaD:8 | +| main.rs:72:20:72:28 | b.clone() | main.rs:72:20:72:28 | b.clone() | provenance | MaD:8 Sink:MaD:8 | | main.rs:77:9:77:13 | mut c | main.rs:78:21:78:21 | c | provenance | | | main.rs:77:9:77:13 | mut c | main.rs:83:21:83:21 | c | provenance | | -| main.rs:77:17:77:28 | ...::from | main.rs:77:17:77:36 | ...::from(...) | provenance | Src:MaD:14 MaD:14 | -| main.rs:77:17:77:36 | ...::from(...) | main.rs:77:9:77:13 | mut c | provenance | | +| main.rs:77:17:77:36 | ...::from(...) | main.rs:77:9:77:13 | mut c | provenance | Src:MaD:14 MaD:14 | | main.rs:78:21:78:21 | c | main.rs:78:21:78:29 | c.clone() | provenance | MaD:18 | -| main.rs:78:21:78:29 | c.clone() | main.rs:78:17:78:19 | add | provenance | MaD:6 Sink:MaD:6 | +| main.rs:78:21:78:29 | c.clone() | main.rs:78:21:78:29 | c.clone() | provenance | MaD:6 Sink:MaD:6 | | main.rs:79:30:79:30 | a | main.rs:79:30:79:38 | a.clone() | provenance | MaD:18 | -| main.rs:79:30:79:38 | a.clone() | main.rs:79:17:79:28 | add_original | provenance | MaD:7 Sink:MaD:7 | +| main.rs:79:30:79:38 | a.clone() | main.rs:79:30:79:38 | a.clone() | provenance | MaD:7 Sink:MaD:7 | | main.rs:83:21:83:21 | c | main.rs:83:21:83:29 | c.clone() | provenance | MaD:18 | -| main.rs:83:21:83:29 | c.clone() | main.rs:83:17:83:19 | add | provenance | MaD:6 Sink:MaD:6 | +| main.rs:83:21:83:29 | c.clone() | main.rs:83:21:83:29 | c.clone() | provenance | MaD:6 Sink:MaD:6 | | main.rs:87:9:87:13 | mut d | main.rs:88:13:88:13 | d | provenance | | | main.rs:87:9:87:13 | mut d | main.rs:94:13:94:13 | d | provenance | | -| main.rs:87:17:87:28 | ...::from | main.rs:87:17:87:36 | ...::from(...) | provenance | Src:MaD:14 MaD:14 | -| main.rs:87:17:87:36 | ...::from(...) | main.rs:87:9:87:13 | mut d | provenance | | +| main.rs:87:17:87:36 | ...::from(...) | main.rs:87:9:87:13 | mut d | provenance | Src:MaD:14 MaD:14 | | main.rs:88:13:88:13 | d | main.rs:88:13:88:21 | d.clone() | provenance | MaD:18 | -| main.rs:88:13:88:21 | d.clone() | main.rs:88:9:88:11 | add | provenance | MaD:4 Sink:MaD:4 | +| main.rs:88:13:88:21 | d.clone() | main.rs:88:13:88:21 | d.clone() | provenance | MaD:4 Sink:MaD:4 | | main.rs:94:13:94:13 | d | main.rs:94:13:94:21 | d.clone() | provenance | MaD:18 | -| main.rs:94:13:94:21 | d.clone() | main.rs:94:9:94:11 | add | provenance | MaD:4 Sink:MaD:4 | -| main.rs:114:5:114:17 | ...::build | main.rs:114:5:114:36 | ...::build(...) | provenance | Src:MaD:15 MaD:15 | +| main.rs:94:13:94:21 | d.clone() | main.rs:94:13:94:21 | d.clone() | provenance | MaD:4 Sink:MaD:4 | +| main.rs:114:5:114:36 | ...::build(...) | main.rs:114:5:114:36 | ...::build(...) | provenance | Src:MaD:15 MaD:15 | | main.rs:114:5:114:36 | ...::build(...) | main.rs:114:5:114:54 | ... .partitioned(...) | provenance | MaD:33 | -| main.rs:114:5:114:54 | ... .partitioned(...) | main.rs:114:56:114:60 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:114:5:114:54 | ... .partitioned(...) | main.rs:114:5:114:54 | ... .partitioned(...) | provenance | MaD:2 Sink:MaD:2 | | main.rs:122:9:122:9 | a | main.rs:123:20:123:20 | a | provenance | | -| main.rs:122:13:122:41 | ...::new | main.rs:122:13:122:58 | ...::new(...) | provenance | Src:MaD:13 MaD:13 | -| main.rs:122:13:122:58 | ...::new(...) | main.rs:122:9:122:9 | a | provenance | | +| main.rs:122:13:122:58 | ...::new(...) | main.rs:122:9:122:9 | a | provenance | Src:MaD:13 MaD:13 | | main.rs:123:20:123:20 | a | main.rs:123:20:123:28 | a.clone() | provenance | MaD:18 | -| main.rs:123:20:123:28 | a.clone() | main.rs:123:13:123:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:123:20:123:28 | a.clone() | main.rs:123:20:123:28 | a.clone() | provenance | MaD:1 Sink:MaD:1 | | main.rs:130:9:130:9 | c | main.rs:131:20:131:20 | c | provenance | | | main.rs:130:9:130:9 | c | main.rs:134:13:134:13 | c | provenance | | | main.rs:130:13:130:13 | b | main.rs:130:13:130:31 | b.set_secure(...) | provenance | MaD:28 | | main.rs:130:13:130:31 | b.set_secure(...) | main.rs:130:9:130:9 | c | provenance | | | main.rs:131:20:131:20 | c | main.rs:131:20:131:28 | c.clone() | provenance | MaD:18 | -| main.rs:131:20:131:28 | c.clone() | main.rs:131:13:131:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:131:20:131:28 | c.clone() | main.rs:131:20:131:28 | c.clone() | provenance | MaD:1 Sink:MaD:1 | | main.rs:134:9:134:9 | d | main.rs:135:20:135:20 | d | provenance | | | main.rs:134:13:134:13 | c | main.rs:134:13:134:35 | c.set_partitioned(...) | provenance | MaD:25 | | main.rs:134:13:134:35 | c.set_partitioned(...) | main.rs:134:9:134:9 | d | provenance | | | main.rs:135:20:135:20 | d | main.rs:135:20:135:28 | d.clone() | provenance | MaD:18 | -| main.rs:135:20:135:28 | d.clone() | main.rs:135:13:135:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:135:20:135:28 | d.clone() | main.rs:135:20:135:28 | d.clone() | provenance | MaD:1 Sink:MaD:1 | | main.rs:146:9:146:9 | g | main.rs:147:20:147:20 | g | provenance | | | main.rs:146:13:146:13 | f | main.rs:146:13:146:31 | f.set_secure(...) | provenance | MaD:28 | | main.rs:146:13:146:31 | f.set_secure(...) | main.rs:146:9:146:9 | g | provenance | | | main.rs:147:20:147:20 | g | main.rs:147:20:147:28 | g.clone() | provenance | MaD:18 | -| main.rs:147:20:147:28 | g.clone() | main.rs:147:13:147:18 | insert | provenance | MaD:1 Sink:MaD:1 | -| main.rs:151:9:151:9 | h | main.rs:152:20:152:20 | h | provenance | | -| main.rs:151:13:151:42 | ...::from | main.rs:151:13:151:61 | ...::from(...) | provenance | Src:MaD:12 MaD:12 | -| main.rs:151:13:151:61 | ...::from(...) | main.rs:151:9:151:9 | h | provenance | | -| main.rs:152:20:152:20 | h | main.rs:152:13:152:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:147:20:147:28 | g.clone() | main.rs:147:20:147:28 | g.clone() | provenance | MaD:1 Sink:MaD:1 | +| main.rs:151:9:151:9 | h | main.rs:152:20:152:20 | h | provenance | MaD:1 Sink:MaD:1 | +| main.rs:151:13:151:61 | ...::from(...) | main.rs:151:9:151:9 | h | provenance | Src:MaD:12 MaD:12 | | main.rs:155:9:155:9 | i | main.rs:156:20:156:20 | i | provenance | | | main.rs:155:9:155:9 | i | main.rs:157:20:157:20 | i | provenance | | | main.rs:155:9:155:9 | i | main.rs:158:20:158:20 | i | provenance | | @@ -209,100 +201,92 @@ edges | main.rs:155:9:155:9 | i | main.rs:165:20:165:20 | i | provenance | | | main.rs:155:9:155:9 | i | main.rs:166:20:166:20 | i | provenance | | | main.rs:155:9:155:9 | i | main.rs:167:20:167:20 | i | provenance | | -| main.rs:155:13:155:41 | ...::new | main.rs:155:13:155:58 | ...::new(...) | provenance | Src:MaD:13 MaD:13 | -| main.rs:155:13:155:58 | ...::new(...) | main.rs:155:9:155:9 | i | provenance | | +| main.rs:155:13:155:58 | ...::new(...) | main.rs:155:9:155:9 | i | provenance | Src:MaD:13 MaD:13 | | main.rs:156:20:156:20 | i | main.rs:156:20:156:28 | i.clone() | provenance | MaD:18 | | main.rs:156:20:156:28 | i.clone() | main.rs:156:20:156:46 | ... .set_name(...) | provenance | MaD:24 | -| main.rs:156:20:156:46 | ... .set_name(...) | main.rs:156:13:156:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:156:20:156:46 | ... .set_name(...) | main.rs:156:20:156:46 | ... .set_name(...) | provenance | MaD:1 Sink:MaD:1 | | main.rs:157:20:157:20 | i | main.rs:157:20:157:28 | i.clone() | provenance | MaD:18 | | main.rs:157:20:157:28 | i.clone() | main.rs:157:20:157:48 | ... .set_value(...) | provenance | MaD:29 | -| main.rs:157:20:157:48 | ... .set_value(...) | main.rs:157:13:157:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:157:20:157:48 | ... .set_value(...) | main.rs:157:20:157:48 | ... .set_value(...) | provenance | MaD:1 Sink:MaD:1 | | main.rs:158:20:158:20 | i | main.rs:158:20:158:28 | i.clone() | provenance | MaD:18 | | main.rs:158:20:158:28 | i.clone() | main.rs:158:20:158:48 | ... .set_http_only(...) | provenance | MaD:22 | -| main.rs:158:20:158:48 | ... .set_http_only(...) | main.rs:158:13:158:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:158:20:158:48 | ... .set_http_only(...) | main.rs:158:20:158:48 | ... .set_http_only(...) | provenance | MaD:1 Sink:MaD:1 | | main.rs:159:20:159:20 | i | main.rs:159:20:159:28 | i.clone() | provenance | MaD:18 | | main.rs:159:20:159:28 | i.clone() | main.rs:159:20:159:70 | ... .set_same_site(...) | provenance | MaD:27 | -| main.rs:159:20:159:70 | ... .set_same_site(...) | main.rs:159:13:159:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:159:20:159:70 | ... .set_same_site(...) | main.rs:159:20:159:70 | ... .set_same_site(...) | provenance | MaD:1 Sink:MaD:1 | | main.rs:160:20:160:20 | i | main.rs:160:20:160:28 | i.clone() | provenance | MaD:18 | | main.rs:160:20:160:28 | i.clone() | main.rs:160:20:160:46 | ... .set_max_age(...) | provenance | MaD:23 | -| main.rs:160:20:160:46 | ... .set_max_age(...) | main.rs:160:13:160:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:160:20:160:46 | ... .set_max_age(...) | main.rs:160:20:160:46 | ... .set_max_age(...) | provenance | MaD:1 Sink:MaD:1 | | main.rs:161:20:161:20 | i | main.rs:161:20:161:28 | i.clone() | provenance | MaD:18 | | main.rs:161:20:161:28 | i.clone() | main.rs:161:20:161:42 | ... .set_path(...) | provenance | MaD:26 | -| main.rs:161:20:161:42 | ... .set_path(...) | main.rs:161:13:161:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:161:20:161:42 | ... .set_path(...) | main.rs:161:20:161:42 | ... .set_path(...) | provenance | MaD:1 Sink:MaD:1 | | main.rs:162:20:162:20 | i | main.rs:162:20:162:28 | i.clone() | provenance | MaD:18 | | main.rs:162:20:162:28 | i.clone() | main.rs:162:20:162:41 | ... .unset_path() | provenance | MaD:32 | -| main.rs:162:20:162:41 | ... .unset_path() | main.rs:162:13:162:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:162:20:162:41 | ... .unset_path() | main.rs:162:20:162:41 | ... .unset_path() | provenance | MaD:1 Sink:MaD:1 | | main.rs:163:20:163:20 | i | main.rs:163:20:163:28 | i.clone() | provenance | MaD:18 | | main.rs:163:20:163:28 | i.clone() | main.rs:163:20:163:54 | ... .set_domain(...) | provenance | MaD:20 | -| main.rs:163:20:163:54 | ... .set_domain(...) | main.rs:163:13:163:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:163:20:163:54 | ... .set_domain(...) | main.rs:163:20:163:54 | ... .set_domain(...) | provenance | MaD:1 Sink:MaD:1 | | main.rs:164:20:164:20 | i | main.rs:164:20:164:28 | i.clone() | provenance | MaD:18 | | main.rs:164:20:164:28 | i.clone() | main.rs:164:20:164:43 | ... .unset_domain() | provenance | MaD:30 | -| main.rs:164:20:164:43 | ... .unset_domain() | main.rs:164:13:164:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:164:20:164:43 | ... .unset_domain() | main.rs:164:20:164:43 | ... .unset_domain() | provenance | MaD:1 Sink:MaD:1 | | main.rs:165:20:165:20 | i | main.rs:165:20:165:28 | i.clone() | provenance | MaD:18 | | main.rs:165:20:165:28 | i.clone() | main.rs:165:20:165:46 | ... .set_expires(...) | provenance | MaD:21 | -| main.rs:165:20:165:46 | ... .set_expires(...) | main.rs:165:13:165:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:165:20:165:46 | ... .set_expires(...) | main.rs:165:20:165:46 | ... .set_expires(...) | provenance | MaD:1 Sink:MaD:1 | | main.rs:166:20:166:20 | i | main.rs:166:20:166:28 | i.clone() | provenance | MaD:18 | | main.rs:166:20:166:28 | i.clone() | main.rs:166:20:166:44 | ... .unset_expires() | provenance | MaD:31 | -| main.rs:166:20:166:44 | ... .unset_expires() | main.rs:166:13:166:18 | insert | provenance | MaD:1 Sink:MaD:1 | +| main.rs:166:20:166:44 | ... .unset_expires() | main.rs:166:20:166:44 | ... .unset_expires() | provenance | MaD:1 Sink:MaD:1 | | main.rs:167:20:167:20 | i | main.rs:167:20:167:28 | i.clone() | provenance | MaD:18 | | main.rs:167:20:167:28 | i.clone() | main.rs:167:20:167:45 | ... .make_permanent() | provenance | MaD:19 | -| main.rs:167:20:167:45 | ... .make_permanent() | main.rs:167:13:167:18 | insert | provenance | MaD:1 Sink:MaD:1 | -| main.rs:173:22:173:34 | ...::build | main.rs:173:22:173:59 | ...::build(...) | provenance | Src:MaD:15 MaD:15 | -| main.rs:173:22:173:59 | ...::build(...) | main.rs:173:61:173:65 | build | provenance | MaD:2 Sink:MaD:2 | +| main.rs:167:20:167:45 | ... .make_permanent() | main.rs:167:20:167:45 | ... .make_permanent() | provenance | MaD:1 Sink:MaD:1 | +| main.rs:173:22:173:59 | ...::build(...) | main.rs:173:22:173:59 | ...::build(...) | provenance | Src:MaD:15 MaD:15 Sink:MaD:2 | | main.rs:197:5:197:39 | ...::build(...) | main.rs:197:5:197:53 | ... .secure(...) | provenance | MaD:35 | -| main.rs:197:5:197:53 | ... .secure(...) | main.rs:197:55:197:60 | finish | provenance | MaD:3 Sink:MaD:3 | +| main.rs:197:5:197:53 | ... .secure(...) | main.rs:197:5:197:53 | ... .secure(...) | provenance | MaD:3 Sink:MaD:3 | | main.rs:198:5:198:39 | ...::build(...) | main.rs:198:5:198:53 | ... .secure(...) | provenance | MaD:35 | | main.rs:198:5:198:53 | ... .secure(...) | main.rs:198:5:198:63 | ... .path(...) | provenance | MaD:34 | -| main.rs:198:5:198:63 | ... .path(...) | main.rs:198:65:198:70 | finish | provenance | MaD:3 Sink:MaD:3 | +| main.rs:198:5:198:63 | ... .path(...) | main.rs:198:5:198:63 | ... .path(...) | provenance | MaD:3 Sink:MaD:3 | | main.rs:201:5:201:11 | [SSA] cookie1 | main.rs:202:13:202:19 | cookie1 | provenance | | | main.rs:201:5:201:11 | cookie1 | main.rs:202:13:202:19 | cookie1 | provenance | | | main.rs:202:13:202:19 | cookie1 | main.rs:202:13:202:27 | cookie1.clone() | provenance | MaD:18 | -| main.rs:202:13:202:27 | cookie1.clone() | main.rs:202:9:202:11 | add | provenance | MaD:4 Sink:MaD:4 | -| main.rs:212:5:212:22 | ...::build | main.rs:212:5:212:39 | ...::build(...) | provenance | Src:MaD:15 MaD:15 | -| main.rs:212:5:212:39 | ...::build(...) | main.rs:212:41:212:46 | finish | provenance | MaD:3 Sink:MaD:3 | +| main.rs:202:13:202:27 | cookie1.clone() | main.rs:202:13:202:27 | cookie1.clone() | provenance | MaD:4 Sink:MaD:4 | +| main.rs:212:5:212:39 | ...::build(...) | main.rs:212:5:212:39 | ...::build(...) | provenance | Src:MaD:15 MaD:15 Sink:MaD:3 | | main.rs:214:9:214:15 | cookie3 | main.rs:215:13:215:19 | cookie3 | provenance | | -| main.rs:214:19:214:34 | ...::new | main.rs:214:19:214:51 | ...::new(...) | provenance | Src:MaD:17 MaD:17 | -| main.rs:214:19:214:51 | ...::new(...) | main.rs:214:9:214:15 | cookie3 | provenance | | +| main.rs:214:19:214:51 | ...::new(...) | main.rs:214:9:214:15 | cookie3 | provenance | Src:MaD:17 MaD:17 | | main.rs:215:13:215:19 | cookie3 | main.rs:215:13:215:27 | cookie3.clone() | provenance | MaD:18 | -| main.rs:215:13:215:27 | cookie3.clone() | main.rs:215:9:215:11 | add | provenance | MaD:4 Sink:MaD:4 | +| main.rs:215:13:215:27 | cookie3.clone() | main.rs:215:13:215:27 | cookie3.clone() | provenance | MaD:4 Sink:MaD:4 | | main.rs:218:5:218:11 | [SSA] cookie2 | main.rs:219:13:219:19 | cookie2 | provenance | | | main.rs:218:5:218:11 | cookie2 | main.rs:219:13:219:19 | cookie2 | provenance | | | main.rs:219:13:219:19 | cookie2 | main.rs:219:13:219:27 | cookie2.clone() | provenance | MaD:18 | -| main.rs:219:13:219:27 | cookie2.clone() | main.rs:219:9:219:11 | add | provenance | MaD:4 Sink:MaD:4 | +| main.rs:219:13:219:27 | cookie2.clone() | main.rs:219:13:219:27 | cookie2.clone() | provenance | MaD:4 Sink:MaD:4 | | main.rs:228:5:228:11 | [SSA] cookie1 | main.rs:229:13:229:19 | cookie1 | provenance | | | main.rs:228:5:228:11 | cookie1 | main.rs:229:13:229:19 | cookie1 | provenance | | | main.rs:229:13:229:19 | cookie1 | main.rs:229:13:229:27 | cookie1.clone() | provenance | MaD:18 | -| main.rs:229:13:229:27 | cookie1.clone() | main.rs:229:9:229:11 | add | provenance | MaD:11 Sink:MaD:11 | -| main.rs:241:9:241:25 | cookie_config_bad | main.rs:242:43:242:59 | cookie_config_bad | provenance | | +| main.rs:229:13:229:27 | cookie1.clone() | main.rs:229:13:229:27 | cookie1.clone() | provenance | MaD:11 Sink:MaD:11 | +| main.rs:241:9:241:25 | cookie_config_bad | main.rs:242:43:242:59 | cookie_config_bad | provenance | MaD:10 Sink:MaD:10 | | main.rs:241:29:241:62 | ...::new(...) | main.rs:241:29:241:76 | ... .secure(...) | provenance | MaD:38 | | main.rs:241:29:241:76 | ... .secure(...) | main.rs:241:9:241:25 | cookie_config_bad | provenance | | -| main.rs:242:43:242:59 | cookie_config_bad | main.rs:242:9:242:41 | ...::new | provenance | MaD:10 Sink:MaD:10 | -| main.rs:244:9:244:26 | cookie_config_bad2 | main.rs:245:43:245:60 | cookie_config_bad2 | provenance | | +| main.rs:244:9:244:26 | cookie_config_bad2 | main.rs:245:43:245:60 | cookie_config_bad2 | provenance | MaD:10 Sink:MaD:10 | | main.rs:244:30:244:63 | ...::new(...) | main.rs:244:30:244:77 | ... .secure(...) | provenance | MaD:38 | | main.rs:244:30:244:77 | ... .secure(...) | main.rs:244:30:244:90 | ... .name(...) | provenance | MaD:36 | | main.rs:244:30:244:90 | ... .name(...) | main.rs:244:30:244:100 | ... .path(...) | provenance | MaD:37 | | main.rs:244:30:244:100 | ... .path(...) | main.rs:244:9:244:26 | cookie_config_bad2 | provenance | | -| main.rs:245:43:245:60 | cookie_config_bad2 | main.rs:245:9:245:41 | ...::new | provenance | MaD:10 Sink:MaD:10 | | main.rs:259:5:259:43 | ...::build(...) | main.rs:259:5:259:57 | ... .secure(...) | provenance | MaD:35 | -| main.rs:259:5:259:57 | ... .secure(...) | main.rs:259:59:259:64 | finish | provenance | MaD:3 Sink:MaD:3 | +| main.rs:259:5:259:57 | ... .secure(...) | main.rs:259:5:259:57 | ... .secure(...) | provenance | MaD:3 Sink:MaD:3 | | main.rs:260:5:260:43 | ...::build(...) | main.rs:260:5:260:57 | ... .secure(...) | provenance | MaD:35 | | main.rs:260:5:260:57 | ... .secure(...) | main.rs:260:5:260:67 | ... .path(...) | provenance | MaD:34 | -| main.rs:260:5:260:67 | ... .path(...) | main.rs:260:69:260:74 | finish | provenance | MaD:3 Sink:MaD:3 | +| main.rs:260:5:260:67 | ... .path(...) | main.rs:260:5:260:67 | ... .path(...) | provenance | MaD:3 Sink:MaD:3 | | main.rs:263:5:263:11 | [SSA] cookie1 | main.rs:264:13:264:19 | cookie1 | provenance | | | main.rs:263:5:263:11 | cookie1 | main.rs:264:13:264:19 | cookie1 | provenance | | | main.rs:264:13:264:19 | cookie1 | main.rs:264:13:264:27 | cookie1.clone() | provenance | MaD:18 | -| main.rs:264:13:264:27 | cookie1.clone() | main.rs:264:9:264:11 | add | provenance | MaD:4 Sink:MaD:4 | -| main.rs:274:5:274:26 | ...::build | main.rs:274:5:274:43 | ...::build(...) | provenance | Src:MaD:15 MaD:15 | -| main.rs:274:5:274:43 | ...::build(...) | main.rs:274:45:274:50 | finish | provenance | MaD:3 Sink:MaD:3 | +| main.rs:264:13:264:27 | cookie1.clone() | main.rs:264:13:264:27 | cookie1.clone() | provenance | MaD:4 Sink:MaD:4 | +| main.rs:274:5:274:43 | ...::build(...) | main.rs:274:5:274:43 | ...::build(...) | provenance | Src:MaD:15 MaD:15 Sink:MaD:3 | | main.rs:276:9:276:15 | cookie3 | main.rs:277:13:277:19 | cookie3 | provenance | | -| main.rs:276:19:276:38 | ...::new | main.rs:276:19:276:55 | ...::new(...) | provenance | Src:MaD:17 MaD:17 | -| main.rs:276:19:276:55 | ...::new(...) | main.rs:276:9:276:15 | cookie3 | provenance | | +| main.rs:276:19:276:55 | ...::new(...) | main.rs:276:9:276:15 | cookie3 | provenance | Src:MaD:17 MaD:17 | | main.rs:277:13:277:19 | cookie3 | main.rs:277:13:277:27 | cookie3.clone() | provenance | MaD:18 | -| main.rs:277:13:277:27 | cookie3.clone() | main.rs:277:9:277:11 | add | provenance | MaD:4 Sink:MaD:4 | +| main.rs:277:13:277:27 | cookie3.clone() | main.rs:277:13:277:27 | cookie3.clone() | provenance | MaD:4 Sink:MaD:4 | | main.rs:280:5:280:11 | [SSA] cookie2 | main.rs:281:13:281:19 | cookie2 | provenance | | | main.rs:280:5:280:11 | cookie2 | main.rs:281:13:281:19 | cookie2 | provenance | | | main.rs:281:13:281:19 | cookie2 | main.rs:281:13:281:27 | cookie2.clone() | provenance | MaD:18 | -| main.rs:281:13:281:27 | cookie2.clone() | main.rs:281:9:281:11 | add | provenance | MaD:4 Sink:MaD:4 | +| main.rs:281:13:281:27 | cookie2.clone() | main.rs:281:13:281:27 | cookie2.clone() | provenance | MaD:4 Sink:MaD:4 | models | 1 | Sink: ::insert; Argument[0]; cookie-use | | 2 | Sink: ::build; Argument[self]; cookie-use | @@ -345,279 +329,263 @@ models nodes | main.rs:8:19:8:50 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:8:19:8:64 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:8:66:8:70 | build | semmle.label | build | -| main.rs:16:19:16:31 | ...::build | semmle.label | ...::build | +| main.rs:8:19:8:64 | ... .secure(...) | semmle.label | ... .secure(...) | +| main.rs:16:19:16:50 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:16:19:16:50 | ...::build(...) | semmle.label | ...::build(...) | -| main.rs:16:52:16:56 | build | semmle.label | build | | main.rs:20:5:20:36 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:20:5:20:54 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:20:56:20:60 | build | semmle.label | build | +| main.rs:20:5:20:54 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:21:5:21:36 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:21:5:21:55 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:21:57:21:61 | build | semmle.label | build | +| main.rs:21:5:21:55 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:25:5:25:36 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:25:5:25:52 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:25:54:25:58 | build | semmle.label | build | +| main.rs:25:5:25:52 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:26:5:26:36 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:26:5:26:50 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:26:52:26:56 | build | semmle.label | build | +| main.rs:26:5:26:50 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:27:5:27:36 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:27:5:27:51 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:27:53:27:57 | build | semmle.label | build | +| main.rs:27:5:27:51 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:28:5:28:36 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:28:5:28:60 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:28:62:28:66 | build | semmle.label | build | +| main.rs:28:5:28:60 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:29:5:29:36 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:29:5:29:60 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:29:62:29:66 | build | semmle.label | build | +| main.rs:29:5:29:60 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:33:9:33:40 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:33:9:33:58 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:33:60:33:64 | build | semmle.label | build | +| main.rs:33:9:33:58 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:35:9:35:40 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:35:9:35:58 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:35:60:35:64 | build | semmle.label | build | +| main.rs:35:9:35:58 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:39:5:39:39 | ...::new(...) | semmle.label | ...::new(...) | | main.rs:39:5:39:53 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:39:55:39:59 | build | semmle.label | build | +| main.rs:39:5:39:53 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:40:5:40:50 | ... .expires(...) | semmle.label | ... .expires(...) | | main.rs:40:5:40:64 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:40:66:40:70 | build | semmle.label | build | +| main.rs:40:5:40:64 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:41:5:41:79 | ... .max_age(...) | semmle.label | ... .max_age(...) | | main.rs:41:5:41:93 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:41:95:41:99 | build | semmle.label | build | +| main.rs:41:5:41:93 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:42:5:42:58 | ... .domain(...) | semmle.label | ... .domain(...) | | main.rs:42:5:42:72 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:42:74:42:78 | build | semmle.label | build | +| main.rs:42:5:42:72 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:43:5:43:46 | ... .path(...) | semmle.label | ... .path(...) | | main.rs:43:5:43:60 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:43:62:43:66 | build | semmle.label | build | +| main.rs:43:5:43:60 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:44:5:44:52 | ... .http_only(...) | semmle.label | ... .http_only(...) | | main.rs:44:5:44:66 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:44:68:44:72 | build | semmle.label | build | +| main.rs:44:5:44:66 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:45:5:45:72 | ... .same_site(...) | semmle.label | ... .same_site(...) | | main.rs:45:5:45:86 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:45:88:45:92 | build | semmle.label | build | +| main.rs:45:5:45:86 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:46:5:46:48 | ... .permanent() | semmle.label | ... .permanent() | | main.rs:46:5:46:62 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:46:64:46:68 | build | semmle.label | build | +| main.rs:46:5:46:62 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:47:5:47:46 | ... .removal() | semmle.label | ... .removal() | | main.rs:47:5:47:60 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:47:62:47:66 | build | semmle.label | build | +| main.rs:47:5:47:60 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:48:5:48:36 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:48:5:48:50 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:48:52:48:57 | finish | semmle.label | finish | +| main.rs:48:5:48:50 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:49:5:49:25 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:49:5:49:39 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:49:41:49:45 | build | semmle.label | build | +| main.rs:49:5:49:39 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:50:5:50:40 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:50:5:50:54 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:50:56:50:60 | build | semmle.label | build | +| main.rs:50:5:50:54 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:53:5:53:49 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:53:5:53:63 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:53:65:53:69 | build | semmle.label | build | +| main.rs:53:5:53:63 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:58:9:58:13 | mut a | semmle.label | mut a | -| main.rs:58:17:58:27 | ...::new | semmle.label | ...::new | | main.rs:58:17:58:44 | ...::new(...) | semmle.label | ...::new(...) | -| main.rs:59:9:59:11 | add | semmle.label | add | | main.rs:59:13:59:13 | a | semmle.label | a | | main.rs:59:13:59:21 | a.clone() | semmle.label | a.clone() | -| main.rs:60:9:60:20 | add_original | semmle.label | add_original | +| main.rs:59:13:59:21 | a.clone() | semmle.label | a.clone() | | main.rs:60:22:60:22 | a | semmle.label | a | | main.rs:60:22:60:30 | a.clone() | semmle.label | a.clone() | +| main.rs:60:22:60:30 | a.clone() | semmle.label | a.clone() | | main.rs:63:5:63:5 | [SSA] a | semmle.label | [SSA] a | | main.rs:63:5:63:5 | a | semmle.label | a | -| main.rs:64:9:64:11 | add | semmle.label | add | | main.rs:64:13:64:13 | a | semmle.label | a | | main.rs:64:13:64:21 | a.clone() | semmle.label | a.clone() | +| main.rs:64:13:64:21 | a.clone() | semmle.label | a.clone() | | main.rs:68:9:68:13 | mut b | semmle.label | mut b | -| main.rs:68:17:68:29 | ...::named | semmle.label | ...::named | | main.rs:68:17:68:37 | ...::named(...) | semmle.label | ...::named(...) | -| main.rs:69:16:69:18 | add | semmle.label | add | | main.rs:69:20:69:20 | b | semmle.label | b | | main.rs:69:20:69:28 | b.clone() | semmle.label | b.clone() | -| main.rs:70:16:70:27 | add_original | semmle.label | add_original | +| main.rs:69:20:69:28 | b.clone() | semmle.label | b.clone() | | main.rs:70:29:70:29 | a | semmle.label | a | | main.rs:70:29:70:37 | a.clone() | semmle.label | a.clone() | +| main.rs:70:29:70:37 | a.clone() | semmle.label | a.clone() | | main.rs:71:5:71:5 | [SSA] b | semmle.label | [SSA] b | | main.rs:71:5:71:5 | b | semmle.label | b | -| main.rs:72:16:72:18 | add | semmle.label | add | | main.rs:72:20:72:20 | b | semmle.label | b | | main.rs:72:20:72:28 | b.clone() | semmle.label | b.clone() | +| main.rs:72:20:72:28 | b.clone() | semmle.label | b.clone() | | main.rs:77:9:77:13 | mut c | semmle.label | mut c | -| main.rs:77:17:77:28 | ...::from | semmle.label | ...::from | | main.rs:77:17:77:36 | ...::from(...) | semmle.label | ...::from(...) | -| main.rs:78:17:78:19 | add | semmle.label | add | | main.rs:78:21:78:21 | c | semmle.label | c | | main.rs:78:21:78:29 | c.clone() | semmle.label | c.clone() | -| main.rs:79:17:79:28 | add_original | semmle.label | add_original | +| main.rs:78:21:78:29 | c.clone() | semmle.label | c.clone() | | main.rs:79:30:79:30 | a | semmle.label | a | | main.rs:79:30:79:38 | a.clone() | semmle.label | a.clone() | -| main.rs:83:17:83:19 | add | semmle.label | add | +| main.rs:79:30:79:38 | a.clone() | semmle.label | a.clone() | | main.rs:83:21:83:21 | c | semmle.label | c | | main.rs:83:21:83:29 | c.clone() | semmle.label | c.clone() | +| main.rs:83:21:83:29 | c.clone() | semmle.label | c.clone() | | main.rs:87:9:87:13 | mut d | semmle.label | mut d | -| main.rs:87:17:87:28 | ...::from | semmle.label | ...::from | | main.rs:87:17:87:36 | ...::from(...) | semmle.label | ...::from(...) | -| main.rs:88:9:88:11 | add | semmle.label | add | | main.rs:88:13:88:13 | d | semmle.label | d | | main.rs:88:13:88:21 | d.clone() | semmle.label | d.clone() | -| main.rs:94:9:94:11 | add | semmle.label | add | +| main.rs:88:13:88:21 | d.clone() | semmle.label | d.clone() | | main.rs:94:13:94:13 | d | semmle.label | d | | main.rs:94:13:94:21 | d.clone() | semmle.label | d.clone() | -| main.rs:114:5:114:17 | ...::build | semmle.label | ...::build | +| main.rs:94:13:94:21 | d.clone() | semmle.label | d.clone() | +| main.rs:114:5:114:36 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:114:5:114:36 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:114:5:114:54 | ... .partitioned(...) | semmle.label | ... .partitioned(...) | -| main.rs:114:56:114:60 | build | semmle.label | build | +| main.rs:114:5:114:54 | ... .partitioned(...) | semmle.label | ... .partitioned(...) | | main.rs:122:9:122:9 | a | semmle.label | a | -| main.rs:122:13:122:41 | ...::new | semmle.label | ...::new | | main.rs:122:13:122:58 | ...::new(...) | semmle.label | ...::new(...) | -| main.rs:123:13:123:18 | insert | semmle.label | insert | | main.rs:123:20:123:20 | a | semmle.label | a | | main.rs:123:20:123:28 | a.clone() | semmle.label | a.clone() | +| main.rs:123:20:123:28 | a.clone() | semmle.label | a.clone() | | main.rs:130:9:130:9 | c | semmle.label | c | | main.rs:130:13:130:13 | b | semmle.label | b | | main.rs:130:13:130:31 | b.set_secure(...) | semmle.label | b.set_secure(...) | -| main.rs:131:13:131:18 | insert | semmle.label | insert | | main.rs:131:20:131:20 | c | semmle.label | c | | main.rs:131:20:131:28 | c.clone() | semmle.label | c.clone() | +| main.rs:131:20:131:28 | c.clone() | semmle.label | c.clone() | | main.rs:134:9:134:9 | d | semmle.label | d | | main.rs:134:13:134:13 | c | semmle.label | c | | main.rs:134:13:134:35 | c.set_partitioned(...) | semmle.label | c.set_partitioned(...) | -| main.rs:135:13:135:18 | insert | semmle.label | insert | | main.rs:135:20:135:20 | d | semmle.label | d | | main.rs:135:20:135:28 | d.clone() | semmle.label | d.clone() | +| main.rs:135:20:135:28 | d.clone() | semmle.label | d.clone() | | main.rs:146:9:146:9 | g | semmle.label | g | | main.rs:146:13:146:13 | f | semmle.label | f | | main.rs:146:13:146:31 | f.set_secure(...) | semmle.label | f.set_secure(...) | -| main.rs:147:13:147:18 | insert | semmle.label | insert | | main.rs:147:20:147:20 | g | semmle.label | g | | main.rs:147:20:147:28 | g.clone() | semmle.label | g.clone() | +| main.rs:147:20:147:28 | g.clone() | semmle.label | g.clone() | | main.rs:151:9:151:9 | h | semmle.label | h | -| main.rs:151:13:151:42 | ...::from | semmle.label | ...::from | | main.rs:151:13:151:61 | ...::from(...) | semmle.label | ...::from(...) | -| main.rs:152:13:152:18 | insert | semmle.label | insert | | main.rs:152:20:152:20 | h | semmle.label | h | | main.rs:155:9:155:9 | i | semmle.label | i | -| main.rs:155:13:155:41 | ...::new | semmle.label | ...::new | | main.rs:155:13:155:58 | ...::new(...) | semmle.label | ...::new(...) | -| main.rs:156:13:156:18 | insert | semmle.label | insert | | main.rs:156:20:156:20 | i | semmle.label | i | | main.rs:156:20:156:28 | i.clone() | semmle.label | i.clone() | | main.rs:156:20:156:46 | ... .set_name(...) | semmle.label | ... .set_name(...) | -| main.rs:157:13:157:18 | insert | semmle.label | insert | +| main.rs:156:20:156:46 | ... .set_name(...) | semmle.label | ... .set_name(...) | | main.rs:157:20:157:20 | i | semmle.label | i | | main.rs:157:20:157:28 | i.clone() | semmle.label | i.clone() | | main.rs:157:20:157:48 | ... .set_value(...) | semmle.label | ... .set_value(...) | -| main.rs:158:13:158:18 | insert | semmle.label | insert | +| main.rs:157:20:157:48 | ... .set_value(...) | semmle.label | ... .set_value(...) | | main.rs:158:20:158:20 | i | semmle.label | i | | main.rs:158:20:158:28 | i.clone() | semmle.label | i.clone() | | main.rs:158:20:158:48 | ... .set_http_only(...) | semmle.label | ... .set_http_only(...) | -| main.rs:159:13:159:18 | insert | semmle.label | insert | +| main.rs:158:20:158:48 | ... .set_http_only(...) | semmle.label | ... .set_http_only(...) | | main.rs:159:20:159:20 | i | semmle.label | i | | main.rs:159:20:159:28 | i.clone() | semmle.label | i.clone() | | main.rs:159:20:159:70 | ... .set_same_site(...) | semmle.label | ... .set_same_site(...) | -| main.rs:160:13:160:18 | insert | semmle.label | insert | +| main.rs:159:20:159:70 | ... .set_same_site(...) | semmle.label | ... .set_same_site(...) | | main.rs:160:20:160:20 | i | semmle.label | i | | main.rs:160:20:160:28 | i.clone() | semmle.label | i.clone() | | main.rs:160:20:160:46 | ... .set_max_age(...) | semmle.label | ... .set_max_age(...) | -| main.rs:161:13:161:18 | insert | semmle.label | insert | +| main.rs:160:20:160:46 | ... .set_max_age(...) | semmle.label | ... .set_max_age(...) | | main.rs:161:20:161:20 | i | semmle.label | i | | main.rs:161:20:161:28 | i.clone() | semmle.label | i.clone() | | main.rs:161:20:161:42 | ... .set_path(...) | semmle.label | ... .set_path(...) | -| main.rs:162:13:162:18 | insert | semmle.label | insert | +| main.rs:161:20:161:42 | ... .set_path(...) | semmle.label | ... .set_path(...) | | main.rs:162:20:162:20 | i | semmle.label | i | | main.rs:162:20:162:28 | i.clone() | semmle.label | i.clone() | | main.rs:162:20:162:41 | ... .unset_path() | semmle.label | ... .unset_path() | -| main.rs:163:13:163:18 | insert | semmle.label | insert | +| main.rs:162:20:162:41 | ... .unset_path() | semmle.label | ... .unset_path() | | main.rs:163:20:163:20 | i | semmle.label | i | | main.rs:163:20:163:28 | i.clone() | semmle.label | i.clone() | | main.rs:163:20:163:54 | ... .set_domain(...) | semmle.label | ... .set_domain(...) | -| main.rs:164:13:164:18 | insert | semmle.label | insert | +| main.rs:163:20:163:54 | ... .set_domain(...) | semmle.label | ... .set_domain(...) | | main.rs:164:20:164:20 | i | semmle.label | i | | main.rs:164:20:164:28 | i.clone() | semmle.label | i.clone() | | main.rs:164:20:164:43 | ... .unset_domain() | semmle.label | ... .unset_domain() | -| main.rs:165:13:165:18 | insert | semmle.label | insert | +| main.rs:164:20:164:43 | ... .unset_domain() | semmle.label | ... .unset_domain() | | main.rs:165:20:165:20 | i | semmle.label | i | | main.rs:165:20:165:28 | i.clone() | semmle.label | i.clone() | | main.rs:165:20:165:46 | ... .set_expires(...) | semmle.label | ... .set_expires(...) | -| main.rs:166:13:166:18 | insert | semmle.label | insert | +| main.rs:165:20:165:46 | ... .set_expires(...) | semmle.label | ... .set_expires(...) | | main.rs:166:20:166:20 | i | semmle.label | i | | main.rs:166:20:166:28 | i.clone() | semmle.label | i.clone() | | main.rs:166:20:166:44 | ... .unset_expires() | semmle.label | ... .unset_expires() | -| main.rs:167:13:167:18 | insert | semmle.label | insert | +| main.rs:166:20:166:44 | ... .unset_expires() | semmle.label | ... .unset_expires() | | main.rs:167:20:167:20 | i | semmle.label | i | | main.rs:167:20:167:28 | i.clone() | semmle.label | i.clone() | | main.rs:167:20:167:45 | ... .make_permanent() | semmle.label | ... .make_permanent() | -| main.rs:173:22:173:34 | ...::build | semmle.label | ...::build | +| main.rs:167:20:167:45 | ... .make_permanent() | semmle.label | ... .make_permanent() | +| main.rs:173:22:173:59 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:173:22:173:59 | ...::build(...) | semmle.label | ...::build(...) | -| main.rs:173:61:173:65 | build | semmle.label | build | | main.rs:197:5:197:39 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:197:5:197:53 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:197:55:197:60 | finish | semmle.label | finish | +| main.rs:197:5:197:53 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:198:5:198:39 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:198:5:198:53 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:198:5:198:63 | ... .path(...) | semmle.label | ... .path(...) | -| main.rs:198:65:198:70 | finish | semmle.label | finish | +| main.rs:198:5:198:63 | ... .path(...) | semmle.label | ... .path(...) | | main.rs:201:5:201:11 | [SSA] cookie1 | semmle.label | [SSA] cookie1 | | main.rs:201:5:201:11 | cookie1 | semmle.label | cookie1 | -| main.rs:202:9:202:11 | add | semmle.label | add | | main.rs:202:13:202:19 | cookie1 | semmle.label | cookie1 | | main.rs:202:13:202:27 | cookie1.clone() | semmle.label | cookie1.clone() | -| main.rs:212:5:212:22 | ...::build | semmle.label | ...::build | +| main.rs:202:13:202:27 | cookie1.clone() | semmle.label | cookie1.clone() | +| main.rs:212:5:212:39 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:212:5:212:39 | ...::build(...) | semmle.label | ...::build(...) | -| main.rs:212:41:212:46 | finish | semmle.label | finish | | main.rs:214:9:214:15 | cookie3 | semmle.label | cookie3 | -| main.rs:214:19:214:34 | ...::new | semmle.label | ...::new | | main.rs:214:19:214:51 | ...::new(...) | semmle.label | ...::new(...) | -| main.rs:215:9:215:11 | add | semmle.label | add | | main.rs:215:13:215:19 | cookie3 | semmle.label | cookie3 | | main.rs:215:13:215:27 | cookie3.clone() | semmle.label | cookie3.clone() | +| main.rs:215:13:215:27 | cookie3.clone() | semmle.label | cookie3.clone() | | main.rs:218:5:218:11 | [SSA] cookie2 | semmle.label | [SSA] cookie2 | | main.rs:218:5:218:11 | cookie2 | semmle.label | cookie2 | -| main.rs:219:9:219:11 | add | semmle.label | add | | main.rs:219:13:219:19 | cookie2 | semmle.label | cookie2 | | main.rs:219:13:219:27 | cookie2.clone() | semmle.label | cookie2.clone() | +| main.rs:219:13:219:27 | cookie2.clone() | semmle.label | cookie2.clone() | | main.rs:228:5:228:11 | [SSA] cookie1 | semmle.label | [SSA] cookie1 | | main.rs:228:5:228:11 | cookie1 | semmle.label | cookie1 | -| main.rs:229:9:229:11 | add | semmle.label | add | | main.rs:229:13:229:19 | cookie1 | semmle.label | cookie1 | | main.rs:229:13:229:27 | cookie1.clone() | semmle.label | cookie1.clone() | +| main.rs:229:13:229:27 | cookie1.clone() | semmle.label | cookie1.clone() | | main.rs:241:9:241:25 | cookie_config_bad | semmle.label | cookie_config_bad | | main.rs:241:29:241:62 | ...::new(...) | semmle.label | ...::new(...) | | main.rs:241:29:241:76 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:242:9:242:41 | ...::new | semmle.label | ...::new | | main.rs:242:43:242:59 | cookie_config_bad | semmle.label | cookie_config_bad | | main.rs:244:9:244:26 | cookie_config_bad2 | semmle.label | cookie_config_bad2 | | main.rs:244:30:244:63 | ...::new(...) | semmle.label | ...::new(...) | | main.rs:244:30:244:77 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:244:30:244:90 | ... .name(...) | semmle.label | ... .name(...) | | main.rs:244:30:244:100 | ... .path(...) | semmle.label | ... .path(...) | -| main.rs:245:9:245:41 | ...::new | semmle.label | ...::new | | main.rs:245:43:245:60 | cookie_config_bad2 | semmle.label | cookie_config_bad2 | | main.rs:259:5:259:43 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:259:5:259:57 | ... .secure(...) | semmle.label | ... .secure(...) | -| main.rs:259:59:259:64 | finish | semmle.label | finish | +| main.rs:259:5:259:57 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:260:5:260:43 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:260:5:260:57 | ... .secure(...) | semmle.label | ... .secure(...) | | main.rs:260:5:260:67 | ... .path(...) | semmle.label | ... .path(...) | -| main.rs:260:69:260:74 | finish | semmle.label | finish | +| main.rs:260:5:260:67 | ... .path(...) | semmle.label | ... .path(...) | | main.rs:263:5:263:11 | [SSA] cookie1 | semmle.label | [SSA] cookie1 | | main.rs:263:5:263:11 | cookie1 | semmle.label | cookie1 | -| main.rs:264:9:264:11 | add | semmle.label | add | | main.rs:264:13:264:19 | cookie1 | semmle.label | cookie1 | | main.rs:264:13:264:27 | cookie1.clone() | semmle.label | cookie1.clone() | -| main.rs:274:5:274:26 | ...::build | semmle.label | ...::build | +| main.rs:264:13:264:27 | cookie1.clone() | semmle.label | cookie1.clone() | +| main.rs:274:5:274:43 | ...::build(...) | semmle.label | ...::build(...) | | main.rs:274:5:274:43 | ...::build(...) | semmle.label | ...::build(...) | -| main.rs:274:45:274:50 | finish | semmle.label | finish | | main.rs:276:9:276:15 | cookie3 | semmle.label | cookie3 | -| main.rs:276:19:276:38 | ...::new | semmle.label | ...::new | | main.rs:276:19:276:55 | ...::new(...) | semmle.label | ...::new(...) | -| main.rs:277:9:277:11 | add | semmle.label | add | | main.rs:277:13:277:19 | cookie3 | semmle.label | cookie3 | | main.rs:277:13:277:27 | cookie3.clone() | semmle.label | cookie3.clone() | +| main.rs:277:13:277:27 | cookie3.clone() | semmle.label | cookie3.clone() | | main.rs:280:5:280:11 | [SSA] cookie2 | semmle.label | [SSA] cookie2 | | main.rs:280:5:280:11 | cookie2 | semmle.label | cookie2 | -| main.rs:281:9:281:11 | add | semmle.label | add | | main.rs:281:13:281:19 | cookie2 | semmle.label | cookie2 | | main.rs:281:13:281:27 | cookie2.clone() | semmle.label | cookie2.clone() | +| main.rs:281:13:281:27 | cookie2.clone() | semmle.label | cookie2.clone() | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected index 477dbee0e0f4..1173debdc657 100644 --- a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected +++ b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected @@ -1,103 +1,96 @@ #select -| main.rs:18:13:18:31 | ...::realloc | main.rs:339:13:339:26 | ...::args | main.rs:18:13:18:31 | ...::realloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:21:13:21:29 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:21:13:21:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:22:13:22:29 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:22:13:22:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:23:13:23:29 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:23:13:23:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:24:13:24:36 | ...::alloc_zeroed | main.rs:339:13:339:26 | ...::args | main.rs:24:13:24:36 | ...::alloc_zeroed | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:30:13:30:29 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:30:13:30:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:33:13:33:29 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:33:13:33:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:37:13:37:29 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:37:13:37:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:40:13:40:29 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:40:13:40:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:50:13:50:29 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:50:13:50:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:51:13:51:29 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:51:13:51:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:53:13:53:29 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:53:13:53:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:54:13:54:29 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:54:13:54:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:59:13:59:29 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:59:13:59:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:61:13:61:29 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:61:13:61:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:63:13:63:29 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:63:13:63:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:64:13:64:29 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:64:13:64:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:65:13:65:29 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:65:13:65:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:68:13:68:29 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:68:13:68:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:88:13:88:29 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:88:13:88:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:96:17:96:33 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:96:17:96:33 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:102:17:102:33 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:102:17:102:33 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:103:17:103:33 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:103:17:103:33 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:109:17:109:33 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:109:17:109:33 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:111:17:111:33 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:111:17:111:33 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:146:17:146:33 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:146:17:146:33 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:148:17:148:33 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:148:17:148:33 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:152:13:152:29 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:152:13:152:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:155:13:155:29 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:155:13:155:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:162:17:162:33 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:162:17:162:33 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:169:17:169:33 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:169:17:169:33 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:177:13:177:29 | ...::alloc | main.rs:339:13:339:26 | ...::args | main.rs:177:13:177:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:193:32:193:36 | alloc | main.rs:339:13:339:26 | ...::args | main.rs:193:32:193:36 | alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:194:32:194:43 | alloc_zeroed | main.rs:339:13:339:26 | ...::args | main.rs:194:32:194:43 | alloc_zeroed | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:195:32:195:39 | allocate | main.rs:339:13:339:26 | ...::args | main.rs:195:32:195:39 | allocate | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:196:32:196:46 | allocate_zeroed | main.rs:339:13:339:26 | ...::args | main.rs:196:32:196:46 | allocate_zeroed | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:197:32:197:39 | allocate | main.rs:339:13:339:26 | ...::args | main.rs:197:32:197:39 | allocate | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:198:32:198:46 | allocate_zeroed | main.rs:339:13:339:26 | ...::args | main.rs:198:32:198:46 | allocate_zeroed | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:202:32:202:38 | realloc | main.rs:339:13:339:26 | ...::args | main.rs:202:32:202:38 | realloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:208:40:208:43 | grow | main.rs:339:13:339:26 | ...::args | main.rs:208:40:208:43 | grow | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:210:40:210:50 | grow_zeroed | main.rs:339:13:339:26 | ...::args | main.rs:210:40:210:50 | grow_zeroed | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:213:36:213:41 | shrink | main.rs:339:13:339:26 | ...::args | main.rs:213:36:213:41 | shrink | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:219:13:219:24 | ...::malloc | main.rs:339:13:339:26 | ...::args | main.rs:219:13:219:24 | ...::malloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:220:13:220:31 | ...::aligned_alloc | main.rs:339:13:339:26 | ...::args | main.rs:220:13:220:31 | ...::aligned_alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:222:13:222:24 | ...::calloc | main.rs:339:13:339:26 | ...::args | main.rs:222:13:222:24 | ...::calloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:223:13:223:24 | ...::calloc | main.rs:339:13:339:26 | ...::args | main.rs:223:13:223:24 | ...::calloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:224:13:224:25 | ...::realloc | main.rs:339:13:339:26 | ...::args | main.rs:224:13:224:25 | ...::realloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:228:13:228:41 | ...::try_with_capacity | main.rs:339:13:339:26 | ...::args | main.rs:228:13:228:41 | ...::try_with_capacity | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:229:13:229:37 | ...::with_capacity | main.rs:339:13:339:26 | ...::args | main.rs:229:13:229:37 | ...::with_capacity | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:230:13:230:44 | ...::try_with_capacity_in | main.rs:339:13:339:26 | ...::args | main.rs:230:13:230:44 | ...::try_with_capacity_in | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:231:13:231:40 | ...::with_capacity_in | main.rs:339:13:339:26 | ...::args | main.rs:231:13:231:40 | ...::with_capacity_in | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | -| main.rs:287:22:287:38 | ...::alloc | main.rs:311:25:311:38 | ...::args | main.rs:287:22:287:38 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:311:25:311:38 | ...::args | user-provided value | -| main.rs:331:13:331:24 | ...::malloc | main.rs:339:13:339:26 | ...::args | main.rs:331:13:331:24 | ...::malloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:26 | ...::args | user-provided value | +| main.rs:18:41:18:41 | v | main.rs:339:13:339:28 | ...::args(...) | main.rs:18:41:18:41 | v | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:21:31:21:32 | l2 | main.rs:339:13:339:28 | ...::args(...) | main.rs:21:31:21:32 | l2 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:22:31:22:53 | ... .unwrap() | main.rs:339:13:339:28 | ...::args(...) | main.rs:22:31:22:53 | ... .unwrap() | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:23:31:23:68 | ... .pad_to_align() | main.rs:339:13:339:28 | ...::args(...) | main.rs:23:31:23:68 | ... .pad_to_align() | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:24:38:24:39 | l2 | main.rs:339:13:339:28 | ...::args(...) | main.rs:24:38:24:39 | l2 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:30:31:30:32 | l4 | main.rs:339:13:339:28 | ...::args(...) | main.rs:30:31:30:32 | l4 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:33:31:33:32 | l5 | main.rs:339:13:339:28 | ...::args(...) | main.rs:33:31:33:32 | l5 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:37:31:37:32 | l6 | main.rs:339:13:339:28 | ...::args(...) | main.rs:37:31:37:32 | l6 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:40:31:40:32 | l7 | main.rs:339:13:339:28 | ...::args(...) | main.rs:40:31:40:32 | l7 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:50:31:50:53 | ... .0 | main.rs:339:13:339:28 | ...::args(...) | main.rs:50:31:50:53 | ... .0 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:51:31:51:57 | ... .0 | main.rs:339:13:339:28 | ...::args(...) | main.rs:51:31:51:57 | ... .0 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:53:31:53:58 | ... .unwrap() | main.rs:339:13:339:28 | ...::args(...) | main.rs:53:31:53:58 | ... .unwrap() | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:54:31:54:63 | ... .unwrap() | main.rs:339:13:339:28 | ...::args(...) | main.rs:54:31:54:63 | ... .unwrap() | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:59:31:59:32 | k1 | main.rs:339:13:339:28 | ...::args(...) | main.rs:59:31:59:32 | k1 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:61:31:61:32 | k2 | main.rs:339:13:339:28 | ...::args(...) | main.rs:61:31:61:32 | k2 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:63:31:63:32 | k3 | main.rs:339:13:339:28 | ...::args(...) | main.rs:63:31:63:32 | k3 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:64:31:64:59 | ... .unwrap() | main.rs:339:13:339:28 | ...::args(...) | main.rs:64:31:64:59 | ... .unwrap() | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:65:31:65:59 | ... .unwrap() | main.rs:339:13:339:28 | ...::args(...) | main.rs:65:31:65:59 | ... .unwrap() | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:68:31:68:32 | l4 | main.rs:339:13:339:28 | ...::args(...) | main.rs:68:31:68:32 | l4 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:88:31:88:36 | layout | main.rs:339:13:339:28 | ...::args(...) | main.rs:88:31:88:36 | layout | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:96:35:96:36 | l1 | main.rs:339:13:339:28 | ...::args(...) | main.rs:96:35:96:36 | l1 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:102:35:102:36 | l1 | main.rs:339:13:339:28 | ...::args(...) | main.rs:102:35:102:36 | l1 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:103:35:103:36 | l3 | main.rs:339:13:339:28 | ...::args(...) | main.rs:103:35:103:36 | l3 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:109:35:109:36 | l1 | main.rs:339:13:339:28 | ...::args(...) | main.rs:109:35:109:36 | l1 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:111:35:111:36 | l1 | main.rs:339:13:339:28 | ...::args(...) | main.rs:111:35:111:36 | l1 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:146:35:146:36 | l1 | main.rs:339:13:339:28 | ...::args(...) | main.rs:146:35:146:36 | l1 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:148:35:148:36 | l9 | main.rs:339:13:339:28 | ...::args(...) | main.rs:148:35:148:36 | l9 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:152:31:152:33 | l10 | main.rs:339:13:339:28 | ...::args(...) | main.rs:152:31:152:33 | l10 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:155:31:155:33 | l11 | main.rs:339:13:339:28 | ...::args(...) | main.rs:155:31:155:33 | l11 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:162:35:162:37 | l13 | main.rs:339:13:339:28 | ...::args(...) | main.rs:162:35:162:37 | l13 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:169:35:169:37 | l13 | main.rs:339:13:339:28 | ...::args(...) | main.rs:169:35:169:37 | l13 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:177:31:177:32 | l1 | main.rs:339:13:339:28 | ...::args(...) | main.rs:177:31:177:32 | l1 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:193:38:193:39 | l2 | main.rs:339:13:339:28 | ...::args(...) | main.rs:193:38:193:39 | l2 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:194:45:194:46 | l2 | main.rs:339:13:339:28 | ...::args(...) | main.rs:194:45:194:46 | l2 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:195:41:195:42 | l2 | main.rs:339:13:339:28 | ...::args(...) | main.rs:195:41:195:42 | l2 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:196:48:196:49 | l2 | main.rs:339:13:339:28 | ...::args(...) | main.rs:196:48:196:49 | l2 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:197:41:197:42 | l2 | main.rs:339:13:339:28 | ...::args(...) | main.rs:197:41:197:42 | l2 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:198:48:198:49 | l2 | main.rs:339:13:339:28 | ...::args(...) | main.rs:198:48:198:49 | l2 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:202:48:202:48 | v | main.rs:339:13:339:28 | ...::args(...) | main.rs:202:48:202:48 | v | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:208:53:208:54 | l2 | main.rs:339:13:339:28 | ...::args(...) | main.rs:208:53:208:54 | l2 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:210:60:210:61 | l2 | main.rs:339:13:339:28 | ...::args(...) | main.rs:210:60:210:61 | l2 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:213:51:213:52 | l2 | main.rs:339:13:339:28 | ...::args(...) | main.rs:213:51:213:52 | l2 | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:219:26:219:26 | v | main.rs:339:13:339:28 | ...::args(...) | main.rs:219:26:219:26 | v | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:220:36:220:36 | v | main.rs:339:13:339:28 | ...::args(...) | main.rs:220:36:220:36 | v | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:222:30:222:30 | v | main.rs:339:13:339:28 | ...::args(...) | main.rs:222:30:222:30 | v | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:223:26:223:26 | v | main.rs:339:13:339:28 | ...::args(...) | main.rs:223:26:223:26 | v | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:224:31:224:31 | v | main.rs:339:13:339:28 | ...::args(...) | main.rs:224:31:224:31 | v | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:228:43:228:43 | v | main.rs:339:13:339:28 | ...::args(...) | main.rs:228:43:228:43 | v | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:229:39:229:39 | v | main.rs:339:13:339:28 | ...::args(...) | main.rs:229:39:229:39 | v | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:230:46:230:46 | v | main.rs:339:13:339:28 | ...::args(...) | main.rs:230:46:230:46 | v | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:231:42:231:42 | v | main.rs:339:13:339:28 | ...::args(...) | main.rs:231:42:231:42 | v | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:287:40:287:45 | layout | main.rs:311:25:311:40 | ...::args(...) | main.rs:287:40:287:45 | layout | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:311:25:311:40 | ...::args(...) | user-provided value | +| main.rs:331:26:331:26 | a | main.rs:339:13:339:28 | ...::args(...) | main.rs:331:26:331:26 | a | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | edges -| main.rs:12:36:12:43 | ...: usize | main.rs:18:41:18:41 | v | provenance | | -| main.rs:18:41:18:41 | v | main.rs:18:13:18:31 | ...::realloc | provenance | MaD:17 Sink:MaD:17 | -| main.rs:18:41:18:41 | v | main.rs:20:50:20:50 | v | provenance | | -| main.rs:18:41:18:41 | v | main.rs:29:60:29:60 | v | provenance | | -| main.rs:18:41:18:41 | v | main.rs:32:60:32:60 | v | provenance | | -| main.rs:18:41:18:41 | v | main.rs:35:49:35:49 | v | provenance | | -| main.rs:20:9:20:10 | l2 | main.rs:21:31:21:32 | l2 | provenance | | +| main.rs:12:36:12:43 | ...: usize | main.rs:18:41:18:41 | v | provenance | MaD:17 Sink:MaD:17 | +| main.rs:12:36:12:43 | ...: usize | main.rs:20:50:20:50 | v | provenance | | +| main.rs:12:36:12:43 | ...: usize | main.rs:29:60:29:60 | v | provenance | | +| main.rs:12:36:12:43 | ...: usize | main.rs:32:60:32:60 | v | provenance | | +| main.rs:12:36:12:43 | ...: usize | main.rs:35:49:35:49 | v | provenance | | +| main.rs:20:9:20:10 | l2 | main.rs:21:31:21:32 | l2 | provenance | MaD:15 Sink:MaD:15 | +| main.rs:20:9:20:10 | l2 | main.rs:22:31:22:32 | l2 | provenance | | +| main.rs:20:9:20:10 | l2 | main.rs:23:31:23:32 | l2 | provenance | | +| main.rs:20:9:20:10 | l2 | main.rs:24:38:24:39 | l2 | provenance | MaD:16 Sink:MaD:16 | | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | main.rs:20:14:20:63 | ... .unwrap() | provenance | MaD:41 | | main.rs:20:14:20:63 | ... .unwrap() | main.rs:20:9:20:10 | l2 | provenance | | | main.rs:20:50:20:50 | v | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | provenance | MaD:33 | -| main.rs:21:31:21:32 | l2 | main.rs:21:13:21:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:21:31:21:32 | l2 | main.rs:22:31:22:32 | l2 | provenance | | -| main.rs:21:31:21:32 | l2 | main.rs:23:31:23:32 | l2 | provenance | | -| main.rs:21:31:21:32 | l2 | main.rs:24:38:24:39 | l2 | provenance | | | main.rs:22:31:22:32 | l2 | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | provenance | MaD:27 | | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | main.rs:22:31:22:53 | ... .unwrap() | provenance | MaD:41 | -| main.rs:22:31:22:53 | ... .unwrap() | main.rs:22:13:22:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | +| main.rs:22:31:22:53 | ... .unwrap() | main.rs:22:31:22:53 | ... .unwrap() | provenance | MaD:15 Sink:MaD:15 | | main.rs:23:31:23:32 | l2 | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | provenance | MaD:27 | | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | main.rs:23:31:23:53 | ... .unwrap() | provenance | MaD:41 | | main.rs:23:31:23:53 | ... .unwrap() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | MaD:35 | -| main.rs:23:31:23:68 | ... .pad_to_align() | main.rs:23:13:23:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:24:38:24:39 | l2 | main.rs:24:13:24:36 | ...::alloc_zeroed | provenance | MaD:16 Sink:MaD:16 | -| main.rs:29:9:29:10 | l4 | main.rs:30:31:30:32 | l4 | provenance | | +| main.rs:23:31:23:68 | ... .pad_to_align() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | MaD:15 Sink:MaD:15 | +| main.rs:29:9:29:10 | l4 | main.rs:30:31:30:32 | l4 | provenance | MaD:15 Sink:MaD:15 | | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | main.rs:29:9:29:10 | l4 | provenance | | | main.rs:29:60:29:60 | v | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | provenance | MaD:34 | -| main.rs:30:31:30:32 | l4 | main.rs:30:13:30:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:32:9:32:10 | l5 | main.rs:33:31:33:32 | l5 | provenance | | +| main.rs:32:9:32:10 | l5 | main.rs:33:31:33:32 | l5 | provenance | MaD:15 Sink:MaD:15 | | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | main.rs:32:9:32:10 | l5 | provenance | | | main.rs:32:60:32:60 | v | main.rs:32:60:32:89 | ... * ... | provenance | MaD:25 | | main.rs:32:60:32:89 | ... * ... | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | provenance | MaD:34 | -| main.rs:33:31:33:32 | l5 | main.rs:33:13:33:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:35:9:35:10 | s6 | main.rs:36:60:36:61 | s6 | provenance | | | main.rs:35:14:35:54 | ... + ... | main.rs:35:9:35:10 | s6 | provenance | | | main.rs:35:15:35:49 | ... * ... | main.rs:35:14:35:54 | ... + ... | provenance | MaD:24 | | main.rs:35:49:35:49 | v | main.rs:35:15:35:49 | ... * ... | provenance | MaD:25 | -| main.rs:36:9:36:10 | l6 | main.rs:37:31:37:32 | l6 | provenance | | +| main.rs:36:9:36:10 | l6 | main.rs:37:31:37:32 | l6 | provenance | MaD:15 Sink:MaD:15 | +| main.rs:36:9:36:10 | l6 | main.rs:39:60:39:61 | l6 | provenance | | | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | main.rs:36:9:36:10 | l6 | provenance | | | main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | provenance | MaD:34 | -| main.rs:37:31:37:32 | l6 | main.rs:37:13:37:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:37:31:37:32 | l6 | main.rs:39:60:39:61 | l6 | provenance | | -| main.rs:39:9:39:10 | l7 | main.rs:40:31:40:32 | l7 | provenance | | +| main.rs:39:9:39:10 | l7 | main.rs:40:31:40:32 | l7 | provenance | MaD:15 Sink:MaD:15 | | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | main.rs:39:9:39:10 | l7 | provenance | | | main.rs:39:60:39:61 | l6 | main.rs:39:60:39:68 | l6.size() | provenance | MaD:38 | | main.rs:39:60:39:68 | l6.size() | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | provenance | MaD:34 | -| main.rs:40:31:40:32 | l7 | main.rs:40:13:40:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:43:44:43:51 | ...: usize | main.rs:50:41:50:41 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:51:41:51:41 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:53:48:53:48 | v | provenance | | @@ -106,59 +99,54 @@ edges | main.rs:43:44:43:51 | ...: usize | main.rs:67:46:67:46 | v | provenance | | | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | provenance | MaD:41 | | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | main.rs:50:31:50:53 | ... .0 | provenance | | -| main.rs:50:31:50:53 | ... .0 | main.rs:50:13:50:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | +| main.rs:50:31:50:53 | ... .0 | main.rs:50:31:50:53 | ... .0 | provenance | MaD:15 Sink:MaD:15 | | main.rs:50:41:50:41 | v | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:36 | | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | provenance | MaD:41 | | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | main.rs:51:31:51:57 | ... .0 | provenance | | -| main.rs:51:31:51:57 | ... .0 | main.rs:51:13:51:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | +| main.rs:51:31:51:57 | ... .0 | main.rs:51:31:51:57 | ... .0 | provenance | MaD:15 Sink:MaD:15 | | main.rs:51:41:51:41 | v | main.rs:51:41:51:45 | ... + ... | provenance | MaD:24 | | main.rs:51:41:51:45 | ... + ... | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:36 | | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | main.rs:53:31:53:58 | ... .unwrap() | provenance | MaD:41 | -| main.rs:53:31:53:58 | ... .unwrap() | main.rs:53:13:53:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | +| main.rs:53:31:53:58 | ... .unwrap() | main.rs:53:31:53:58 | ... .unwrap() | provenance | MaD:15 Sink:MaD:15 | | main.rs:53:48:53:48 | v | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | provenance | MaD:37 | | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | main.rs:54:31:54:63 | ... .unwrap() | provenance | MaD:41 | -| main.rs:54:31:54:63 | ... .unwrap() | main.rs:54:13:54:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | +| main.rs:54:31:54:63 | ... .unwrap() | main.rs:54:31:54:63 | ... .unwrap() | provenance | MaD:15 Sink:MaD:15 | | main.rs:54:48:54:48 | v | main.rs:54:48:54:53 | ... * ... | provenance | MaD:25 | | main.rs:54:48:54:53 | ... * ... | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | provenance | MaD:37 | | main.rs:58:9:58:20 | TuplePat [tuple.0] | main.rs:58:10:58:11 | k1 | provenance | | -| main.rs:58:10:58:11 | k1 | main.rs:59:31:59:32 | k1 | provenance | | +| main.rs:58:10:58:11 | k1 | main.rs:59:31:59:32 | k1 | provenance | MaD:15 Sink:MaD:15 | +| main.rs:58:10:58:11 | k1 | main.rs:60:34:60:35 | k1 | provenance | | +| main.rs:58:10:58:11 | k1 | main.rs:62:24:62:25 | k1 | provenance | | +| main.rs:58:10:58:11 | k1 | main.rs:64:48:64:49 | k1 | provenance | | +| main.rs:58:10:58:11 | k1 | main.rs:65:31:65:32 | k1 | provenance | | | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | provenance | MaD:40 | | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | main.rs:58:9:58:20 | TuplePat [tuple.0] | provenance | | | main.rs:58:34:58:34 | v | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | provenance | MaD:36 | -| main.rs:59:31:59:32 | k1 | main.rs:59:13:59:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:59:31:59:32 | k1 | main.rs:60:34:60:35 | k1 | provenance | | -| main.rs:59:31:59:32 | k1 | main.rs:62:24:62:25 | k1 | provenance | | -| main.rs:59:31:59:32 | k1 | main.rs:64:48:64:49 | k1 | provenance | | -| main.rs:59:31:59:32 | k1 | main.rs:65:31:65:32 | k1 | provenance | | | main.rs:60:9:60:20 | TuplePat [tuple.0] | main.rs:60:10:60:11 | k2 | provenance | | -| main.rs:60:10:60:11 | k2 | main.rs:61:31:61:32 | k2 | provenance | | +| main.rs:60:10:60:11 | k2 | main.rs:61:31:61:32 | k2 | provenance | MaD:15 Sink:MaD:15 | | main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | provenance | MaD:41 | | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | main.rs:60:9:60:20 | TuplePat [tuple.0] | provenance | | | main.rs:60:34:60:35 | k1 | main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | provenance | MaD:29 | -| main.rs:61:31:61:32 | k2 | main.rs:61:13:61:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:62:9:62:20 | TuplePat [tuple.0] | main.rs:62:10:62:11 | k3 | provenance | | -| main.rs:62:10:62:11 | k3 | main.rs:63:31:63:32 | k3 | provenance | | +| main.rs:62:10:62:11 | k3 | main.rs:63:31:63:32 | k3 | provenance | MaD:15 Sink:MaD:15 | | main.rs:62:24:62:25 | k1 | main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | provenance | MaD:30 | | main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | provenance | MaD:41 | | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | main.rs:62:9:62:20 | TuplePat [tuple.0] | provenance | | -| main.rs:63:31:63:32 | k3 | main.rs:63:13:63:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | main.rs:64:31:64:59 | ... .unwrap() | provenance | MaD:41 | -| main.rs:64:31:64:59 | ... .unwrap() | main.rs:64:13:64:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | +| main.rs:64:31:64:59 | ... .unwrap() | main.rs:64:31:64:59 | ... .unwrap() | provenance | MaD:15 Sink:MaD:15 | | main.rs:64:48:64:49 | k1 | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | provenance | MaD:31 | | main.rs:65:31:65:32 | k1 | main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | provenance | MaD:32 | | main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | main.rs:65:31:65:59 | ... .unwrap() | provenance | MaD:41 | -| main.rs:65:31:65:59 | ... .unwrap() | main.rs:65:13:65:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:67:9:67:10 | l4 | main.rs:68:31:68:32 | l4 | provenance | | +| main.rs:65:31:65:59 | ... .unwrap() | main.rs:65:31:65:59 | ... .unwrap() | provenance | MaD:15 Sink:MaD:15 | +| main.rs:67:9:67:10 | l4 | main.rs:68:31:68:32 | l4 | provenance | MaD:15 Sink:MaD:15 | | main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | main.rs:67:14:67:56 | ... .unwrap() | provenance | MaD:41 | | main.rs:67:14:67:56 | ... .unwrap() | main.rs:67:9:67:10 | l4 | provenance | | | main.rs:67:46:67:46 | v | main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | provenance | MaD:28 | -| main.rs:68:31:68:32 | l4 | main.rs:68:13:68:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:86:35:86:42 | ...: usize | main.rs:87:54:87:54 | v | provenance | | -| main.rs:87:9:87:14 | layout | main.rs:88:31:88:36 | layout | provenance | | +| main.rs:87:9:87:14 | layout | main.rs:88:31:88:36 | layout | provenance | MaD:15 Sink:MaD:15 | | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | main.rs:87:18:87:67 | ... .unwrap() | provenance | MaD:41 | | main.rs:87:18:87:67 | ... .unwrap() | main.rs:87:9:87:14 | layout | provenance | | | main.rs:87:54:87:54 | v | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | provenance | MaD:33 | -| main.rs:88:31:88:36 | layout | main.rs:88:13:88:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:91:38:91:45 | ...: usize | main.rs:92:47:92:47 | v | provenance | | | main.rs:91:38:91:45 | ...: usize | main.rs:101:51:101:51 | v | provenance | | | main.rs:91:38:91:45 | ...: usize | main.rs:105:33:105:33 | v | provenance | | @@ -166,113 +154,77 @@ edges | main.rs:91:38:91:45 | ...: usize | main.rs:151:62:151:62 | v | provenance | | | main.rs:91:38:91:45 | ...: usize | main.rs:154:62:154:62 | v | provenance | | | main.rs:91:38:91:45 | ...: usize | main.rs:161:55:161:55 | v | provenance | | -| main.rs:92:9:92:10 | l1 | main.rs:96:35:96:36 | l1 | provenance | | -| main.rs:92:9:92:10 | l1 | main.rs:102:35:102:36 | l1 | provenance | | +| main.rs:92:9:92:10 | l1 | main.rs:96:35:96:36 | l1 | provenance | MaD:15 Sink:MaD:15 | +| main.rs:92:9:92:10 | l1 | main.rs:102:35:102:36 | l1 | provenance | MaD:15 Sink:MaD:15 | +| main.rs:92:9:92:10 | l1 | main.rs:109:35:109:36 | l1 | provenance | MaD:15 Sink:MaD:15 | +| main.rs:92:9:92:10 | l1 | main.rs:111:35:111:36 | l1 | provenance | MaD:15 Sink:MaD:15 | +| main.rs:92:9:92:10 | l1 | main.rs:146:35:146:36 | l1 | provenance | MaD:15 Sink:MaD:15 | +| main.rs:92:9:92:10 | l1 | main.rs:177:31:177:32 | l1 | provenance | MaD:15 Sink:MaD:15 | | main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | main.rs:92:14:92:57 | ... .unwrap() | provenance | MaD:41 | | main.rs:92:14:92:57 | ... .unwrap() | main.rs:92:9:92:10 | l1 | provenance | | | main.rs:92:47:92:47 | v | main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | provenance | MaD:28 | -| main.rs:96:35:96:36 | l1 | main.rs:96:17:96:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:96:35:96:36 | l1 | main.rs:109:35:109:36 | l1 | provenance | | -| main.rs:96:35:96:36 | l1 | main.rs:111:35:111:36 | l1 | provenance | | -| main.rs:101:13:101:14 | l3 | main.rs:103:35:103:36 | l3 | provenance | | +| main.rs:101:13:101:14 | l3 | main.rs:103:35:103:36 | l3 | provenance | MaD:15 Sink:MaD:15 | | main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | main.rs:101:18:101:61 | ... .unwrap() | provenance | MaD:41 | | main.rs:101:18:101:61 | ... .unwrap() | main.rs:101:13:101:14 | l3 | provenance | | | main.rs:101:51:101:51 | v | main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | provenance | MaD:28 | -| main.rs:102:35:102:36 | l1 | main.rs:102:17:102:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:102:35:102:36 | l1 | main.rs:109:35:109:36 | l1 | provenance | | -| main.rs:102:35:102:36 | l1 | main.rs:111:35:111:36 | l1 | provenance | | -| main.rs:103:35:103:36 | l3 | main.rs:103:17:103:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:105:33:105:33 | v | main.rs:86:35:86:42 | ...: usize | provenance | | -| main.rs:109:35:109:36 | l1 | main.rs:109:17:109:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:109:35:109:36 | l1 | main.rs:146:35:146:36 | l1 | provenance | | -| main.rs:111:35:111:36 | l1 | main.rs:111:17:111:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:111:35:111:36 | l1 | main.rs:146:35:146:36 | l1 | provenance | | -| main.rs:145:13:145:14 | l9 | main.rs:148:35:148:36 | l9 | provenance | | +| main.rs:145:13:145:14 | l9 | main.rs:148:35:148:36 | l9 | provenance | MaD:15 Sink:MaD:15 | | main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | main.rs:145:18:145:61 | ... .unwrap() | provenance | MaD:41 | | main.rs:145:18:145:61 | ... .unwrap() | main.rs:145:13:145:14 | l9 | provenance | | | main.rs:145:51:145:51 | v | main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | provenance | MaD:28 | -| main.rs:146:35:146:36 | l1 | main.rs:146:17:146:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:146:35:146:36 | l1 | main.rs:177:31:177:32 | l1 | provenance | | -| main.rs:148:35:148:36 | l9 | main.rs:148:17:148:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:151:9:151:11 | l10 | main.rs:152:31:152:33 | l10 | provenance | | +| main.rs:151:9:151:11 | l10 | main.rs:152:31:152:33 | l10 | provenance | MaD:15 Sink:MaD:15 | | main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | main.rs:151:15:151:78 | ... .unwrap() | provenance | MaD:41 | | main.rs:151:15:151:78 | ... .unwrap() | main.rs:151:9:151:11 | l10 | provenance | | | main.rs:151:48:151:68 | ...::min(...) | main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | provenance | MaD:28 | | main.rs:151:62:151:62 | v | main.rs:151:48:151:68 | ...::min(...) | provenance | MaD:43 | -| main.rs:152:31:152:33 | l10 | main.rs:152:13:152:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:154:9:154:11 | l11 | main.rs:155:31:155:33 | l11 | provenance | | +| main.rs:154:9:154:11 | l11 | main.rs:155:31:155:33 | l11 | provenance | MaD:15 Sink:MaD:15 | | main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | main.rs:154:15:154:78 | ... .unwrap() | provenance | MaD:41 | | main.rs:154:15:154:78 | ... .unwrap() | main.rs:154:9:154:11 | l11 | provenance | | | main.rs:154:48:154:68 | ...::max(...) | main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | provenance | MaD:28 | | main.rs:154:62:154:62 | v | main.rs:154:48:154:68 | ...::max(...) | provenance | MaD:42 | -| main.rs:155:31:155:33 | l11 | main.rs:155:13:155:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:161:13:161:15 | l13 | main.rs:162:35:162:37 | l13 | provenance | | +| main.rs:161:13:161:15 | l13 | main.rs:162:35:162:37 | l13 | provenance | MaD:15 Sink:MaD:15 | +| main.rs:161:13:161:15 | l13 | main.rs:169:35:169:37 | l13 | provenance | MaD:15 Sink:MaD:15 | | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | main.rs:161:19:161:68 | ... .unwrap() | provenance | MaD:41 | | main.rs:161:19:161:68 | ... .unwrap() | main.rs:161:13:161:15 | l13 | provenance | | | main.rs:161:55:161:55 | v | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | provenance | MaD:33 | -| main.rs:162:35:162:37 | l13 | main.rs:162:17:162:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:162:35:162:37 | l13 | main.rs:169:35:169:37 | l13 | provenance | | -| main.rs:169:35:169:37 | l13 | main.rs:169:17:169:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:177:31:177:32 | l1 | main.rs:177:13:177:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:183:29:183:36 | ...: usize | main.rs:192:46:192:46 | v | provenance | | -| main.rs:183:29:183:36 | ...: usize | main.rs:202:48:202:48 | v | provenance | | -| main.rs:192:9:192:10 | l2 | main.rs:193:38:193:39 | l2 | provenance | | +| main.rs:183:29:183:36 | ...: usize | main.rs:202:48:202:48 | v | provenance | MaD:14 Sink:MaD:14 | +| main.rs:192:9:192:10 | l2 | main.rs:193:38:193:39 | l2 | provenance | MaD:12 Sink:MaD:12 | +| main.rs:192:9:192:10 | l2 | main.rs:194:45:194:46 | l2 | provenance | MaD:13 Sink:MaD:13 | +| main.rs:192:9:192:10 | l2 | main.rs:195:41:195:42 | l2 | provenance | MaD:7 Sink:MaD:7 | +| main.rs:192:9:192:10 | l2 | main.rs:196:48:196:49 | l2 | provenance | MaD:8 Sink:MaD:8 | +| main.rs:192:9:192:10 | l2 | main.rs:197:41:197:42 | l2 | provenance | MaD:1 Sink:MaD:1 | +| main.rs:192:9:192:10 | l2 | main.rs:198:48:198:49 | l2 | provenance | MaD:2 Sink:MaD:2 | +| main.rs:192:9:192:10 | l2 | main.rs:208:53:208:54 | l2 | provenance | MaD:9 Sink:MaD:9 | +| main.rs:192:9:192:10 | l2 | main.rs:210:60:210:61 | l2 | provenance | MaD:10 Sink:MaD:10 | +| main.rs:192:9:192:10 | l2 | main.rs:213:51:213:52 | l2 | provenance | MaD:11 Sink:MaD:11 | | main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | main.rs:192:14:192:56 | ... .unwrap() | provenance | MaD:41 | | main.rs:192:14:192:56 | ... .unwrap() | main.rs:192:9:192:10 | l2 | provenance | | | main.rs:192:46:192:46 | v | main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | provenance | MaD:28 | -| main.rs:193:38:193:39 | l2 | main.rs:193:32:193:36 | alloc | provenance | MaD:12 Sink:MaD:12 | -| main.rs:193:38:193:39 | l2 | main.rs:194:45:194:46 | l2 | provenance | | -| main.rs:194:45:194:46 | l2 | main.rs:194:32:194:43 | alloc_zeroed | provenance | MaD:13 Sink:MaD:13 | -| main.rs:194:45:194:46 | l2 | main.rs:195:41:195:42 | l2 | provenance | | -| main.rs:195:41:195:42 | l2 | main.rs:195:32:195:39 | allocate | provenance | MaD:7 Sink:MaD:7 | -| main.rs:195:41:195:42 | l2 | main.rs:196:48:196:49 | l2 | provenance | | -| main.rs:196:48:196:49 | l2 | main.rs:196:32:196:46 | allocate_zeroed | provenance | MaD:8 Sink:MaD:8 | -| main.rs:196:48:196:49 | l2 | main.rs:197:41:197:42 | l2 | provenance | | -| main.rs:197:41:197:42 | l2 | main.rs:197:32:197:39 | allocate | provenance | MaD:1 Sink:MaD:1 | -| main.rs:197:41:197:42 | l2 | main.rs:198:48:198:49 | l2 | provenance | | -| main.rs:198:48:198:49 | l2 | main.rs:198:32:198:46 | allocate_zeroed | provenance | MaD:2 Sink:MaD:2 | -| main.rs:198:48:198:49 | l2 | main.rs:208:53:208:54 | l2 | provenance | | -| main.rs:198:48:198:49 | l2 | main.rs:210:60:210:61 | l2 | provenance | | -| main.rs:198:48:198:49 | l2 | main.rs:213:51:213:52 | l2 | provenance | | -| main.rs:202:48:202:48 | v | main.rs:202:32:202:38 | realloc | provenance | MaD:14 Sink:MaD:14 | -| main.rs:208:53:208:54 | l2 | main.rs:208:40:208:43 | grow | provenance | MaD:9 Sink:MaD:9 | -| main.rs:210:60:210:61 | l2 | main.rs:210:40:210:50 | grow_zeroed | provenance | MaD:10 Sink:MaD:10 | -| main.rs:213:51:213:52 | l2 | main.rs:213:36:213:41 | shrink | provenance | MaD:11 Sink:MaD:11 | -| main.rs:217:27:217:34 | ...: usize | main.rs:219:26:219:26 | v | provenance | | -| main.rs:219:26:219:26 | v | main.rs:219:13:219:24 | ...::malloc | provenance | MaD:20 Sink:MaD:20 | -| main.rs:219:26:219:26 | v | main.rs:220:36:220:36 | v | provenance | | -| main.rs:220:36:220:36 | v | main.rs:220:13:220:31 | ...::aligned_alloc | provenance | MaD:18 Sink:MaD:18 | -| main.rs:220:36:220:36 | v | main.rs:222:30:222:30 | v | provenance | | -| main.rs:222:30:222:30 | v | main.rs:222:13:222:24 | ...::calloc | provenance | MaD:19 Sink:MaD:19 | -| main.rs:222:30:222:30 | v | main.rs:223:26:223:26 | v | provenance | | -| main.rs:223:26:223:26 | v | main.rs:223:13:223:24 | ...::calloc | provenance | MaD:19 Sink:MaD:19 | -| main.rs:223:26:223:26 | v | main.rs:224:31:224:31 | v | provenance | | -| main.rs:224:31:224:31 | v | main.rs:224:13:224:25 | ...::realloc | provenance | MaD:21 Sink:MaD:21 | -| main.rs:227:24:227:31 | ...: usize | main.rs:228:43:228:43 | v | provenance | | -| main.rs:228:43:228:43 | v | main.rs:228:13:228:41 | ...::try_with_capacity | provenance | MaD:3 Sink:MaD:3 | -| main.rs:228:43:228:43 | v | main.rs:229:39:229:39 | v | provenance | | -| main.rs:229:39:229:39 | v | main.rs:229:13:229:37 | ...::with_capacity | provenance | MaD:5 Sink:MaD:5 | -| main.rs:229:39:229:39 | v | main.rs:230:46:230:46 | v | provenance | | -| main.rs:230:46:230:46 | v | main.rs:230:13:230:44 | ...::try_with_capacity_in | provenance | MaD:4 Sink:MaD:4 | -| main.rs:230:46:230:46 | v | main.rs:231:42:231:42 | v | provenance | | -| main.rs:231:42:231:42 | v | main.rs:231:13:231:40 | ...::with_capacity_in | provenance | MaD:6 Sink:MaD:6 | +| main.rs:217:27:217:34 | ...: usize | main.rs:219:26:219:26 | v | provenance | MaD:20 Sink:MaD:20 | +| main.rs:217:27:217:34 | ...: usize | main.rs:220:36:220:36 | v | provenance | MaD:18 Sink:MaD:18 | +| main.rs:217:27:217:34 | ...: usize | main.rs:222:30:222:30 | v | provenance | MaD:19 Sink:MaD:19 | +| main.rs:217:27:217:34 | ...: usize | main.rs:223:26:223:26 | v | provenance | MaD:19 Sink:MaD:19 | +| main.rs:217:27:217:34 | ...: usize | main.rs:224:31:224:31 | v | provenance | MaD:21 Sink:MaD:21 | +| main.rs:227:24:227:31 | ...: usize | main.rs:228:43:228:43 | v | provenance | MaD:3 Sink:MaD:3 | +| main.rs:227:24:227:31 | ...: usize | main.rs:229:39:229:39 | v | provenance | MaD:5 Sink:MaD:5 | +| main.rs:227:24:227:31 | ...: usize | main.rs:230:46:230:46 | v | provenance | MaD:4 Sink:MaD:4 | +| main.rs:227:24:227:31 | ...: usize | main.rs:231:42:231:42 | v | provenance | MaD:6 Sink:MaD:6 | | main.rs:282:24:282:41 | ...: String | main.rs:283:21:283:30 | user_input | provenance | | | main.rs:283:9:283:17 | num_bytes | main.rs:285:54:285:62 | num_bytes | provenance | | | main.rs:283:21:283:30 | user_input | main.rs:283:21:283:47 | user_input.parse() [Ok] | provenance | MaD:26 | | main.rs:283:21:283:47 | user_input.parse() [Ok] | main.rs:283:21:283:48 | TryExpr | provenance | | | main.rs:283:21:283:48 | TryExpr | main.rs:283:21:283:77 | ... * ... | provenance | MaD:25 | | main.rs:283:21:283:77 | ... * ... | main.rs:283:9:283:17 | num_bytes | provenance | | -| main.rs:285:9:285:14 | layout | main.rs:287:40:287:45 | layout | provenance | | +| main.rs:285:9:285:14 | layout | main.rs:287:40:287:45 | layout | provenance | MaD:15 Sink:MaD:15 | | main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | main.rs:285:18:285:75 | ... .unwrap() | provenance | MaD:41 | | main.rs:285:18:285:75 | ... .unwrap() | main.rs:285:9:285:14 | layout | provenance | | | main.rs:285:54:285:62 | num_bytes | main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | provenance | MaD:33 | -| main.rs:287:40:287:45 | layout | main.rs:287:22:287:38 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:311:25:311:38 | ...::args | main.rs:311:25:311:40 | ...::args(...) [element] | provenance | Src:MaD:22 | +| main.rs:311:25:311:40 | ...::args(...) | main.rs:311:25:311:40 | ...::args(...) [element] | provenance | Src:MaD:22 | | main.rs:311:25:311:40 | ...::args(...) [element] | main.rs:311:25:311:47 | ... .nth(...) [Some] | provenance | MaD:23 | | main.rs:311:25:311:47 | ... .nth(...) [Some] | main.rs:311:25:311:74 | ... .unwrap_or(...) | provenance | MaD:39 | | main.rs:311:25:311:74 | ... .unwrap_or(...) | main.rs:282:24:282:41 | ...: String | provenance | | -| main.rs:317:26:317:33 | ...: usize | main.rs:331:26:331:26 | a | provenance | | -| main.rs:331:26:331:26 | a | main.rs:331:13:331:24 | ...::malloc | provenance | MaD:20 Sink:MaD:20 | +| main.rs:317:26:317:33 | ...: usize | main.rs:331:26:331:26 | a | provenance | MaD:20 Sink:MaD:20 | | main.rs:339:9:339:9 | v | main.rs:342:34:342:34 | v | provenance | | | main.rs:339:9:339:9 | v | main.rs:343:42:343:42 | v | provenance | | | main.rs:339:9:339:9 | v | main.rs:344:36:344:36 | v | provenance | | @@ -280,7 +232,7 @@ edges | main.rs:339:9:339:9 | v | main.rs:346:25:346:25 | v | provenance | | | main.rs:339:9:339:9 | v | main.rs:347:22:347:22 | v | provenance | | | main.rs:339:9:339:9 | v | main.rs:349:24:349:24 | v | provenance | | -| main.rs:339:13:339:26 | ...::args | main.rs:339:13:339:28 | ...::args(...) [element] | provenance | Src:MaD:22 | +| main.rs:339:13:339:28 | ...::args(...) | main.rs:339:13:339:28 | ...::args(...) [element] | provenance | Src:MaD:22 | | main.rs:339:13:339:28 | ...::args(...) [element] | main.rs:339:13:339:35 | ... .nth(...) [Some] | provenance | MaD:23 | | main.rs:339:13:339:35 | ... .nth(...) [Some] | main.rs:339:13:339:65 | ... .unwrap_or(...) | provenance | MaD:39 | | main.rs:339:13:339:65 | ... .unwrap_or(...) | main.rs:339:13:339:82 | ... .parse() [Ok] | provenance | MaD:26 | @@ -339,35 +291,30 @@ models | 43 | Summary: core::cmp::min; Argument[0]; ReturnValue; value | nodes | main.rs:12:36:12:43 | ...: usize | semmle.label | ...: usize | -| main.rs:18:13:18:31 | ...::realloc | semmle.label | ...::realloc | | main.rs:18:41:18:41 | v | semmle.label | v | | main.rs:20:9:20:10 | l2 | semmle.label | l2 | | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | semmle.label | ...::from_size_align(...) [Ok] | | main.rs:20:14:20:63 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:20:50:20:50 | v | semmle.label | v | -| main.rs:21:13:21:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:21:31:21:32 | l2 | semmle.label | l2 | -| main.rs:22:13:22:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:22:31:22:32 | l2 | semmle.label | l2 | | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | semmle.label | l2.align_to(...) [Ok] | | main.rs:22:31:22:53 | ... .unwrap() | semmle.label | ... .unwrap() | -| main.rs:23:13:23:29 | ...::alloc | semmle.label | ...::alloc | +| main.rs:22:31:22:53 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:23:31:23:32 | l2 | semmle.label | l2 | | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | semmle.label | l2.align_to(...) [Ok] | | main.rs:23:31:23:53 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:23:31:23:68 | ... .pad_to_align() | semmle.label | ... .pad_to_align() | -| main.rs:24:13:24:36 | ...::alloc_zeroed | semmle.label | ...::alloc_zeroed | +| main.rs:23:31:23:68 | ... .pad_to_align() | semmle.label | ... .pad_to_align() | | main.rs:24:38:24:39 | l2 | semmle.label | l2 | | main.rs:29:9:29:10 | l4 | semmle.label | l4 | | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | semmle.label | ...::from_size_align_unchecked(...) | | main.rs:29:60:29:60 | v | semmle.label | v | -| main.rs:30:13:30:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:30:31:30:32 | l4 | semmle.label | l4 | | main.rs:32:9:32:10 | l5 | semmle.label | l5 | | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | semmle.label | ...::from_size_align_unchecked(...) | | main.rs:32:60:32:60 | v | semmle.label | v | | main.rs:32:60:32:89 | ... * ... | semmle.label | ... * ... | -| main.rs:33:13:33:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:33:31:33:32 | l5 | semmle.label | l5 | | main.rs:35:9:35:10 | s6 | semmle.label | s6 | | main.rs:35:14:35:54 | ... + ... | semmle.label | ... + ... | @@ -376,33 +323,31 @@ nodes | main.rs:36:9:36:10 | l6 | semmle.label | l6 | | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | semmle.label | ...::from_size_align_unchecked(...) | | main.rs:36:60:36:61 | s6 | semmle.label | s6 | -| main.rs:37:13:37:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:37:31:37:32 | l6 | semmle.label | l6 | | main.rs:39:9:39:10 | l7 | semmle.label | l7 | | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | semmle.label | ...::from_size_align_unchecked(...) | | main.rs:39:60:39:61 | l6 | semmle.label | l6 | | main.rs:39:60:39:68 | l6.size() | semmle.label | l6.size() | -| main.rs:40:13:40:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:40:31:40:32 | l7 | semmle.label | l7 | | main.rs:43:44:43:51 | ...: usize | semmle.label | ...: usize | -| main.rs:50:13:50:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | semmle.label | l2.repeat(...) [Ok, tuple.0] | | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | semmle.label | ... .unwrap() [tuple.0] | | main.rs:50:31:50:53 | ... .0 | semmle.label | ... .0 | +| main.rs:50:31:50:53 | ... .0 | semmle.label | ... .0 | | main.rs:50:41:50:41 | v | semmle.label | v | -| main.rs:51:13:51:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | semmle.label | l2.repeat(...) [Ok, tuple.0] | | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | semmle.label | ... .unwrap() [tuple.0] | | main.rs:51:31:51:57 | ... .0 | semmle.label | ... .0 | +| main.rs:51:31:51:57 | ... .0 | semmle.label | ... .0 | | main.rs:51:41:51:41 | v | semmle.label | v | | main.rs:51:41:51:45 | ... + ... | semmle.label | ... + ... | -| main.rs:53:13:53:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | semmle.label | l2.repeat_packed(...) [Ok] | | main.rs:53:31:53:58 | ... .unwrap() | semmle.label | ... .unwrap() | +| main.rs:53:31:53:58 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:53:48:53:48 | v | semmle.label | v | -| main.rs:54:13:54:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | semmle.label | l2.repeat_packed(...) [Ok] | | main.rs:54:31:54:63 | ... .unwrap() | semmle.label | ... .unwrap() | +| main.rs:54:31:54:63 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:54:48:54:48 | v | semmle.label | v | | main.rs:54:48:54:53 | ... * ... | semmle.label | ... * ... | | main.rs:58:9:58:20 | TuplePat [tuple.0] | semmle.label | TuplePat [tuple.0] | @@ -410,139 +355,103 @@ nodes | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | semmle.label | l3.repeat(...) [Ok, tuple.0] | | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | semmle.label | ... .expect(...) [tuple.0] | | main.rs:58:34:58:34 | v | semmle.label | v | -| main.rs:59:13:59:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:59:31:59:32 | k1 | semmle.label | k1 | | main.rs:60:9:60:20 | TuplePat [tuple.0] | semmle.label | TuplePat [tuple.0] | | main.rs:60:10:60:11 | k2 | semmle.label | k2 | | main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | semmle.label | l3.extend(...) [Ok, tuple.0] | | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | semmle.label | ... .unwrap() [tuple.0] | | main.rs:60:34:60:35 | k1 | semmle.label | k1 | -| main.rs:61:13:61:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:61:31:61:32 | k2 | semmle.label | k2 | | main.rs:62:9:62:20 | TuplePat [tuple.0] | semmle.label | TuplePat [tuple.0] | | main.rs:62:10:62:11 | k3 | semmle.label | k3 | | main.rs:62:24:62:25 | k1 | semmle.label | k1 | | main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | semmle.label | k1.extend(...) [Ok, tuple.0] | | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | semmle.label | ... .unwrap() [tuple.0] | -| main.rs:63:13:63:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:63:31:63:32 | k3 | semmle.label | k3 | -| main.rs:64:13:64:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | semmle.label | l3.extend_packed(...) [Ok] | | main.rs:64:31:64:59 | ... .unwrap() | semmle.label | ... .unwrap() | +| main.rs:64:31:64:59 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:64:48:64:49 | k1 | semmle.label | k1 | -| main.rs:65:13:65:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:65:31:65:32 | k1 | semmle.label | k1 | | main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | semmle.label | k1.extend_packed(...) [Ok] | | main.rs:65:31:65:59 | ... .unwrap() | semmle.label | ... .unwrap() | +| main.rs:65:31:65:59 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:67:9:67:10 | l4 | semmle.label | l4 | | main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | semmle.label | ...::array::<...>(...) [Ok] | | main.rs:67:14:67:56 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:67:46:67:46 | v | semmle.label | v | -| main.rs:68:13:68:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:68:31:68:32 | l4 | semmle.label | l4 | | main.rs:86:35:86:42 | ...: usize | semmle.label | ...: usize | | main.rs:87:9:87:14 | layout | semmle.label | layout | | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | semmle.label | ...::from_size_align(...) [Ok] | | main.rs:87:18:87:67 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:87:54:87:54 | v | semmle.label | v | -| main.rs:88:13:88:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:88:31:88:36 | layout | semmle.label | layout | | main.rs:91:38:91:45 | ...: usize | semmle.label | ...: usize | | main.rs:92:9:92:10 | l1 | semmle.label | l1 | | main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | semmle.label | ...::array::<...>(...) [Ok] | | main.rs:92:14:92:57 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:92:47:92:47 | v | semmle.label | v | -| main.rs:96:17:96:33 | ...::alloc | semmle.label | ...::alloc | | main.rs:96:35:96:36 | l1 | semmle.label | l1 | | main.rs:101:13:101:14 | l3 | semmle.label | l3 | | main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | semmle.label | ...::array::<...>(...) [Ok] | | main.rs:101:18:101:61 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:101:51:101:51 | v | semmle.label | v | -| main.rs:102:17:102:33 | ...::alloc | semmle.label | ...::alloc | | main.rs:102:35:102:36 | l1 | semmle.label | l1 | -| main.rs:103:17:103:33 | ...::alloc | semmle.label | ...::alloc | | main.rs:103:35:103:36 | l3 | semmle.label | l3 | | main.rs:105:33:105:33 | v | semmle.label | v | -| main.rs:109:17:109:33 | ...::alloc | semmle.label | ...::alloc | | main.rs:109:35:109:36 | l1 | semmle.label | l1 | -| main.rs:111:17:111:33 | ...::alloc | semmle.label | ...::alloc | | main.rs:111:35:111:36 | l1 | semmle.label | l1 | | main.rs:145:13:145:14 | l9 | semmle.label | l9 | | main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | semmle.label | ...::array::<...>(...) [Ok] | | main.rs:145:18:145:61 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:145:51:145:51 | v | semmle.label | v | -| main.rs:146:17:146:33 | ...::alloc | semmle.label | ...::alloc | | main.rs:146:35:146:36 | l1 | semmle.label | l1 | -| main.rs:148:17:148:33 | ...::alloc | semmle.label | ...::alloc | | main.rs:148:35:148:36 | l9 | semmle.label | l9 | | main.rs:151:9:151:11 | l10 | semmle.label | l10 | | main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | semmle.label | ...::array::<...>(...) [Ok] | | main.rs:151:15:151:78 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:151:48:151:68 | ...::min(...) | semmle.label | ...::min(...) | | main.rs:151:62:151:62 | v | semmle.label | v | -| main.rs:152:13:152:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:152:31:152:33 | l10 | semmle.label | l10 | | main.rs:154:9:154:11 | l11 | semmle.label | l11 | | main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | semmle.label | ...::array::<...>(...) [Ok] | | main.rs:154:15:154:78 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:154:48:154:68 | ...::max(...) | semmle.label | ...::max(...) | | main.rs:154:62:154:62 | v | semmle.label | v | -| main.rs:155:13:155:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:155:31:155:33 | l11 | semmle.label | l11 | | main.rs:161:13:161:15 | l13 | semmle.label | l13 | | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | semmle.label | ...::from_size_align(...) [Ok] | | main.rs:161:19:161:68 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:161:55:161:55 | v | semmle.label | v | -| main.rs:162:17:162:33 | ...::alloc | semmle.label | ...::alloc | | main.rs:162:35:162:37 | l13 | semmle.label | l13 | -| main.rs:169:17:169:33 | ...::alloc | semmle.label | ...::alloc | | main.rs:169:35:169:37 | l13 | semmle.label | l13 | -| main.rs:177:13:177:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:177:31:177:32 | l1 | semmle.label | l1 | | main.rs:183:29:183:36 | ...: usize | semmle.label | ...: usize | | main.rs:192:9:192:10 | l2 | semmle.label | l2 | | main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | semmle.label | ...::array::<...>(...) [Ok] | | main.rs:192:14:192:56 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:192:46:192:46 | v | semmle.label | v | -| main.rs:193:32:193:36 | alloc | semmle.label | alloc | | main.rs:193:38:193:39 | l2 | semmle.label | l2 | -| main.rs:194:32:194:43 | alloc_zeroed | semmle.label | alloc_zeroed | | main.rs:194:45:194:46 | l2 | semmle.label | l2 | -| main.rs:195:32:195:39 | allocate | semmle.label | allocate | | main.rs:195:41:195:42 | l2 | semmle.label | l2 | -| main.rs:196:32:196:46 | allocate_zeroed | semmle.label | allocate_zeroed | | main.rs:196:48:196:49 | l2 | semmle.label | l2 | -| main.rs:197:32:197:39 | allocate | semmle.label | allocate | | main.rs:197:41:197:42 | l2 | semmle.label | l2 | -| main.rs:198:32:198:46 | allocate_zeroed | semmle.label | allocate_zeroed | | main.rs:198:48:198:49 | l2 | semmle.label | l2 | -| main.rs:202:32:202:38 | realloc | semmle.label | realloc | | main.rs:202:48:202:48 | v | semmle.label | v | -| main.rs:208:40:208:43 | grow | semmle.label | grow | | main.rs:208:53:208:54 | l2 | semmle.label | l2 | -| main.rs:210:40:210:50 | grow_zeroed | semmle.label | grow_zeroed | | main.rs:210:60:210:61 | l2 | semmle.label | l2 | -| main.rs:213:36:213:41 | shrink | semmle.label | shrink | | main.rs:213:51:213:52 | l2 | semmle.label | l2 | | main.rs:217:27:217:34 | ...: usize | semmle.label | ...: usize | -| main.rs:219:13:219:24 | ...::malloc | semmle.label | ...::malloc | | main.rs:219:26:219:26 | v | semmle.label | v | -| main.rs:220:13:220:31 | ...::aligned_alloc | semmle.label | ...::aligned_alloc | | main.rs:220:36:220:36 | v | semmle.label | v | -| main.rs:222:13:222:24 | ...::calloc | semmle.label | ...::calloc | | main.rs:222:30:222:30 | v | semmle.label | v | -| main.rs:223:13:223:24 | ...::calloc | semmle.label | ...::calloc | | main.rs:223:26:223:26 | v | semmle.label | v | -| main.rs:224:13:224:25 | ...::realloc | semmle.label | ...::realloc | | main.rs:224:31:224:31 | v | semmle.label | v | | main.rs:227:24:227:31 | ...: usize | semmle.label | ...: usize | -| main.rs:228:13:228:41 | ...::try_with_capacity | semmle.label | ...::try_with_capacity | | main.rs:228:43:228:43 | v | semmle.label | v | -| main.rs:229:13:229:37 | ...::with_capacity | semmle.label | ...::with_capacity | | main.rs:229:39:229:39 | v | semmle.label | v | -| main.rs:230:13:230:44 | ...::try_with_capacity_in | semmle.label | ...::try_with_capacity_in | | main.rs:230:46:230:46 | v | semmle.label | v | -| main.rs:231:13:231:40 | ...::with_capacity_in | semmle.label | ...::with_capacity_in | | main.rs:231:42:231:42 | v | semmle.label | v | | main.rs:282:24:282:41 | ...: String | semmle.label | ...: String | | main.rs:283:9:283:17 | num_bytes | semmle.label | num_bytes | @@ -554,17 +463,15 @@ nodes | main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | semmle.label | ...::from_size_align(...) [Ok] | | main.rs:285:18:285:75 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:285:54:285:62 | num_bytes | semmle.label | num_bytes | -| main.rs:287:22:287:38 | ...::alloc | semmle.label | ...::alloc | | main.rs:287:40:287:45 | layout | semmle.label | layout | -| main.rs:311:25:311:38 | ...::args | semmle.label | ...::args | +| main.rs:311:25:311:40 | ...::args(...) | semmle.label | ...::args(...) | | main.rs:311:25:311:40 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | | main.rs:311:25:311:47 | ... .nth(...) [Some] | semmle.label | ... .nth(...) [Some] | | main.rs:311:25:311:74 | ... .unwrap_or(...) | semmle.label | ... .unwrap_or(...) | | main.rs:317:26:317:33 | ...: usize | semmle.label | ...: usize | -| main.rs:331:13:331:24 | ...::malloc | semmle.label | ...::malloc | | main.rs:331:26:331:26 | a | semmle.label | a | | main.rs:339:9:339:9 | v | semmle.label | v | -| main.rs:339:13:339:26 | ...::args | semmle.label | ...::args | +| main.rs:339:13:339:28 | ...::args(...) | semmle.label | ...::args(...) | | main.rs:339:13:339:28 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | | main.rs:339:13:339:35 | ... .nth(...) [Some] | semmle.label | ... .nth(...) [Some] | | main.rs:339:13:339:65 | ... .unwrap_or(...) | semmle.label | ... .unwrap_or(...) | diff --git a/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected b/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected index f3dfe9220a47..e582b408756f 100644 --- a/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected +++ b/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected @@ -1,15 +1,15 @@ #select -| test_cipher.rs:18:29:18:36 | [0u8; 16] | test_cipher.rs:18:29:18:36 | [0u8; 16] | test_cipher.rs:19:30:19:47 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:19:30:19:47 | ...::new | a key | -| test_cipher.rs:25:29:25:36 | [0u8; 16] | test_cipher.rs:25:29:25:36 | [0u8; 16] | test_cipher.rs:26:30:26:40 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:26:30:26:40 | ...::new | a key | -| test_cipher.rs:29:29:29:36 | [0u8; 16] | test_cipher.rs:29:29:29:36 | [0u8; 16] | test_cipher.rs:30:30:30:40 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:30:30:30:40 | ...::new | an initialization vector | -| test_cipher.rs:37:27:37:74 | [...] | test_cipher.rs:37:27:37:74 | [...] | test_cipher.rs:38:30:38:47 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:38:30:38:47 | ...::new | a key | -| test_cipher.rs:41:29:41:76 | [...] | test_cipher.rs:41:29:41:76 | [...] | test_cipher.rs:42:30:42:47 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:42:30:42:47 | ...::new | a key | -| test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:51:31:51:48 | ...::new | This hard-coded value is used as $@. | test_cipher.rs:51:31:51:48 | ...::new | a key | -| test_cipher.rs:73:19:73:26 | [0u8; 32] | test_cipher.rs:73:19:73:26 | [0u8; 32] | test_cipher.rs:74:23:74:44 | ...::new_from_slice | This hard-coded value is used as $@. | test_cipher.rs:74:23:74:44 | ...::new_from_slice | a key | -| test_cookie.rs:17:28:17:34 | [0; 64] | test_cookie.rs:17:28:17:34 | [0; 64] | test_cookie.rs:18:16:18:24 | ...::from | This hard-coded value is used as $@. | test_cookie.rs:18:16:18:24 | ...::from | a key | -| test_cookie.rs:21:28:21:34 | [0; 64] | test_cookie.rs:21:28:21:34 | [0; 64] | test_cookie.rs:22:16:22:24 | ...::from | This hard-coded value is used as $@. | test_cookie.rs:22:16:22:24 | ...::from | a key | -| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:42:14:42:32 | ...::from | This hard-coded value is used as $@. | test_cookie.rs:42:14:42:32 | ...::from | a key | -| test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:53:14:53:32 | ...::from | This hard-coded value is used as $@. | test_cookie.rs:53:14:53:32 | ...::from | a key | +| test_cipher.rs:18:29:18:36 | [0u8; 16] | test_cipher.rs:18:29:18:36 | [0u8; 16] | test_cipher.rs:19:49:19:79 | ...::from_slice(...) | This hard-coded value is used as $@. | test_cipher.rs:19:49:19:79 | ...::from_slice(...) | a key | +| test_cipher.rs:25:29:25:36 | [0u8; 16] | test_cipher.rs:25:29:25:36 | [0u8; 16] | test_cipher.rs:26:42:26:72 | ...::from_slice(...) | This hard-coded value is used as $@. | test_cipher.rs:26:42:26:72 | ...::from_slice(...) | a key | +| test_cipher.rs:29:29:29:36 | [0u8; 16] | test_cipher.rs:29:29:29:36 | [0u8; 16] | test_cipher.rs:30:72:30:101 | ...::from_slice(...) | This hard-coded value is used as $@. | test_cipher.rs:30:72:30:101 | ...::from_slice(...) | an initialization vector | +| test_cipher.rs:37:27:37:74 | [...] | test_cipher.rs:37:27:37:74 | [...] | test_cipher.rs:38:49:38:80 | ...::from_slice(...) | This hard-coded value is used as $@. | test_cipher.rs:38:49:38:80 | ...::from_slice(...) | a key | +| test_cipher.rs:41:29:41:76 | [...] | test_cipher.rs:41:29:41:76 | [...] | test_cipher.rs:42:49:42:79 | ...::from_slice(...) | This hard-coded value is used as $@. | test_cipher.rs:42:49:42:79 | ...::from_slice(...) | a key | +| test_cipher.rs:50:37:50:54 | ...::zeroed(...) | test_cipher.rs:50:37:50:54 | ...::zeroed(...) | test_cipher.rs:51:50:51:82 | ...::from_slice(...) | This hard-coded value is used as $@. | test_cipher.rs:51:50:51:82 | ...::from_slice(...) | a key | +| test_cipher.rs:73:19:73:26 | [0u8; 32] | test_cipher.rs:73:19:73:26 | [0u8; 32] | test_cipher.rs:74:46:74:51 | const2 | This hard-coded value is used as $@. | test_cipher.rs:74:46:74:51 | const2 | a key | +| test_cookie.rs:17:28:17:34 | [0; 64] | test_cookie.rs:17:28:17:34 | [0; 64] | test_cookie.rs:18:26:18:32 | &array1 | This hard-coded value is used as $@. | test_cookie.rs:18:26:18:32 | &array1 | a key | +| test_cookie.rs:21:28:21:34 | [0; 64] | test_cookie.rs:21:28:21:34 | [0; 64] | test_cookie.rs:22:26:22:32 | &array2 | This hard-coded value is used as $@. | test_cookie.rs:22:26:22:32 | &array2 | a key | +| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:42:34:42:39 | array2 | This hard-coded value is used as $@. | test_cookie.rs:42:34:42:39 | array2 | a key | +| test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:53:34:53:39 | array3 | This hard-coded value is used as $@. | test_cookie.rs:53:34:53:39 | array3 | a key | | test_heuristic.rs:38:25:38:30 | 0xFFFF | test_heuristic.rs:38:25:38:30 | 0xFFFF | test_heuristic.rs:81:22:81:31 | MY_CONST_1 | This hard-coded value is used as $@. | test_heuristic.rs:81:22:81:31 | MY_CONST_1 | a salt | | test_heuristic.rs:39:25:39:59 | ... as u64 | test_heuristic.rs:39:25:39:59 | ... as u64 | test_heuristic.rs:82:22:82:31 | MY_CONST_2 | This hard-coded value is used as $@. | test_heuristic.rs:82:22:82:31 | MY_CONST_2 | a salt | | test_heuristic.rs:40:27:40:32 | 0xFFFF | test_heuristic.rs:40:27:40:32 | 0xFFFF | test_heuristic.rs:83:22:83:32 | MY_STATIC_3 | This hard-coded value is used as $@. | test_heuristic.rs:83:22:83:32 | MY_STATIC_3 | a salt | @@ -27,58 +27,54 @@ edges | test_cipher.rs:18:9:18:14 | const1 [&ref] | test_cipher.rs:19:73:19:78 | const1 [&ref] | provenance | | | test_cipher.rs:18:28:18:36 | &... [&ref] | test_cipher.rs:18:9:18:14 | const1 [&ref] | provenance | | | test_cipher.rs:18:29:18:36 | [0u8; 16] | test_cipher.rs:18:28:18:36 | &... [&ref] | provenance | | -| test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref] | test_cipher.rs:19:30:19:47 | ...::new | provenance | MaD:3 Sink:MaD:3 | +| test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref] | test_cipher.rs:19:49:19:79 | ...::from_slice(...) | provenance | MaD:3 Sink:MaD:3 | | test_cipher.rs:19:73:19:78 | const1 [&ref] | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref] | provenance | MaD:13 | | test_cipher.rs:25:9:25:14 | const4 [&ref] | test_cipher.rs:26:66:26:71 | const4 [&ref] | provenance | | | test_cipher.rs:25:28:25:36 | &... [&ref] | test_cipher.rs:25:9:25:14 | const4 [&ref] | provenance | | | test_cipher.rs:25:29:25:36 | [0u8; 16] | test_cipher.rs:25:28:25:36 | &... [&ref] | provenance | | -| test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref] | test_cipher.rs:26:30:26:40 | ...::new | provenance | MaD:4 Sink:MaD:4 | +| test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref] | test_cipher.rs:26:42:26:72 | ...::from_slice(...) | provenance | MaD:4 Sink:MaD:4 | | test_cipher.rs:26:66:26:71 | const4 [&ref] | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref] | provenance | MaD:13 | | test_cipher.rs:29:9:29:14 | const5 [&ref] | test_cipher.rs:30:95:30:100 | const5 [&ref] | provenance | | | test_cipher.rs:29:28:29:36 | &... [&ref] | test_cipher.rs:29:9:29:14 | const5 [&ref] | provenance | | | test_cipher.rs:29:29:29:36 | [0u8; 16] | test_cipher.rs:29:28:29:36 | &... [&ref] | provenance | | -| test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref] | test_cipher.rs:30:30:30:40 | ...::new | provenance | MaD:5 Sink:MaD:5 | +| test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref] | test_cipher.rs:30:72:30:101 | ...::from_slice(...) | provenance | MaD:5 Sink:MaD:5 | | test_cipher.rs:30:95:30:100 | const5 [&ref] | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref] | provenance | MaD:13 | | test_cipher.rs:37:9:37:14 | const7 | test_cipher.rs:38:74:38:79 | const7 | provenance | | | test_cipher.rs:37:27:37:74 | [...] | test_cipher.rs:37:9:37:14 | const7 | provenance | | -| test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | test_cipher.rs:38:30:38:47 | ...::new | provenance | MaD:3 Sink:MaD:3 | +| test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | test_cipher.rs:38:49:38:80 | ...::from_slice(...) | provenance | MaD:3 Sink:MaD:3 | | test_cipher.rs:38:73:38:79 | &const7 [&ref] | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | provenance | MaD:13 | | test_cipher.rs:38:74:38:79 | const7 | test_cipher.rs:38:73:38:79 | &const7 [&ref] | provenance | | | test_cipher.rs:41:9:41:14 | const8 [&ref] | test_cipher.rs:42:73:42:78 | const8 [&ref] | provenance | | | test_cipher.rs:41:28:41:76 | &... [&ref] | test_cipher.rs:41:9:41:14 | const8 [&ref] | provenance | | | test_cipher.rs:41:29:41:76 | [...] | test_cipher.rs:41:28:41:76 | &... [&ref] | provenance | | -| test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | test_cipher.rs:42:30:42:47 | ...::new | provenance | MaD:3 Sink:MaD:3 | +| test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | test_cipher.rs:42:49:42:79 | ...::from_slice(...) | provenance | MaD:3 Sink:MaD:3 | | test_cipher.rs:42:73:42:78 | const8 [&ref] | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | provenance | MaD:13 | | test_cipher.rs:50:9:50:15 | const10 [element] | test_cipher.rs:51:75:51:81 | const10 [element] | provenance | | -| test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:50:37:50:54 | ...::zeroed(...) [element] | provenance | Src:MaD:7 | -| test_cipher.rs:50:37:50:54 | ...::zeroed(...) [element] | test_cipher.rs:50:9:50:15 | const10 [element] | provenance | | -| test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | test_cipher.rs:51:31:51:48 | ...::new | provenance | MaD:3 Sink:MaD:3 Sink:MaD:3 | +| test_cipher.rs:50:37:50:54 | ...::zeroed(...) | test_cipher.rs:50:9:50:15 | const10 [element] | provenance | Src:MaD:7 | +| test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | test_cipher.rs:51:50:51:82 | ...::from_slice(...) | provenance | MaD:3 Sink:MaD:3 Sink:MaD:3 | | test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | provenance | MaD:13 | | test_cipher.rs:51:75:51:81 | const10 [element] | test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | provenance | | -| test_cipher.rs:73:9:73:14 | const2 [&ref] | test_cipher.rs:74:46:74:51 | const2 [&ref] | provenance | | +| test_cipher.rs:73:9:73:14 | const2 [&ref] | test_cipher.rs:74:46:74:51 | const2 | provenance | MaD:1 Sink:MaD:1 | | test_cipher.rs:73:18:73:26 | &... [&ref] | test_cipher.rs:73:9:73:14 | const2 [&ref] | provenance | | | test_cipher.rs:73:19:73:26 | [0u8; 32] | test_cipher.rs:73:18:73:26 | &... [&ref] | provenance | | -| test_cipher.rs:74:46:74:51 | const2 [&ref] | test_cipher.rs:74:23:74:44 | ...::new_from_slice | provenance | MaD:1 Sink:MaD:1 | | test_cookie.rs:17:9:17:14 | array1 | test_cookie.rs:18:27:18:32 | array1 | provenance | | | test_cookie.rs:17:28:17:34 | [0; 64] | test_cookie.rs:17:9:17:14 | array1 | provenance | | -| test_cookie.rs:18:26:18:32 | &array1 [&ref] | test_cookie.rs:18:16:18:24 | ...::from | provenance | MaD:6 Sink:MaD:6 | +| test_cookie.rs:18:26:18:32 | &array1 [&ref] | test_cookie.rs:18:26:18:32 | &array1 | provenance | MaD:6 Sink:MaD:6 | | test_cookie.rs:18:27:18:32 | array1 | test_cookie.rs:18:26:18:32 | &array1 [&ref] | provenance | | | test_cookie.rs:21:9:21:14 | array2 | test_cookie.rs:22:27:22:32 | array2 | provenance | | | test_cookie.rs:21:28:21:34 | [0; 64] | test_cookie.rs:21:9:21:14 | array2 | provenance | | -| test_cookie.rs:22:26:22:32 | &array2 [&ref] | test_cookie.rs:22:16:22:24 | ...::from | provenance | MaD:6 Sink:MaD:6 | +| test_cookie.rs:22:26:22:32 | &array2 [&ref] | test_cookie.rs:22:26:22:32 | &array2 | provenance | MaD:6 Sink:MaD:6 | | test_cookie.rs:22:27:22:32 | array2 | test_cookie.rs:22:26:22:32 | &array2 [&ref] | provenance | | -| test_cookie.rs:38:9:38:14 | array2 | test_cookie.rs:42:34:42:39 | array2 | provenance | | +| test_cookie.rs:38:9:38:14 | array2 | test_cookie.rs:42:34:42:39 | array2 | provenance | MaD:2 Sink:MaD:2 | | test_cookie.rs:38:18:38:37 | ...::from(...) | test_cookie.rs:38:9:38:14 | array2 | provenance | | | test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:8 | | test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:9 | | test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:10 | | test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:11 | | test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:12 | -| test_cookie.rs:42:34:42:39 | array2 | test_cookie.rs:42:14:42:32 | ...::from | provenance | MaD:2 Sink:MaD:2 | -| test_cookie.rs:49:9:49:14 | array3 [element] | test_cookie.rs:53:34:53:39 | array3 [element] | provenance | | +| test_cookie.rs:49:9:49:14 | array3 [element] | test_cookie.rs:53:34:53:39 | array3 | provenance | MaD:2 Sink:MaD:2 | | test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | provenance | MaD:14 | | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | test_cookie.rs:49:9:49:14 | array3 [element] | provenance | | -| test_cookie.rs:53:34:53:39 | array3 [element] | test_cookie.rs:53:14:53:32 | ...::from | provenance | MaD:2 Sink:MaD:2 | | test_heuristic.rs:38:25:38:30 | 0xFFFF | test_heuristic.rs:81:22:81:31 | MY_CONST_1 | provenance | | | test_heuristic.rs:39:25:39:59 | ... as u64 | test_heuristic.rs:82:22:82:31 | MY_CONST_2 | provenance | | | test_heuristic.rs:39:62:40:33 | static MY_STATIC_3 | test_heuristic.rs:83:22:83:32 | MY_STATIC_3 | provenance | | @@ -109,65 +105,61 @@ nodes | test_cipher.rs:18:9:18:14 | const1 [&ref] | semmle.label | const1 [&ref] | | test_cipher.rs:18:28:18:36 | &... [&ref] | semmle.label | &... [&ref] | | test_cipher.rs:18:29:18:36 | [0u8; 16] | semmle.label | [0u8; 16] | -| test_cipher.rs:19:30:19:47 | ...::new | semmle.label | ...::new | +| test_cipher.rs:19:49:19:79 | ...::from_slice(...) | semmle.label | ...::from_slice(...) | | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref] | semmle.label | ...::from_slice(...) [&ref] | | test_cipher.rs:19:73:19:78 | const1 [&ref] | semmle.label | const1 [&ref] | | test_cipher.rs:25:9:25:14 | const4 [&ref] | semmle.label | const4 [&ref] | | test_cipher.rs:25:28:25:36 | &... [&ref] | semmle.label | &... [&ref] | | test_cipher.rs:25:29:25:36 | [0u8; 16] | semmle.label | [0u8; 16] | -| test_cipher.rs:26:30:26:40 | ...::new | semmle.label | ...::new | +| test_cipher.rs:26:42:26:72 | ...::from_slice(...) | semmle.label | ...::from_slice(...) | | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref] | semmle.label | ...::from_slice(...) [&ref] | | test_cipher.rs:26:66:26:71 | const4 [&ref] | semmle.label | const4 [&ref] | | test_cipher.rs:29:9:29:14 | const5 [&ref] | semmle.label | const5 [&ref] | | test_cipher.rs:29:28:29:36 | &... [&ref] | semmle.label | &... [&ref] | | test_cipher.rs:29:29:29:36 | [0u8; 16] | semmle.label | [0u8; 16] | -| test_cipher.rs:30:30:30:40 | ...::new | semmle.label | ...::new | +| test_cipher.rs:30:72:30:101 | ...::from_slice(...) | semmle.label | ...::from_slice(...) | | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref] | semmle.label | ...::from_slice(...) [&ref] | | test_cipher.rs:30:95:30:100 | const5 [&ref] | semmle.label | const5 [&ref] | | test_cipher.rs:37:9:37:14 | const7 | semmle.label | const7 | | test_cipher.rs:37:27:37:74 | [...] | semmle.label | [...] | -| test_cipher.rs:38:30:38:47 | ...::new | semmle.label | ...::new | +| test_cipher.rs:38:49:38:80 | ...::from_slice(...) | semmle.label | ...::from_slice(...) | | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | semmle.label | ...::from_slice(...) [&ref] | | test_cipher.rs:38:73:38:79 | &const7 [&ref] | semmle.label | &const7 [&ref] | | test_cipher.rs:38:74:38:79 | const7 | semmle.label | const7 | | test_cipher.rs:41:9:41:14 | const8 [&ref] | semmle.label | const8 [&ref] | | test_cipher.rs:41:28:41:76 | &... [&ref] | semmle.label | &... [&ref] | | test_cipher.rs:41:29:41:76 | [...] | semmle.label | [...] | -| test_cipher.rs:42:30:42:47 | ...::new | semmle.label | ...::new | +| test_cipher.rs:42:49:42:79 | ...::from_slice(...) | semmle.label | ...::from_slice(...) | | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | semmle.label | ...::from_slice(...) [&ref] | | test_cipher.rs:42:73:42:78 | const8 [&ref] | semmle.label | const8 [&ref] | | test_cipher.rs:50:9:50:15 | const10 [element] | semmle.label | const10 [element] | -| test_cipher.rs:50:37:50:52 | ...::zeroed | semmle.label | ...::zeroed | -| test_cipher.rs:50:37:50:54 | ...::zeroed(...) [element] | semmle.label | ...::zeroed(...) [element] | -| test_cipher.rs:51:31:51:48 | ...::new | semmle.label | ...::new | +| test_cipher.rs:50:37:50:54 | ...::zeroed(...) | semmle.label | ...::zeroed(...) | +| test_cipher.rs:51:50:51:82 | ...::from_slice(...) | semmle.label | ...::from_slice(...) | | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | semmle.label | ...::from_slice(...) [&ref, element] | | test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | semmle.label | &const10 [&ref, element] | | test_cipher.rs:51:75:51:81 | const10 [element] | semmle.label | const10 [element] | | test_cipher.rs:73:9:73:14 | const2 [&ref] | semmle.label | const2 [&ref] | | test_cipher.rs:73:18:73:26 | &... [&ref] | semmle.label | &... [&ref] | | test_cipher.rs:73:19:73:26 | [0u8; 32] | semmle.label | [0u8; 32] | -| test_cipher.rs:74:23:74:44 | ...::new_from_slice | semmle.label | ...::new_from_slice | -| test_cipher.rs:74:46:74:51 | const2 [&ref] | semmle.label | const2 [&ref] | +| test_cipher.rs:74:46:74:51 | const2 | semmle.label | const2 | | test_cookie.rs:17:9:17:14 | array1 | semmle.label | array1 | | test_cookie.rs:17:28:17:34 | [0; 64] | semmle.label | [0; 64] | -| test_cookie.rs:18:16:18:24 | ...::from | semmle.label | ...::from | +| test_cookie.rs:18:26:18:32 | &array1 | semmle.label | &array1 | | test_cookie.rs:18:26:18:32 | &array1 [&ref] | semmle.label | &array1 [&ref] | | test_cookie.rs:18:27:18:32 | array1 | semmle.label | array1 | | test_cookie.rs:21:9:21:14 | array2 | semmle.label | array2 | | test_cookie.rs:21:28:21:34 | [0; 64] | semmle.label | [0; 64] | -| test_cookie.rs:22:16:22:24 | ...::from | semmle.label | ...::from | +| test_cookie.rs:22:26:22:32 | &array2 | semmle.label | &array2 | | test_cookie.rs:22:26:22:32 | &array2 [&ref] | semmle.label | &array2 [&ref] | | test_cookie.rs:22:27:22:32 | array2 | semmle.label | array2 | | test_cookie.rs:38:9:38:14 | array2 | semmle.label | array2 | | test_cookie.rs:38:18:38:37 | ...::from(...) | semmle.label | ...::from(...) | | test_cookie.rs:38:28:38:36 | [0u8; 64] | semmle.label | [0u8; 64] | -| test_cookie.rs:42:14:42:32 | ...::from | semmle.label | ...::from | | test_cookie.rs:42:34:42:39 | array2 | semmle.label | array2 | | test_cookie.rs:49:9:49:14 | array3 [element] | semmle.label | array3 [element] | | test_cookie.rs:49:23:49:25 | 0u8 | semmle.label | 0u8 | | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | semmle.label | ...::from_elem(...) [element] | -| test_cookie.rs:53:14:53:32 | ...::from | semmle.label | ...::from | -| test_cookie.rs:53:34:53:39 | array3 [element] | semmle.label | array3 [element] | +| test_cookie.rs:53:34:53:39 | array3 | semmle.label | array3 | | test_heuristic.rs:38:25:38:30 | 0xFFFF | semmle.label | 0xFFFF | | test_heuristic.rs:39:25:39:59 | ... as u64 | semmle.label | ... as u64 | | test_heuristic.rs:39:62:40:33 | static MY_STATIC_3 | semmle.label | static MY_STATIC_3 | diff --git a/rust/ql/test/query-tests/security/CWE-825/AccessInvalidPointer.expected b/rust/ql/test/query-tests/security/CWE-825/AccessInvalidPointer.expected index d3b5456063ff..7ad86c1e8842 100644 --- a/rust/ql/test/query-tests/security/CWE-825/AccessInvalidPointer.expected +++ b/rust/ql/test/query-tests/security/CWE-825/AccessInvalidPointer.expected @@ -1,87 +1,70 @@ #select -| deallocation.rs:26:15:26:16 | m1 | deallocation.rs:20:3:20:21 | ...::dealloc | deallocation.rs:26:15:26:16 | m1 | This operation dereferences a pointer that may be $@. | deallocation.rs:20:3:20:21 | ...::dealloc | invalid | -| deallocation.rs:37:14:37:33 | ...::read::<...> | deallocation.rs:20:3:20:21 | ...::dealloc | deallocation.rs:37:14:37:33 | ...::read::<...> | This operation dereferences a pointer that may be $@. | deallocation.rs:20:3:20:21 | ...::dealloc | invalid | -| deallocation.rs:44:6:44:7 | m1 | deallocation.rs:20:3:20:21 | ...::dealloc | deallocation.rs:44:6:44:7 | m1 | This operation dereferences a pointer that may be $@. | deallocation.rs:20:3:20:21 | ...::dealloc | invalid | -| deallocation.rs:49:5:49:25 | ...::write::<...> | deallocation.rs:20:3:20:21 | ...::dealloc | deallocation.rs:49:5:49:25 | ...::write::<...> | This operation dereferences a pointer that may be $@. | deallocation.rs:20:3:20:21 | ...::dealloc | invalid | -| deallocation.rs:76:16:76:17 | m2 | deallocation.rs:70:3:70:21 | ...::dealloc | deallocation.rs:76:16:76:17 | m2 | This operation dereferences a pointer that may be $@. | deallocation.rs:70:3:70:21 | ...::dealloc | invalid | -| deallocation.rs:81:16:81:17 | m2 | deallocation.rs:70:3:70:21 | ...::dealloc | deallocation.rs:81:16:81:17 | m2 | This operation dereferences a pointer that may be $@. | deallocation.rs:70:3:70:21 | ...::dealloc | invalid | -| deallocation.rs:86:7:86:8 | m2 | deallocation.rs:70:3:70:21 | ...::dealloc | deallocation.rs:86:7:86:8 | m2 | This operation dereferences a pointer that may be $@. | deallocation.rs:70:3:70:21 | ...::dealloc | invalid | -| deallocation.rs:90:7:90:8 | m2 | deallocation.rs:70:3:70:21 | ...::dealloc | deallocation.rs:90:7:90:8 | m2 | This operation dereferences a pointer that may be $@. | deallocation.rs:70:3:70:21 | ...::dealloc | invalid | -| deallocation.rs:95:5:95:31 | ...::write::<...> | deallocation.rs:70:3:70:21 | ...::dealloc | deallocation.rs:95:5:95:31 | ...::write::<...> | This operation dereferences a pointer that may be $@. | deallocation.rs:70:3:70:21 | ...::dealloc | invalid | -| deallocation.rs:115:13:115:18 | my_ptr | deallocation.rs:112:3:112:12 | ...::free | deallocation.rs:115:13:115:18 | my_ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:112:3:112:12 | ...::free | invalid | -| deallocation.rs:130:14:130:15 | p1 | deallocation.rs:123:23:123:40 | ...::dangling | deallocation.rs:130:14:130:15 | p1 | This operation dereferences a pointer that may be $@. | deallocation.rs:123:23:123:40 | ...::dangling | invalid | -| deallocation.rs:131:14:131:15 | p2 | deallocation.rs:124:21:124:42 | ...::dangling_mut | deallocation.rs:131:14:131:15 | p2 | This operation dereferences a pointer that may be $@. | deallocation.rs:124:21:124:42 | ...::dangling_mut | invalid | -| deallocation.rs:132:14:132:15 | p3 | deallocation.rs:125:23:125:36 | ...::null | deallocation.rs:132:14:132:15 | p3 | This operation dereferences a pointer that may be $@. | deallocation.rs:125:23:125:36 | ...::null | invalid | -| deallocation.rs:163:13:163:15 | ptr | deallocation.rs:159:9:159:26 | ...::null_mut | deallocation.rs:163:13:163:15 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:159:9:159:26 | ...::null_mut | invalid | -| deallocation.rs:166:13:166:15 | ptr | deallocation.rs:159:9:159:26 | ...::null_mut | deallocation.rs:166:13:166:15 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:159:9:159:26 | ...::null_mut | invalid | -| deallocation.rs:175:13:175:15 | ptr | deallocation.rs:171:9:171:26 | ...::null_mut | deallocation.rs:175:13:175:15 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:171:9:171:26 | ...::null_mut | invalid | -| deallocation.rs:178:13:178:15 | ptr | deallocation.rs:171:9:171:26 | ...::null_mut | deallocation.rs:178:13:178:15 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:171:9:171:26 | ...::null_mut | invalid | -| deallocation.rs:186:24:186:26 | ptr | deallocation.rs:183:9:183:26 | ...::null_mut | deallocation.rs:186:24:186:26 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:183:9:183:26 | ...::null_mut | invalid | -| deallocation.rs:190:24:190:26 | ptr | deallocation.rs:183:9:183:26 | ...::null_mut | deallocation.rs:190:24:190:26 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:183:9:183:26 | ...::null_mut | invalid | -| deallocation.rs:194:25:194:27 | ptr | deallocation.rs:183:9:183:26 | ...::null_mut | deallocation.rs:194:25:194:27 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:183:9:183:26 | ...::null_mut | invalid | -| deallocation.rs:202:24:202:26 | ptr | deallocation.rs:183:9:183:26 | ...::null_mut | deallocation.rs:202:24:202:26 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:183:9:183:26 | ...::null_mut | invalid | -| deallocation.rs:202:24:202:26 | ptr | deallocation.rs:199:9:199:26 | ...::null_mut | deallocation.rs:202:24:202:26 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:199:9:199:26 | ...::null_mut | invalid | -| deallocation.rs:210:7:210:9 | ptr | deallocation.rs:183:9:183:26 | ...::null_mut | deallocation.rs:210:7:210:9 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:183:9:183:26 | ...::null_mut | invalid | -| deallocation.rs:210:7:210:9 | ptr | deallocation.rs:199:9:199:26 | ...::null_mut | deallocation.rs:210:7:210:9 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:199:9:199:26 | ...::null_mut | invalid | -| deallocation.rs:210:7:210:9 | ptr | deallocation.rs:207:9:207:26 | ...::null_mut | deallocation.rs:210:7:210:9 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:207:9:207:26 | ...::null_mut | invalid | -| deallocation.rs:226:13:226:21 | const_ptr | deallocation.rs:219:15:219:32 | ...::null_mut | deallocation.rs:226:13:226:21 | const_ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:219:15:219:32 | ...::null_mut | invalid | -| deallocation.rs:274:15:274:16 | p1 | deallocation.rs:270:3:270:25 | ...::drop_in_place | deallocation.rs:274:15:274:16 | p1 | This operation dereferences a pointer that may be $@. | deallocation.rs:270:3:270:25 | ...::drop_in_place | invalid | -| deallocation.rs:342:18:342:20 | ptr | deallocation.rs:336:3:336:25 | ...::drop_in_place | deallocation.rs:342:18:342:20 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:336:3:336:25 | ...::drop_in_place | invalid | +| deallocation.rs:26:15:26:16 | m1 | deallocation.rs:20:23:20:24 | m1 | deallocation.rs:26:15:26:16 | m1 | This operation dereferences a pointer that may be $@. | deallocation.rs:20:23:20:24 | m1 | invalid | +| deallocation.rs:37:35:37:36 | m1 | deallocation.rs:20:23:20:24 | m1 | deallocation.rs:37:35:37:36 | m1 | This operation dereferences a pointer that may be $@. | deallocation.rs:20:23:20:24 | m1 | invalid | +| deallocation.rs:44:6:44:7 | m1 | deallocation.rs:20:23:20:24 | m1 | deallocation.rs:44:6:44:7 | m1 | This operation dereferences a pointer that may be $@. | deallocation.rs:20:23:20:24 | m1 | invalid | +| deallocation.rs:49:27:49:28 | m1 | deallocation.rs:20:23:20:24 | m1 | deallocation.rs:49:27:49:28 | m1 | This operation dereferences a pointer that may be $@. | deallocation.rs:20:23:20:24 | m1 | invalid | +| deallocation.rs:76:16:76:17 | m2 | deallocation.rs:70:23:70:35 | m2 as ... | deallocation.rs:76:16:76:17 | m2 | This operation dereferences a pointer that may be $@. | deallocation.rs:70:23:70:35 | m2 as ... | invalid | +| deallocation.rs:81:16:81:17 | m2 | deallocation.rs:70:23:70:35 | m2 as ... | deallocation.rs:81:16:81:17 | m2 | This operation dereferences a pointer that may be $@. | deallocation.rs:70:23:70:35 | m2 as ... | invalid | +| deallocation.rs:86:7:86:8 | m2 | deallocation.rs:70:23:70:35 | m2 as ... | deallocation.rs:86:7:86:8 | m2 | This operation dereferences a pointer that may be $@. | deallocation.rs:70:23:70:35 | m2 as ... | invalid | +| deallocation.rs:90:7:90:8 | m2 | deallocation.rs:70:23:70:35 | m2 as ... | deallocation.rs:90:7:90:8 | m2 | This operation dereferences a pointer that may be $@. | deallocation.rs:70:23:70:35 | m2 as ... | invalid | +| deallocation.rs:95:33:95:34 | m2 | deallocation.rs:70:23:70:35 | m2 as ... | deallocation.rs:95:33:95:34 | m2 | This operation dereferences a pointer that may be $@. | deallocation.rs:70:23:70:35 | m2 as ... | invalid | +| deallocation.rs:115:13:115:18 | my_ptr | deallocation.rs:112:14:112:40 | my_ptr as ... | deallocation.rs:115:13:115:18 | my_ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:112:14:112:40 | my_ptr as ... | invalid | +| deallocation.rs:130:14:130:15 | p1 | deallocation.rs:123:23:123:42 | ...::dangling(...) | deallocation.rs:130:14:130:15 | p1 | This operation dereferences a pointer that may be $@. | deallocation.rs:123:23:123:42 | ...::dangling(...) | invalid | +| deallocation.rs:131:14:131:15 | p2 | deallocation.rs:124:21:124:44 | ...::dangling_mut(...) | deallocation.rs:131:14:131:15 | p2 | This operation dereferences a pointer that may be $@. | deallocation.rs:124:21:124:44 | ...::dangling_mut(...) | invalid | +| deallocation.rs:132:14:132:15 | p3 | deallocation.rs:125:23:125:38 | ...::null(...) | deallocation.rs:132:14:132:15 | p3 | This operation dereferences a pointer that may be $@. | deallocation.rs:125:23:125:38 | ...::null(...) | invalid | +| deallocation.rs:163:13:163:15 | ptr | deallocation.rs:159:9:159:28 | ...::null_mut(...) | deallocation.rs:163:13:163:15 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:159:9:159:28 | ...::null_mut(...) | invalid | +| deallocation.rs:166:13:166:15 | ptr | deallocation.rs:159:9:159:28 | ...::null_mut(...) | deallocation.rs:166:13:166:15 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:159:9:159:28 | ...::null_mut(...) | invalid | +| deallocation.rs:175:13:175:15 | ptr | deallocation.rs:171:9:171:28 | ...::null_mut(...) | deallocation.rs:175:13:175:15 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:171:9:171:28 | ...::null_mut(...) | invalid | +| deallocation.rs:178:13:178:15 | ptr | deallocation.rs:171:9:171:28 | ...::null_mut(...) | deallocation.rs:178:13:178:15 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:171:9:171:28 | ...::null_mut(...) | invalid | +| deallocation.rs:186:24:186:26 | ptr | deallocation.rs:183:9:183:28 | ...::null_mut(...) | deallocation.rs:186:24:186:26 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:183:9:183:28 | ...::null_mut(...) | invalid | +| deallocation.rs:190:24:190:26 | ptr | deallocation.rs:183:9:183:28 | ...::null_mut(...) | deallocation.rs:190:24:190:26 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:183:9:183:28 | ...::null_mut(...) | invalid | +| deallocation.rs:194:25:194:27 | ptr | deallocation.rs:183:9:183:28 | ...::null_mut(...) | deallocation.rs:194:25:194:27 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:183:9:183:28 | ...::null_mut(...) | invalid | +| deallocation.rs:202:24:202:26 | ptr | deallocation.rs:183:9:183:28 | ...::null_mut(...) | deallocation.rs:202:24:202:26 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:183:9:183:28 | ...::null_mut(...) | invalid | +| deallocation.rs:202:24:202:26 | ptr | deallocation.rs:199:9:199:28 | ...::null_mut(...) | deallocation.rs:202:24:202:26 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:199:9:199:28 | ...::null_mut(...) | invalid | +| deallocation.rs:210:7:210:9 | ptr | deallocation.rs:183:9:183:28 | ...::null_mut(...) | deallocation.rs:210:7:210:9 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:183:9:183:28 | ...::null_mut(...) | invalid | +| deallocation.rs:210:7:210:9 | ptr | deallocation.rs:199:9:199:28 | ...::null_mut(...) | deallocation.rs:210:7:210:9 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:199:9:199:28 | ...::null_mut(...) | invalid | +| deallocation.rs:210:7:210:9 | ptr | deallocation.rs:207:9:207:28 | ...::null_mut(...) | deallocation.rs:210:7:210:9 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:207:9:207:28 | ...::null_mut(...) | invalid | +| deallocation.rs:226:13:226:21 | const_ptr | deallocation.rs:219:15:219:34 | ...::null_mut(...) | deallocation.rs:226:13:226:21 | const_ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:219:15:219:34 | ...::null_mut(...) | invalid | +| deallocation.rs:274:15:274:16 | p1 | deallocation.rs:270:27:270:28 | p1 | deallocation.rs:274:15:274:16 | p1 | This operation dereferences a pointer that may be $@. | deallocation.rs:270:27:270:28 | p1 | invalid | +| deallocation.rs:342:18:342:20 | ptr | deallocation.rs:336:27:336:29 | ptr | deallocation.rs:342:18:342:20 | ptr | This operation dereferences a pointer that may be $@. | deallocation.rs:336:27:336:29 | ptr | invalid | edges -| deallocation.rs:20:3:20:21 | ...::dealloc | deallocation.rs:20:23:20:24 | [post] m1 | provenance | Src:MaD:3 MaD:3 | -| deallocation.rs:20:23:20:24 | [post] m1 | deallocation.rs:26:15:26:16 | m1 | provenance | | -| deallocation.rs:20:23:20:24 | [post] m1 | deallocation.rs:37:35:37:36 | m1 | provenance | | -| deallocation.rs:20:23:20:24 | [post] m1 | deallocation.rs:44:6:44:7 | m1 | provenance | | -| deallocation.rs:20:23:20:24 | [post] m1 | deallocation.rs:49:27:49:28 | m1 | provenance | | -| deallocation.rs:37:35:37:36 | m1 | deallocation.rs:37:14:37:33 | ...::read::<...> | provenance | MaD:1 Sink:MaD:1 | -| deallocation.rs:49:27:49:28 | m1 | deallocation.rs:49:5:49:25 | ...::write::<...> | provenance | MaD:2 Sink:MaD:2 | -| deallocation.rs:70:3:70:21 | ...::dealloc | deallocation.rs:70:23:70:35 | [post] m2 as ... | provenance | Src:MaD:3 MaD:3 | -| deallocation.rs:70:23:70:35 | [post] m2 as ... | deallocation.rs:76:16:76:17 | m2 | provenance | | -| deallocation.rs:70:23:70:35 | [post] m2 as ... | deallocation.rs:81:16:81:17 | m2 | provenance | | -| deallocation.rs:70:23:70:35 | [post] m2 as ... | deallocation.rs:86:7:86:8 | m2 | provenance | | -| deallocation.rs:70:23:70:35 | [post] m2 as ... | deallocation.rs:90:7:90:8 | m2 | provenance | | -| deallocation.rs:70:23:70:35 | [post] m2 as ... | deallocation.rs:95:33:95:34 | m2 | provenance | | -| deallocation.rs:95:33:95:34 | m2 | deallocation.rs:95:5:95:31 | ...::write::<...> | provenance | MaD:2 Sink:MaD:2 | -| deallocation.rs:112:3:112:12 | ...::free | deallocation.rs:112:14:112:40 | [post] my_ptr as ... | provenance | Src:MaD:9 MaD:9 | -| deallocation.rs:112:14:112:40 | [post] my_ptr as ... | deallocation.rs:115:13:115:18 | my_ptr | provenance | | +| deallocation.rs:20:23:20:24 | m1 | deallocation.rs:26:15:26:16 | m1 | provenance | Src:MaD:3 MaD:3 | +| deallocation.rs:20:23:20:24 | m1 | deallocation.rs:37:35:37:36 | m1 | provenance | Src:MaD:3 MaD:3 Sink:MaD:1 | +| deallocation.rs:20:23:20:24 | m1 | deallocation.rs:44:6:44:7 | m1 | provenance | Src:MaD:3 MaD:3 | +| deallocation.rs:20:23:20:24 | m1 | deallocation.rs:49:27:49:28 | m1 | provenance | Src:MaD:3 MaD:3 Sink:MaD:2 | +| deallocation.rs:70:23:70:35 | m2 as ... | deallocation.rs:76:16:76:17 | m2 | provenance | Src:MaD:3 MaD:3 | +| deallocation.rs:70:23:70:35 | m2 as ... | deallocation.rs:81:16:81:17 | m2 | provenance | Src:MaD:3 MaD:3 | +| deallocation.rs:70:23:70:35 | m2 as ... | deallocation.rs:86:7:86:8 | m2 | provenance | Src:MaD:3 MaD:3 | +| deallocation.rs:70:23:70:35 | m2 as ... | deallocation.rs:90:7:90:8 | m2 | provenance | Src:MaD:3 MaD:3 | +| deallocation.rs:70:23:70:35 | m2 as ... | deallocation.rs:95:33:95:34 | m2 | provenance | Src:MaD:3 MaD:3 Sink:MaD:2 | +| deallocation.rs:112:14:112:40 | my_ptr as ... | deallocation.rs:115:13:115:18 | my_ptr | provenance | Src:MaD:9 MaD:9 | | deallocation.rs:123:6:123:7 | p1 | deallocation.rs:130:14:130:15 | p1 | provenance | | -| deallocation.rs:123:23:123:40 | ...::dangling | deallocation.rs:123:23:123:42 | ...::dangling(...) | provenance | Src:MaD:4 MaD:4 | -| deallocation.rs:123:23:123:42 | ...::dangling(...) | deallocation.rs:123:6:123:7 | p1 | provenance | | +| deallocation.rs:123:23:123:42 | ...::dangling(...) | deallocation.rs:123:6:123:7 | p1 | provenance | Src:MaD:4 MaD:4 | | deallocation.rs:124:6:124:7 | p2 | deallocation.rs:131:14:131:15 | p2 | provenance | | -| deallocation.rs:124:21:124:42 | ...::dangling_mut | deallocation.rs:124:21:124:44 | ...::dangling_mut(...) | provenance | Src:MaD:5 MaD:5 | -| deallocation.rs:124:21:124:44 | ...::dangling_mut(...) | deallocation.rs:124:6:124:7 | p2 | provenance | | +| deallocation.rs:124:21:124:44 | ...::dangling_mut(...) | deallocation.rs:124:6:124:7 | p2 | provenance | Src:MaD:5 MaD:5 | | deallocation.rs:125:6:125:7 | p3 | deallocation.rs:132:14:132:15 | p3 | provenance | | -| deallocation.rs:125:23:125:36 | ...::null | deallocation.rs:125:23:125:38 | ...::null(...) | provenance | Src:MaD:7 MaD:7 | -| deallocation.rs:125:23:125:38 | ...::null(...) | deallocation.rs:125:6:125:7 | p3 | provenance | | +| deallocation.rs:125:23:125:38 | ...::null(...) | deallocation.rs:125:6:125:7 | p3 | provenance | Src:MaD:7 MaD:7 | | deallocation.rs:159:3:159:5 | ptr | deallocation.rs:163:13:163:15 | ptr | provenance | | | deallocation.rs:159:3:159:5 | ptr | deallocation.rs:166:13:166:15 | ptr | provenance | | -| deallocation.rs:159:9:159:26 | ...::null_mut | deallocation.rs:159:9:159:28 | ...::null_mut(...) | provenance | Src:MaD:8 MaD:8 | -| deallocation.rs:159:9:159:28 | ...::null_mut(...) | deallocation.rs:159:3:159:5 | ptr | provenance | | +| deallocation.rs:159:9:159:28 | ...::null_mut(...) | deallocation.rs:159:3:159:5 | ptr | provenance | Src:MaD:8 MaD:8 | | deallocation.rs:171:3:171:5 | ptr | deallocation.rs:175:13:175:15 | ptr | provenance | | | deallocation.rs:171:3:171:5 | ptr | deallocation.rs:178:13:178:15 | ptr | provenance | | -| deallocation.rs:171:9:171:26 | ...::null_mut | deallocation.rs:171:9:171:28 | ...::null_mut(...) | provenance | Src:MaD:8 MaD:8 | -| deallocation.rs:171:9:171:28 | ...::null_mut(...) | deallocation.rs:171:3:171:5 | ptr | provenance | | +| deallocation.rs:171:9:171:28 | ...::null_mut(...) | deallocation.rs:171:3:171:5 | ptr | provenance | Src:MaD:8 MaD:8 | | deallocation.rs:183:3:183:5 | ptr | deallocation.rs:186:24:186:26 | ptr | provenance | | | deallocation.rs:183:3:183:5 | ptr | deallocation.rs:190:24:190:26 | ptr | provenance | | | deallocation.rs:183:3:183:5 | ptr | deallocation.rs:194:25:194:27 | ptr | provenance | | | deallocation.rs:183:3:183:5 | ptr | deallocation.rs:202:24:202:26 | ptr | provenance | | | deallocation.rs:183:3:183:5 | ptr | deallocation.rs:210:7:210:9 | ptr | provenance | | -| deallocation.rs:183:9:183:26 | ...::null_mut | deallocation.rs:183:9:183:28 | ...::null_mut(...) | provenance | Src:MaD:8 MaD:8 | -| deallocation.rs:183:9:183:28 | ...::null_mut(...) | deallocation.rs:183:3:183:5 | ptr | provenance | | +| deallocation.rs:183:9:183:28 | ...::null_mut(...) | deallocation.rs:183:3:183:5 | ptr | provenance | Src:MaD:8 MaD:8 | | deallocation.rs:199:3:199:5 | ptr | deallocation.rs:202:24:202:26 | ptr | provenance | | | deallocation.rs:199:3:199:5 | ptr | deallocation.rs:210:7:210:9 | ptr | provenance | | -| deallocation.rs:199:9:199:26 | ...::null_mut | deallocation.rs:199:9:199:28 | ...::null_mut(...) | provenance | Src:MaD:8 MaD:8 | -| deallocation.rs:199:9:199:28 | ...::null_mut(...) | deallocation.rs:199:3:199:5 | ptr | provenance | | +| deallocation.rs:199:9:199:28 | ...::null_mut(...) | deallocation.rs:199:3:199:5 | ptr | provenance | Src:MaD:8 MaD:8 | | deallocation.rs:207:3:207:5 | ptr | deallocation.rs:210:7:210:9 | ptr | provenance | | -| deallocation.rs:207:9:207:26 | ...::null_mut | deallocation.rs:207:9:207:28 | ...::null_mut(...) | provenance | Src:MaD:8 MaD:8 | -| deallocation.rs:207:9:207:28 | ...::null_mut(...) | deallocation.rs:207:3:207:5 | ptr | provenance | | +| deallocation.rs:207:9:207:28 | ...::null_mut(...) | deallocation.rs:207:3:207:5 | ptr | provenance | Src:MaD:8 MaD:8 | | deallocation.rs:219:3:219:11 | const_ptr | deallocation.rs:226:13:226:21 | const_ptr | provenance | | -| deallocation.rs:219:15:219:32 | ...::null_mut | deallocation.rs:219:15:219:34 | ...::null_mut(...) | provenance | Src:MaD:8 MaD:8 | -| deallocation.rs:219:15:219:34 | ...::null_mut(...) | deallocation.rs:219:3:219:11 | const_ptr | provenance | | -| deallocation.rs:270:3:270:25 | ...::drop_in_place | deallocation.rs:270:27:270:28 | [post] p1 | provenance | Src:MaD:6 MaD:6 | -| deallocation.rs:270:27:270:28 | [post] p1 | deallocation.rs:274:15:274:16 | p1 | provenance | | -| deallocation.rs:336:3:336:25 | ...::drop_in_place | deallocation.rs:336:27:336:29 | [post] ptr | provenance | Src:MaD:6 MaD:6 | -| deallocation.rs:336:27:336:29 | [post] ptr | deallocation.rs:342:18:342:20 | ptr | provenance | | +| deallocation.rs:219:15:219:34 | ...::null_mut(...) | deallocation.rs:219:3:219:11 | const_ptr | provenance | Src:MaD:8 MaD:8 | +| deallocation.rs:270:27:270:28 | p1 | deallocation.rs:274:15:274:16 | p1 | provenance | Src:MaD:6 MaD:6 | +| deallocation.rs:336:27:336:29 | ptr | deallocation.rs:342:18:342:20 | ptr | provenance | Src:MaD:6 MaD:6 | models | 1 | Sink: core::ptr::read; Argument[0]; pointer-access | | 2 | Sink: core::ptr::write; Argument[0]; pointer-access | @@ -93,69 +76,52 @@ models | 8 | Source: core::ptr::null_mut; ReturnValue; pointer-invalidate | | 9 | Source: libc::unix::free; Argument[0]; pointer-invalidate | nodes -| deallocation.rs:20:3:20:21 | ...::dealloc | semmle.label | ...::dealloc | -| deallocation.rs:20:23:20:24 | [post] m1 | semmle.label | [post] m1 | +| deallocation.rs:20:23:20:24 | m1 | semmle.label | m1 | | deallocation.rs:26:15:26:16 | m1 | semmle.label | m1 | -| deallocation.rs:37:14:37:33 | ...::read::<...> | semmle.label | ...::read::<...> | | deallocation.rs:37:35:37:36 | m1 | semmle.label | m1 | | deallocation.rs:44:6:44:7 | m1 | semmle.label | m1 | -| deallocation.rs:49:5:49:25 | ...::write::<...> | semmle.label | ...::write::<...> | | deallocation.rs:49:27:49:28 | m1 | semmle.label | m1 | -| deallocation.rs:70:3:70:21 | ...::dealloc | semmle.label | ...::dealloc | -| deallocation.rs:70:23:70:35 | [post] m2 as ... | semmle.label | [post] m2 as ... | +| deallocation.rs:70:23:70:35 | m2 as ... | semmle.label | m2 as ... | | deallocation.rs:76:16:76:17 | m2 | semmle.label | m2 | | deallocation.rs:81:16:81:17 | m2 | semmle.label | m2 | | deallocation.rs:86:7:86:8 | m2 | semmle.label | m2 | | deallocation.rs:90:7:90:8 | m2 | semmle.label | m2 | -| deallocation.rs:95:5:95:31 | ...::write::<...> | semmle.label | ...::write::<...> | | deallocation.rs:95:33:95:34 | m2 | semmle.label | m2 | -| deallocation.rs:112:3:112:12 | ...::free | semmle.label | ...::free | -| deallocation.rs:112:14:112:40 | [post] my_ptr as ... | semmle.label | [post] my_ptr as ... | +| deallocation.rs:112:14:112:40 | my_ptr as ... | semmle.label | my_ptr as ... | | deallocation.rs:115:13:115:18 | my_ptr | semmle.label | my_ptr | | deallocation.rs:123:6:123:7 | p1 | semmle.label | p1 | -| deallocation.rs:123:23:123:40 | ...::dangling | semmle.label | ...::dangling | | deallocation.rs:123:23:123:42 | ...::dangling(...) | semmle.label | ...::dangling(...) | | deallocation.rs:124:6:124:7 | p2 | semmle.label | p2 | -| deallocation.rs:124:21:124:42 | ...::dangling_mut | semmle.label | ...::dangling_mut | | deallocation.rs:124:21:124:44 | ...::dangling_mut(...) | semmle.label | ...::dangling_mut(...) | | deallocation.rs:125:6:125:7 | p3 | semmle.label | p3 | -| deallocation.rs:125:23:125:36 | ...::null | semmle.label | ...::null | | deallocation.rs:125:23:125:38 | ...::null(...) | semmle.label | ...::null(...) | | deallocation.rs:130:14:130:15 | p1 | semmle.label | p1 | | deallocation.rs:131:14:131:15 | p2 | semmle.label | p2 | | deallocation.rs:132:14:132:15 | p3 | semmle.label | p3 | | deallocation.rs:159:3:159:5 | ptr | semmle.label | ptr | -| deallocation.rs:159:9:159:26 | ...::null_mut | semmle.label | ...::null_mut | | deallocation.rs:159:9:159:28 | ...::null_mut(...) | semmle.label | ...::null_mut(...) | | deallocation.rs:163:13:163:15 | ptr | semmle.label | ptr | | deallocation.rs:166:13:166:15 | ptr | semmle.label | ptr | | deallocation.rs:171:3:171:5 | ptr | semmle.label | ptr | -| deallocation.rs:171:9:171:26 | ...::null_mut | semmle.label | ...::null_mut | | deallocation.rs:171:9:171:28 | ...::null_mut(...) | semmle.label | ...::null_mut(...) | | deallocation.rs:175:13:175:15 | ptr | semmle.label | ptr | | deallocation.rs:178:13:178:15 | ptr | semmle.label | ptr | | deallocation.rs:183:3:183:5 | ptr | semmle.label | ptr | -| deallocation.rs:183:9:183:26 | ...::null_mut | semmle.label | ...::null_mut | | deallocation.rs:183:9:183:28 | ...::null_mut(...) | semmle.label | ...::null_mut(...) | | deallocation.rs:186:24:186:26 | ptr | semmle.label | ptr | | deallocation.rs:190:24:190:26 | ptr | semmle.label | ptr | | deallocation.rs:194:25:194:27 | ptr | semmle.label | ptr | | deallocation.rs:199:3:199:5 | ptr | semmle.label | ptr | -| deallocation.rs:199:9:199:26 | ...::null_mut | semmle.label | ...::null_mut | | deallocation.rs:199:9:199:28 | ...::null_mut(...) | semmle.label | ...::null_mut(...) | | deallocation.rs:202:24:202:26 | ptr | semmle.label | ptr | | deallocation.rs:207:3:207:5 | ptr | semmle.label | ptr | -| deallocation.rs:207:9:207:26 | ...::null_mut | semmle.label | ...::null_mut | | deallocation.rs:207:9:207:28 | ...::null_mut(...) | semmle.label | ...::null_mut(...) | | deallocation.rs:210:7:210:9 | ptr | semmle.label | ptr | | deallocation.rs:219:3:219:11 | const_ptr | semmle.label | const_ptr | -| deallocation.rs:219:15:219:32 | ...::null_mut | semmle.label | ...::null_mut | | deallocation.rs:219:15:219:34 | ...::null_mut(...) | semmle.label | ...::null_mut(...) | | deallocation.rs:226:13:226:21 | const_ptr | semmle.label | const_ptr | -| deallocation.rs:270:3:270:25 | ...::drop_in_place | semmle.label | ...::drop_in_place | -| deallocation.rs:270:27:270:28 | [post] p1 | semmle.label | [post] p1 | +| deallocation.rs:270:27:270:28 | p1 | semmle.label | p1 | | deallocation.rs:274:15:274:16 | p1 | semmle.label | p1 | -| deallocation.rs:336:3:336:25 | ...::drop_in_place | semmle.label | ...::drop_in_place | -| deallocation.rs:336:27:336:29 | [post] ptr | semmle.label | [post] ptr | +| deallocation.rs:336:27:336:29 | ptr | semmle.label | ptr | | deallocation.rs:342:18:342:20 | ptr | semmle.label | ptr | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-918/RequestForgery.expected b/rust/ql/test/query-tests/security/CWE-918/RequestForgery.expected index 0f931ed3a0f8..23e8f009d13a 100644 --- a/rust/ql/test/query-tests/security/CWE-918/RequestForgery.expected +++ b/rust/ql/test/query-tests/security/CWE-918/RequestForgery.expected @@ -1,11 +1,11 @@ #select -| request_forgery_tests.rs:8:24:8:35 | ...::get | request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:8:24:8:35 | ...::get | The URL of this request depends on a $@. | request_forgery_tests.rs:5:29:5:36 | user_url | user-provided value | -| request_forgery_tests.rs:17:25:17:36 | ...::get | request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:17:25:17:36 | ...::get | The URL of this request depends on a $@. | request_forgery_tests.rs:5:29:5:36 | user_url | user-provided value | -| request_forgery_tests.rs:21:25:21:36 | ...::get | request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:21:25:21:36 | ...::get | The URL of this request depends on a $@. | request_forgery_tests.rs:5:29:5:36 | user_url | user-provided value | -| request_forgery_tests.rs:25:25:25:36 | ...::get | request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:25:25:25:36 | ...::get | The URL of this request depends on a $@. | request_forgery_tests.rs:5:29:5:36 | user_url | user-provided value | -| request_forgery_tests.rs:31:29:31:40 | ...::get | request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:31:29:31:40 | ...::get | The URL of this request depends on a $@. | request_forgery_tests.rs:5:29:5:36 | user_url | user-provided value | -| request_forgery_tests.rs:37:37:37:48 | ...::get | request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:37:37:37:48 | ...::get | The URL of this request depends on a $@. | request_forgery_tests.rs:5:29:5:36 | user_url | user-provided value | -| request_forgery_tests.rs:68:28:68:39 | ...::get | request_forgery_tests.rs:65:33:65:40 | and_then | request_forgery_tests.rs:68:28:68:39 | ...::get | The URL of this request depends on a $@. | request_forgery_tests.rs:65:33:65:40 | and_then | user-provided value | +| request_forgery_tests.rs:8:37:8:45 | &user_url | request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:8:37:8:45 | &user_url | The URL of this request depends on a $@. | request_forgery_tests.rs:5:29:5:36 | user_url | user-provided value | +| request_forgery_tests.rs:17:38:17:41 | &url | request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:17:38:17:41 | &url | The URL of this request depends on a $@. | request_forgery_tests.rs:5:29:5:36 | user_url | user-provided value | +| request_forgery_tests.rs:21:38:21:41 | &url | request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:21:38:21:41 | &url | The URL of this request depends on a $@. | request_forgery_tests.rs:5:29:5:36 | user_url | user-provided value | +| request_forgery_tests.rs:25:38:25:41 | &url | request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:25:38:25:41 | &url | The URL of this request depends on a $@. | request_forgery_tests.rs:5:29:5:36 | user_url | user-provided value | +| request_forgery_tests.rs:31:42:31:50 | &user_url | request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:31:42:31:50 | &user_url | The URL of this request depends on a $@. | request_forgery_tests.rs:5:29:5:36 | user_url | user-provided value | +| request_forgery_tests.rs:37:50:37:58 | &user_url | request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:37:50:37:58 | &user_url | The URL of this request depends on a $@. | request_forgery_tests.rs:5:29:5:36 | user_url | user-provided value | +| request_forgery_tests.rs:68:41:68:42 | &a | request_forgery_tests.rs:65:13:73:10 | ... .and_then(...) | request_forgery_tests.rs:68:41:68:42 | &a | The URL of this request depends on a $@. | request_forgery_tests.rs:65:13:73:10 | ... .and_then(...) | user-provided value | edges | request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:8:38:8:45 | user_url | provenance | | | request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:16:27:16:49 | MacroExpr | provenance | | @@ -13,36 +13,36 @@ edges | request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:24:27:24:70 | MacroExpr | provenance | | | request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:31:43:31:50 | user_url | provenance | | | request_forgery_tests.rs:5:29:5:36 | user_url | request_forgery_tests.rs:37:51:37:58 | user_url | provenance | | -| request_forgery_tests.rs:8:37:8:45 | &user_url [&ref] | request_forgery_tests.rs:8:24:8:35 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| request_forgery_tests.rs:8:37:8:45 | &user_url [&ref] | request_forgery_tests.rs:8:37:8:45 | &user_url | provenance | MaD:1 Sink:MaD:1 | | request_forgery_tests.rs:8:38:8:45 | user_url | request_forgery_tests.rs:8:37:8:45 | &user_url [&ref] | provenance | | | request_forgery_tests.rs:16:13:16:15 | url | request_forgery_tests.rs:17:39:17:41 | url | provenance | | | request_forgery_tests.rs:16:27:16:49 | ...::format(...) | request_forgery_tests.rs:16:27:16:49 | { ... } | provenance | | | request_forgery_tests.rs:16:27:16:49 | ...::must_use(...) | request_forgery_tests.rs:16:13:16:15 | url | provenance | | | request_forgery_tests.rs:16:27:16:49 | MacroExpr | request_forgery_tests.rs:16:27:16:49 | ...::format(...) | provenance | MaD:3 | | request_forgery_tests.rs:16:27:16:49 | { ... } | request_forgery_tests.rs:16:27:16:49 | ...::must_use(...) | provenance | MaD:4 | -| request_forgery_tests.rs:17:38:17:41 | &url [&ref] | request_forgery_tests.rs:17:25:17:36 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| request_forgery_tests.rs:17:38:17:41 | &url [&ref] | request_forgery_tests.rs:17:38:17:41 | &url | provenance | MaD:1 Sink:MaD:1 | | request_forgery_tests.rs:17:39:17:41 | url | request_forgery_tests.rs:17:38:17:41 | &url [&ref] | provenance | | | request_forgery_tests.rs:20:13:20:15 | url | request_forgery_tests.rs:21:39:21:41 | url | provenance | | | request_forgery_tests.rs:20:27:20:57 | ...::format(...) | request_forgery_tests.rs:20:27:20:57 | { ... } | provenance | | | request_forgery_tests.rs:20:27:20:57 | ...::must_use(...) | request_forgery_tests.rs:20:13:20:15 | url | provenance | | | request_forgery_tests.rs:20:27:20:57 | MacroExpr | request_forgery_tests.rs:20:27:20:57 | ...::format(...) | provenance | MaD:3 | | request_forgery_tests.rs:20:27:20:57 | { ... } | request_forgery_tests.rs:20:27:20:57 | ...::must_use(...) | provenance | MaD:4 | -| request_forgery_tests.rs:21:38:21:41 | &url [&ref] | request_forgery_tests.rs:21:25:21:36 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| request_forgery_tests.rs:21:38:21:41 | &url [&ref] | request_forgery_tests.rs:21:38:21:41 | &url | provenance | MaD:1 Sink:MaD:1 | | request_forgery_tests.rs:21:39:21:41 | url | request_forgery_tests.rs:21:38:21:41 | &url [&ref] | provenance | | | request_forgery_tests.rs:24:13:24:15 | url | request_forgery_tests.rs:25:39:25:41 | url | provenance | | | request_forgery_tests.rs:24:27:24:70 | ...::format(...) | request_forgery_tests.rs:24:27:24:70 | { ... } | provenance | | | request_forgery_tests.rs:24:27:24:70 | ...::must_use(...) | request_forgery_tests.rs:24:13:24:15 | url | provenance | | | request_forgery_tests.rs:24:27:24:70 | MacroExpr | request_forgery_tests.rs:24:27:24:70 | ...::format(...) | provenance | MaD:3 | | request_forgery_tests.rs:24:27:24:70 | { ... } | request_forgery_tests.rs:24:27:24:70 | ...::must_use(...) | provenance | MaD:4 | -| request_forgery_tests.rs:25:38:25:41 | &url [&ref] | request_forgery_tests.rs:25:25:25:36 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| request_forgery_tests.rs:25:38:25:41 | &url [&ref] | request_forgery_tests.rs:25:38:25:41 | &url | provenance | MaD:1 Sink:MaD:1 | | request_forgery_tests.rs:25:39:25:41 | url | request_forgery_tests.rs:25:38:25:41 | &url [&ref] | provenance | | -| request_forgery_tests.rs:31:42:31:50 | &user_url [&ref] | request_forgery_tests.rs:31:29:31:40 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| request_forgery_tests.rs:31:42:31:50 | &user_url [&ref] | request_forgery_tests.rs:31:42:31:50 | &user_url | provenance | MaD:1 Sink:MaD:1 | | request_forgery_tests.rs:31:43:31:50 | user_url | request_forgery_tests.rs:31:42:31:50 | &user_url [&ref] | provenance | | -| request_forgery_tests.rs:37:50:37:58 | &user_url [&ref] | request_forgery_tests.rs:37:37:37:48 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| request_forgery_tests.rs:37:50:37:58 | &user_url [&ref] | request_forgery_tests.rs:37:50:37:58 | &user_url | provenance | MaD:1 Sink:MaD:1 | | request_forgery_tests.rs:37:51:37:58 | user_url | request_forgery_tests.rs:37:50:37:58 | &user_url [&ref] | provenance | | -| request_forgery_tests.rs:65:33:65:40 | and_then | request_forgery_tests.rs:65:49:65:57 | ...: String | provenance | Src:MaD:2 | +| request_forgery_tests.rs:65:13:73:10 | ... .and_then(...) | request_forgery_tests.rs:65:49:65:57 | ...: String | provenance | Src:MaD:2 | | request_forgery_tests.rs:65:49:65:57 | ...: String | request_forgery_tests.rs:68:42:68:42 | a | provenance | | -| request_forgery_tests.rs:68:41:68:42 | &a [&ref] | request_forgery_tests.rs:68:28:68:39 | ...::get | provenance | MaD:1 Sink:MaD:1 | +| request_forgery_tests.rs:68:41:68:42 | &a [&ref] | request_forgery_tests.rs:68:41:68:42 | &a | provenance | MaD:1 Sink:MaD:1 | | request_forgery_tests.rs:68:42:68:42 | a | request_forgery_tests.rs:68:41:68:42 | &a [&ref] | provenance | | models | 1 | Sink: reqwest::get; Argument[0]; request-url | @@ -51,7 +51,7 @@ models | 4 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | nodes | request_forgery_tests.rs:5:29:5:36 | user_url | semmle.label | user_url | -| request_forgery_tests.rs:8:24:8:35 | ...::get | semmle.label | ...::get | +| request_forgery_tests.rs:8:37:8:45 | &user_url | semmle.label | &user_url | | request_forgery_tests.rs:8:37:8:45 | &user_url [&ref] | semmle.label | &user_url [&ref] | | request_forgery_tests.rs:8:38:8:45 | user_url | semmle.label | user_url | | request_forgery_tests.rs:16:13:16:15 | url | semmle.label | url | @@ -59,7 +59,7 @@ nodes | request_forgery_tests.rs:16:27:16:49 | ...::must_use(...) | semmle.label | ...::must_use(...) | | request_forgery_tests.rs:16:27:16:49 | MacroExpr | semmle.label | MacroExpr | | request_forgery_tests.rs:16:27:16:49 | { ... } | semmle.label | { ... } | -| request_forgery_tests.rs:17:25:17:36 | ...::get | semmle.label | ...::get | +| request_forgery_tests.rs:17:38:17:41 | &url | semmle.label | &url | | request_forgery_tests.rs:17:38:17:41 | &url [&ref] | semmle.label | &url [&ref] | | request_forgery_tests.rs:17:39:17:41 | url | semmle.label | url | | request_forgery_tests.rs:20:13:20:15 | url | semmle.label | url | @@ -67,7 +67,7 @@ nodes | request_forgery_tests.rs:20:27:20:57 | ...::must_use(...) | semmle.label | ...::must_use(...) | | request_forgery_tests.rs:20:27:20:57 | MacroExpr | semmle.label | MacroExpr | | request_forgery_tests.rs:20:27:20:57 | { ... } | semmle.label | { ... } | -| request_forgery_tests.rs:21:25:21:36 | ...::get | semmle.label | ...::get | +| request_forgery_tests.rs:21:38:21:41 | &url | semmle.label | &url | | request_forgery_tests.rs:21:38:21:41 | &url [&ref] | semmle.label | &url [&ref] | | request_forgery_tests.rs:21:39:21:41 | url | semmle.label | url | | request_forgery_tests.rs:24:13:24:15 | url | semmle.label | url | @@ -75,18 +75,18 @@ nodes | request_forgery_tests.rs:24:27:24:70 | ...::must_use(...) | semmle.label | ...::must_use(...) | | request_forgery_tests.rs:24:27:24:70 | MacroExpr | semmle.label | MacroExpr | | request_forgery_tests.rs:24:27:24:70 | { ... } | semmle.label | { ... } | -| request_forgery_tests.rs:25:25:25:36 | ...::get | semmle.label | ...::get | +| request_forgery_tests.rs:25:38:25:41 | &url | semmle.label | &url | | request_forgery_tests.rs:25:38:25:41 | &url [&ref] | semmle.label | &url [&ref] | | request_forgery_tests.rs:25:39:25:41 | url | semmle.label | url | -| request_forgery_tests.rs:31:29:31:40 | ...::get | semmle.label | ...::get | +| request_forgery_tests.rs:31:42:31:50 | &user_url | semmle.label | &user_url | | request_forgery_tests.rs:31:42:31:50 | &user_url [&ref] | semmle.label | &user_url [&ref] | | request_forgery_tests.rs:31:43:31:50 | user_url | semmle.label | user_url | -| request_forgery_tests.rs:37:37:37:48 | ...::get | semmle.label | ...::get | +| request_forgery_tests.rs:37:50:37:58 | &user_url | semmle.label | &user_url | | request_forgery_tests.rs:37:50:37:58 | &user_url [&ref] | semmle.label | &user_url [&ref] | | request_forgery_tests.rs:37:51:37:58 | user_url | semmle.label | user_url | -| request_forgery_tests.rs:65:33:65:40 | and_then | semmle.label | and_then | +| request_forgery_tests.rs:65:13:73:10 | ... .and_then(...) | semmle.label | ... .and_then(...) | | request_forgery_tests.rs:65:49:65:57 | ...: String | semmle.label | ...: String | -| request_forgery_tests.rs:68:28:68:39 | ...::get | semmle.label | ...::get | +| request_forgery_tests.rs:68:41:68:42 | &a | semmle.label | &a | | request_forgery_tests.rs:68:41:68:42 | &a [&ref] | semmle.label | &a [&ref] | | request_forgery_tests.rs:68:42:68:42 | a | semmle.label | a | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-918/request_forgery_tests.rs b/rust/ql/test/query-tests/security/CWE-918/request_forgery_tests.rs index f9abf14de4fc..2610d8d7a39d 100644 --- a/rust/ql/test/query-tests/security/CWE-918/request_forgery_tests.rs +++ b/rust/ql/test/query-tests/security/CWE-918/request_forgery_tests.rs @@ -62,7 +62,7 @@ mod warp_test { async fn test_warp() { // A route with parameter and `and_then` let map_route = - warp::path::param().and_then(async |a: String| // $ Source=a + warp::path::param().and_then(async |a: String| { let response = reqwest::get(&a).await; // $ Alert[rust/request-forgery]=a @@ -70,7 +70,7 @@ mod warp_test { Ok(resp) => Ok(resp.text().await.unwrap_or_default()), Err(_err) => Err(warp::reject::not_found()), } - }); + }); // $ Source=a } } diff --git a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll index b0828c3384bb..f64d02af98dc 100644 --- a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll @@ -19,6 +19,9 @@ signature module InputSig Lang> { class SummarizedCallableBase { bindingset[this] string toString(); + + bindingset[this] + Location getLocation(); } /** Holds if `c` is defined in source code. */ @@ -32,6 +35,8 @@ signature module InputSig Lang> { class SourceBase { bindingset[this] string toString(); + + Location getLocation(); } /** @@ -41,6 +46,8 @@ signature module InputSig Lang> { class SinkBase { bindingset[this] string toString(); + + Location getLocation(); } /** @@ -59,15 +66,15 @@ signature module InputSig Lang> { */ class FlowSummaryCallBase { string toString(); + + Location getLocation(); } /** Gets a call that targets summarized callable `sc`. */ default FlowSummaryCallBase getASourceCall(SummarizedCallableBase sc) { none() } /** Gets the callable corresponding to summarized callable `c`. */ - default Lang::DataFlowCallable getSummarizedCallableAsDataFlowCallable(SummarizedCallableBase c) { - none() - } + Lang::DataFlowCallable getSummarizedCallableAsDataFlowCallable(SummarizedCallableBase c); /** Gets the enclosing callable of `call`. */ default Lang::DataFlowCallable getSourceCallEnclosingCallable(FlowSummaryCallBase call) { none() } @@ -1181,12 +1188,14 @@ module Make< pragma[nomagic] private predicate sourceOutputState( - SourceElement source, SummaryComponentStack s, string kind, string model + SourceElement source, SummaryComponentStack entry, SummaryComponentStack s, string kind, + string model ) { - sourceOutputStateEntry(source, s, kind, model) + sourceOutputStateEntry(source, s, kind, model) and + entry = s or exists(SummaryComponentStack out | - sourceOutputState(source, out, kind, model) and + sourceOutputState(source, entry, out, kind, model) and out.head() = TContentSummaryComponent(_) and s = out.tail() ) @@ -1218,7 +1227,7 @@ module Make< private newtype TSummaryNodeState = TSummaryNodeInputState(SummaryComponentStack s) { inputState(_, s) } or TSummaryNodeOutputState(SummaryComponentStack s) { outputState(_, s) } or - TSourceOutputState(SummaryComponentStack s) { sourceOutputState(_, s, _, _) } or + TSourceOutputState(SummaryComponentStack s) { sourceOutputState(_, _, s, _, _) } or TSinkInputState(SummaryComponentStack s) { sinkInputState(_, s, _, _) } /** @@ -1258,9 +1267,10 @@ module Make< /** Holds if this state is a valid output state for `source`. */ pragma[nomagic] predicate isSourceOutputState( - SourceElement source, SummaryComponentStack s, string kind, string model + SourceElement source, SummaryComponentStack entry, SummaryComponentStack s, string kind, + string model ) { - sourceOutputState(source, s, kind, model) and + sourceOutputState(source, entry, s, kind, model) and this = TSourceOutputState(s) } @@ -1297,847 +1307,1050 @@ module Make< } } - private newtype TSummaryNode = - TSummaryInternalNode(SummarizedCallable c, SummaryNodeState state) { - summaryNodeRange(c, state) - } or - TSummaryParameterNode(SummarizedCallable c, ParameterPosition pos) { - summaryParameterNodeRange(c, pos) - } or - TSummaryReturnArgumentNode(FlowSummaryCallBase call, ReturnKind rk) { - exists(SummarizedCallable sc | - call = getASourceCall(sc) and - relevantFlowSummaryPosition(sc, rk) - ) - } or - TSourceOutputNode(SourceElement source, SummaryNodeState state, string kind, string model) { - state.isSourceOutputState(source, _, kind, model) - } or - TSinkInputNode(SinkElement sink, SummaryNodeState state, string kind, string model) { - state.isSinkInputState(sink, _, kind, model) - } - - abstract class SummaryNode extends TSummaryNode { - abstract string toString(); - - abstract SummarizedCallable getSummarizedCallable(); - - abstract SourceElement getSourceElement(); - - abstract SinkElement getSinkElement(); - - predicate isHidden() { any() } - } + signature module InputSig2 { + /** + * An element used to represent sources before possible stores and sinks + * after possible reads. + * + * These elements will be embedded into the data flow graph and serve as the + * sources/sinks that the user sees in the output. + */ + class SourceSinkReportingElement { + DataFlowCallable getEnclosingCallable(); - private class SummaryInternalNode extends SummaryNode, TSummaryInternalNode { - private SummarizedCallable c; - private SummaryNodeState state; + string toString(); - SummaryInternalNode() { this = TSummaryInternalNode(c, state) } + Location getLocation(); + } - override string toString() { result = "[summary] " + state + " in " + c } + /** + * Gets an element corresponding to the `s` part of `source`. + * + * `s` is typically `ReturnValue` and the result is the element that + * represents the return value of `source`. + */ + bindingset[source, s] + SourceSinkReportingElement getSourceEntryElement(SourceElement source, SummaryComponentStack s); - override SummarizedCallable getSummarizedCallable() { result = c } + /** + * Gets a data flow node corresponding to the `s` part of `e`. + * + * In the final path graph there will be a path from the node that embeds + * `e = getSourceEntryElement(_, s)` to `getSourceExitNode(e, s)`, + * and any stores will happen between them. + */ + bindingset[e, s] + Node getSourceExitNode(SourceSinkReportingElement e, SummaryComponentStack s); - override SourceElement getSourceElement() { none() } + /** + * Gets an element corresponding to the `sc` part of `sink`. + * + * `sc` is typically `Argument[i]` and the result is the element that + * represents the `i`th argument of `sink`. + */ + bindingset[sink, sc] + SourceSinkReportingElement getSinkExitElement(SinkElement sink, SummaryComponent sc); - override SinkElement getSinkElement() { none() } + /** + * Gets a data flow node corresponding to the `sc` part of `e`. + * + * In the final path graph there will be a path from `getSinkEntryNode(e, sc)` to + * the node that embeds `e = getSinkExitElement(_, sc)`, and any reads will happen + * between them. + */ + bindingset[e, sc] + Node getSinkEntryNode(SourceSinkReportingElement e, SummaryComponent sc); } - private class SummaryParamNode extends SummaryNode, TSummaryParameterNode { - private SummarizedCallable c; - private ParameterPosition pos; + module Make2 { + private import Input2 - SummaryParamNode() { this = TSummaryParameterNode(c, pos) } + private newtype TSummaryNode = + TSummaryInternalNode(SummarizedCallable c, SummaryNodeState state) { + summaryNodeRange(c, state) + } or + TSummaryParameterNode(SummarizedCallable c, ParameterPosition pos) { + summaryParameterNodeRange(c, pos) + } or + TSummaryReturnArgumentNode(FlowSummaryCallBase call, ReturnKind rk) { + exists(SummarizedCallable sc | + call = getASourceCall(sc) and + relevantFlowSummaryPosition(sc, rk) + ) + } or + TSourceOutputNode( + SourceElement source, SummaryNodeState state, SummaryComponentStack exit, + SourceSinkReportingElement e, string kind, string model + ) { + exists(SummaryComponentStack entry | + state.isSourceOutputState(source, entry, _, kind, model) and + sourceOutputState(source, entry, exit, kind, model) and + not exit.head() instanceof TContentSummaryComponent and + e = getSourceEntryElement(source, exit) + ) + } or + TSinkInputNode( + SinkElement sink, SummaryNodeState state, SourceSinkReportingElement e, string kind, + string model + ) { + exists(SummaryComponentStack s | + state.isSinkInputState(sink, s, kind, model) and + e = getSinkExitElement(sink, s.bottom()) + ) + } - override string toString() { result = "[summary param] " + pos + " in " + c } + abstract class SummaryNode extends TSummaryNode { + abstract string toString(); - override SummarizedCallable getSummarizedCallable() { result = c } + abstract SummarizedCallable getSummarizedCallable(); - override SourceElement getSourceElement() { none() } + abstract SourceElement getSourceElement(); - override SinkElement getSinkElement() { none() } - } + abstract SinkElement getSinkElement(); - private class SummaryReturnArgumentNode extends SummaryNode, TSummaryReturnArgumentNode { - private FlowSummaryCallBase call; - private ReturnKind rk; + abstract SourceSinkReportingElement getSourceSinkReportingElement(); - SummaryReturnArgumentNode() { this = TSummaryReturnArgumentNode(call, rk) } + abstract DataFlowCallable getEnclosingCallable(); - override string toString() { result = "[summary] value written to " + rk + " at " + call } + abstract Location getLocation(); - override SummarizedCallable getSummarizedCallable() { none() } + predicate isHidden() { any() } + } - override SourceElement getSourceElement() { none() } + private class SummaryInternalNode extends SummaryNode, TSummaryInternalNode { + private SummarizedCallable c; + private SummaryNodeState state; - override SinkElement getSinkElement() { none() } - } + SummaryInternalNode() { this = TSummaryInternalNode(c, state) } - /** - * Gets the summary node that represents the argument node used to transfer - * flow into the caller when a value is written to the value returned by - * `call` with kind `rk`. - */ - SummaryNode summaryArgumentNode(FlowSummaryCallBase call, ReturnKind rk) { - result = TSummaryReturnArgumentNode(call, rk) - } + override string toString() { result = "[summary] " + state + " in " + c } - /** Gets the enclosing callable for summary node `sn`. */ - DataFlowCallable getEnclosingCallable(SummaryNode sn) { - result = getSummarizedCallableAsDataFlowCallable(sn.getSummarizedCallable()) - or - exists(FlowSummaryCallBase call | - sn = TSummaryReturnArgumentNode(call, _) and - result = getSourceCallEnclosingCallable(call) - ) - } + override SummarizedCallable getSummarizedCallable() { result = c } - class SourceOutputNode extends SummaryNode, TSourceOutputNode { - private SourceElement source_; - private SummaryNodeState state_; - private string kind_; - private string model_; + override SourceElement getSourceElement() { none() } - SourceOutputNode() { this = TSourceOutputNode(source_, state_, kind_, model_) } + override SinkElement getSinkElement() { none() } - /** - * Holds if this node is an entry node, i.e. before any stores have been performed. - * - * This node should be used as the actual source node in data flow configurations. - */ - predicate isEntry(string kind, string model) { - model = model_ and - exists(SummaryComponentStack out | - sourceOutputStateEntry(source_, out, kind, model_) and - state_.isSourceOutputState(source_, out, kind, model_) - ) - } + override SourceSinkReportingElement getSourceSinkReportingElement() { none() } - /** - * Holds if this node is an exit node, i.e. after all stores have been performed. - * - * A local flow step should be added from this node to a data flow node representing - * `s` inside `source`. - */ - predicate isExit(SourceElement source, SummaryComponentStack s, string model) { - source = source_ and - model = model_ and - state_.isSourceOutputState(source, s, _, model) + override DataFlowCallable getEnclosingCallable() { + result = getSummarizedCallableAsDataFlowCallable(c) + } + + override Location getLocation() { result = c.getLocation() } } - override predicate isHidden() { not this.isEntry(_, _) } + private class SummaryParamNode extends SummaryNode, TSummaryParameterNode { + private SummarizedCallable c; + private ParameterPosition pos; - override string toString() { - if this.isEntry(_, _) - then result = source_.toString() - else result = "[source] " + state_ + " at " + source_ - } + SummaryParamNode() { this = TSummaryParameterNode(c, pos) } - override SummarizedCallable getSummarizedCallable() { none() } + override string toString() { result = "[summary param] " + pos + " in " + c } - override SourceElement getSourceElement() { result = source_ } + override SummarizedCallable getSummarizedCallable() { result = c } - override SinkElement getSinkElement() { none() } - } + override SourceElement getSourceElement() { none() } - class SinkInputNode extends SummaryNode, TSinkInputNode { - private SinkElement sink_; - private SummaryNodeState state_; - private string kind_; - private string model_; + override SinkElement getSinkElement() { none() } - SinkInputNode() { this = TSinkInputNode(sink_, state_, kind_, model_) } + override SourceSinkReportingElement getSourceSinkReportingElement() { none() } - /** - * Holds if this node is an entry node, i.e. before any reads have been performed. - * - * A local flow step should be added to this node from a data flow node representing - * `sc` inside `sink`. - */ - predicate isEntry(SinkElement sink, SummaryComponent sc, string model) { - sink = sink_ and - model = model_ and - state_.isSinkInputState(sink, TSingletonSummaryComponentStack(sc), _, model) - } + override DataFlowCallable getEnclosingCallable() { + result = getSummarizedCallableAsDataFlowCallable(c) + } - /** - * Holds if this node is an exit node, i.e. after all reads have been performed. - * - * This node should be used as the actual sink node in data flow configurations. - */ - predicate isExit(string kind, string model) { - kind = kind_ and - model = model_ and - exists(SummaryComponentStack inp | - sinkInputStateExit(sink_, inp, kind, model_) and - state_.isSinkInputState(sink_, inp, kind, model_) - ) + override Location getLocation() { result = c.getLocation() } } - override predicate isHidden() { not this.isExit(_, _) } + private class SummaryReturnArgumentNode extends SummaryNode, TSummaryReturnArgumentNode { + private FlowSummaryCallBase call; + private ReturnKind rk; - override string toString() { - if this.isExit(_, _) - then result = sink_.toString() - else result = "[sink] " + state_ + " at " + sink_ - } + SummaryReturnArgumentNode() { this = TSummaryReturnArgumentNode(call, rk) } - override SummarizedCallable getSummarizedCallable() { none() } + override string toString() { result = "[summary] value written to " + rk + " at " + call } - override SourceElement getSourceElement() { none() } + override SummarizedCallable getSummarizedCallable() { none() } - override SinkElement getSinkElement() { result = sink_ } - } + override SourceElement getSourceElement() { none() } - /** - * Holds if `state` represents having read from a parameter at position - * `pos` in `c`. In this case we are not synthesizing a data-flow node, - * but instead assume that a relevant parameter node already exists. - */ - private predicate parameterReadState( - SummarizedCallable c, SummaryNodeState state, ParameterPosition pos - ) { - state.isInputState(c, SummaryComponentStack::argument(pos)) - or - exists(ReturnKind rk | - relevantFlowSummaryPosition(c, rk) and - state.isInputState(c, SummaryComponentStack::return(rk)) and - pos = getFlowSummaryParameterPosition(rk) - ) - } + override SinkElement getSinkElement() { none() } - /** - * Holds if a synthesized summary node is needed for the state `state` in summarized - * callable `c`. - */ - private predicate summaryNodeRange(SummarizedCallable c, SummaryNodeState state) { - state.isInputState(c, _) and - not parameterReadState(c, state, _) - or - state.isOutputState(c, _) - } + override SourceSinkReportingElement getSourceSinkReportingElement() { none() } - pragma[noinline] - private SummaryNode summaryNodeInputState(SummarizedCallable c, SummaryComponentStack s) { - exists(SummaryNodeState state | state.isInputState(c, s) | - result = TSummaryInternalNode(c, state) - or - exists(ParameterPosition pos | - parameterReadState(c, state, pos) and - result = TSummaryParameterNode(c, pos) - ) - ) - } + override DataFlowCallable getEnclosingCallable() { + result = getSourceCallEnclosingCallable(call) + } - pragma[noinline] - private SummaryNode summaryNodeOutputState(SummarizedCallable c, SummaryComponentStack s) { - exists(SummaryNodeState state | - state.isOutputState(c, s) and - result = TSummaryInternalNode(c, state) - ) - } + override Location getLocation() { result = call.getLocation() } + } - pragma[noinline] - private SummaryNode sourceElementOutputState(SourceElement source, SummaryComponentStack s) { - exists(SummaryNodeState state, string kind, string model | - state.isSourceOutputState(source, s, kind, model) and - result = TSourceOutputNode(source, state, kind, model) - ) - } + /** + * Gets the summary node that represents the argument node used to transfer + * flow into the caller when a value is written to the value returned by + * `call` with kind `rk`. + */ + SummaryNode summaryArgumentNode(FlowSummaryCallBase call, ReturnKind rk) { + result = TSummaryReturnArgumentNode(call, rk) + } - pragma[noinline] - private SummaryNode sinkElementInputState(SinkElement sink, SummaryComponentStack s) { - exists(SummaryNodeState state, string kind, string model | - state.isSinkInputState(sink, s, kind, model) and - result = TSinkInputNode(sink, state, kind, model) - ) - } + class SourceOutputNode extends SummaryNode, TSourceOutputNode { + private SourceElement source_; + private SummaryNodeState state_; + SummaryComponentStack exit; + private SourceSinkReportingElement e_; + private string kind_; + private string model_; - /** - * Holds if a write targets `post`, which is a post-update node for a - * parameter at position `pos` in `c`. - */ - private predicate isParameterPostUpdate( - SummaryNode post, SummarizedCallable c, ParameterPosition pos - ) { - post = summaryNodeOutputState(c, SummaryComponentStack::argument(pos)) - } + SourceOutputNode() { this = TSourceOutputNode(source_, state_, exit, e_, kind_, model_) } - /** Holds if a parameter node at position `pos` is required for `c`. */ - private predicate summaryParameterNodeRange(SummarizedCallable c, ParameterPosition pos) { - parameterReadState(c, _, pos) - or - // Same as `isParameterPostUpdate(_, c, pos)`, but can be used in a negative context - any(SummaryNodeState state).isOutputState(c, SummaryComponentStack::argument(pos)) - } + /** + * Holds if this node is an entry node, i.e. before any stores have been performed. + * + * This node should be used as the actual source node in data flow configurations. + */ + predicate isEntry(string kind, string model) { + model = model_ and + exists(SummaryComponentStack out | + state_.isSourceOutputState(source_, out, out, kind, model_) + ) + } - private predicate callbackOutput( - SummarizedCallable c, SummaryComponentStack s, SummaryNode receiver, ReturnKind rk - ) { - any(SummaryNodeState state).isInputState(c, s) and - s.head() = TReturnSummaryComponent(rk) and - receiver = summaryNodeInputState(c, s.tail()) - } + /** + * Holds if this node is an exit node, i.e. after all stores have been performed. + * + * A local flow step should be added from this node to a data flow node representing + * `s` inside `source`. + */ + predicate isExit( + SourceElement source, SummaryComponentStack s, SourceSinkReportingElement e, string model + ) { + source = source_ and + model = model_ and + state_.isSourceOutputState(source, _, s, _, model) and + s = exit and + e = e_ + } - private predicate callbackInput( - SummarizedCallable c, SummaryComponentStack s, SummaryNode receiver, ArgumentPosition pos - ) { - any(SummaryNodeState state).isOutputState(c, s) and - s.head() = TParameterSummaryComponent(pos) and - receiver = summaryNodeInputState(c, s.tail()) - } + override predicate isHidden() { not this.isEntry(_, _) } - /** Holds if a call targeting `receiver` should be synthesized inside `c`. */ - predicate summaryCallbackRange(SummarizedCallable c, SummaryNode receiver) { - callbackOutput(c, _, receiver, _) - or - callbackInput(c, _, receiver, _) - } + override string toString() { + if this.isEntry(_, _) + then result = e_.toString() + else result = "[source] " + state_ + " at " + e_ + } - /** Holds if summary node `p` is a parameter with position `pos`. */ - predicate summaryParameterNode(SummaryNode p, ParameterPosition pos) { - p = TSummaryParameterNode(_, pos) - } + override SummarizedCallable getSummarizedCallable() { none() } - /** Holds if summary node `out` contains output of kind `rk` from a call targeting `receiver`. */ - predicate summaryOutNode(SummaryNode receiver, SummaryNode out, ReturnKind rk) { - exists(SummarizedCallable callable, SummaryComponentStack s | - callbackOutput(callable, s, receiver, rk) and - out = summaryNodeInputState(callable, s) - ) - } + override SourceElement getSourceElement() { result = source_ } - /** Holds if summary node `arg` is at position `pos` in a call targeting `receiver`. */ - predicate summaryArgumentNode(SummaryNode receiver, SummaryNode arg, ArgumentPosition pos) { - exists(SummarizedCallable callable, SummaryComponentStack s | - callbackInput(callable, s, receiver, pos) and - arg = summaryNodeOutputState(callable, s) - ) - } + override SinkElement getSinkElement() { none() } - /** Holds if summary node `post` is a post-update node with pre-update node `pre`. */ - predicate summaryPostUpdateNode(SummaryNode post, SummaryNode pre) { - exists(SummarizedCallable c, ParameterPosition pos | - isParameterPostUpdate(post, c, pos) and - pre = TSummaryParameterNode(c, pos) - ) - or - exists(SummarizedCallable callable, SummaryComponentStack s | - callbackInput(callable, s, _, _) and - pre = summaryNodeOutputState(callable, s) and - post = summaryNodeInputState(callable, s) - ) - } + override SourceSinkReportingElement getSourceSinkReportingElement() { result = e_ } - /** Holds if summary node `ret` is a return node of kind `rk`. */ - predicate summaryReturnNode(SummaryNode ret, ReturnKind rk) { - exists(SummaryComponentStack s | - ret = summaryNodeOutputState(_, s) and - s = TSingletonSummaryComponentStack(TReturnSummaryComponent(rk)) - ) - } + override DataFlowCallable getEnclosingCallable() { result = e_.getEnclosingCallable() } - /** Holds if return kind `rk` is a relevant return kind for flow summary modeling. */ - predicate relevantFlowSummaryPosition(ReturnKind rk) { relevantFlowSummaryPosition(_, rk) } + override Location getLocation() { result = e_.getLocation() } + } - /** - * Holds if flow is allowed to pass from the parameter at position `pos` of `c`, - * to a return node, and back out to the parameter. - */ - predicate summaryAllowParameterReturnInSelf(SummarizedCallable c, ParameterPosition ppos) { - exists(SummaryComponentStack inputContents, SummaryComponentStack outputContents | - summary(c, inputContents, outputContents, _, _) and - inputContents.bottom() = pragma[only_bind_into](TArgumentSummaryComponent(ppos)) and - outputContents.bottom() = pragma[only_bind_into](TArgumentSummaryComponent(ppos)) - ) - } + class SinkInputNode extends SummaryNode, TSinkInputNode { + private SinkElement sink_; + private SummaryNodeState state_; + private SourceSinkReportingElement e_; + private string kind_; + private string model_; - /** - * Holds if `barrier` is a relevant barrier element with output specification `outSpec`. - */ - predicate barrierSpec( - BarrierElement barrier, SummaryComponentStack outSpec, string kind, string model - ) { - exists(string output | - isRelevantBarrier(barrier, output, kind, _, model) and - External::interpretSpec(output, outSpec) - ) - } + SinkInputNode() { this = TSinkInputNode(sink_, state_, e_, kind_, model_) } - /** - * Holds if `barrierGuard` is a relevant barrier guard element with input specification `inSpec`. - */ - predicate barrierGuardSpec( - BarrierGuardElement barrierGuard, SummaryComponentStack inSpec, string acceptingValue, - string kind, string model - ) { - exists(string input | - isRelevantBarrierGuard(barrierGuard, input, acceptingValue, kind, _, model) and - External::interpretSpec(input, inSpec) - ) - } + /** + * Holds if this node is an entry node, i.e. before any reads have been performed. + * + * A local flow step should be added to this node from a data flow node representing + * `sc` inside `sink`. + */ + predicate isEntry( + SinkElement sink, SummaryComponent sc, SourceSinkReportingElement e, string model + ) { + sink = sink_ and + model = model_ and + e = e_ and + state_.isSinkInputState(sink, TSingletonSummaryComponentStack(sc), _, model) + } - signature module TypesInputSig { - /** Gets the type of content `c`. */ - DataFlowType getContentType(ContentSet c); + /** + * Holds if this node is an exit node, i.e. after all reads have been performed. + * + * This node should be used as the actual sink node in data flow configurations. + */ + predicate isExit(string kind, string model) { + kind = kind_ and + model = model_ and + exists(SummaryComponentStack inp | + sinkInputStateExit(sink_, inp, kind, model_) and + state_.isSinkInputState(sink_, inp, kind, model_) + ) + } - /** Gets the type of the parameter at the given position. */ - bindingset[c, pos] - DataFlowType getParameterType(SummarizedCallable c, ParameterPosition pos); + override predicate isHidden() { not this.isExit(_, _) } - /** Gets the return type of kind `rk` for callable `c`. */ - bindingset[c, rk] - DataFlowType getReturnType(SummarizedCallable c, ReturnKind rk); + override string toString() { + if this.isExit(_, _) + then result = e_.toString() + else result = "[sink] " + state_ + " at " + e_ + } - /** - * Gets the type of the `i`th parameter in a synthesized call that targets a - * callback of type `t`. - */ - bindingset[t, pos] - DataFlowType getCallbackParameterType(DataFlowType t, ArgumentPosition pos); + override SummarizedCallable getSummarizedCallable() { none() } - /** - * Gets the return type of kind `rk` in a synthesized call that targets a - * callback of type `t`. - */ - bindingset[t, rk] - DataFlowType getCallbackReturnType(DataFlowType t, ReturnKind rk); + override SourceElement getSourceElement() { none() } - DataFlowType getSyntheticGlobalType(SyntheticGlobal sg); + override SinkElement getSinkElement() { result = sink_ } - DataFlowType getSourceType(SourceBase source, SummaryComponentStack sc); + override SourceSinkReportingElement getSourceSinkReportingElement() { result = e_ } - DataFlowType getSinkType(SinkBase sink, SummaryComponent sc); - } + override DataFlowCallable getEnclosingCallable() { result = e_.getEnclosingCallable() } - /** - * Provides the predicate `summaryNodeType` for associating types with summary nodes. - * - * Only relevant for typed languages. - */ - module Types { - private import TypesInput + override Location getLocation() { result = e_.getLocation() } + } /** - * Gets the type of synthesized summary node `n`. - * - * The type is computed based on the language-specific predicates - * `getContentType()`, `getReturnType()`, `getCallbackParameterType()`, and - * `getCallbackReturnType()`. + * Holds if `state` represents having read from a parameter at position + * `pos` in `c`. In this case we are not synthesizing a data-flow node, + * but instead assume that a relevant parameter node already exists. */ - DataFlowType summaryNodeType(SummaryNode n) { - exists(SummaryNode pre | - summaryPostUpdateNode(n, pre) and - result = summaryNodeType(pre) - ) - or - exists(SummarizedCallable c, SummaryComponentStack s, SummaryComponent head | - head = s.head() - | - n = summaryNodeInputState(c, s) and - ( - exists(ContentSet cont | result = getContentType(cont) | - head = TContentSummaryComponent(cont) or - head = TWithContentSummaryComponent(cont) - ) - or - head = TWithoutContentSummaryComponent(_) and - result = summaryNodeType(summaryNodeInputState(c, s.tail())) - or - exists(ReturnKind rk | - head = TReturnSummaryComponent(rk) and - result = - getCallbackReturnType(summaryNodeType(summaryNodeInputState(pragma[only_bind_out](c), - s.tail())), rk) - ) - or - exists(SyntheticGlobal sg | - head = TSyntheticGlobalSummaryComponent(sg) and - result = getSyntheticGlobalType(sg) - ) - or - exists(ParameterPosition pos | - head = TArgumentSummaryComponent(pos) and - result = getParameterType(c, pos) - ) - ) - or - n = summaryNodeOutputState(c, s) and - ( - exists(ContentSet cont | - head = TContentSummaryComponent(cont) and result = getContentType(cont) - ) - or - s.length() = 1 and - exists(ReturnKind rk | - head = TReturnSummaryComponent(rk) and - result = getReturnType(c, rk) - ) - or - exists(ArgumentPosition pos | head = TParameterSummaryComponent(pos) | - result = - getCallbackParameterType(summaryNodeType(summaryNodeInputState(pragma[only_bind_out](c), - s.tail())), pos) - ) - or - exists(SyntheticGlobal sg | - head = TSyntheticGlobalSummaryComponent(sg) and - result = getSyntheticGlobalType(sg) - ) - ) - ) + private predicate parameterReadState( + SummarizedCallable c, SummaryNodeState state, ParameterPosition pos + ) { + state.isInputState(c, SummaryComponentStack::argument(pos)) or - exists(SourceElement source | - exists(SummaryComponentStack s | - n.(SourceOutputNode).isExit(source, s, _) and - result = getSourceType(source, s) - ) - or - exists(SummaryComponentStack s, ContentSet cont | - n = sourceElementOutputState(source, s) and - s.head() = TContentSummaryComponent(cont) and - result = getContentType(cont) - ) + exists(ReturnKind rk | + relevantFlowSummaryPosition(c, rk) and + state.isInputState(c, SummaryComponentStack::return(rk)) and + pos = getFlowSummaryParameterPosition(rk) ) + } + + /** + * Holds if a synthesized summary node is needed for the state `state` in summarized + * callable `c`. + */ + private predicate summaryNodeRange(SummarizedCallable c, SummaryNodeState state) { + state.isInputState(c, _) and + not parameterReadState(c, state, _) or - exists(SinkElement sink | - exists(SummaryComponent sc | - n.(SinkInputNode).isEntry(sink, sc, _) and - result = getSinkType(sink, sc) - ) + state.isOutputState(c, _) + } + + pragma[noinline] + private SummaryNode summaryNodeInputState(SummarizedCallable c, SummaryComponentStack s) { + exists(SummaryNodeState state | state.isInputState(c, s) | + result = TSummaryInternalNode(c, state) or - exists(SummaryComponentStack s, ContentSet cont | - n = sinkElementInputState(sink, s) and - s.head() = TContentSummaryComponent(cont) and - result = getContentType(cont) + exists(ParameterPosition pos | + parameterReadState(c, state, pos) and + result = TSummaryParameterNode(c, pos) ) ) } - } - signature module StepsInputSig { - /** Gets the summary node represented by data-flow node `n`, if any. */ - SummaryNode getSummaryNode(Node n); - - /** Gets a call that targets summarized callable `sc`. */ - DataFlowCall getACall(SummarizedCallable sc); + pragma[noinline] + private SummaryNode summaryNodeOutputState(SummarizedCallable c, SummaryComponentStack s) { + exists(SummaryNodeState state | + state.isOutputState(c, s) and + result = TSummaryInternalNode(c, state) + ) + } - /** Gets the out node of kind `rk` for `call`, if any. */ - default Node getSourceOutNode(FlowSummaryCallBase call, ReturnKind rk) { none() } + pragma[noinline] + private SummaryNode sourceElementOutputState( + SourceElement source, SourceSinkReportingElement e, SummaryComponentStack s + ) { + result = TSourceOutputNode(source, TSourceOutputState(s), _, e, _, _) + } - /** Gets the enclosing callable of `source`. */ - DataFlowCallable getSourceNodeEnclosingCallable(SourceBase source); + pragma[noinline] + private SummaryNode sinkElementInputState( + SinkElement sink, SourceSinkReportingElement e, SummaryComponentStack s + ) { + result = TSinkInputNode(sink, TSinkInputState(s), e, _, _) + } /** - * Gets a data flow node corresponding to the `s` part of `source`. - * - * `s` is typically `ReturnValue` and the result is the node that - * represents the return value of `source`. + * Holds if a write targets `post`, which is a post-update node for a + * parameter at position `pos` in `c`. */ - Node getSourceNode(SourceBase source, SummaryComponentStack s); + private predicate isParameterPostUpdate( + SummaryNode post, SummarizedCallable c, ParameterPosition pos + ) { + post = summaryNodeOutputState(c, SummaryComponentStack::argument(pos)) + } - /** - * Gets a data flow node corresponding to the `sc` part of `sink`. - * - * `sc` is typically `Argument[i]` and the result is the node that - * represents the `i`th argument of `sink`. - */ - Node getSinkNode(SinkBase sink, SummaryComponent sc); - } + /** Holds if a parameter node at position `pos` is required for `c`. */ + private predicate summaryParameterNodeRange(SummarizedCallable c, ParameterPosition pos) { + parameterReadState(c, _, pos) + or + // Same as `isParameterPostUpdate(_, c, pos)`, but can be used in a negative context + any(SummaryNodeState state).isOutputState(c, SummaryComponentStack::argument(pos)) + } - /** Provides a compilation of flow summaries to atomic data-flow steps. */ - module Steps { - /** - * Holds if there is a local step from `pred` to `succ`, which is synthesized - * from a flow summary. - */ - private predicate summaryLocalStepImpl( - SummaryNode pred, SummaryNode succ, boolean preservesValue, string model + private predicate callbackOutput( + SummarizedCallable c, SummaryComponentStack s, SummaryNode receiver, ReturnKind rk ) { - exists( - SummarizedCallable c, SummaryComponentStack inputContents, - SummaryComponentStack outputContents - | - summary(c, inputContents, outputContents, preservesValue, model) and - pred = summaryNodeInputState(pragma[only_bind_into](c), inputContents) and - succ = summaryNodeOutputState(pragma[only_bind_into](c), outputContents) - | - preservesValue = true - or - preservesValue = false and not summary(c, inputContents, outputContents, true, _) - ) + any(SummaryNodeState state).isInputState(c, s) and + s.head() = TReturnSummaryComponent(rk) and + receiver = summaryNodeInputState(c, s.tail()) + } + + private predicate callbackInput( + SummarizedCallable c, SummaryComponentStack s, SummaryNode receiver, ArgumentPosition pos + ) { + any(SummaryNodeState state).isOutputState(c, s) and + s.head() = TParameterSummaryComponent(pos) and + receiver = summaryNodeInputState(c, s.tail()) + } + + /** Holds if a call targeting `receiver` should be synthesized inside `c`. */ + predicate summaryCallbackRange(SummarizedCallable c, SummaryNode receiver) { + callbackOutput(c, _, receiver, _) or - exists(SummarizedCallable c, SummaryComponentStack s | - pred = summaryNodeInputState(c, s.tail()) and - succ = summaryNodeInputState(c, s) and - s.head() = [SummaryComponent::withContent(_), SummaryComponent::withoutContent(_)] and - preservesValue = true and - model = "" - ) + callbackInput(c, _, receiver, _) } - predicate sourceStep(SourceOutputNode nodeFrom, Node nodeTo, string model, boolean local) { - exists(SummaryComponentStack sc, SourceElement source | - nodeFrom.isExit(source, sc, model) and - nodeTo = StepsInput::getSourceNode(source, sc) and - if StepsInput::getSourceNodeEnclosingCallable(source) = getNodeEnclosingCallable(nodeTo) - then local = true - else local = false - ) + /** Holds if summary node `p` is a parameter with position `pos`. */ + predicate summaryParameterNode(SummaryNode p, ParameterPosition pos) { + p = TSummaryParameterNode(_, pos) } - predicate sourceLocalStep(SourceOutputNode nodeFrom, Node nodeTo, string model) { - sourceStep(nodeFrom, nodeTo, model, true) + /** Holds if summary node `out` contains output of kind `rk` from a call targeting `receiver`. */ + predicate summaryOutNode(SummaryNode receiver, SummaryNode out, ReturnKind rk) { + exists(SummarizedCallable callable, SummaryComponentStack s | + callbackOutput(callable, s, receiver, rk) and + out = summaryNodeInputState(callable, s) + ) } - predicate sinkLocalStep(Node nodeFrom, SinkInputNode nodeTo, string model) { - exists(SummaryComponent sc, SinkElement sink | - nodeFrom = StepsInput::getSinkNode(sink, sc) and - nodeTo.isEntry(sink, sc, model) + /** Holds if summary node `arg` is at position `pos` in a call targeting `receiver`. */ + predicate summaryArgumentNode(SummaryNode receiver, SummaryNode arg, ArgumentPosition pos) { + exists(SummarizedCallable callable, SummaryComponentStack s | + callbackInput(callable, s, receiver, pos) and + arg = summaryNodeOutputState(callable, s) ) } - /** Holds if there is a local step between data-flow nodes synthesized from a flow summary. */ - predicate summaryLocalStep(Node pred, SummaryNode succ, boolean preservesValue, string model) { - exists(SummaryNode predSummary | - predSummary = StepsInput::getSummaryNode(pred) and - summaryLocalStepImpl(predSummary, succ, preservesValue, model) + /** Holds if summary node `post` is a post-update node with pre-update node `pre`. */ + predicate summaryPostUpdateNode(SummaryNode post, SummaryNode pre) { + exists(SummarizedCallable c, ParameterPosition pos | + isParameterPostUpdate(post, c, pos) and + pre = TSummaryParameterNode(c, pos) ) or - exists(FlowSummaryCallBase summaryCall, ReturnKind rk, SummarizedCallable sc | - pred = StepsInput::getSourceOutNode(summaryCall, rk) and - summaryCall = getASourceCall(sc) and - summary(sc, SummaryComponentStack::return(rk), _, preservesValue, model) and - succ = TSummaryReturnArgumentNode(summaryCall, rk) + exists(SummarizedCallable callable, SummaryComponentStack s | + callbackInput(callable, s, _, _) and + pre = summaryNodeOutputState(callable, s) and + post = summaryNodeInputState(callable, s) ) } - /** Holds if the value of `succ` is uniquely determined by the value of `pred`. */ - predicate summaryLocalMustFlowStep(SummaryNode pred, SummaryNode succ) { - pred = unique(SummaryNode n1 | summaryLocalStepImpl(n1, succ, true, _)) + /** Holds if summary node `ret` is a return node of kind `rk`. */ + predicate summaryReturnNode(SummaryNode ret, ReturnKind rk) { + exists(SummaryComponentStack s | + ret = summaryNodeOutputState(_, s) and + s = TSingletonSummaryComponentStack(TReturnSummaryComponent(rk)) + ) } + /** Holds if return kind `rk` is a relevant return kind for flow summary modeling. */ + predicate relevantFlowSummaryPosition(ReturnKind rk) { relevantFlowSummaryPosition(_, rk) } + /** - * Holds if there is a read step of content `c` from `pred` to `succ`, which - * is synthesized from a flow summary. + * Holds if flow is allowed to pass from the parameter at position `pos` of `c`, + * to a return node, and back out to the parameter. */ - predicate summaryReadStep(SummaryNode pred, ContentSet c, SummaryNode succ) { - exists(SummarizedCallable sc, SummaryComponentStack s | - pred = summaryNodeInputState(sc, s.tail()) and - succ = summaryNodeInputState(sc, s) and - SummaryComponent::content(c) = s.head() - ) - or - exists(SinkElement sink, SummaryComponentStack s | - pred = sinkElementInputState(sink, s.tail()) and - succ = sinkElementInputState(sink, s) and - SummaryComponent::content(c) = s.head() + predicate summaryAllowParameterReturnInSelf(SummarizedCallable c, ParameterPosition ppos) { + exists(SummaryComponentStack inputContents, SummaryComponentStack outputContents | + summary(c, inputContents, outputContents, _, _) and + inputContents.bottom() = pragma[only_bind_into](TArgumentSummaryComponent(ppos)) and + outputContents.bottom() = pragma[only_bind_into](TArgumentSummaryComponent(ppos)) ) } /** - * Holds if there is a store step of content `c` from `pred` to `succ`, which - * is synthesized from a flow summary. + * Holds if `barrier` is a relevant barrier element with output specification `outSpec`. */ - predicate summaryStoreStep(SummaryNode pred, ContentSet c, SummaryNode succ) { - exists(SummarizedCallable sc, SummaryComponentStack s | - pred = summaryNodeOutputState(sc, s) and - succ = summaryNodeOutputState(sc, s.tail()) and - SummaryComponent::content(c) = s.head() - ) - or - exists(SourceElement source, SummaryComponentStack s | - pred = sourceElementOutputState(source, s) and - succ = sourceElementOutputState(source, s.tail()) and - SummaryComponent::content(c) = s.head() + predicate barrierSpec( + BarrierElement barrier, SummaryComponentStack outSpec, string kind, string model + ) { + exists(string output | + isRelevantBarrier(barrier, output, kind, _, model) and + External::interpretSpec(output, outSpec) ) } /** - * Holds if there is a jump step from `pred` to `succ`, which is synthesized - * from a flow summary. + * Holds if `barrierGuard` is a relevant barrier guard element with input specification `inSpec`. */ - predicate summaryJumpStep(SummaryNode pred, SummaryNode succ) { - exists(SummaryComponentStack s | - s = SummaryComponentStack::singleton(SummaryComponent::syntheticGlobal(_)) and - pred = summaryNodeOutputState(_, s) and - succ = summaryNodeInputState(_, s) + predicate barrierGuardSpec( + BarrierGuardElement barrierGuard, SummaryComponentStack inSpec, string acceptingValue, + string kind, string model + ) { + exists(string input | + isRelevantBarrierGuard(barrierGuard, input, acceptingValue, kind, _, model) and + External::interpretSpec(input, inSpec) ) } - predicate sourceJumpStep(SourceOutputNode nodeFrom, Node nodeTo) { - sourceStep(nodeFrom, nodeTo, _, false) - } + signature module TypesInputSig { + /** Gets the type of content `c`. */ + DataFlowType getContentType(ContentSet c); - /** - * Holds if values stored inside content `c` are cleared at `n`. `n` is a - * synthesized summary node, so in order for values to be cleared at calls - * to the relevant method, it is important that flow does not pass over - * the argument, either via use-use flow or def-use flow. - * - * Example: - * - * ``` - * a.b = taint; - * a.clearB(); // assume we have a flow summary for `clearB` that clears `b` on the qualifier - * sink(a.b); - * ``` - * - * In the above, flow should not pass from `a` on the first line (or the second - * line) to `a` on the third line. Instead, there will be synthesized flow from - * `a` on line 2 to the post-update node for `a` on that line (via an intermediate - * node where field `b` is cleared). - */ - predicate summaryClearsContent(SummaryNode n, ContentSet c) { - exists(SummarizedCallable sc, SummaryNodeState state, SummaryComponentStack stack | - n = TSummaryInternalNode(sc, state) and - state.isInputState(sc, stack) and - stack.head() = SummaryComponent::withoutContent(c) - ) - } + /** Gets the type of the parameter at the given position. */ + bindingset[c, pos] + DataFlowType getParameterType(SummarizedCallable c, ParameterPosition pos); - /** - * Holds if the value that is being tracked is expected to be stored inside - * content `c` at `n`. - */ - predicate summaryExpectsContent(SummaryNode n, ContentSet c) { - exists(SummarizedCallable sc, SummaryNodeState state, SummaryComponentStack stack | - n = TSummaryInternalNode(sc, state) and - state.isInputState(sc, stack) and - stack.head() = SummaryComponent::withContent(c) - ) - } + /** Gets the return type of kind `rk` for callable `c`. */ + bindingset[c, rk] + DataFlowType getReturnType(SummarizedCallable c, ReturnKind rk); - pragma[noinline] - private predicate viableParam( - DataFlowCall call, SummarizedCallable sc, ParameterPosition ppos, SummaryParamNode p - ) { - p = TSummaryParameterNode(sc, ppos) and - call = StepsInput::getACall(sc) - } + /** + * Gets the type of the `i`th parameter in a synthesized call that targets a + * callback of type `t`. + */ + bindingset[t, pos] + DataFlowType getCallbackParameterType(DataFlowType t, ArgumentPosition pos); - pragma[nomagic] - private SummaryParamNode summaryArgParam(DataFlowCall call, ArgNode arg, SummarizedCallable sc) { - exists(ParameterPosition ppos | - argumentPositionMatch(call, arg, ppos) and - viableParam(call, sc, ppos, result) - ) - } + /** + * Gets the return type of kind `rk` in a synthesized call that targets a + * callback of type `t`. + */ + bindingset[t, rk] + DataFlowType getCallbackReturnType(DataFlowType t, ReturnKind rk); - /** - * Holds if `p` can reach `n` in a summarized callable, using only value-preserving - * local steps. `clearsOrExpects` records whether any node on the path from `p` to - * `n` either clears or expects contents. - */ - private predicate paramReachesLocal(SummaryParamNode p, SummaryNode n, boolean clearsOrExpects) { - viableParam(_, _, _, p) and - n = p and - clearsOrExpects = false - or - exists(SummaryNode mid, boolean clearsOrExpectsMid | - paramReachesLocal(p, mid, clearsOrExpectsMid) and - summaryLocalStepImpl(mid, n, true, _) and - if - summaryClearsContent(n, _) or - summaryExpectsContent(n, _) - then clearsOrExpects = true - else clearsOrExpects = clearsOrExpectsMid - ) + DataFlowType getSyntheticGlobalType(SyntheticGlobal sg); + + DataFlowType getSourceType(SourceBase source, SummaryComponentStack sc); + + DataFlowType getSinkType(SinkBase sink, SummaryComponent sc); } /** - * Holds if use-use flow starting from `arg` should be prohibited. + * Provides the predicate `summaryNodeType` for associating types with summary nodes. * - * This is the case when `arg` is the argument of a call that targets a - * flow summary where the corresponding parameter either clears contents - * or expects contents. + * Only relevant for typed languages. */ - pragma[nomagic] - predicate prohibitsUseUseFlow(ArgNode arg, SummarizedCallable sc) { - exists(SummaryParamNode p, ParameterPosition ppos, SummaryNode ret | - paramReachesLocal(p, ret, true) and - p = summaryArgParam(_, arg, sc) and - p = TSummaryParameterNode(_, pragma[only_bind_into](ppos)) and - isParameterPostUpdate(ret, _, pragma[only_bind_into](ppos)) - ) - } + module Types { + private import TypesInput - pragma[nomagic] - private predicate summaryReturnNodeExt(SummaryNode ret, ReturnKindExt rk) { - summaryReturnNode(ret, rk.(ValueReturnKind).getKind()) - or - exists(SummaryParamNode p, SummaryNode pre, ParameterPosition pos | - paramReachesLocal(p, pre, _) and - summaryPostUpdateNode(ret, pre) and - p = TSummaryParameterNode(_, pos) and - rk.(ParamUpdateReturnKind).getPosition() = pos - ) + /** + * Gets the type of synthesized summary node `n`. + * + * The type is computed based on the language-specific predicates + * `getContentType()`, `getReturnType()`, `getCallbackParameterType()`, and + * `getCallbackReturnType()`. + */ + DataFlowType summaryNodeType(SummaryNode n) { + exists(SummaryNode pre | + summaryPostUpdateNode(n, pre) and + result = summaryNodeType(pre) + ) + or + exists(SummarizedCallable c, SummaryComponentStack s, SummaryComponent head | + head = s.head() + | + n = summaryNodeInputState(c, s) and + ( + exists(ContentSet cont | result = getContentType(cont) | + head = TContentSummaryComponent(cont) or + head = TWithContentSummaryComponent(cont) + ) + or + head = TWithoutContentSummaryComponent(_) and + result = summaryNodeType(summaryNodeInputState(c, s.tail())) + or + exists(ReturnKind rk | + head = TReturnSummaryComponent(rk) and + result = + getCallbackReturnType(summaryNodeType(summaryNodeInputState(pragma[only_bind_out](c), + s.tail())), rk) + ) + or + exists(SyntheticGlobal sg | + head = TSyntheticGlobalSummaryComponent(sg) and + result = getSyntheticGlobalType(sg) + ) + or + exists(ParameterPosition pos | + head = TArgumentSummaryComponent(pos) and + result = getParameterType(c, pos) + ) + ) + or + n = summaryNodeOutputState(c, s) and + ( + exists(ContentSet cont | + head = TContentSummaryComponent(cont) and result = getContentType(cont) + ) + or + s.length() = 1 and + exists(ReturnKind rk | + head = TReturnSummaryComponent(rk) and + result = getReturnType(c, rk) + ) + or + exists(ArgumentPosition pos | head = TParameterSummaryComponent(pos) | + result = + getCallbackParameterType(summaryNodeType(summaryNodeInputState(pragma[only_bind_out](c), + s.tail())), pos) + ) + or + exists(SyntheticGlobal sg | + head = TSyntheticGlobalSummaryComponent(sg) and + result = getSyntheticGlobalType(sg) + ) + ) + ) + or + exists(SourceElement source | + exists(SummaryComponentStack s | + n.(SourceOutputNode).isExit(source, s, _, _) and + result = getSourceType(source, s) + ) + or + exists(SummaryComponentStack s, ContentSet cont | + n = sourceElementOutputState(source, _, s) and + s.head() = TContentSummaryComponent(cont) and + result = getContentType(cont) + ) + ) + or + exists(SinkElement sink | + exists(SummaryComponent sc | + n.(SinkInputNode).isEntry(sink, sc, _, _) and + result = getSinkType(sink, sc) + ) + or + exists(SummaryComponentStack s, ContentSet cont | + n = sinkElementInputState(sink, _, s) and + s.head() = TContentSummaryComponent(cont) and + result = getContentType(cont) + ) + ) + } } - bindingset[ret] - private SummaryParamNode summaryArgParamRetOut( - ArgNode arg, SummaryNode ret, OutNodeExt out, SummarizedCallable sc - ) { - exists(DataFlowCall call, ReturnKindExt rk | - result = summaryArgParam(call, arg, sc) and - summaryReturnNodeExt(ret, pragma[only_bind_into](rk)) and - out = getAnOutNodeExt(call, pragma[only_bind_into](rk)) - ) - } + signature module StepsInputSig { + /** Gets the summary node represented by data-flow node `n`, if any. */ + SummaryNode getSummaryNode(Node n); - /** - * Holds if `arg` flows to `out` using a simple value-preserving flow - * summary, that is, a flow summary without reads and stores. - * - * NOTE: This step should not be used in global data-flow/taint-tracking, but may - * be useful to include in the exposed local data-flow/taint-tracking relations. - */ - predicate summaryThroughStepValue(ArgNode arg, Node out, SummarizedCallable sc) { - exists(SummaryNode ret | - summaryLocalStepImpl(summaryArgParamRetOut(arg, ret, out, sc), ret, true, _) - ) - } + /** Gets a call that targets summarized callable `sc`. */ + DataFlowCall getACall(SummarizedCallable sc); - /** - * Holds if `arg` flows to `out` using a simple flow summary involving taint - * step, that is, a flow summary without reads and stores. - * - * NOTE: This step should not be used in global data-flow/taint-tracking, but may - * be useful to include in the exposed local data-flow/taint-tracking relations. - */ - predicate summaryThroughStepTaint(ArgNode arg, Node out, SummarizedCallable sc) { - exists(SummaryNode ret | - summaryLocalStepImpl(summaryArgParamRetOut(arg, ret, out, sc), ret, false, _) - ) + /** Gets the out node of kind `rk` for `call`, if any. */ + default Node getSourceOutNode(FlowSummaryCallBase call, ReturnKind rk) { none() } } - /** - * Holds if there is a read(+taint) of `c` from `arg` to `out` using a - * flow summary. - * - * NOTE: This step should not be used in global data-flow/taint-tracking, but may - * be useful to include in the exposed local data-flow/taint-tracking relations. - */ - predicate summaryGetterStep(ArgNode arg, ContentSet c, Node out, SummarizedCallable sc) { - exists(SummaryNode mid, SummaryNode ret | - summaryReadStep(summaryArgParamRetOut(arg, ret, out, sc), c, mid) and - summaryLocalStepImpl(mid, ret, _, _) - ) + /** Provides a compilation of flow summaries to atomic data-flow steps. */ + module Steps { + /** + * Holds if there is a local step from `pred` to `succ`, which is synthesized + * from a flow summary. + */ + private predicate summaryLocalStepImpl( + SummaryNode pred, SummaryNode succ, boolean preservesValue, string model + ) { + exists( + SummarizedCallable c, SummaryComponentStack inputContents, + SummaryComponentStack outputContents + | + summary(c, inputContents, outputContents, preservesValue, model) and + pred = summaryNodeInputState(pragma[only_bind_into](c), inputContents) and + succ = summaryNodeOutputState(pragma[only_bind_into](c), outputContents) + | + preservesValue = true + or + preservesValue = false and not summary(c, inputContents, outputContents, true, _) + ) + or + exists(SummarizedCallable c, SummaryComponentStack s | + pred = summaryNodeInputState(c, s.tail()) and + succ = summaryNodeInputState(c, s) and + s.head() = [SummaryComponent::withContent(_), SummaryComponent::withoutContent(_)] and + preservesValue = true and + model = "" + ) + } + + predicate sourceStep(SourceOutputNode nodeFrom, Node nodeTo, string model, boolean local) { + exists(SummaryComponentStack sc, SourceSinkReportingElement e | + nodeFrom.isExit(_, sc, e, model) and + nodeTo = getSourceExitNode(e, sc) and + if e.getEnclosingCallable() = getNodeEnclosingCallable(nodeTo) + then local = true + else local = false + ) + } + + predicate sourceLocalStep(SourceOutputNode nodeFrom, Node nodeTo, string model) { + sourceStep(nodeFrom, nodeTo, model, true) + } + + predicate sinkLocalStep(Node nodeFrom, SinkInputNode nodeTo, string model) { + exists(SummaryComponent sc, SourceSinkReportingElement e | + nodeFrom = getSinkEntryNode(e, sc) and + nodeTo.isEntry(_, sc, e, model) + ) + } + + /** Holds if there is a local step between data-flow nodes synthesized from a flow summary. */ + predicate summaryLocalStep(Node pred, SummaryNode succ, boolean preservesValue, string model) { + exists(SummaryNode predSummary | + predSummary = StepsInput::getSummaryNode(pred) and + summaryLocalStepImpl(predSummary, succ, preservesValue, model) + ) + or + exists(FlowSummaryCallBase summaryCall, ReturnKind rk, SummarizedCallable sc | + pred = StepsInput::getSourceOutNode(summaryCall, rk) and + summaryCall = getASourceCall(sc) and + summary(sc, SummaryComponentStack::return(rk), _, preservesValue, model) and + succ = TSummaryReturnArgumentNode(summaryCall, rk) + ) + } + + /** Holds if the value of `succ` is uniquely determined by the value of `pred`. */ + predicate summaryLocalMustFlowStep(SummaryNode pred, SummaryNode succ) { + pred = unique(SummaryNode n1 | summaryLocalStepImpl(n1, succ, true, _)) + } + + /** + * Holds if there is a read step of content `c` from `pred` to `succ`, which + * is synthesized from a flow summary. + */ + predicate summaryReadStep(SummaryNode pred, ContentSet c, SummaryNode succ) { + exists(SummarizedCallable sc, SummaryComponentStack s | + pred = summaryNodeInputState(sc, s.tail()) and + succ = summaryNodeInputState(sc, s) and + SummaryComponent::content(c) = s.head() + ) + or + exists(SinkElement sink, SourceSinkReportingElement e, SummaryComponentStack s | + pred = sinkElementInputState(sink, e, s.tail()) and + succ = sinkElementInputState(sink, e, s) and + SummaryComponent::content(c) = s.head() + ) + } + + /** + * Holds if there is a store step of content `c` from `pred` to `succ`, which + * is synthesized from a flow summary. + */ + predicate summaryStoreStep(SummaryNode pred, ContentSet c, SummaryNode succ) { + exists(SummarizedCallable sc, SummaryComponentStack s | + pred = summaryNodeOutputState(sc, s) and + succ = summaryNodeOutputState(sc, s.tail()) and + SummaryComponent::content(c) = s.head() + ) + or + exists(SourceElement source, SourceSinkReportingElement e, SummaryComponentStack s | + pred = sourceElementOutputState(source, e, s) and + succ = sourceElementOutputState(source, e, s.tail()) and + SummaryComponent::content(c) = s.head() + ) + } + + /** + * Holds if there is a jump step from `pred` to `succ`, which is synthesized + * from a flow summary. + */ + predicate summaryJumpStep(SummaryNode pred, SummaryNode succ) { + exists(SummaryComponentStack s | + s = SummaryComponentStack::singleton(SummaryComponent::syntheticGlobal(_)) and + pred = summaryNodeOutputState(_, s) and + succ = summaryNodeInputState(_, s) + ) + } + + predicate sourceJumpStep(SourceOutputNode nodeFrom, Node nodeTo) { + sourceStep(nodeFrom, nodeTo, _, false) + } + + /** + * Holds if values stored inside content `c` are cleared at `n`. `n` is a + * synthesized summary node, so in order for values to be cleared at calls + * to the relevant method, it is important that flow does not pass over + * the argument, either via use-use flow or def-use flow. + * + * Example: + * + * ``` + * a.b = taint; + * a.clearB(); // assume we have a flow summary for `clearB` that clears `b` on the qualifier + * sink(a.b); + * ``` + * + * In the above, flow should not pass from `a` on the first line (or the second + * line) to `a` on the third line. Instead, there will be synthesized flow from + * `a` on line 2 to the post-update node for `a` on that line (via an intermediate + * node where field `b` is cleared). + */ + predicate summaryClearsContent(SummaryNode n, ContentSet c) { + exists(SummarizedCallable sc, SummaryNodeState state, SummaryComponentStack stack | + n = TSummaryInternalNode(sc, state) and + state.isInputState(sc, stack) and + stack.head() = SummaryComponent::withoutContent(c) + ) + } + + /** + * Holds if the value that is being tracked is expected to be stored inside + * content `c` at `n`. + */ + predicate summaryExpectsContent(SummaryNode n, ContentSet c) { + exists(SummarizedCallable sc, SummaryNodeState state, SummaryComponentStack stack | + n = TSummaryInternalNode(sc, state) and + state.isInputState(sc, stack) and + stack.head() = SummaryComponent::withContent(c) + ) + } + + pragma[noinline] + private predicate viableParam( + DataFlowCall call, SummarizedCallable sc, ParameterPosition ppos, SummaryParamNode p + ) { + p = TSummaryParameterNode(sc, ppos) and + call = StepsInput::getACall(sc) + } + + pragma[nomagic] + private SummaryParamNode summaryArgParam( + DataFlowCall call, ArgNode arg, SummarizedCallable sc + ) { + exists(ParameterPosition ppos | + argumentPositionMatch(call, arg, ppos) and + viableParam(call, sc, ppos, result) + ) + } + + /** + * Holds if `p` can reach `n` in a summarized callable, using only value-preserving + * local steps. `clearsOrExpects` records whether any node on the path from `p` to + * `n` either clears or expects contents. + */ + private predicate paramReachesLocal( + SummaryParamNode p, SummaryNode n, boolean clearsOrExpects + ) { + viableParam(_, _, _, p) and + n = p and + clearsOrExpects = false + or + exists(SummaryNode mid, boolean clearsOrExpectsMid | + paramReachesLocal(p, mid, clearsOrExpectsMid) and + summaryLocalStepImpl(mid, n, true, _) and + if + summaryClearsContent(n, _) or + summaryExpectsContent(n, _) + then clearsOrExpects = true + else clearsOrExpects = clearsOrExpectsMid + ) + } + + /** + * Holds if use-use flow starting from `arg` should be prohibited. + * + * This is the case when `arg` is the argument of a call that targets a + * flow summary where the corresponding parameter either clears contents + * or expects contents. + */ + pragma[nomagic] + predicate prohibitsUseUseFlow(ArgNode arg, SummarizedCallable sc) { + exists(SummaryParamNode p, ParameterPosition ppos, SummaryNode ret | + paramReachesLocal(p, ret, true) and + p = summaryArgParam(_, arg, sc) and + p = TSummaryParameterNode(_, pragma[only_bind_into](ppos)) and + isParameterPostUpdate(ret, _, pragma[only_bind_into](ppos)) + ) + } + + pragma[nomagic] + private predicate summaryReturnNodeExt(SummaryNode ret, ReturnKindExt rk) { + summaryReturnNode(ret, rk.(ValueReturnKind).getKind()) + or + exists(SummaryParamNode p, SummaryNode pre, ParameterPosition pos | + paramReachesLocal(p, pre, _) and + summaryPostUpdateNode(ret, pre) and + p = TSummaryParameterNode(_, pos) and + rk.(ParamUpdateReturnKind).getPosition() = pos + ) + } + + bindingset[ret] + private SummaryParamNode summaryArgParamRetOut( + ArgNode arg, SummaryNode ret, OutNodeExt out, SummarizedCallable sc + ) { + exists(DataFlowCall call, ReturnKindExt rk | + result = summaryArgParam(call, arg, sc) and + summaryReturnNodeExt(ret, pragma[only_bind_into](rk)) and + out = getAnOutNodeExt(call, pragma[only_bind_into](rk)) + ) + } + + /** + * Holds if `arg` flows to `out` using a simple value-preserving flow + * summary, that is, a flow summary without reads and stores. + * + * NOTE: This step should not be used in global data-flow/taint-tracking, but may + * be useful to include in the exposed local data-flow/taint-tracking relations. + */ + predicate summaryThroughStepValue(ArgNode arg, Node out, SummarizedCallable sc) { + exists(SummaryNode ret | + summaryLocalStepImpl(summaryArgParamRetOut(arg, ret, out, sc), ret, true, _) + ) + } + + /** + * Holds if `arg` flows to `out` using a simple flow summary involving taint + * step, that is, a flow summary without reads and stores. + * + * NOTE: This step should not be used in global data-flow/taint-tracking, but may + * be useful to include in the exposed local data-flow/taint-tracking relations. + */ + predicate summaryThroughStepTaint(ArgNode arg, Node out, SummarizedCallable sc) { + exists(SummaryNode ret | + summaryLocalStepImpl(summaryArgParamRetOut(arg, ret, out, sc), ret, false, _) + ) + } + + /** + * Holds if there is a read(+taint) of `c` from `arg` to `out` using a + * flow summary. + * + * NOTE: This step should not be used in global data-flow/taint-tracking, but may + * be useful to include in the exposed local data-flow/taint-tracking relations. + */ + predicate summaryGetterStep(ArgNode arg, ContentSet c, Node out, SummarizedCallable sc) { + exists(SummaryNode mid, SummaryNode ret | + summaryReadStep(summaryArgParamRetOut(arg, ret, out, sc), c, mid) and + summaryLocalStepImpl(mid, ret, _, _) + ) + } + + /** + * Holds if there is a (taint+)store of `arg` into content `c` of `out` using a + * flow summary. + * + * NOTE: This step should not be used in global data-flow/taint-tracking, but may + * be useful to include in the exposed local data-flow/taint-tracking relations. + */ + predicate summarySetterStep(ArgNode arg, ContentSet c, Node out, SummarizedCallable sc) { + exists(SummaryNode mid, SummaryNode ret | + summaryLocalStepImpl(summaryArgParamRetOut(arg, ret, out, sc), mid, _, _) and + summaryStoreStep(mid, c, ret) + ) + } } /** - * Holds if there is a (taint+)store of `arg` into content `c` of `out` using a - * flow summary. + * Provides query predicates for rendering the generated data flow graph for + * a summarized callable. * - * NOTE: This step should not be used in global data-flow/taint-tracking, but may - * be useful to include in the exposed local data-flow/taint-tracking relations. + * Import this module into a `.ql` file of `@kind graph` to render the graph. + * The graph is restricted to callables from `RelevantSummarizedCallable`. */ - predicate summarySetterStep(ArgNode arg, ContentSet c, Node out, SummarizedCallable sc) { - exists(SummaryNode mid, SummaryNode ret | - summaryLocalStepImpl(summaryArgParamRetOut(arg, ret, out, sc), mid, _, _) and - summaryStoreStep(mid, c, ret) - ) + module RenderSummarizedCallable { + private module PrivateSteps = Steps; + + /** A summarized callable to include in the graph. */ + abstract class RelevantSummarizedCallable instanceof SummarizedCallable { + string toString() { result = super.toString() } + } + + private newtype TNodeOrCall = + MkNode(SummaryNode n) { + exists(RelevantSummarizedCallable c | + n = TSummaryInternalNode(c, _) + or + n = TSummaryParameterNode(c, _) + ) + } or + MkCall(SummaryNode receiver) { + receiver.getSummarizedCallable() instanceof RelevantSummarizedCallable and + ( + callbackInput(_, _, receiver, _) or + callbackOutput(_, _, receiver, _) + ) + } + + private class NodeOrCall extends TNodeOrCall { + SummaryNode asNode() { this = MkNode(result) } + + SummaryNode asCallReceiver() { this = MkCall(result) } + + string toString() { + result = this.asNode().toString() + or + result = this.asCallReceiver().toString() + } + + /** + * Holds if this element is at the specified location. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `filepath`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + filepath = "" and + startline = 0 and + startcolumn = 0 and + endline = 0 and + endcolumn = 0 + } + } + + query predicate nodes(NodeOrCall n, string key, string val) { + key = "semmle.label" and val = n.toString() + } + + private Node getNode(SummaryNode sn) { sn = StepsInput::getSummaryNode(result) } + + private predicate edgesComponent(NodeOrCall a, NodeOrCall b, string value) { + exists(boolean preservesValue | + PrivateSteps::summaryLocalStep(getNode(a.asNode()), b.asNode(), preservesValue, _) and + if preservesValue = true then value = "value" else value = "taint" + ) + or + exists(ContentSet c | + PrivateSteps::summaryReadStep(a.asNode(), c, b.asNode()) and + value = "read (" + c + ")" + or + PrivateSteps::summaryStoreStep(a.asNode(), c, b.asNode()) and + value = "store (" + c + ")" + or + PrivateSteps::summaryClearsContent(a.asNode(), c) and + b = a and + value = "clear (" + c + ")" + or + PrivateSteps::summaryExpectsContent(a.asNode(), c) and + b = a and + value = "expect (" + c + ")" + ) + or + summaryPostUpdateNode(b.asNode(), a.asNode()) and + value = "post-update" + or + b.asCallReceiver() = a.asNode() and + value = "receiver" + or + exists(ArgumentPosition pos | + summaryArgumentNode(b.asCallReceiver(), a.asNode(), pos) and + value = "argument (" + pos + ")" + ) + } + + query predicate edges(NodeOrCall a, NodeOrCall b, string key, string value) { + key = "semmle.label" and + value = strictconcat(string s | edgesComponent(a, b, s) | s, " / ") + } } } @@ -2786,111 +2999,5 @@ module Make< ) } } - - /** - * Provides query predicates for rendering the generated data flow graph for - * a summarized callable. - * - * Import this module into a `.ql` file of `@kind graph` to render the graph. - * The graph is restricted to callables from `RelevantSummarizedCallable`. - */ - module RenderSummarizedCallable { - private module PrivateSteps = Private::Steps; - - /** A summarized callable to include in the graph. */ - abstract class RelevantSummarizedCallable instanceof SummarizedCallable { - string toString() { result = super.toString() } - } - - private newtype TNodeOrCall = - MkNode(SummaryNode n) { - exists(RelevantSummarizedCallable c | - n = TSummaryInternalNode(c, _) - or - n = TSummaryParameterNode(c, _) - ) - } or - MkCall(SummaryNode receiver) { - receiver.getSummarizedCallable() instanceof RelevantSummarizedCallable and - ( - callbackInput(_, _, receiver, _) or - callbackOutput(_, _, receiver, _) - ) - } - - private class NodeOrCall extends TNodeOrCall { - SummaryNode asNode() { this = MkNode(result) } - - SummaryNode asCallReceiver() { this = MkCall(result) } - - string toString() { - result = this.asNode().toString() - or - result = this.asCallReceiver().toString() - } - - /** - * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. - * For more information, see - * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). - */ - predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - filepath = "" and - startline = 0 and - startcolumn = 0 and - endline = 0 and - endcolumn = 0 - } - } - - query predicate nodes(NodeOrCall n, string key, string val) { - key = "semmle.label" and val = n.toString() - } - - private Node getNode(SummaryNode sn) { sn = StepsInput::getSummaryNode(result) } - - private predicate edgesComponent(NodeOrCall a, NodeOrCall b, string value) { - exists(boolean preservesValue | - PrivateSteps::summaryLocalStep(getNode(a.asNode()), b.asNode(), preservesValue, _) and - if preservesValue = true then value = "value" else value = "taint" - ) - or - exists(ContentSet c | - PrivateSteps::summaryReadStep(a.asNode(), c, b.asNode()) and - value = "read (" + c + ")" - or - PrivateSteps::summaryStoreStep(a.asNode(), c, b.asNode()) and - value = "store (" + c + ")" - or - PrivateSteps::summaryClearsContent(a.asNode(), c) and - b = a and - value = "clear (" + c + ")" - or - PrivateSteps::summaryExpectsContent(a.asNode(), c) and - b = a and - value = "expect (" + c + ")" - ) - or - summaryPostUpdateNode(b.asNode(), a.asNode()) and - value = "post-update" - or - b.asCallReceiver() = a.asNode() and - value = "receiver" - or - exists(ArgumentPosition pos | - summaryArgumentNode(b.asCallReceiver(), a.asNode(), pos) and - value = "argument (" + pos + ")" - ) - } - - query predicate edges(NodeOrCall a, NodeOrCall b, string key, string value) { - key = "semmle.label" and - value = strictconcat(string s | edgesComponent(a, b, s) | s, " / ") - } - } } } diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll index 135924c0eb72..7c48d73b2d71 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll @@ -497,10 +497,10 @@ class FlowSummaryNode extends NodeImpl, TFlowSummaryNode { } override DataFlowCallable getEnclosingCallable() { - result.asSummarizedCallable() = this.getSummarizedCallable() + result = this.getSummaryNode().getEnclosingCallable() } - override Location getLocationImpl() { result = this.getSummarizedCallable().getLocation() } + override Location getLocationImpl() { result = this.getSummaryNode().getLocation() } override string toStringImpl() { result = this.getSummaryNode().toString() } } diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll b/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll index 6ca8e12ef6b6..421273964b9c 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll @@ -16,14 +16,20 @@ module Input implements InputSig class SummarizedCallableBase = Function; - class SourceBase = Void; + class SourceBase extends Void { + Location getLocation() { none() } + } - class SinkBase = Void; + class SinkBase = SourceBase; - class FlowSummaryCallBase = Void; + class FlowSummaryCallBase = SourceBase; predicate callableFromSource(SummarizedCallableBase c) { c.hasBody() } + DataFlowCallable getSummarizedCallableAsDataFlowCallable(SummarizedCallableBase c) { + result.asSummarizedCallable() = c + } + ArgumentPosition callbackSelfParameterPosition() { result instanceof ThisArgumentPosition } ReturnKind getStandardReturnValueKind() { result instanceof NormalReturnKind } @@ -114,18 +120,43 @@ module Input implements InputSig private import Make as Impl -private module StepsInput implements Impl::Private::StepsInputSig { - Impl::Private::SummaryNode getSummaryNode(Node n) { - result = n.(FlowSummaryNode).getSummaryNode() +private module Input2 implements Impl::Private::InputSig2 { + private import codeql.util.Void + + class SourceSinkReportingElement extends Void { + Location getLocation() { none() } + + DataFlowCallable getEnclosingCallable() { none() } } - DataFlowCall getACall(Public::SummarizedCallable sc) { result.asCall().getStaticTarget() = sc } + bindingset[source, s] + SourceSinkReportingElement getSourceEntryElement( + Impl::Public::SourceElement source, Impl::Private::SummaryComponentStack s + ) { + none() + } - DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { none() } + bindingset[e, s] + Node getSourceExitNode(SourceSinkReportingElement e, Impl::Private::SummaryComponentStack s) { + none() + } + + SourceSinkReportingElement getSinkExitElement( + Impl::Public::SinkElement sink, Impl::Private::SummaryComponent sc + ) { + none() + } + + bindingset[e, sc] + Node getSinkEntryNode(SourceSinkReportingElement e, Impl::Private::SummaryComponent sc) { none() } +} - Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } +private import Impl::Private::Make2 as Impl2 - Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() } +private module StepsInput implements Impl2::StepsInputSig { + Impl2::SummaryNode getSummaryNode(Node n) { result = n.(FlowSummaryNode).getSummaryNode() } + + DataFlowCall getACall(Public::SummarizedCallable sc) { result.asCall().getStaticTarget() = sc } } module SourceSinkInterpretationInput implements @@ -252,8 +283,9 @@ module SourceSinkInterpretationInput implements module Private { import Impl::Private + import Impl2 - module Steps = Impl::Private::Steps; + module Steps = Impl2::Steps; module External { import Impl::Private::External