mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Rust: Improve handling of deref expressions in data flow
This commit is contained in:
@@ -365,6 +365,7 @@ module RustDataFlow implements InputSig<Location> {
|
||||
node instanceof CaptureNode or
|
||||
node instanceof ClosureParameterNode or
|
||||
node instanceof DerefBorrowNode or
|
||||
node instanceof DerefOutNode or
|
||||
node.asExpr() instanceof ParenExpr or
|
||||
nodeIsHidden(node.(PostUpdateNode).getPreUpdateNode())
|
||||
}
|
||||
@@ -586,10 +587,9 @@ module RustDataFlow implements InputSig<Location> {
|
||||
.isVariantField([any(OptionEnum o).getSome(), any(ResultEnum r).getOk()], 0)
|
||||
)
|
||||
or
|
||||
exists(PrefixExpr deref |
|
||||
exists(DerefExpr deref |
|
||||
c instanceof ReferenceContent and
|
||||
deref.getOperatorName() = "*" and
|
||||
node1.asExpr() = deref.getExpr() and
|
||||
node1.(DerefOutNode).getDerefExpr() = deref and
|
||||
node2.asExpr() = deref
|
||||
)
|
||||
or
|
||||
@@ -721,10 +721,6 @@ module RustDataFlow implements InputSig<Location> {
|
||||
VariableCapture::storeStep(node1, c, node2)
|
||||
or
|
||||
implicitBorrow(node1, node2, c)
|
||||
or
|
||||
// A store step dual to the read step for implicit dereferences.
|
||||
implicitDeref(node2.(PostUpdateNode).getPreUpdateNode(),
|
||||
node1.(PostUpdateNode).getPreUpdateNode(), c)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -348,15 +348,46 @@ abstract class OutNode extends Node {
|
||||
}
|
||||
|
||||
final private class ExprOutNode extends ExprNode, OutNode {
|
||||
ExprOutNode() { this.asExpr() instanceof Call }
|
||||
ExprOutNode() {
|
||||
exists(Call call |
|
||||
call = this.asExpr() and
|
||||
not call instanceof DerefExpr // Handled by `DerefOutNode`
|
||||
)
|
||||
}
|
||||
|
||||
/** Gets the underlying call CFG node that includes this out node. */
|
||||
/** Gets the underlying call node that includes this out node. */
|
||||
override DataFlowCall getCall(ReturnKind kind) {
|
||||
result.asCall() = n and
|
||||
kind = TNormalReturnKind()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A node that represents the value of a `*` expression _before_ implicit
|
||||
* dereferencing:
|
||||
*
|
||||
* `*v` equivalent to `*Deref::deref(&v)`, and this node represents the
|
||||
* `Deref::deref(&v)` part.
|
||||
*/
|
||||
class DerefOutNode extends OutNode, TDerefOutNode {
|
||||
DerefExpr de;
|
||||
|
||||
DerefOutNode() { this = TDerefOutNode(de, false) }
|
||||
|
||||
DerefExpr getDerefExpr() { result = de }
|
||||
|
||||
override CfgScope getCfgScope() { result = de.getEnclosingCfgScope() }
|
||||
|
||||
override DataFlowCall getCall(ReturnKind kind) {
|
||||
result.asCall() = de and
|
||||
kind = TNormalReturnKind()
|
||||
}
|
||||
|
||||
override Location getLocation() { result = de.getLocation() }
|
||||
|
||||
override string toString() { result = de.toString() + " [pre-dereferenced]" }
|
||||
}
|
||||
|
||||
final class SummaryOutNode extends FlowSummaryNode, OutNode {
|
||||
private DataFlowCall call;
|
||||
private ReturnKind kind_;
|
||||
@@ -434,6 +465,18 @@ final class DerefBorrowPostUpdateNode extends PostUpdateNode, TDerefBorrowNode {
|
||||
override Location getLocation() { result = arg.getLocation() }
|
||||
}
|
||||
|
||||
class DerefOutPostUpdateNode extends PostUpdateNode, TDerefOutNode {
|
||||
DerefExpr de;
|
||||
|
||||
DerefOutPostUpdateNode() { this = TDerefOutNode(de, true) }
|
||||
|
||||
override DerefOutNode getPreUpdateNode() { result = TDerefOutNode(de, false) }
|
||||
|
||||
override CfgScope getCfgScope() { result = de.getEnclosingCfgScope() }
|
||||
|
||||
override Location getLocation() { result = de.getLocation() }
|
||||
}
|
||||
|
||||
final class SummaryPostUpdateNode extends FlowSummaryNode, PostUpdateNode {
|
||||
private FlowSummaryNode pre;
|
||||
|
||||
@@ -499,6 +542,7 @@ newtype TNode =
|
||||
TypeInference::implicitBorrow(n) and
|
||||
borrow = true
|
||||
} or
|
||||
TDerefOutNode(DerefExpr de, Boolean isPost) or
|
||||
TSsaNode(SsaImpl::DataFlowIntegration::SsaNode node) or
|
||||
TFlowSummaryNode(FlowSummaryImpl::Private::SummaryNode sn) {
|
||||
forall(AstNode n | n = sn.getSinkElement() or n = sn.getSourceElement() |
|
||||
|
||||
@@ -27,8 +27,19 @@ private class BuiltinsTypesFile extends File {
|
||||
class BuiltinType extends Struct {
|
||||
BuiltinType() { this.getFile() instanceof BuiltinsTypesFile }
|
||||
|
||||
/** Gets the name of this type. */
|
||||
/**
|
||||
* Gets the name of this type.
|
||||
*
|
||||
* This is the name used internally to represent the type, for example `Ref`.
|
||||
*/
|
||||
string getName() { result = super.getName().getText() }
|
||||
|
||||
/**
|
||||
* Gets a display name for this type.
|
||||
*
|
||||
* This is the name used in code, for example `&`.
|
||||
*/
|
||||
string getDisplayName() { result = this.getName() }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -140,21 +151,43 @@ class F64 extends FloatingPointTypeImpl {
|
||||
/** The builtin slice type `[T]`. */
|
||||
class SliceType extends BuiltinType {
|
||||
SliceType() { this.getName() = "Slice" }
|
||||
|
||||
override string getDisplayName() { result = "[]" }
|
||||
}
|
||||
|
||||
/** The builtin array type `[T; N]`. */
|
||||
class ArrayType extends BuiltinType {
|
||||
ArrayType() { this.getName() = "Array" }
|
||||
|
||||
override string getDisplayName() { result = "[;]" }
|
||||
}
|
||||
|
||||
/** The builtin reference type `&T` or `&mut T`. */
|
||||
/** The builtin reference type `&T`. */
|
||||
class RefType extends BuiltinType {
|
||||
RefType() { this.getName() = "Ref" }
|
||||
|
||||
override string getDisplayName() { result = "&" }
|
||||
}
|
||||
|
||||
/** The builtin pointer type `*const T` or `*mut T`. */
|
||||
/** The builtin reference type `&mut T`. */
|
||||
class RefMutType extends BuiltinType {
|
||||
RefMutType() { this.getName() = "RefMut" }
|
||||
|
||||
override string getDisplayName() { result = "&mut" }
|
||||
}
|
||||
|
||||
/** The builtin pointer type `*const T`. */
|
||||
class PtrType extends BuiltinType {
|
||||
PtrType() { this.getName() = "Ptr" }
|
||||
|
||||
override string getDisplayName() { result = "*const" }
|
||||
}
|
||||
|
||||
/** The builtin pointer type `*mut T`. */
|
||||
class PtrMutType extends BuiltinType {
|
||||
PtrMutType() { this.getName() = "PtrMut" }
|
||||
|
||||
override string getDisplayName() { result = "*mut" }
|
||||
}
|
||||
|
||||
/** A builtin tuple type `(T1, T2, ...)`. */
|
||||
@@ -168,4 +201,13 @@ class TupleType extends BuiltinType {
|
||||
or
|
||||
result = this.getGenericParamList().getNumberOfGenericParams()
|
||||
}
|
||||
|
||||
override string getDisplayName() {
|
||||
// Note: This produces "(,,)" for a 2-tuple, "(,,,)" for a 3-tuple, etc.
|
||||
// This is in order to distinguish the unit type `()` from the 1-tuple `(,)`.
|
||||
exists(string commas |
|
||||
commas = concat(int i | i = [0 .. this.getArity() - 1] | ",") and
|
||||
result = "(" + commas + ")"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,9 +24,10 @@ extensions:
|
||||
extensible: summaryModel
|
||||
data:
|
||||
# Box
|
||||
- ["<alloc::boxed::Box>::pin", "Argument[0]", "ReturnValue.Reference", "value", "manual"]
|
||||
- ["<alloc::boxed::Box>::new", "Argument[0]", "ReturnValue.Reference", "value", "manual"]
|
||||
- ["<alloc::boxed::Box>::into_pin", "Argument[0]", "ReturnValue", "value", "manual"]
|
||||
- ["<alloc::boxed::Box as core::ops::deref::Deref>::deref", "Argument[self].Reference.Field[alloc::boxed::Box(0)]", "ReturnValue.Reference", "value", "manual"]
|
||||
- ["<alloc::boxed::Box>::pin", "Argument[0]", "ReturnValue.Field[core::pin::Pin::pointer].Field[alloc::boxed::Box(0)]", "value", "manual"]
|
||||
- ["<alloc::boxed::Box>::new", "Argument[0]", "ReturnValue.Field[alloc::boxed::Box(0)]", "value", "manual"]
|
||||
- ["<alloc::boxed::Box>::into_pin", "Argument[0]", "ReturnValue.Field[core::pin::Pin::pointer]", "value", "manual"]
|
||||
# Fmt
|
||||
- ["alloc::fmt::format", "Argument[0]", "ReturnValue", "taint", "manual"]
|
||||
# Layout
|
||||
|
||||
@@ -3,6 +3,9 @@ extensions:
|
||||
pack: codeql/rust-all
|
||||
extensible: summaryModel
|
||||
data:
|
||||
# Builtin deref
|
||||
- ["<& as core::ops::deref::Deref>::deref", "Argument[self].Reference", "ReturnValue", "value", "manual"]
|
||||
- ["<&mut as core::ops::deref::Deref>::deref", "Argument[self].Reference", "ReturnValue", "value", "manual"]
|
||||
# Arithmetic
|
||||
- ["<_ as core::ops::arith::Add>::add", "Argument[self]", "ReturnValue", "taint", "manual"]
|
||||
- ["<_ as core::ops::arith::Add>::add", "Argument[0]", "ReturnValue", "taint", "manual"]
|
||||
@@ -41,8 +44,9 @@ extensions:
|
||||
- ["core::ptr::write", "Argument[1]", "Argument[0].Reference", "value", "manual"]
|
||||
- ["core::ptr::write_unaligned", "Argument[1]", "Argument[0].Reference", "value", "manual"]
|
||||
- ["core::ptr::write_volatile", "Argument[1]", "Argument[0].Reference", "value", "manual"]
|
||||
# https://doc.rust-lang.org/std/pin/struct.Pin.html#impl-Deref-for-Pin%3CPtr%3E, but limited to `Ptr = &`
|
||||
# https://doc.rust-lang.org/std/pin/struct.Pin.html#impl-Deref-for-Pin%3CPtr%3E, but limited to `Ptr = &` and `Ptr = Box`
|
||||
- ["<core::pin::Pin as core::ops::deref::Deref>::deref", "Argument[self].Reference.Field[core::pin::Pin::pointer].Reference", "ReturnValue.Reference", "value", "manual"]
|
||||
- ["<core::pin::Pin as core::ops::deref::Deref>::deref", "Argument[self].Reference.Field[core::pin::Pin::pointer].Field[alloc::boxed::Box(0)]", "ReturnValue.Reference", "value", "manual"]
|
||||
# Str
|
||||
- ["<core::str>::as_str", "Argument[self]", "ReturnValue", "value", "manual"]
|
||||
- ["<core::str>::as_bytes", "Argument[self]", "ReturnValue", "value", "manual"]
|
||||
|
||||
@@ -998,7 +998,16 @@ private class StructItemNode extends TypeItemNode, ParameterizableItemNode insta
|
||||
language[monotonicAggregates]
|
||||
override string getCanonicalPath(Crate c) {
|
||||
this.hasCanonicalPath(c) and
|
||||
result = strictconcat(int i | i in [0 .. 2] | this.getCanonicalPathPart(c, i) order by i)
|
||||
(
|
||||
this =
|
||||
any(Builtins::BuiltinType t |
|
||||
not t.hasVisibility() and
|
||||
result = t.getDisplayName()
|
||||
)
|
||||
or
|
||||
not this = any(Builtins::BuiltinType t | not t.hasVisibility()) and
|
||||
result = strictconcat(int i | i in [0 .. 2] | this.getCanonicalPathPart(c, i) order by i)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
models
|
||||
| 1 | Summary: futures_executor::local_pool::block_on; Argument[0]; ReturnValue; value |
|
||||
| 1 | Summary: <& as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value |
|
||||
| 2 | Summary: futures_executor::local_pool::block_on; Argument[0]; ReturnValue; value |
|
||||
edges
|
||||
| main.rs:12:28:14:1 | { ... } | main.rs:17:13:17:23 | get_data(...) | provenance | |
|
||||
| main.rs:13:5:13:13 | source(...) | main.rs:12:28:14:1 | { ... } | provenance | |
|
||||
@@ -118,7 +119,7 @@ edges
|
||||
| main.rs:236:9:236:22 | &... [&ref] | main.rs:235:38:237:5 | { ... } [&ref] | provenance | |
|
||||
| main.rs:236:10:236:22 | ... .value | main.rs:236:9:236:22 | &... [&ref] | provenance | |
|
||||
| main.rs:236:11:236:15 | * ... [MyInt] | main.rs:236:10:236:22 | ... .value | provenance | |
|
||||
| main.rs:236:12:236:15 | self [&ref, MyInt] | main.rs:236:11:236:15 | * ... [MyInt] | provenance | |
|
||||
| main.rs:236:12:236:15 | self [&ref, MyInt] | main.rs:236:11:236:15 | * ... [MyInt] | provenance | MaD:1 |
|
||||
| main.rs:242:9:242:9 | a [MyInt] | main.rs:244:13:244:13 | a [MyInt] | provenance | |
|
||||
| main.rs:242:13:242:38 | MyInt {...} [MyInt] | main.rs:242:9:242:9 | a [MyInt] | provenance | |
|
||||
| main.rs:242:28:242:36 | source(...) | main.rs:242:13:242:38 | MyInt {...} [MyInt] | provenance | |
|
||||
@@ -148,17 +149,17 @@ edges
|
||||
| main.rs:270:28:270:37 | source(...) | main.rs:270:13:270:39 | MyInt {...} [MyInt] | provenance | |
|
||||
| main.rs:272:9:272:9 | c | main.rs:273:10:273:10 | c | provenance | |
|
||||
| main.rs:272:13:272:29 | * ... | main.rs:272:9:272:9 | c | provenance | |
|
||||
| main.rs:272:14:272:29 | ...::deref(...) [&ref] | main.rs:272:13:272:29 | * ... | provenance | |
|
||||
| main.rs:272:14:272:29 | ...::deref(...) [&ref] | main.rs:272:13:272:29 | * ... | provenance | MaD:1 |
|
||||
| main.rs:272:27:272:28 | &a [&ref, MyInt] | main.rs:235:14:235:18 | SelfParam [&ref, MyInt] | provenance | |
|
||||
| main.rs:272:27:272:28 | &a [&ref, MyInt] | main.rs:272:14:272:29 | ...::deref(...) [&ref] | provenance | |
|
||||
| main.rs:272:27:272:28 | &a [&ref, MyInt] | main.rs:272:14:272:29 | ...::deref(...) [&ref] | provenance | MaD:1 |
|
||||
| main.rs:272:28:272:28 | a [MyInt] | main.rs:272:27:272:28 | &a [&ref, MyInt] | provenance | |
|
||||
| main.rs:275:9:275:9 | a [MyInt] | main.rs:276:14:276:14 | a [MyInt] | provenance | |
|
||||
| main.rs:275:13:275:39 | MyInt {...} [MyInt] | main.rs:275:9:275:9 | a [MyInt] | provenance | |
|
||||
| main.rs:275:28:275:37 | source(...) | main.rs:275:13:275:39 | MyInt {...} [MyInt] | provenance | |
|
||||
| main.rs:276:9:276:9 | c [&ref] | main.rs:277:10:277:10 | c | provenance | |
|
||||
| main.rs:276:13:276:14 | * ... [&ref] | main.rs:276:9:276:9 | c [&ref] | provenance | |
|
||||
| main.rs:276:9:276:9 | c | main.rs:277:10:277:10 | c | provenance | |
|
||||
| main.rs:276:13:276:14 | * ... | main.rs:276:9:276:9 | c | provenance | |
|
||||
| main.rs:276:14:276:14 | a [MyInt] | main.rs:235:14:235:18 | SelfParam [&ref, MyInt] | provenance | |
|
||||
| main.rs:276:14:276:14 | a [MyInt] | main.rs:276:13:276:14 | * ... [&ref] | provenance | |
|
||||
| main.rs:276:14:276:14 | a [MyInt] | main.rs:276:13:276:14 | * ... | provenance | MaD:1 |
|
||||
| main.rs:289:18:289:21 | SelfParam [MyInt] | main.rs:289:48:291:5 | { ... } [MyInt] | provenance | |
|
||||
| main.rs:293:26:293:37 | ...: MyInt [MyInt] | main.rs:293:49:295:5 | { ... } [MyInt] | provenance | |
|
||||
| main.rs:299:9:299:9 | a [MyInt] | main.rs:301:50:301:50 | a [MyInt] | provenance | |
|
||||
@@ -185,7 +186,7 @@ edges
|
||||
| main.rs:326:17:326:25 | source(...) | main.rs:326:13:326:13 | c | provenance | |
|
||||
| main.rs:334:9:334:9 | a | main.rs:335:10:335:10 | a | provenance | |
|
||||
| main.rs:334:13:334:55 | ...::block_on(...) | main.rs:334:9:334:9 | a | provenance | |
|
||||
| main.rs:334:41:334:54 | async_source(...) | main.rs:334:13:334:55 | ...::block_on(...) | provenance | MaD:1 |
|
||||
| main.rs:334:41:334:54 | async_source(...) | main.rs:334:13:334:55 | ...::block_on(...) | provenance | MaD:2 |
|
||||
nodes
|
||||
| main.rs:12:28:14:1 | { ... } | semmle.label | { ... } |
|
||||
| main.rs:13:5:13:13 | source(...) | semmle.label | source(...) |
|
||||
@@ -355,8 +356,8 @@ nodes
|
||||
| main.rs:275:9:275:9 | a [MyInt] | semmle.label | a [MyInt] |
|
||||
| main.rs:275:13:275:39 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] |
|
||||
| main.rs:275:28:275:37 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:276:9:276:9 | c [&ref] | semmle.label | c [&ref] |
|
||||
| main.rs:276:13:276:14 | * ... [&ref] | semmle.label | * ... [&ref] |
|
||||
| main.rs:276:9:276:9 | c | semmle.label | c |
|
||||
| main.rs:276:13:276:14 | * ... | semmle.label | * ... |
|
||||
| main.rs:276:14:276:14 | a [MyInt] | semmle.label | a [MyInt] |
|
||||
| main.rs:277:10:277:10 | c | semmle.label | c |
|
||||
| main.rs:289:18:289:21 | SelfParam [MyInt] | semmle.label | SelfParam [MyInt] |
|
||||
@@ -407,7 +408,7 @@ subpaths
|
||||
| main.rs:254:13:254:13 | a [MyInt] | main.rs:220:12:220:15 | SelfParam [MyInt] | main.rs:220:42:223:5 | { ... } [MyInt] | main.rs:254:13:254:20 | a.add(...) [MyInt] |
|
||||
| main.rs:261:35:261:35 | b [MyInt] | main.rs:227:30:227:39 | ...: MyInt [MyInt] | main.rs:227:19:227:27 | SelfParam [Return] [&ref, MyInt] | main.rs:261:27:261:32 | [post] &mut a [&ref, MyInt] |
|
||||
| main.rs:272:27:272:28 | &a [&ref, MyInt] | main.rs:235:14:235:18 | SelfParam [&ref, MyInt] | main.rs:235:38:237:5 | { ... } [&ref] | main.rs:272:14:272:29 | ...::deref(...) [&ref] |
|
||||
| main.rs:276:14:276:14 | a [MyInt] | main.rs:235:14:235:18 | SelfParam [&ref, MyInt] | main.rs:235:38:237:5 | { ... } [&ref] | main.rs:276:13:276:14 | * ... [&ref] |
|
||||
| main.rs:276:14:276:14 | a [MyInt] | main.rs:235:14:235:18 | SelfParam [&ref, MyInt] | main.rs:235:38:237:5 | { ... } [&ref] | main.rs:276:13:276:14 | * ... |
|
||||
| main.rs:301:50:301:50 | a [MyInt] | main.rs:289:18:289:21 | SelfParam [MyInt] | main.rs:289:48:291:5 | { ... } [MyInt] | main.rs:301:30:301:54 | ...::take_self(...) [MyInt] |
|
||||
| main.rs:306:55:306:55 | b [MyInt] | main.rs:293:26:293:37 | ...: MyInt [MyInt] | main.rs:293:49:295:5 | { ... } [MyInt] | main.rs:306:30:306:56 | ...::take_second(...) [MyInt] |
|
||||
testFailures
|
||||
|
||||
@@ -274,7 +274,7 @@ fn test_operator_overloading() {
|
||||
|
||||
let a = MyInt { value: source(28) };
|
||||
let c = *a;
|
||||
sink(c); // $ hasTaintFlow=28 MISSING: hasValueFlow=28
|
||||
sink(c); // $ hasValueFlow=28
|
||||
}
|
||||
|
||||
trait MyTrait2 {
|
||||
|
||||
@@ -59,6 +59,8 @@
|
||||
| main.rs:212:13:212:34 | ...::new(...) | main.rs:205:5:208:5 | fn new |
|
||||
| main.rs:212:24:212:33 | source(...) | main.rs:1:1:3:1 | fn source |
|
||||
| main.rs:214:5:214:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
|
||||
| main.rs:236:11:236:15 | * ... | {EXTERNAL LOCATION} | fn deref |
|
||||
| main.rs:236:11:236:15 | * ... | {EXTERNAL LOCATION} | fn deref |
|
||||
| main.rs:242:28:242:36 | source(...) | main.rs:1:1:3:1 | fn source |
|
||||
| main.rs:244:13:244:17 | ... + ... | main.rs:220:5:223:5 | fn add |
|
||||
| main.rs:245:5:245:17 | sink(...) | main.rs:5:1:7:1 | fn sink |
|
||||
@@ -75,6 +77,8 @@
|
||||
| main.rs:266:5:266:10 | ... *= ... | main.rs:227:5:229:5 | fn mul_assign |
|
||||
| main.rs:267:5:267:17 | sink(...) | main.rs:5:1:7:1 | fn sink |
|
||||
| main.rs:270:28:270:37 | source(...) | main.rs:1:1:3:1 | fn source |
|
||||
| main.rs:272:13:272:29 | * ... | {EXTERNAL LOCATION} | fn deref |
|
||||
| main.rs:272:13:272:29 | * ... | {EXTERNAL LOCATION} | fn deref |
|
||||
| main.rs:272:14:272:29 | ...::deref(...) | main.rs:235:5:237:5 | fn deref |
|
||||
| main.rs:273:5:273:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
|
||||
| main.rs:275:28:275:37 | source(...) | main.rs:1:1:3:1 | fn source |
|
||||
|
||||
@@ -825,8 +825,8 @@ localStep
|
||||
| main.rs:616:36:616:41 | [post] MacroExpr | main.rs:616:36:616:39 | [post] ...::new(...) |
|
||||
readStep
|
||||
| main.rs:50:9:50:15 | Some(...) | {EXTERNAL LOCATION} | Some | main.rs:50:14:50:14 | _ |
|
||||
| main.rs:116:10:116:11 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:116:10:116:11 | * ... |
|
||||
| main.rs:116:11:116:11 | [post] i [borrowed] | file://:0:0:0:0 | &ref | main.rs:116:11:116:11 | [post] i |
|
||||
| main.rs:116:11:116:11 | i | file://:0:0:0:0 | &ref | main.rs:116:10:116:11 | * ... |
|
||||
| main.rs:124:10:124:10 | a | file://:0:0:0:0 | tuple.0 | main.rs:124:10:124:12 | a.0 |
|
||||
| main.rs:125:10:125:10 | a | file://:0:0:0:0 | tuple.1 | main.rs:125:10:125:12 | a.1 |
|
||||
| main.rs:130:9:130:20 | TuplePat | file://:0:0:0:0 | tuple.0 | main.rs:130:10:130:11 | a0 |
|
||||
@@ -934,30 +934,30 @@ readStep
|
||||
| main.rs:506:13:506:13 | [post] a [borrowed] | file://:0:0:0:0 | &ref | main.rs:506:13:506:13 | [post] a |
|
||||
| main.rs:519:10:519:11 | [post] vs [borrowed] | file://:0:0:0:0 | &ref | main.rs:519:10:519:11 | [post] vs |
|
||||
| main.rs:519:10:519:11 | vs | file://:0:0:0:0 | element | main.rs:519:10:519:14 | vs[0] |
|
||||
| main.rs:520:11:520:35 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:520:10:520:35 | * ... |
|
||||
| main.rs:520:10:520:35 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:520:10:520:35 | * ... |
|
||||
| main.rs:520:11:520:35 | [post] ... .unwrap() [borrowed] | file://:0:0:0:0 | &ref | main.rs:520:11:520:35 | [post] ... .unwrap() |
|
||||
| main.rs:521:11:521:35 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:521:10:521:35 | * ... |
|
||||
| main.rs:521:10:521:35 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:521:10:521:35 | * ... |
|
||||
| main.rs:521:11:521:35 | [post] ... .unwrap() [borrowed] | file://:0:0:0:0 | &ref | main.rs:521:11:521:35 | [post] ... .unwrap() |
|
||||
| main.rs:523:14:523:15 | vs | file://:0:0:0:0 | element | main.rs:523:9:523:9 | v |
|
||||
| main.rs:526:9:526:10 | &... | file://:0:0:0:0 | &ref | main.rs:526:10:526:10 | v |
|
||||
| main.rs:526:15:526:23 | vs.iter() | file://:0:0:0:0 | element | main.rs:526:9:526:10 | &... |
|
||||
| main.rs:531:9:531:10 | &... | file://:0:0:0:0 | &ref | main.rs:531:10:531:10 | v |
|
||||
| main.rs:531:15:531:17 | vs2 | file://:0:0:0:0 | element | main.rs:531:9:531:10 | &... |
|
||||
| main.rs:535:28:535:29 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:535:28:535:29 | * ... |
|
||||
| main.rs:535:29:535:29 | [post] x [borrowed] | file://:0:0:0:0 | &ref | main.rs:535:29:535:29 | [post] x |
|
||||
| main.rs:535:29:535:29 | x | file://:0:0:0:0 | &ref | main.rs:535:28:535:29 | * ... |
|
||||
| main.rs:536:33:536:34 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:536:33:536:34 | * ... |
|
||||
| main.rs:536:34:536:34 | [post] x [borrowed] | file://:0:0:0:0 | &ref | main.rs:536:34:536:34 | [post] x |
|
||||
| main.rs:536:34:536:34 | x | file://:0:0:0:0 | &ref | main.rs:536:33:536:34 | * ... |
|
||||
| main.rs:538:14:538:27 | vs.into_iter() | file://:0:0:0:0 | element | main.rs:538:9:538:9 | v |
|
||||
| main.rs:544:10:544:15 | [post] vs_mut [borrowed] | file://:0:0:0:0 | &ref | main.rs:544:10:544:15 | [post] vs_mut |
|
||||
| main.rs:544:10:544:15 | vs_mut | file://:0:0:0:0 | element | main.rs:544:10:544:18 | vs_mut[0] |
|
||||
| main.rs:545:11:545:39 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:545:10:545:39 | * ... |
|
||||
| main.rs:545:10:545:39 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:545:10:545:39 | * ... |
|
||||
| main.rs:545:11:545:39 | [post] ... .unwrap() [borrowed] | file://:0:0:0:0 | &ref | main.rs:545:11:545:39 | [post] ... .unwrap() |
|
||||
| main.rs:546:11:546:39 | ... .unwrap() | file://:0:0:0:0 | &ref | main.rs:546:10:546:39 | * ... |
|
||||
| main.rs:546:10:546:39 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:546:10:546:39 | * ... |
|
||||
| main.rs:546:11:546:39 | [post] ... .unwrap() [borrowed] | file://:0:0:0:0 | &ref | main.rs:546:11:546:39 | [post] ... .unwrap() |
|
||||
| main.rs:548:9:548:14 | &mut ... | file://:0:0:0:0 | &ref | main.rs:548:14:548:14 | v |
|
||||
| main.rs:548:19:548:35 | vs_mut.iter_mut() | file://:0:0:0:0 | element | main.rs:548:9:548:14 | &mut ... |
|
||||
| main.rs:562:10:562:15 | * ... [pre-dereferenced] | file://:0:0:0:0 | &ref | main.rs:562:10:562:15 | * ... |
|
||||
| main.rs:562:11:562:15 | [post] c_ref [borrowed] | file://:0:0:0:0 | &ref | main.rs:562:11:562:15 | [post] c_ref |
|
||||
| main.rs:562:11:562:15 | c_ref | file://:0:0:0:0 | &ref | main.rs:562:10:562:15 | * ... |
|
||||
storeStep
|
||||
| main.rs:116:11:116:11 | i | file://:0:0:0:0 | &ref | main.rs:116:11:116:11 | i [borrowed] |
|
||||
| main.rs:123:14:123:22 | source(...) | file://:0:0:0:0 | tuple.0 | main.rs:123:13:123:26 | TupleExpr |
|
||||
|
||||
@@ -1,20 +1,21 @@
|
||||
models
|
||||
| 1 | Summary: <_ as alloc::string::ToString>::to_string; Argument[self].Reference; ReturnValue; taint |
|
||||
| 2 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; taint |
|
||||
| 3 | Summary: <alloc::boxed::Box as core::ops::deref::Deref>::deref; Argument[self].Reference.Reference; ReturnValue.Reference; value |
|
||||
| 4 | Summary: <alloc::boxed::Box>::new; Argument[0]; ReturnValue.Reference; value |
|
||||
| 5 | Summary: <core::i64 as core::convert::From>::from; Argument[0]; ReturnValue; taint |
|
||||
| 6 | Summary: <core::option::Option>::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
|
||||
| 7 | Summary: <core::option::Option>::unwrap_or; Argument[0]; ReturnValue; value |
|
||||
| 8 | Summary: <core::option::Option>::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
|
||||
| 9 | Summary: <core::option::Option>::unwrap_or_else; Argument[0].ReturnValue; ReturnValue; value |
|
||||
| 10 | Summary: <core::option::Option>::unwrap_or_else; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
|
||||
| 11 | Summary: <core::result::Result>::err; Argument[self].Field[core::result::Result::Err(0)]; ReturnValue.Field[core::option::Option::Some(0)]; value |
|
||||
| 12 | Summary: <core::result::Result>::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
|
||||
| 13 | Summary: <core::result::Result>::expect_err; Argument[self].Field[core::result::Result::Err(0)]; ReturnValue; value |
|
||||
| 14 | Summary: <core::result::Result>::ok; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue.Field[core::option::Option::Some(0)]; value |
|
||||
| 15 | Summary: <core::result::Result>::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
|
||||
| 16 | Summary: <core::str>::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
|
||||
| 1 | Summary: <& as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value |
|
||||
| 2 | Summary: <_ as alloc::string::ToString>::to_string; Argument[self].Reference; ReturnValue; taint |
|
||||
| 3 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; taint |
|
||||
| 4 | Summary: <alloc::boxed::Box as core::ops::deref::Deref>::deref; Argument[self].Reference.Field[alloc::boxed::Box(0)]; ReturnValue.Reference; value |
|
||||
| 5 | Summary: <alloc::boxed::Box>::new; Argument[0]; ReturnValue.Field[alloc::boxed::Box(0)]; value |
|
||||
| 6 | Summary: <core::i64 as core::convert::From>::from; Argument[0]; ReturnValue; taint |
|
||||
| 7 | Summary: <core::option::Option>::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
|
||||
| 8 | Summary: <core::option::Option>::unwrap_or; Argument[0]; ReturnValue; value |
|
||||
| 9 | Summary: <core::option::Option>::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
|
||||
| 10 | Summary: <core::option::Option>::unwrap_or_else; Argument[0].ReturnValue; ReturnValue; value |
|
||||
| 11 | Summary: <core::option::Option>::unwrap_or_else; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
|
||||
| 12 | Summary: <core::result::Result>::err; Argument[self].Field[core::result::Result::Err(0)]; ReturnValue.Field[core::option::Option::Some(0)]; value |
|
||||
| 13 | Summary: <core::result::Result>::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
|
||||
| 14 | Summary: <core::result::Result>::expect_err; Argument[self].Field[core::result::Result::Err(0)]; ReturnValue; value |
|
||||
| 15 | Summary: <core::result::Result>::ok; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue.Field[core::option::Option::Some(0)]; value |
|
||||
| 16 | Summary: <core::result::Result>::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
|
||||
| 17 | Summary: <core::str>::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
|
||||
edges
|
||||
| main.rs:23:9:23:9 | s | main.rs:24:10:24:10 | s | provenance | |
|
||||
| main.rs:23:9:23:9 | s | main.rs:26:12:26:12 | x | provenance | |
|
||||
@@ -40,11 +41,10 @@ edges
|
||||
| main.rs:81:9:81:13 | mut l | main.rs:82:5:82:5 | l | provenance | |
|
||||
| main.rs:81:17:81:25 | source(...) | main.rs:81:9:81:13 | mut l | provenance | |
|
||||
| main.rs:82:5:82:5 | l | main.rs:83:10:83:10 | l | provenance | |
|
||||
| main.rs:115:9:115:9 | i [&ref] | main.rs:116:11:116:11 | i [&ref] | provenance | |
|
||||
| main.rs:115:13:115:31 | ...::new(...) [&ref] | main.rs:115:9:115:9 | i [&ref] | provenance | |
|
||||
| main.rs:115:22:115:30 | source(...) | main.rs:115:13:115:31 | ...::new(...) [&ref] | provenance | MaD:4 |
|
||||
| main.rs:116:11:116:11 | i [&ref] | main.rs:116:10:116:11 | * ... | provenance | |
|
||||
| main.rs:116:11:116:11 | i [&ref] | main.rs:116:10:116:11 | * ... | provenance | MaD:3 |
|
||||
| main.rs:115:9:115:9 | i [Box(0)] | main.rs:116:11:116:11 | i [Box(0)] | provenance | |
|
||||
| main.rs:115:13:115:31 | ...::new(...) [Box(0)] | main.rs:115:9:115:9 | i [Box(0)] | provenance | |
|
||||
| main.rs:115:22:115:30 | source(...) | main.rs:115:13:115:31 | ...::new(...) [Box(0)] | provenance | MaD:5 |
|
||||
| main.rs:116:11:116:11 | i [Box(0)] | main.rs:116:10:116:11 | * ... | provenance | MaD:4 |
|
||||
| main.rs:123:9:123:9 | a [tuple.0] | main.rs:124:10:124:10 | a [tuple.0] | provenance | |
|
||||
| main.rs:123:13:123:26 | TupleExpr [tuple.0] | main.rs:123:9:123:9 | a [tuple.0] | provenance | |
|
||||
| main.rs:123:14:123:22 | source(...) | main.rs:123:13:123:26 | TupleExpr [tuple.0] | provenance | |
|
||||
@@ -127,17 +127,17 @@ edges
|
||||
| main.rs:278:9:278:10 | s1 [Some] | main.rs:279:10:279:11 | s1 [Some] | provenance | |
|
||||
| main.rs:278:14:278:29 | Some(...) [Some] | main.rs:278:9:278:10 | s1 [Some] | provenance | |
|
||||
| main.rs:278:19:278:28 | source(...) | main.rs:278:14:278:29 | Some(...) [Some] | provenance | |
|
||||
| main.rs:279:10:279:11 | s1 [Some] | main.rs:279:10:279:20 | s1.unwrap() | provenance | MaD:6 |
|
||||
| main.rs:279:10:279:11 | s1 [Some] | main.rs:279:10:279:20 | s1.unwrap() | provenance | MaD:7 |
|
||||
| main.rs:283:9:283:10 | s1 [Some] | main.rs:284:10:284:11 | s1 [Some] | provenance | |
|
||||
| main.rs:283:14:283:29 | Some(...) [Some] | main.rs:283:9:283:10 | s1 [Some] | provenance | |
|
||||
| main.rs:283:19:283:28 | source(...) | main.rs:283:14:283:29 | Some(...) [Some] | provenance | |
|
||||
| main.rs:284:10:284:11 | s1 [Some] | main.rs:284:10:284:24 | s1.unwrap_or(...) | provenance | MaD:8 |
|
||||
| main.rs:287:23:287:32 | source(...) | main.rs:287:10:287:33 | s2.unwrap_or(...) | provenance | MaD:7 |
|
||||
| main.rs:284:10:284:11 | s1 [Some] | main.rs:284:10:284:24 | s1.unwrap_or(...) | provenance | MaD:9 |
|
||||
| main.rs:287:23:287:32 | source(...) | main.rs:287:10:287:33 | s2.unwrap_or(...) | provenance | MaD:8 |
|
||||
| main.rs:291:9:291:10 | s1 [Some] | main.rs:292:10:292:11 | s1 [Some] | provenance | |
|
||||
| main.rs:291:14:291:29 | Some(...) [Some] | main.rs:291:9:291:10 | s1 [Some] | provenance | |
|
||||
| main.rs:291:19:291:28 | source(...) | main.rs:291:14:291:29 | Some(...) [Some] | provenance | |
|
||||
| main.rs:292:10:292:11 | s1 [Some] | main.rs:292:10:292:32 | s1.unwrap_or_else(...) | provenance | MaD:10 |
|
||||
| main.rs:295:31:295:40 | source(...) | main.rs:295:10:295:41 | s2.unwrap_or_else(...) | provenance | MaD:9 |
|
||||
| main.rs:292:10:292:11 | s1 [Some] | main.rs:292:10:292:32 | s1.unwrap_or_else(...) | provenance | MaD:11 |
|
||||
| main.rs:295:31:295:40 | source(...) | main.rs:295:10:295:41 | s2.unwrap_or_else(...) | provenance | MaD:10 |
|
||||
| main.rs:299:9:299:10 | s1 [Some] | main.rs:301:14:301:15 | s1 [Some] | provenance | |
|
||||
| main.rs:299:14:299:29 | Some(...) [Some] | main.rs:299:9:299:10 | s1 [Some] | provenance | |
|
||||
| main.rs:299:19:299:28 | source(...) | main.rs:299:14:299:29 | Some(...) [Some] | provenance | |
|
||||
@@ -148,16 +148,16 @@ edges
|
||||
| main.rs:308:32:308:45 | Ok(...) [Ok] | main.rs:308:9:308:10 | r1 [Ok] | provenance | |
|
||||
| main.rs:308:35:308:44 | source(...) | main.rs:308:32:308:45 | Ok(...) [Ok] | provenance | |
|
||||
| main.rs:309:9:309:11 | o1a [Some] | main.rs:311:10:311:12 | o1a [Some] | provenance | |
|
||||
| main.rs:309:28:309:29 | r1 [Ok] | main.rs:309:28:309:34 | r1.ok() [Some] | provenance | MaD:14 |
|
||||
| main.rs:309:28:309:29 | r1 [Ok] | main.rs:309:28:309:34 | r1.ok() [Some] | provenance | MaD:15 |
|
||||
| main.rs:309:28:309:34 | r1.ok() [Some] | main.rs:309:9:309:11 | o1a [Some] | provenance | |
|
||||
| main.rs:311:10:311:12 | o1a [Some] | main.rs:311:10:311:21 | o1a.unwrap() | provenance | MaD:6 |
|
||||
| main.rs:311:10:311:12 | o1a [Some] | main.rs:311:10:311:21 | o1a.unwrap() | provenance | MaD:7 |
|
||||
| main.rs:314:9:314:10 | r2 [Err] | main.rs:316:28:316:29 | r2 [Err] | provenance | |
|
||||
| main.rs:314:32:314:46 | Err(...) [Err] | main.rs:314:9:314:10 | r2 [Err] | provenance | |
|
||||
| main.rs:314:36:314:45 | source(...) | main.rs:314:32:314:46 | Err(...) [Err] | provenance | |
|
||||
| main.rs:316:9:316:11 | o2b [Some] | main.rs:318:10:318:12 | o2b [Some] | provenance | |
|
||||
| main.rs:316:28:316:29 | r2 [Err] | main.rs:316:28:316:35 | r2.err() [Some] | provenance | MaD:11 |
|
||||
| main.rs:316:28:316:29 | r2 [Err] | main.rs:316:28:316:35 | r2.err() [Some] | provenance | MaD:12 |
|
||||
| main.rs:316:28:316:35 | r2.err() [Some] | main.rs:316:9:316:11 | o2b [Some] | provenance | |
|
||||
| main.rs:318:10:318:12 | o2b [Some] | main.rs:318:10:318:21 | o2b.unwrap() | provenance | MaD:6 |
|
||||
| main.rs:318:10:318:12 | o2b [Some] | main.rs:318:10:318:21 | o2b.unwrap() | provenance | MaD:7 |
|
||||
| main.rs:322:9:322:10 | s1 [Ok] | main.rs:325:14:325:15 | s1 [Ok] | provenance | |
|
||||
| main.rs:322:32:322:45 | Ok(...) [Ok] | main.rs:322:9:322:10 | s1 [Ok] | provenance | |
|
||||
| main.rs:322:35:322:44 | source(...) | main.rs:322:32:322:45 | Ok(...) [Ok] | provenance | |
|
||||
@@ -167,11 +167,11 @@ edges
|
||||
| main.rs:335:9:335:10 | s1 [Ok] | main.rs:336:10:336:11 | s1 [Ok] | provenance | |
|
||||
| main.rs:335:32:335:45 | Ok(...) [Ok] | main.rs:335:9:335:10 | s1 [Ok] | provenance | |
|
||||
| main.rs:335:35:335:44 | source(...) | main.rs:335:32:335:45 | Ok(...) [Ok] | provenance | |
|
||||
| main.rs:336:10:336:11 | s1 [Ok] | main.rs:336:10:336:22 | s1.expect(...) | provenance | MaD:12 |
|
||||
| main.rs:336:10:336:11 | s1 [Ok] | main.rs:336:10:336:22 | s1.expect(...) | provenance | MaD:13 |
|
||||
| main.rs:339:9:339:10 | s2 [Err] | main.rs:341:10:341:11 | s2 [Err] | provenance | |
|
||||
| main.rs:339:32:339:46 | Err(...) [Err] | main.rs:339:9:339:10 | s2 [Err] | provenance | |
|
||||
| main.rs:339:36:339:45 | source(...) | main.rs:339:32:339:46 | Err(...) [Err] | provenance | |
|
||||
| main.rs:341:10:341:11 | s2 [Err] | main.rs:341:10:341:26 | s2.expect_err(...) | provenance | MaD:13 |
|
||||
| main.rs:341:10:341:11 | s2 [Err] | main.rs:341:10:341:26 | s2.expect_err(...) | provenance | MaD:14 |
|
||||
| main.rs:350:9:350:10 | s1 [A] | main.rs:352:11:352:12 | s1 [A] | provenance | |
|
||||
| main.rs:350:14:350:39 | ...::A(...) [A] | main.rs:350:9:350:10 | s1 [A] | provenance | |
|
||||
| main.rs:350:29:350:38 | source(...) | main.rs:350:14:350:39 | ...::A(...) [A] | provenance | |
|
||||
@@ -258,15 +258,15 @@ edges
|
||||
| main.rs:506:9:506:9 | b | main.rs:507:13:507:13 | b | provenance | |
|
||||
| main.rs:506:9:506:9 | b | main.rs:508:18:508:18 | b | provenance | |
|
||||
| main.rs:506:9:506:9 | b | main.rs:511:17:511:17 | b | provenance | |
|
||||
| main.rs:506:13:506:13 | a | main.rs:506:13:506:25 | a.to_string() | provenance | MaD:1 |
|
||||
| main.rs:506:13:506:13 | a | main.rs:506:13:506:25 | a.to_string() | provenance | MaD:2 |
|
||||
| main.rs:506:13:506:25 | a.to_string() | main.rs:506:9:506:9 | b | provenance | |
|
||||
| main.rs:507:9:507:9 | c | main.rs:512:10:512:10 | c | provenance | |
|
||||
| main.rs:507:13:507:13 | b | main.rs:507:13:507:28 | b.parse() [Ok] | provenance | MaD:16 |
|
||||
| main.rs:507:13:507:28 | b.parse() [Ok] | main.rs:507:13:507:37 | ... .unwrap() | provenance | MaD:15 |
|
||||
| main.rs:507:13:507:13 | b | main.rs:507:13:507:28 | b.parse() [Ok] | provenance | MaD:17 |
|
||||
| main.rs:507:13:507:28 | b.parse() [Ok] | main.rs:507:13:507:37 | ... .unwrap() | provenance | MaD:16 |
|
||||
| main.rs:507:13:507:37 | ... .unwrap() | main.rs:507:9:507:9 | c | provenance | |
|
||||
| main.rs:508:9:508:9 | d | main.rs:513:10:513:10 | d | provenance | |
|
||||
| main.rs:508:18:508:18 | b | main.rs:508:18:508:26 | b.parse() [Ok] | provenance | MaD:16 |
|
||||
| main.rs:508:18:508:26 | b.parse() [Ok] | main.rs:508:18:508:35 | ... .unwrap() | provenance | MaD:15 |
|
||||
| main.rs:508:18:508:18 | b | main.rs:508:18:508:26 | b.parse() [Ok] | provenance | MaD:17 |
|
||||
| main.rs:508:18:508:26 | b.parse() [Ok] | main.rs:508:18:508:35 | ... .unwrap() | provenance | MaD:16 |
|
||||
| main.rs:508:18:508:35 | ... .unwrap() | main.rs:508:9:508:9 | d | provenance | |
|
||||
| main.rs:517:9:517:10 | vs [element] | main.rs:519:10:519:11 | vs [element] | provenance | |
|
||||
| main.rs:517:9:517:10 | vs [element] | main.rs:523:14:523:15 | vs [element] | provenance | |
|
||||
@@ -290,14 +290,14 @@ edges
|
||||
| main.rs:557:17:557:18 | &c [&ref] | main.rs:557:9:557:13 | c_ref [&ref] | provenance | |
|
||||
| main.rs:557:18:557:18 | c | main.rs:557:17:557:18 | &c [&ref] | provenance | |
|
||||
| main.rs:560:15:560:15 | b | main.rs:560:14:560:15 | &b | provenance | |
|
||||
| main.rs:562:11:562:15 | c_ref [&ref] | main.rs:562:10:562:15 | * ... | provenance | |
|
||||
| main.rs:562:11:562:15 | c_ref [&ref] | main.rs:562:10:562:15 | * ... | provenance | MaD:1 |
|
||||
| main.rs:566:9:566:9 | a | main.rs:568:10:568:17 | a as i64 | provenance | |
|
||||
| main.rs:566:18:566:27 | source(...) | main.rs:566:9:566:9 | a | provenance | |
|
||||
| main.rs:572:9:572:9 | b | main.rs:574:10:574:17 | b as i64 | provenance | |
|
||||
| main.rs:572:9:572:9 | b | main.rs:576:20:576:20 | b | provenance | |
|
||||
| main.rs:572:18:572:27 | source(...) | main.rs:572:9:572:9 | b | provenance | |
|
||||
| main.rs:576:20:576:20 | b | main.rs:576:10:576:21 | ...::from(...) | provenance | MaD:2 |
|
||||
| main.rs:576:20:576:20 | b | main.rs:576:10:576:21 | ...::from(...) | provenance | MaD:5 |
|
||||
| main.rs:576:20:576:20 | b | main.rs:576:10:576:21 | ...::from(...) | provenance | MaD:3 |
|
||||
| main.rs:576:20:576:20 | b | main.rs:576:10:576:21 | ...::from(...) | provenance | MaD:6 |
|
||||
nodes
|
||||
| main.rs:19:10:19:18 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:23:9:23:9 | s | semmle.label | s |
|
||||
@@ -331,11 +331,11 @@ nodes
|
||||
| main.rs:81:17:81:25 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:82:5:82:5 | l | semmle.label | l |
|
||||
| main.rs:83:10:83:10 | l | semmle.label | l |
|
||||
| main.rs:115:9:115:9 | i [&ref] | semmle.label | i [&ref] |
|
||||
| main.rs:115:13:115:31 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] |
|
||||
| main.rs:115:9:115:9 | i [Box(0)] | semmle.label | i [Box(0)] |
|
||||
| main.rs:115:13:115:31 | ...::new(...) [Box(0)] | semmle.label | ...::new(...) [Box(0)] |
|
||||
| main.rs:115:22:115:30 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:116:10:116:11 | * ... | semmle.label | * ... |
|
||||
| main.rs:116:11:116:11 | i [&ref] | semmle.label | i [&ref] |
|
||||
| main.rs:116:11:116:11 | i [Box(0)] | semmle.label | i [Box(0)] |
|
||||
| main.rs:123:9:123:9 | a [tuple.0] | semmle.label | a [tuple.0] |
|
||||
| main.rs:123:13:123:26 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] |
|
||||
| main.rs:123:14:123:22 | source(...) | semmle.label | source(...) |
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
models
|
||||
| 1 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value |
|
||||
| 2 | Summary: <alloc::boxed::Box>::into_pin; Argument[0].Reference; ReturnValue; value |
|
||||
| 3 | Summary: <alloc::boxed::Box>::into_pin; Argument[0]; ReturnValue; value |
|
||||
| 4 | Summary: <alloc::boxed::Box>::new; Argument[0]; ReturnValue.Reference; value |
|
||||
| 5 | Summary: <alloc::boxed::Box>::pin; Argument[0]; ReturnValue.Reference; value |
|
||||
| 1 | Summary: <& as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value |
|
||||
| 2 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value |
|
||||
| 3 | Summary: <alloc::boxed::Box>::into_pin; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value |
|
||||
| 4 | Summary: <alloc::boxed::Box>::new; Argument[0]; ReturnValue.Field[alloc::boxed::Box(0)]; value |
|
||||
| 5 | Summary: <alloc::boxed::Box>::pin; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer].Field[alloc::boxed::Box(0)]; value |
|
||||
| 6 | Summary: <core::i64 as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value |
|
||||
| 7 | Summary: <core::option::Option>::map_or; Argument[1].ReturnValue; ReturnValue; value |
|
||||
| 8 | Summary: <core::option::Option>::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
|
||||
| 9 | Summary: <core::option::Option>::zip; Argument[0].Field[core::option::Option::Some(0)]; ReturnValue.Field[core::option::Option::Some(0)].Field[1]; value |
|
||||
| 10 | Summary: <core::pin::Pin as core::ops::deref::Deref>::deref; Argument[self].Reference.Field[core::pin::Pin::pointer].Reference; ReturnValue.Reference; value |
|
||||
| 11 | Summary: <core::pin::Pin>::into_inner; Argument[0]; ReturnValue; value |
|
||||
| 12 | Summary: <core::pin::Pin>::into_inner_unchecked; Argument[0].Field[core::pin::Pin::pointer]; ReturnValue; value |
|
||||
| 13 | Summary: <core::pin::Pin>::new; Argument[0].Reference; ReturnValue; value |
|
||||
| 14 | Summary: <core::pin::Pin>::new; Argument[0]; ReturnValue; value |
|
||||
| 10 | Summary: <core::pin::Pin as core::ops::deref::Deref>::deref; Argument[self].Reference.Field[core::pin::Pin::pointer].Field[alloc::boxed::Box(0)]; ReturnValue.Reference; value |
|
||||
| 11 | Summary: <core::pin::Pin as core::ops::deref::Deref>::deref; Argument[self].Reference.Field[core::pin::Pin::pointer].Reference; ReturnValue.Reference; value |
|
||||
| 12 | Summary: <core::pin::Pin>::into_inner; Argument[0].Field[core::pin::Pin::pointer]; ReturnValue; value |
|
||||
| 13 | Summary: <core::pin::Pin>::into_inner_unchecked; Argument[0].Field[core::pin::Pin::pointer]; ReturnValue; value |
|
||||
| 14 | Summary: <core::pin::Pin>::new; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value |
|
||||
| 15 | Summary: <core::pin::Pin>::new_unchecked; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value |
|
||||
| 16 | Summary: <core::result::Result>::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
|
||||
| 17 | Summary: core::ptr::read; Argument[0].Reference; ReturnValue; value |
|
||||
@@ -24,7 +24,7 @@ edges
|
||||
| main.rs:12:18:12:27 | source(...) | main.rs:12:13:12:28 | Some(...) [Some] | provenance | |
|
||||
| main.rs:13:10:13:10 | a [Some] | main.rs:13:10:13:19 | a.unwrap() | provenance | MaD:8 |
|
||||
| main.rs:14:9:14:9 | b [Some] | main.rs:15:10:15:10 | b [Some] | provenance | |
|
||||
| main.rs:14:13:14:13 | a [Some] | main.rs:14:13:14:21 | a.clone() [Some] | provenance | MaD:1 |
|
||||
| main.rs:14:13:14:13 | a [Some] | main.rs:14:13:14:21 | a.clone() [Some] | provenance | MaD:2 |
|
||||
| main.rs:14:13:14:21 | a.clone() [Some] | main.rs:14:9:14:9 | b [Some] | provenance | |
|
||||
| main.rs:15:10:15:10 | b [Some] | main.rs:15:10:15:19 | b.unwrap() | provenance | MaD:8 |
|
||||
| main.rs:19:9:19:9 | a [Ok] | main.rs:20:10:20:10 | a [Ok] | provenance | |
|
||||
@@ -33,14 +33,14 @@ edges
|
||||
| main.rs:19:34:19:43 | source(...) | main.rs:19:31:19:44 | Ok(...) [Ok] | provenance | |
|
||||
| main.rs:20:10:20:10 | a [Ok] | main.rs:20:10:20:19 | a.unwrap() | provenance | MaD:16 |
|
||||
| main.rs:21:9:21:9 | b [Ok] | main.rs:22:10:22:10 | b [Ok] | provenance | |
|
||||
| main.rs:21:13:21:13 | a [Ok] | main.rs:21:13:21:21 | a.clone() [Ok] | provenance | MaD:1 |
|
||||
| main.rs:21:13:21:13 | a [Ok] | main.rs:21:13:21:21 | a.clone() [Ok] | provenance | MaD:2 |
|
||||
| main.rs:21:13:21:21 | a.clone() [Ok] | main.rs:21:9:21:9 | b [Ok] | provenance | |
|
||||
| main.rs:22:10:22:10 | b [Ok] | main.rs:22:10:22:19 | b.unwrap() | provenance | MaD:16 |
|
||||
| main.rs:26:9:26:9 | a | main.rs:27:10:27:10 | a | provenance | |
|
||||
| main.rs:26:9:26:9 | a | main.rs:28:13:28:13 | a | provenance | |
|
||||
| main.rs:26:13:26:22 | source(...) | main.rs:26:9:26:9 | a | provenance | |
|
||||
| main.rs:28:9:28:9 | b | main.rs:29:10:29:10 | b | provenance | |
|
||||
| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() | provenance | MaD:1 |
|
||||
| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() | provenance | MaD:2 |
|
||||
| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() | provenance | MaD:6 |
|
||||
| main.rs:28:13:28:21 | a.clone() | main.rs:28:9:28:9 | b | provenance | |
|
||||
| main.rs:43:18:43:22 | SelfParam [&ref, Wrapper] | main.rs:44:26:44:29 | self [&ref, Wrapper] | provenance | |
|
||||
@@ -84,49 +84,40 @@ edges
|
||||
| main.rs:108:13:108:17 | mut i | main.rs:112:24:112:27 | mut pinned | provenance | |
|
||||
| main.rs:108:13:108:17 | mut i | main.rs:113:14:113:14 | i | provenance | |
|
||||
| main.rs:108:21:108:30 | source(...) | main.rs:108:13:108:17 | mut i | provenance | |
|
||||
| main.rs:109:13:109:20 | mut pin1 | main.rs:114:14:114:18 | * ... | provenance | |
|
||||
| main.rs:109:13:109:20 | mut pin1 | main.rs:115:31:115:34 | pin1 | provenance | |
|
||||
| main.rs:109:13:109:20 | mut pin1 [&ref] | main.rs:114:15:114:18 | pin1 [&ref] | provenance | |
|
||||
| main.rs:109:13:109:20 | mut pin1 [&ref] | main.rs:115:31:115:34 | pin1 [&ref] | provenance | |
|
||||
| main.rs:109:24:109:35 | ...::new(...) | main.rs:109:13:109:20 | mut pin1 | provenance | |
|
||||
| main.rs:109:24:109:35 | ...::new(...) [&ref] | main.rs:109:13:109:20 | mut pin1 [&ref] | provenance | |
|
||||
| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) | provenance | MaD:13 |
|
||||
| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) [&ref] | provenance | MaD:14 |
|
||||
| main.rs:109:13:109:20 | mut pin1 [Pin, &ref] | main.rs:114:15:114:18 | pin1 [Pin, &ref] | provenance | |
|
||||
| main.rs:109:13:109:20 | mut pin1 [Pin, &ref] | main.rs:115:31:115:34 | pin1 [Pin, &ref] | provenance | |
|
||||
| main.rs:109:24:109:35 | ...::new(...) [Pin, &ref] | main.rs:109:13:109:20 | mut pin1 [Pin, &ref] | provenance | |
|
||||
| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) [Pin, &ref] | provenance | MaD:14 |
|
||||
| main.rs:109:34:109:34 | i | main.rs:109:33:109:34 | &i [&ref] | provenance | |
|
||||
| main.rs:110:13:110:20 | mut pin2 [&ref] | main.rs:116:15:116:18 | pin2 [&ref] | provenance | |
|
||||
| main.rs:110:24:110:34 | ...::pin(...) [&ref] | main.rs:110:13:110:20 | mut pin2 [&ref] | provenance | |
|
||||
| main.rs:110:33:110:33 | i | main.rs:110:24:110:34 | ...::pin(...) [&ref] | provenance | MaD:5 |
|
||||
| main.rs:111:13:111:20 | mut pin3 | main.rs:117:14:117:18 | * ... | provenance | |
|
||||
| main.rs:111:13:111:20 | mut pin3 [&ref] | main.rs:117:15:117:18 | pin3 [&ref] | provenance | |
|
||||
| main.rs:111:24:111:49 | ...::into_pin(...) | main.rs:111:13:111:20 | mut pin3 | provenance | |
|
||||
| main.rs:111:24:111:49 | ...::into_pin(...) [&ref] | main.rs:111:13:111:20 | mut pin3 [&ref] | provenance | |
|
||||
| main.rs:111:38:111:48 | ...::new(...) [&ref] | main.rs:111:24:111:49 | ...::into_pin(...) | provenance | MaD:2 |
|
||||
| main.rs:111:38:111:48 | ...::new(...) [&ref] | main.rs:111:24:111:49 | ...::into_pin(...) [&ref] | provenance | MaD:3 |
|
||||
| main.rs:111:47:111:47 | i | main.rs:111:38:111:48 | ...::new(...) [&ref] | provenance | MaD:4 |
|
||||
| main.rs:110:13:110:20 | mut pin2 [Pin, Box(0)] | main.rs:116:15:116:18 | pin2 [Pin, Box(0)] | provenance | |
|
||||
| main.rs:110:24:110:34 | ...::pin(...) [Pin, Box(0)] | main.rs:110:13:110:20 | mut pin2 [Pin, Box(0)] | provenance | |
|
||||
| main.rs:110:33:110:33 | i | main.rs:110:24:110:34 | ...::pin(...) [Pin, Box(0)] | provenance | MaD:5 |
|
||||
| main.rs:111:13:111:20 | mut pin3 [Pin, Box(0)] | main.rs:117:15:117:18 | pin3 [Pin, Box(0)] | provenance | |
|
||||
| main.rs:111:24:111:49 | ...::into_pin(...) [Pin, Box(0)] | main.rs:111:13:111:20 | mut pin3 [Pin, Box(0)] | provenance | |
|
||||
| main.rs:111:38:111:48 | ...::new(...) [Box(0)] | main.rs:111:24:111:49 | ...::into_pin(...) [Pin, Box(0)] | provenance | MaD:3 |
|
||||
| main.rs:111:47:111:47 | i | main.rs:111:38:111:48 | ...::new(...) [Box(0)] | provenance | MaD:4 |
|
||||
| main.rs:112:13:112:20 | mut pin4 [Pin, &ref] | main.rs:118:15:118:18 | pin4 [Pin, &ref] | provenance | |
|
||||
| main.rs:112:24:112:27 | &mut pinned [&ref] | main.rs:112:24:112:27 | ...::new_unchecked(...) [Pin, &ref] | provenance | MaD:15 |
|
||||
| main.rs:112:24:112:27 | ...::new_unchecked(...) [Pin, &ref] | main.rs:112:13:112:20 | mut pin4 [Pin, &ref] | provenance | |
|
||||
| main.rs:112:24:112:27 | mut pinned | main.rs:112:24:112:27 | pinned | provenance | |
|
||||
| main.rs:112:24:112:27 | pinned | main.rs:112:24:112:27 | &mut pinned [&ref] | provenance | |
|
||||
| main.rs:114:15:114:18 | pin1 [&ref] | main.rs:114:14:114:18 | * ... | provenance | |
|
||||
| main.rs:115:15:115:35 | ...::into_inner(...) | main.rs:115:14:115:35 | * ... | provenance | |
|
||||
| main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | main.rs:115:14:115:35 | * ... | provenance | |
|
||||
| main.rs:115:31:115:34 | pin1 | main.rs:115:15:115:35 | ...::into_inner(...) | provenance | MaD:11 |
|
||||
| main.rs:115:31:115:34 | pin1 [&ref] | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | provenance | MaD:11 |
|
||||
| main.rs:116:15:116:18 | pin2 [&ref] | main.rs:116:14:116:18 | * ... | provenance | |
|
||||
| main.rs:117:15:117:18 | pin3 [&ref] | main.rs:117:14:117:18 | * ... | provenance | |
|
||||
| main.rs:118:15:118:18 | pin4 [Pin, &ref] | main.rs:118:14:118:18 | * ... | provenance | MaD:10 |
|
||||
| main.rs:114:15:114:18 | pin1 [Pin, &ref] | main.rs:114:14:114:18 | * ... | provenance | MaD:11 |
|
||||
| main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | main.rs:115:14:115:35 | * ... | provenance | MaD:1 |
|
||||
| main.rs:115:31:115:34 | pin1 [Pin, &ref] | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | provenance | MaD:12 |
|
||||
| main.rs:116:15:116:18 | pin2 [Pin, Box(0)] | main.rs:116:14:116:18 | * ... | provenance | MaD:10 |
|
||||
| main.rs:117:15:117:18 | pin3 [Pin, Box(0)] | main.rs:117:14:117:18 | * ... | provenance | MaD:10 |
|
||||
| main.rs:118:15:118:18 | pin4 [Pin, &ref] | main.rs:118:14:118:18 | * ... | provenance | MaD:11 |
|
||||
| main.rs:122:13:122:18 | mut ms [MyStruct] | main.rs:123:34:123:35 | ms [MyStruct] | provenance | |
|
||||
| main.rs:122:13:122:18 | mut ms [MyStruct] | main.rs:127:14:127:15 | ms [MyStruct] | provenance | |
|
||||
| main.rs:122:22:122:49 | MyStruct {...} [MyStruct] | main.rs:122:13:122:18 | mut ms [MyStruct] | provenance | |
|
||||
| main.rs:122:38:122:47 | source(...) | main.rs:122:22:122:49 | MyStruct {...} [MyStruct] | provenance | |
|
||||
| main.rs:123:13:123:20 | mut pin1 [&ref, MyStruct] | main.rs:129:30:129:33 | pin1 [&ref, MyStruct] | provenance | |
|
||||
| main.rs:123:24:123:36 | ...::new(...) [&ref, MyStruct] | main.rs:123:13:123:20 | mut pin1 [&ref, MyStruct] | provenance | |
|
||||
| main.rs:123:33:123:35 | &ms [&ref, MyStruct] | main.rs:123:24:123:36 | ...::new(...) [&ref, MyStruct] | provenance | MaD:14 |
|
||||
| main.rs:123:13:123:20 | mut pin1 [Pin, &ref, MyStruct] | main.rs:129:30:129:33 | pin1 [Pin, &ref, MyStruct] | provenance | |
|
||||
| main.rs:123:24:123:36 | ...::new(...) [Pin, &ref, MyStruct] | main.rs:123:13:123:20 | mut pin1 [Pin, &ref, MyStruct] | provenance | |
|
||||
| main.rs:123:33:123:35 | &ms [&ref, MyStruct] | main.rs:123:24:123:36 | ...::new(...) [Pin, &ref, MyStruct] | provenance | MaD:14 |
|
||||
| main.rs:123:34:123:35 | ms [MyStruct] | main.rs:123:33:123:35 | &ms [&ref, MyStruct] | provenance | |
|
||||
| main.rs:127:14:127:15 | ms [MyStruct] | main.rs:127:14:127:19 | ms.val | provenance | |
|
||||
| main.rs:129:14:129:34 | ...::into_inner(...) [&ref, MyStruct] | main.rs:129:14:129:38 | ... .val | provenance | |
|
||||
| main.rs:129:30:129:33 | pin1 [&ref, MyStruct] | main.rs:129:14:129:34 | ...::into_inner(...) [&ref, MyStruct] | provenance | MaD:11 |
|
||||
| main.rs:129:30:129:33 | pin1 [Pin, &ref, MyStruct] | main.rs:129:14:129:34 | ...::into_inner(...) [&ref, MyStruct] | provenance | MaD:12 |
|
||||
| main.rs:136:13:136:18 | mut ms [MyStruct] | main.rs:137:44:137:45 | ms [MyStruct] | provenance | |
|
||||
| main.rs:136:22:136:49 | MyStruct {...} [MyStruct] | main.rs:136:13:136:18 | mut ms [MyStruct] | provenance | |
|
||||
| main.rs:136:38:136:47 | source(...) | main.rs:136:22:136:49 | MyStruct {...} [MyStruct] | provenance | |
|
||||
@@ -135,7 +126,7 @@ edges
|
||||
| main.rs:137:43:137:45 | &ms [&ref, MyStruct] | main.rs:137:24:137:46 | ...::new_unchecked(...) [Pin, &ref, MyStruct] | provenance | MaD:15 |
|
||||
| main.rs:137:44:137:45 | ms [MyStruct] | main.rs:137:43:137:45 | &ms [&ref, MyStruct] | provenance | |
|
||||
| main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [&ref, MyStruct] | main.rs:139:14:139:48 | ... .val | provenance | |
|
||||
| main.rs:139:40:139:43 | pin5 [Pin, &ref, MyStruct] | main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [&ref, MyStruct] | provenance | MaD:12 |
|
||||
| main.rs:139:40:139:43 | pin5 [Pin, &ref, MyStruct] | main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [&ref, MyStruct] | provenance | MaD:13 |
|
||||
nodes
|
||||
| main.rs:12:9:12:9 | a [Some] | semmle.label | a [Some] |
|
||||
| main.rs:12:13:12:28 | Some(...) [Some] | semmle.label | Some(...) [Some] |
|
||||
@@ -205,20 +196,16 @@ nodes
|
||||
| main.rs:93:33:93:33 | y [&ref] | semmle.label | y [&ref] |
|
||||
| main.rs:108:13:108:17 | mut i | semmle.label | mut i |
|
||||
| main.rs:108:21:108:30 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:109:13:109:20 | mut pin1 | semmle.label | mut pin1 |
|
||||
| main.rs:109:13:109:20 | mut pin1 [&ref] | semmle.label | mut pin1 [&ref] |
|
||||
| main.rs:109:24:109:35 | ...::new(...) | semmle.label | ...::new(...) |
|
||||
| main.rs:109:24:109:35 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] |
|
||||
| main.rs:109:13:109:20 | mut pin1 [Pin, &ref] | semmle.label | mut pin1 [Pin, &ref] |
|
||||
| main.rs:109:24:109:35 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] |
|
||||
| main.rs:109:33:109:34 | &i [&ref] | semmle.label | &i [&ref] |
|
||||
| main.rs:109:34:109:34 | i | semmle.label | i |
|
||||
| main.rs:110:13:110:20 | mut pin2 [&ref] | semmle.label | mut pin2 [&ref] |
|
||||
| main.rs:110:24:110:34 | ...::pin(...) [&ref] | semmle.label | ...::pin(...) [&ref] |
|
||||
| main.rs:110:13:110:20 | mut pin2 [Pin, Box(0)] | semmle.label | mut pin2 [Pin, Box(0)] |
|
||||
| main.rs:110:24:110:34 | ...::pin(...) [Pin, Box(0)] | semmle.label | ...::pin(...) [Pin, Box(0)] |
|
||||
| main.rs:110:33:110:33 | i | semmle.label | i |
|
||||
| main.rs:111:13:111:20 | mut pin3 | semmle.label | mut pin3 |
|
||||
| main.rs:111:13:111:20 | mut pin3 [&ref] | semmle.label | mut pin3 [&ref] |
|
||||
| main.rs:111:24:111:49 | ...::into_pin(...) | semmle.label | ...::into_pin(...) |
|
||||
| main.rs:111:24:111:49 | ...::into_pin(...) [&ref] | semmle.label | ...::into_pin(...) [&ref] |
|
||||
| main.rs:111:38:111:48 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] |
|
||||
| main.rs:111:13:111:20 | mut pin3 [Pin, Box(0)] | semmle.label | mut pin3 [Pin, Box(0)] |
|
||||
| main.rs:111:24:111:49 | ...::into_pin(...) [Pin, Box(0)] | semmle.label | ...::into_pin(...) [Pin, Box(0)] |
|
||||
| main.rs:111:38:111:48 | ...::new(...) [Box(0)] | semmle.label | ...::new(...) [Box(0)] |
|
||||
| main.rs:111:47:111:47 | i | semmle.label | i |
|
||||
| main.rs:112:13:112:20 | mut pin4 [Pin, &ref] | semmle.label | mut pin4 [Pin, &ref] |
|
||||
| main.rs:112:24:112:27 | &mut pinned [&ref] | semmle.label | &mut pinned [&ref] |
|
||||
@@ -227,30 +214,28 @@ nodes
|
||||
| main.rs:112:24:112:27 | pinned | semmle.label | pinned |
|
||||
| main.rs:113:14:113:14 | i | semmle.label | i |
|
||||
| main.rs:114:14:114:18 | * ... | semmle.label | * ... |
|
||||
| main.rs:114:15:114:18 | pin1 [&ref] | semmle.label | pin1 [&ref] |
|
||||
| main.rs:114:15:114:18 | pin1 [Pin, &ref] | semmle.label | pin1 [Pin, &ref] |
|
||||
| main.rs:115:14:115:35 | * ... | semmle.label | * ... |
|
||||
| main.rs:115:15:115:35 | ...::into_inner(...) | semmle.label | ...::into_inner(...) |
|
||||
| main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | semmle.label | ...::into_inner(...) [&ref] |
|
||||
| main.rs:115:31:115:34 | pin1 | semmle.label | pin1 |
|
||||
| main.rs:115:31:115:34 | pin1 [&ref] | semmle.label | pin1 [&ref] |
|
||||
| main.rs:115:31:115:34 | pin1 [Pin, &ref] | semmle.label | pin1 [Pin, &ref] |
|
||||
| main.rs:116:14:116:18 | * ... | semmle.label | * ... |
|
||||
| main.rs:116:15:116:18 | pin2 [&ref] | semmle.label | pin2 [&ref] |
|
||||
| main.rs:116:15:116:18 | pin2 [Pin, Box(0)] | semmle.label | pin2 [Pin, Box(0)] |
|
||||
| main.rs:117:14:117:18 | * ... | semmle.label | * ... |
|
||||
| main.rs:117:15:117:18 | pin3 [&ref] | semmle.label | pin3 [&ref] |
|
||||
| main.rs:117:15:117:18 | pin3 [Pin, Box(0)] | semmle.label | pin3 [Pin, Box(0)] |
|
||||
| main.rs:118:14:118:18 | * ... | semmle.label | * ... |
|
||||
| main.rs:118:15:118:18 | pin4 [Pin, &ref] | semmle.label | pin4 [Pin, &ref] |
|
||||
| main.rs:122:13:122:18 | mut ms [MyStruct] | semmle.label | mut ms [MyStruct] |
|
||||
| main.rs:122:22:122:49 | MyStruct {...} [MyStruct] | semmle.label | MyStruct {...} [MyStruct] |
|
||||
| main.rs:122:38:122:47 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:123:13:123:20 | mut pin1 [&ref, MyStruct] | semmle.label | mut pin1 [&ref, MyStruct] |
|
||||
| main.rs:123:24:123:36 | ...::new(...) [&ref, MyStruct] | semmle.label | ...::new(...) [&ref, MyStruct] |
|
||||
| main.rs:123:13:123:20 | mut pin1 [Pin, &ref, MyStruct] | semmle.label | mut pin1 [Pin, &ref, MyStruct] |
|
||||
| main.rs:123:24:123:36 | ...::new(...) [Pin, &ref, MyStruct] | semmle.label | ...::new(...) [Pin, &ref, MyStruct] |
|
||||
| main.rs:123:33:123:35 | &ms [&ref, MyStruct] | semmle.label | &ms [&ref, MyStruct] |
|
||||
| main.rs:123:34:123:35 | ms [MyStruct] | semmle.label | ms [MyStruct] |
|
||||
| main.rs:127:14:127:15 | ms [MyStruct] | semmle.label | ms [MyStruct] |
|
||||
| main.rs:127:14:127:19 | ms.val | semmle.label | ms.val |
|
||||
| main.rs:129:14:129:34 | ...::into_inner(...) [&ref, MyStruct] | semmle.label | ...::into_inner(...) [&ref, MyStruct] |
|
||||
| main.rs:129:14:129:38 | ... .val | semmle.label | ... .val |
|
||||
| main.rs:129:30:129:33 | pin1 [&ref, MyStruct] | semmle.label | pin1 [&ref, MyStruct] |
|
||||
| main.rs:129:30:129:33 | pin1 [Pin, &ref, MyStruct] | semmle.label | pin1 [Pin, &ref, MyStruct] |
|
||||
| main.rs:136:13:136:18 | mut ms [MyStruct] | semmle.label | mut ms [MyStruct] |
|
||||
| main.rs:136:22:136:49 | MyStruct {...} [MyStruct] | semmle.label | MyStruct {...} [MyStruct] |
|
||||
| main.rs:136:38:136:47 | source(...) | semmle.label | source(...) |
|
||||
|
||||
@@ -115,7 +115,7 @@ fn test_pin() {
|
||||
sink(*Pin::into_inner(pin1)); // $ hasValueFlow=40
|
||||
sink(*pin2); // $ hasValueFlow=40
|
||||
sink(*pin3); // $ hasValueFlow=40
|
||||
sink(*pin4); // $ hasTaintFlow=40
|
||||
sink(*pin4); // $ hasValueFlow=40
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
models
|
||||
| 1 | Summary: <& as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value |
|
||||
edges
|
||||
| main.rs:17:13:17:13 | a | main.rs:18:18:18:18 | a | provenance | |
|
||||
| main.rs:17:17:17:26 | source(...) | main.rs:17:13:17:13 | a | provenance | |
|
||||
@@ -7,7 +8,7 @@ edges
|
||||
| main.rs:18:18:18:18 | a | main.rs:18:17:18:18 | &a [&ref] | provenance | |
|
||||
| main.rs:19:13:19:13 | c | main.rs:20:14:20:14 | c | provenance | |
|
||||
| main.rs:19:17:19:18 | * ... | main.rs:19:13:19:13 | c | provenance | |
|
||||
| main.rs:19:18:19:18 | b [&ref] | main.rs:19:17:19:18 | * ... | provenance | |
|
||||
| main.rs:19:18:19:18 | b [&ref] | main.rs:19:17:19:18 | * ... | provenance | MaD:1 |
|
||||
| main.rs:23:29:23:30 | &... [&ref] | main.rs:23:30:23:30 | n | provenance | |
|
||||
| main.rs:23:29:23:36 | ...: ... [&ref] | main.rs:23:29:23:30 | &... [&ref] | provenance | |
|
||||
| main.rs:23:30:23:30 | n | main.rs:24:14:24:14 | n | provenance | |
|
||||
@@ -28,7 +29,7 @@ edges
|
||||
| main.rs:51:17:51:26 | source(...) | main.rs:51:13:51:13 | a | provenance | |
|
||||
| main.rs:52:13:52:17 | ref p | main.rs:52:17:52:17 | p [&ref] | provenance | |
|
||||
| main.rs:52:17:52:17 | p [&ref] | main.rs:53:15:53:15 | p [&ref] | provenance | |
|
||||
| main.rs:53:15:53:15 | p [&ref] | main.rs:53:14:53:15 | * ... | provenance | |
|
||||
| main.rs:53:15:53:15 | p [&ref] | main.rs:53:14:53:15 | * ... | provenance | MaD:1 |
|
||||
| main.rs:57:13:57:13 | a [Some] | main.rs:58:15:58:15 | a [Some] | provenance | |
|
||||
| main.rs:57:17:57:32 | Some(...) [Some] | main.rs:57:13:57:13 | a [Some] | provenance | |
|
||||
| main.rs:57:22:57:31 | source(...) | main.rs:57:17:57:32 | Some(...) [Some] | provenance | |
|
||||
@@ -36,17 +37,17 @@ edges
|
||||
| main.rs:59:13:59:23 | Some(...) [Some] | main.rs:59:18:59:22 | ref p | provenance | |
|
||||
| main.rs:59:18:59:22 | ref p | main.rs:59:22:59:22 | p [&ref] | provenance | |
|
||||
| main.rs:59:22:59:22 | p [&ref] | main.rs:59:34:59:34 | p [&ref] | provenance | |
|
||||
| main.rs:59:34:59:34 | p [&ref] | main.rs:59:33:59:34 | * ... | provenance | |
|
||||
| main.rs:59:34:59:34 | p [&ref] | main.rs:59:33:59:34 | * ... | provenance | MaD:1 |
|
||||
| main.rs:73:10:73:10 | [post] b [&ref] | main.rs:74:15:74:15 | b [&ref] | provenance | |
|
||||
| main.rs:73:14:73:23 | source(...) | main.rs:73:10:73:10 | [post] b [&ref] | provenance | |
|
||||
| main.rs:74:15:74:15 | b [&ref] | main.rs:74:14:74:15 | * ... | provenance | |
|
||||
| main.rs:74:15:74:15 | b [&ref] | main.rs:74:14:74:15 | * ... | provenance | MaD:1 |
|
||||
| main.rs:105:10:105:10 | [post] c [&ref] | main.rs:106:15:106:15 | c [&ref] | provenance | |
|
||||
| main.rs:105:14:105:23 | source(...) | main.rs:105:10:105:10 | [post] c [&ref] | provenance | |
|
||||
| main.rs:106:15:106:15 | c [&ref] | main.rs:106:14:106:15 | * ... | provenance | |
|
||||
| main.rs:106:15:106:15 | c [&ref] | main.rs:106:14:106:15 | * ... | provenance | MaD:1 |
|
||||
| main.rs:112:13:112:21 | ref mut a | main.rs:112:21:112:21 | a [&ref] | provenance | |
|
||||
| main.rs:112:21:112:21 | a [&ref] | main.rs:113:15:113:15 | a [&ref] | provenance | |
|
||||
| main.rs:112:25:112:34 | source(...) | main.rs:112:13:112:21 | ref mut a | provenance | |
|
||||
| main.rs:113:15:113:15 | a [&ref] | main.rs:113:14:113:15 | * ... | provenance | |
|
||||
| main.rs:113:15:113:15 | a [&ref] | main.rs:113:14:113:15 | * ... | provenance | MaD:1 |
|
||||
| main.rs:149:14:149:24 | ...: MyNumber [MyNumber] | main.rs:150:11:150:11 | m [MyNumber] | provenance | |
|
||||
| main.rs:150:11:150:11 | m [MyNumber] | main.rs:151:9:151:34 | ...::MyNumber(...) [MyNumber] | provenance | |
|
||||
| main.rs:151:9:151:34 | ...::MyNumber(...) [MyNumber] | main.rs:151:28:151:33 | number | provenance | |
|
||||
@@ -88,7 +89,7 @@ edges
|
||||
| main.rs:210:17:210:17 | [post] p [&ref] | main.rs:211:15:211:15 | p [&ref] | provenance | |
|
||||
| main.rs:210:20:210:29 | source(...) | main.rs:200:29:200:38 | ...: i64 | provenance | |
|
||||
| main.rs:210:20:210:29 | source(...) | main.rs:210:17:210:17 | [post] p [&ref] | provenance | |
|
||||
| main.rs:211:15:211:15 | p [&ref] | main.rs:211:14:211:15 | * ... | provenance | |
|
||||
| main.rs:211:15:211:15 | p [&ref] | main.rs:211:14:211:15 | * ... | provenance | MaD:1 |
|
||||
| main.rs:218:17:218:22 | [post] &mut n [&ref] | main.rs:218:22:218:22 | [post] n | provenance | |
|
||||
| main.rs:218:22:218:22 | [post] n | main.rs:219:14:219:14 | n | provenance | |
|
||||
| main.rs:218:25:218:34 | source(...) | main.rs:200:29:200:38 | ...: i64 | provenance | |
|
||||
|
||||
@@ -19,7 +19,7 @@ models
|
||||
| 18 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint |
|
||||
| 19 | Summary: <core::option::Option>::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
|
||||
| 20 | Summary: <core::pin::Pin>::new; Argument[0].Reference; ReturnValue; value |
|
||||
| 21 | Summary: <core::pin::Pin>::new; Argument[0]; ReturnValue; value |
|
||||
| 21 | Summary: <core::pin::Pin>::new; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value |
|
||||
| 22 | Summary: <core::result::Result>::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
|
||||
| 23 | Summary: <futures_rustls::TlsConnector>::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
|
||||
| 24 | Summary: <futures_util::io::buf_reader::BufReader>::new; Argument[0]; ReturnValue; taint |
|
||||
@@ -169,17 +169,15 @@ edges
|
||||
| test.rs:381:15:381:20 | reader | test.rs:381:14:381:20 | &reader | provenance | |
|
||||
| test.rs:386:17:386:26 | mut pinned | test.rs:387:19:387:24 | pinned | provenance | |
|
||||
| test.rs:386:17:386:26 | mut pinned | test.rs:389:30:389:35 | pinned | provenance | |
|
||||
| test.rs:386:17:386:26 | mut pinned [&ref] | test.rs:387:19:387:24 | pinned [&ref] | provenance | |
|
||||
| test.rs:386:17:386:26 | mut pinned [&ref] | test.rs:389:30:389:35 | pinned [&ref] | provenance | |
|
||||
| test.rs:386:17:386:26 | mut pinned [Pin, &ref] | test.rs:387:19:387:24 | pinned [Pin, &ref] | provenance | |
|
||||
| test.rs:386:30:386:50 | ...::new(...) | test.rs:386:17:386:26 | mut pinned | provenance | |
|
||||
| test.rs:386:30:386:50 | ...::new(...) [&ref] | test.rs:386:17:386:26 | mut pinned [&ref] | provenance | |
|
||||
| test.rs:386:30:386:50 | ...::new(...) [Pin, &ref] | test.rs:386:17:386:26 | mut pinned [Pin, &ref] | provenance | |
|
||||
| test.rs:386:39:386:49 | &mut reader [&ref] | test.rs:386:30:386:50 | ...::new(...) | provenance | MaD:20 |
|
||||
| test.rs:386:39:386:49 | &mut reader [&ref] | test.rs:386:30:386:50 | ...::new(...) [&ref] | provenance | MaD:21 |
|
||||
| test.rs:386:39:386:49 | &mut reader [&ref] | test.rs:386:30:386:50 | ...::new(...) [Pin, &ref] | provenance | MaD:21 |
|
||||
| test.rs:386:44:386:49 | reader | test.rs:386:39:386:49 | &mut reader [&ref] | provenance | |
|
||||
| test.rs:387:19:387:24 | pinned | test.rs:387:18:387:24 | &pinned | provenance | |
|
||||
| test.rs:387:19:387:24 | pinned [&ref] | test.rs:387:18:387:24 | &pinned | provenance | |
|
||||
| test.rs:387:19:387:24 | pinned [Pin, &ref] | test.rs:387:18:387:24 | &pinned | provenance | |
|
||||
| test.rs:389:30:389:35 | pinned | test.rs:389:56:389:66 | [post] &mut buffer [&ref] | provenance | MaD:9 |
|
||||
| test.rs:389:30:389:35 | pinned [&ref] | test.rs:389:56:389:66 | [post] &mut buffer [&ref] | provenance | MaD:9 |
|
||||
| test.rs:389:56:389:66 | [post] &mut buffer [&ref] | test.rs:389:61:389:66 | [post] buffer | provenance | |
|
||||
| test.rs:389:61:389:66 | [post] buffer | test.rs:391:23:391:28 | buffer | provenance | |
|
||||
| test.rs:389:61:389:66 | [post] buffer | test.rs:392:23:392:33 | buffer[...] | provenance | |
|
||||
@@ -211,19 +209,17 @@ edges
|
||||
| test.rs:409:15:409:21 | reader2 | test.rs:409:14:409:21 | &reader2 | provenance | |
|
||||
| test.rs:413:17:413:26 | mut pinned | test.rs:414:19:414:24 | pinned | provenance | |
|
||||
| test.rs:413:17:413:26 | mut pinned | test.rs:416:26:416:31 | pinned | provenance | |
|
||||
| test.rs:413:17:413:26 | mut pinned [&ref] | test.rs:414:19:414:24 | pinned [&ref] | provenance | |
|
||||
| test.rs:413:17:413:26 | mut pinned [&ref] | test.rs:416:26:416:31 | pinned [&ref] | provenance | |
|
||||
| test.rs:413:17:413:26 | mut pinned [Pin, &ref] | test.rs:414:19:414:24 | pinned [Pin, &ref] | provenance | |
|
||||
| test.rs:413:30:413:51 | ...::new(...) | test.rs:413:17:413:26 | mut pinned | provenance | |
|
||||
| test.rs:413:30:413:51 | ...::new(...) [&ref] | test.rs:413:17:413:26 | mut pinned [&ref] | provenance | |
|
||||
| test.rs:413:30:413:51 | ...::new(...) [Pin, &ref] | test.rs:413:17:413:26 | mut pinned [Pin, &ref] | provenance | |
|
||||
| test.rs:413:39:413:50 | &mut reader2 [&ref] | test.rs:413:30:413:51 | ...::new(...) | provenance | MaD:20 |
|
||||
| test.rs:413:39:413:50 | &mut reader2 [&ref] | test.rs:413:30:413:51 | ...::new(...) [&ref] | provenance | MaD:21 |
|
||||
| test.rs:413:39:413:50 | &mut reader2 [&ref] | test.rs:413:30:413:51 | ...::new(...) [Pin, &ref] | provenance | MaD:21 |
|
||||
| test.rs:413:44:413:50 | reader2 | test.rs:413:39:413:50 | &mut reader2 [&ref] | provenance | |
|
||||
| test.rs:414:19:414:24 | pinned | test.rs:414:18:414:24 | &pinned | provenance | |
|
||||
| test.rs:414:19:414:24 | pinned [&ref] | test.rs:414:18:414:24 | &pinned | provenance | |
|
||||
| test.rs:414:19:414:24 | pinned [Pin, &ref] | test.rs:414:18:414:24 | &pinned | provenance | |
|
||||
| test.rs:416:17:416:22 | buffer [Ready, Ok] | test.rs:417:20:417:39 | ...::Ready(...) [Ready, Ok] | provenance | |
|
||||
| test.rs:416:17:416:22 | buffer [Ready, Ok] | test.rs:418:23:418:28 | buffer [Ready, Ok] | provenance | |
|
||||
| test.rs:416:26:416:31 | pinned | test.rs:416:26:416:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:8 |
|
||||
| test.rs:416:26:416:31 | pinned [&ref] | test.rs:416:26:416:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:8 |
|
||||
| test.rs:416:26:416:54 | pinned.poll_fill_buf(...) [Ready, Ok] | test.rs:416:17:416:22 | buffer [Ready, Ok] | provenance | |
|
||||
| test.rs:417:20:417:39 | ...::Ready(...) [Ready, Ok] | test.rs:417:32:417:38 | Ok(...) [Ok] | provenance | |
|
||||
| test.rs:417:32:417:38 | Ok(...) [Ok] | test.rs:417:35:417:37 | buf | provenance | |
|
||||
@@ -231,10 +227,8 @@ edges
|
||||
| test.rs:418:23:418:28 | buffer [Ready, Ok] | test.rs:418:22:418:28 | &buffer | provenance | |
|
||||
| test.rs:423:17:423:23 | buffer2 [Ready, Ok] | test.rs:424:20:424:26 | buffer2 [Ready, Ok] | provenance | |
|
||||
| test.rs:423:27:423:48 | ...::new(...) | test.rs:423:27:423:71 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:8 |
|
||||
| test.rs:423:27:423:48 | ...::new(...) [&ref] | test.rs:423:27:423:71 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:8 |
|
||||
| test.rs:423:27:423:71 | ... .poll_fill_buf(...) [Ready, Ok] | test.rs:423:17:423:23 | buffer2 [Ready, Ok] | provenance | |
|
||||
| test.rs:423:36:423:47 | &mut reader2 [&ref] | test.rs:423:27:423:48 | ...::new(...) | provenance | MaD:20 |
|
||||
| test.rs:423:36:423:47 | &mut reader2 [&ref] | test.rs:423:27:423:48 | ...::new(...) [&ref] | provenance | MaD:21 |
|
||||
| test.rs:423:41:423:47 | reader2 | test.rs:423:36:423:47 | &mut reader2 [&ref] | provenance | |
|
||||
| test.rs:424:20:424:26 | buffer2 [Ready, Ok] | test.rs:425:17:425:36 | ...::Ready(...) [Ready, Ok] | provenance | |
|
||||
| test.rs:424:20:424:26 | buffer2 [Ready, Ok] | test.rs:426:27:426:33 | buffer2 [Ready, Ok] | provenance | |
|
||||
@@ -249,17 +243,15 @@ edges
|
||||
| test.rs:437:26:437:50 | TryExpr | test.rs:437:17:437:22 | buffer | provenance | |
|
||||
| test.rs:444:17:444:26 | mut pinned | test.rs:445:19:445:24 | pinned | provenance | |
|
||||
| test.rs:444:17:444:26 | mut pinned | test.rs:447:30:447:35 | pinned | provenance | |
|
||||
| test.rs:444:17:444:26 | mut pinned [&ref] | test.rs:445:19:445:24 | pinned [&ref] | provenance | |
|
||||
| test.rs:444:17:444:26 | mut pinned [&ref] | test.rs:447:30:447:35 | pinned [&ref] | provenance | |
|
||||
| test.rs:444:17:444:26 | mut pinned [Pin, &ref] | test.rs:445:19:445:24 | pinned [Pin, &ref] | provenance | |
|
||||
| test.rs:444:30:444:51 | ...::new(...) | test.rs:444:17:444:26 | mut pinned | provenance | |
|
||||
| test.rs:444:30:444:51 | ...::new(...) [&ref] | test.rs:444:17:444:26 | mut pinned [&ref] | provenance | |
|
||||
| test.rs:444:30:444:51 | ...::new(...) [Pin, &ref] | test.rs:444:17:444:26 | mut pinned [Pin, &ref] | provenance | |
|
||||
| test.rs:444:39:444:50 | &mut reader2 [&ref] | test.rs:444:30:444:51 | ...::new(...) | provenance | MaD:20 |
|
||||
| test.rs:444:39:444:50 | &mut reader2 [&ref] | test.rs:444:30:444:51 | ...::new(...) [&ref] | provenance | MaD:21 |
|
||||
| test.rs:444:39:444:50 | &mut reader2 [&ref] | test.rs:444:30:444:51 | ...::new(...) [Pin, &ref] | provenance | MaD:21 |
|
||||
| test.rs:444:44:444:50 | reader2 | test.rs:444:39:444:50 | &mut reader2 [&ref] | provenance | |
|
||||
| test.rs:445:19:445:24 | pinned | test.rs:445:18:445:24 | &pinned | provenance | |
|
||||
| test.rs:445:19:445:24 | pinned [&ref] | test.rs:445:18:445:24 | &pinned | provenance | |
|
||||
| test.rs:445:19:445:24 | pinned [Pin, &ref] | test.rs:445:18:445:24 | &pinned | provenance | |
|
||||
| test.rs:447:30:447:35 | pinned | test.rs:447:56:447:66 | [post] &mut buffer [&ref] | provenance | MaD:9 |
|
||||
| test.rs:447:30:447:35 | pinned [&ref] | test.rs:447:56:447:66 | [post] &mut buffer [&ref] | provenance | MaD:9 |
|
||||
| test.rs:447:56:447:66 | [post] &mut buffer [&ref] | test.rs:447:61:447:66 | [post] buffer | provenance | |
|
||||
| test.rs:447:61:447:66 | [post] buffer | test.rs:448:19:448:24 | buffer | provenance | |
|
||||
| test.rs:447:61:447:66 | [post] buffer | test.rs:450:23:450:33 | buffer[...] | provenance | |
|
||||
@@ -276,19 +268,17 @@ edges
|
||||
| test.rs:462:19:462:40 | buffer2[...] | test.rs:462:18:462:40 | &... | provenance | |
|
||||
| test.rs:467:17:467:26 | mut pinned | test.rs:468:19:468:24 | pinned | provenance | |
|
||||
| test.rs:467:17:467:26 | mut pinned | test.rs:470:26:470:31 | pinned | provenance | |
|
||||
| test.rs:467:17:467:26 | mut pinned [&ref] | test.rs:468:19:468:24 | pinned [&ref] | provenance | |
|
||||
| test.rs:467:17:467:26 | mut pinned [&ref] | test.rs:470:26:470:31 | pinned [&ref] | provenance | |
|
||||
| test.rs:467:17:467:26 | mut pinned [Pin, &ref] | test.rs:468:19:468:24 | pinned [Pin, &ref] | provenance | |
|
||||
| test.rs:467:30:467:51 | ...::new(...) | test.rs:467:17:467:26 | mut pinned | provenance | |
|
||||
| test.rs:467:30:467:51 | ...::new(...) [&ref] | test.rs:467:17:467:26 | mut pinned [&ref] | provenance | |
|
||||
| test.rs:467:30:467:51 | ...::new(...) [Pin, &ref] | test.rs:467:17:467:26 | mut pinned [Pin, &ref] | provenance | |
|
||||
| test.rs:467:39:467:50 | &mut reader2 [&ref] | test.rs:467:30:467:51 | ...::new(...) | provenance | MaD:20 |
|
||||
| test.rs:467:39:467:50 | &mut reader2 [&ref] | test.rs:467:30:467:51 | ...::new(...) [&ref] | provenance | MaD:21 |
|
||||
| test.rs:467:39:467:50 | &mut reader2 [&ref] | test.rs:467:30:467:51 | ...::new(...) [Pin, &ref] | provenance | MaD:21 |
|
||||
| test.rs:467:44:467:50 | reader2 | test.rs:467:39:467:50 | &mut reader2 [&ref] | provenance | |
|
||||
| test.rs:468:19:468:24 | pinned | test.rs:468:18:468:24 | &pinned | provenance | |
|
||||
| test.rs:468:19:468:24 | pinned [&ref] | test.rs:468:18:468:24 | &pinned | provenance | |
|
||||
| test.rs:468:19:468:24 | pinned [Pin, &ref] | test.rs:468:18:468:24 | &pinned | provenance | |
|
||||
| test.rs:470:17:470:22 | buffer [Ready, Ok] | test.rs:471:19:471:24 | buffer [Ready, Ok] | provenance | |
|
||||
| test.rs:470:17:470:22 | buffer [Ready, Ok] | test.rs:472:20:472:39 | ...::Ready(...) [Ready, Ok] | provenance | |
|
||||
| test.rs:470:26:470:31 | pinned | test.rs:470:26:470:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:8 |
|
||||
| test.rs:470:26:470:31 | pinned [&ref] | test.rs:470:26:470:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:8 |
|
||||
| test.rs:470:26:470:54 | pinned.poll_fill_buf(...) [Ready, Ok] | test.rs:470:17:470:22 | buffer [Ready, Ok] | provenance | |
|
||||
| test.rs:471:19:471:24 | buffer [Ready, Ok] | test.rs:471:18:471:24 | &buffer | provenance | |
|
||||
| test.rs:472:20:472:39 | ...::Ready(...) [Ready, Ok] | test.rs:472:32:472:38 | Ok(...) [Ok] | provenance | |
|
||||
@@ -455,16 +445,15 @@ nodes
|
||||
| test.rs:381:14:381:20 | &reader | semmle.label | &reader |
|
||||
| test.rs:381:15:381:20 | reader | semmle.label | reader |
|
||||
| test.rs:386:17:386:26 | mut pinned | semmle.label | mut pinned |
|
||||
| test.rs:386:17:386:26 | mut pinned [&ref] | semmle.label | mut pinned [&ref] |
|
||||
| test.rs:386:17:386:26 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] |
|
||||
| test.rs:386:30:386:50 | ...::new(...) | semmle.label | ...::new(...) |
|
||||
| test.rs:386:30:386:50 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] |
|
||||
| test.rs:386:30:386:50 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] |
|
||||
| test.rs:386:39:386:49 | &mut reader [&ref] | semmle.label | &mut reader [&ref] |
|
||||
| test.rs:386:44:386:49 | reader | semmle.label | reader |
|
||||
| test.rs:387:18:387:24 | &pinned | semmle.label | &pinned |
|
||||
| test.rs:387:19:387:24 | pinned | semmle.label | pinned |
|
||||
| test.rs:387:19:387:24 | pinned [&ref] | semmle.label | pinned [&ref] |
|
||||
| test.rs:387:19:387:24 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] |
|
||||
| test.rs:389:30:389:35 | pinned | semmle.label | pinned |
|
||||
| test.rs:389:30:389:35 | pinned [&ref] | semmle.label | pinned [&ref] |
|
||||
| test.rs:389:56:389:66 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
|
||||
| test.rs:389:61:389:66 | [post] buffer | semmle.label | [post] buffer |
|
||||
| test.rs:391:22:391:28 | &buffer | semmle.label | &buffer |
|
||||
@@ -488,17 +477,16 @@ nodes
|
||||
| test.rs:409:14:409:21 | &reader2 | semmle.label | &reader2 |
|
||||
| test.rs:409:15:409:21 | reader2 | semmle.label | reader2 |
|
||||
| test.rs:413:17:413:26 | mut pinned | semmle.label | mut pinned |
|
||||
| test.rs:413:17:413:26 | mut pinned [&ref] | semmle.label | mut pinned [&ref] |
|
||||
| test.rs:413:17:413:26 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] |
|
||||
| test.rs:413:30:413:51 | ...::new(...) | semmle.label | ...::new(...) |
|
||||
| test.rs:413:30:413:51 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] |
|
||||
| test.rs:413:30:413:51 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] |
|
||||
| test.rs:413:39:413:50 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] |
|
||||
| test.rs:413:44:413:50 | reader2 | semmle.label | reader2 |
|
||||
| test.rs:414:18:414:24 | &pinned | semmle.label | &pinned |
|
||||
| test.rs:414:19:414:24 | pinned | semmle.label | pinned |
|
||||
| test.rs:414:19:414:24 | pinned [&ref] | semmle.label | pinned [&ref] |
|
||||
| test.rs:414:19:414:24 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] |
|
||||
| test.rs:416:17:416:22 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] |
|
||||
| test.rs:416:26:416:31 | pinned | semmle.label | pinned |
|
||||
| test.rs:416:26:416:31 | pinned [&ref] | semmle.label | pinned [&ref] |
|
||||
| test.rs:416:26:416:54 | pinned.poll_fill_buf(...) [Ready, Ok] | semmle.label | pinned.poll_fill_buf(...) [Ready, Ok] |
|
||||
| test.rs:417:20:417:39 | ...::Ready(...) [Ready, Ok] | semmle.label | ...::Ready(...) [Ready, Ok] |
|
||||
| test.rs:417:32:417:38 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] |
|
||||
@@ -508,7 +496,6 @@ nodes
|
||||
| test.rs:419:22:419:24 | buf | semmle.label | buf |
|
||||
| test.rs:423:17:423:23 | buffer2 [Ready, Ok] | semmle.label | buffer2 [Ready, Ok] |
|
||||
| test.rs:423:27:423:48 | ...::new(...) | semmle.label | ...::new(...) |
|
||||
| test.rs:423:27:423:48 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] |
|
||||
| test.rs:423:27:423:71 | ... .poll_fill_buf(...) [Ready, Ok] | semmle.label | ... .poll_fill_buf(...) [Ready, Ok] |
|
||||
| test.rs:423:36:423:47 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] |
|
||||
| test.rs:423:41:423:47 | reader2 | semmle.label | reader2 |
|
||||
@@ -526,16 +513,15 @@ nodes
|
||||
| test.rs:437:26:437:50 | TryExpr | semmle.label | TryExpr |
|
||||
| test.rs:438:18:438:23 | buffer | semmle.label | buffer |
|
||||
| test.rs:444:17:444:26 | mut pinned | semmle.label | mut pinned |
|
||||
| test.rs:444:17:444:26 | mut pinned [&ref] | semmle.label | mut pinned [&ref] |
|
||||
| test.rs:444:17:444:26 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] |
|
||||
| test.rs:444:30:444:51 | ...::new(...) | semmle.label | ...::new(...) |
|
||||
| test.rs:444:30:444:51 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] |
|
||||
| test.rs:444:30:444:51 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] |
|
||||
| test.rs:444:39:444:50 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] |
|
||||
| test.rs:444:44:444:50 | reader2 | semmle.label | reader2 |
|
||||
| test.rs:445:18:445:24 | &pinned | semmle.label | &pinned |
|
||||
| test.rs:445:19:445:24 | pinned | semmle.label | pinned |
|
||||
| test.rs:445:19:445:24 | pinned [&ref] | semmle.label | pinned [&ref] |
|
||||
| test.rs:445:19:445:24 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] |
|
||||
| test.rs:447:30:447:35 | pinned | semmle.label | pinned |
|
||||
| test.rs:447:30:447:35 | pinned [&ref] | semmle.label | pinned [&ref] |
|
||||
| test.rs:447:56:447:66 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
|
||||
| test.rs:447:61:447:66 | [post] buffer | semmle.label | [post] buffer |
|
||||
| test.rs:448:18:448:24 | &buffer | semmle.label | &buffer |
|
||||
@@ -554,17 +540,16 @@ nodes
|
||||
| test.rs:462:18:462:40 | &... | semmle.label | &... |
|
||||
| test.rs:462:19:462:40 | buffer2[...] | semmle.label | buffer2[...] |
|
||||
| test.rs:467:17:467:26 | mut pinned | semmle.label | mut pinned |
|
||||
| test.rs:467:17:467:26 | mut pinned [&ref] | semmle.label | mut pinned [&ref] |
|
||||
| test.rs:467:17:467:26 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] |
|
||||
| test.rs:467:30:467:51 | ...::new(...) | semmle.label | ...::new(...) |
|
||||
| test.rs:467:30:467:51 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] |
|
||||
| test.rs:467:30:467:51 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] |
|
||||
| test.rs:467:39:467:50 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] |
|
||||
| test.rs:467:44:467:50 | reader2 | semmle.label | reader2 |
|
||||
| test.rs:468:18:468:24 | &pinned | semmle.label | &pinned |
|
||||
| test.rs:468:19:468:24 | pinned | semmle.label | pinned |
|
||||
| test.rs:468:19:468:24 | pinned [&ref] | semmle.label | pinned [&ref] |
|
||||
| test.rs:468:19:468:24 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] |
|
||||
| test.rs:470:17:470:22 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] |
|
||||
| test.rs:470:26:470:31 | pinned | semmle.label | pinned |
|
||||
| test.rs:470:26:470:31 | pinned [&ref] | semmle.label | pinned [&ref] |
|
||||
| test.rs:470:26:470:54 | pinned.poll_fill_buf(...) [Ready, Ok] | semmle.label | pinned.poll_fill_buf(...) [Ready, Ok] |
|
||||
| test.rs:471:18:471:24 | &buffer | semmle.label | &buffer |
|
||||
| test.rs:471:19:471:24 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] |
|
||||
|
||||
@@ -299,7 +299,8 @@ impl<T> MyOption<T> {
|
||||
}
|
||||
|
||||
// summary=<test::option::MyOption>::insert;Argument[0];Argument[self].Reference.Field[test::option::MyOption::MySome(0)];value;dfc-generated
|
||||
// summary=<test::option::MyOption>::insert;Argument[0];ReturnValue.Reference;value;dfc-generated
|
||||
// This summary is currently missing because of access path limit
|
||||
// summary-MISSING=<test::option::MyOption>::insert;Argument[0];ReturnValue.Reference;value;dfc-generated
|
||||
// The content of `self` is overwritten so it does not flow to the return value.
|
||||
// SPURIOUS-summary=<test::option::MyOption>::insert;Argument[self].Reference.Field[test::option::MyOption::MySome(0)];ReturnValue.Reference;value;dfc-generated
|
||||
pub fn insert(&mut self, value: T) -> &mut T {
|
||||
@@ -310,7 +311,8 @@ impl<T> MyOption<T> {
|
||||
}
|
||||
|
||||
// summary=<test::option::MyOption>::get_or_insert;Argument[0];Argument[self].Reference.Field[test::option::MyOption::MySome(0)];value;dfc-generated
|
||||
// summary=<test::option::MyOption>::get_or_insert;Argument[0];ReturnValue.Reference;value;dfc-generated
|
||||
// This summary is currently missing because of access path limit
|
||||
// summary-MISSING=<test::option::MyOption>::get_or_insert;Argument[0];ReturnValue.Reference;value;dfc-generated
|
||||
// summary=<test::option::MyOption>::get_or_insert;Argument[self].Reference.Field[test::option::MyOption::MySome(0)];ReturnValue.Reference;value;dfc-generated
|
||||
pub fn get_or_insert(&mut self, value: T) -> &mut T {
|
||||
self.get_or_insert_with(|| value)
|
||||
@@ -325,7 +327,8 @@ impl<T> MyOption<T> {
|
||||
}
|
||||
|
||||
// summary=<test::option::MyOption>::get_or_insert_with;Argument[self].Reference.Field[test::option::MyOption::MySome(0)];ReturnValue.Reference;value;dfc-generated
|
||||
// MISSING: Mutating `self` parameter.
|
||||
// summary=<test::option::MyOption>::get_or_insert_with;Argument[0].ReturnValue;Argument[self].Reference.Field[test::option::MyOption::MySome(0)];value;dfc-generated
|
||||
// SPURIOUS-summary=<test::option::MyOption>::get_or_insert_with;Argument[0];Argument[self].Reference.Field[test::option::MyOption::MySome(0)];value;dfc-generated
|
||||
pub fn get_or_insert_with<F>(&mut self, f: F) -> &mut T
|
||||
where
|
||||
F: FnOnce() -> T,
|
||||
|
||||
Reference in New Issue
Block a user