Merge pull request #19198 from paldepind/rust-ti-inline-expectations

Rust: Add inline expectations test for type inference
This commit is contained in:
Simon Friis Vindum
2025-04-03 14:55:12 +02:00
committed by GitHub
26 changed files with 1276 additions and 1246 deletions

View File

@@ -4,7 +4,9 @@
* INTERNAL: Do not use.
*/
private import codeql.files.FileSystem
private import codeql.rust.elements.internal.generated.Function
private import codeql.rust.elements.Comment
/**
* INTERNAL: This module contains the customizable definition of `Function` and should not
@@ -26,5 +28,46 @@ module Impl {
*/
class Function extends Generated::Function {
override string toStringImpl() { result = "fn " + this.getName().getText() }
pragma[nomagic]
private predicate hasPotentialCommentAt(File f, int line) {
f = this.getLocation().getFile() and
// When a function is preceded by comments its start line is the line of
// the first comment. Hence all relevant comments are found by including
// comments from the start line and up to the line with the function
// name.
line in [this.getLocation().getStartLine() .. this.getName().getLocation().getStartLine()]
}
/**
* Gets a comment preceding this function.
*
* A comment is considered preceding if it occurs immediately before this
* function or if only other comments occur between the comment and this
* function.
*/
Comment getAPrecedingComment() {
exists(File f, int line |
this.hasPotentialCommentAt(f, line) and
result.getLocation().hasLocationFileInfo(f, line, _, _, _)
)
}
/**
* Gets a comment preceding this function.
*
* A comment is considered preceding if it occurs immediately before this
* function or if only other comments occur between the comment and this
* function.
*/
Comment getPrecedingComment() {
result.getLocation().getFile() = this.getLocation().getFile() and
// When a function is preceded by comments its start line is the line of
// the first comment. Hence all relevant comments are found by including
// comments from the start line and up to the line with the function
// name.
this.getLocation().getStartLine() <= result.getLocation().getStartLine() and
result.getLocation().getStartLine() <= this.getName().getLocation().getStartLine()
}
}
}

View File

@@ -42,12 +42,22 @@ module Impl {
)
}
private string toStringPart(int index) {
index = 0 and
result = this.getReceiver().toAbbreviatedString()
or
index = 1 and
(if this.getReceiver().toAbbreviatedString() = "..." then result = " ." else result = ".")
or
index = 2 and
result = this.getIdentifier().toStringImpl()
or
index = 3 and
if this.getArgList().getNumberOfArgs() = 0 then result = "()" else result = "(...)"
}
override string toStringImpl() {
exists(string base, string separator |
base = this.getReceiver().toAbbreviatedString() and
(if base = "..." then separator = " ." else separator = ".") and
result = base + separator + this.getIdentifier().toStringImpl() + "(...)"
)
result = strictconcat(int i | | this.toStringPart(i) order by i)
}
}
}

View File

@@ -104,7 +104,7 @@ class StructType extends StructOrEnumType, TStruct {
result = TTypeParamTypeParameter(struct.getGenericParamList().getTypeParam(i))
}
override string toString() { result = struct.toString() }
override string toString() { result = struct.getName().getText() }
override Location getLocation() { result = struct.getLocation() }
}
@@ -125,7 +125,7 @@ class EnumType extends StructOrEnumType, TEnum {
result = TTypeParamTypeParameter(enum.getGenericParamList().getTypeParam(i))
}
override string toString() { result = enum.toString() }
override string toString() { result = enum.getName().getText() }
override Location getLocation() { result = enum.getLocation() }
}

View File

@@ -5,16 +5,7 @@ private module InlineMadTestLang implements InlineMadTestLangSig {
class Callable = R::Function;
string getComment(R::Function callable) {
exists(R::Comment comment |
result = comment.getCommentText() and
comment.getLocation().getFile() = callable.getLocation().getFile() and
// When a function is preceded by comments its start line is the line of
// the first comment. Hence all relevant comments are found by including
// comments from the start line and up to the line with the function
// name.
callable.getLocation().getStartLine() <= comment.getLocation().getStartLine() and
comment.getLocation().getStartLine() <= callable.getName().getLocation().getStartLine()
)
result = callable.getAPrecedingComment().getCommentText()
}
}

View File

@@ -1,3 +1,3 @@
multipleStaticCallTargets
| regular.rs:29:5:29:9 | s.g(...) | anonymous.rs:15:9:15:22 | fn g |
| regular.rs:29:5:29:9 | s.g(...) | regular.rs:13:5:13:18 | fn g |
| regular.rs:29:5:29:9 | s.g() | anonymous.rs:15:9:15:22 | fn g |
| regular.rs:29:5:29:9 | s.g() | regular.rs:13:5:13:18 | fn g |

View File

@@ -38,17 +38,17 @@ canonicalPaths
resolvedPaths
| anonymous.rs:27:17:27:30 | OtherStruct {...} | None | None |
| anonymous.rs:28:9:28:9 | s | None | None |
| anonymous.rs:28:9:28:13 | s.f(...) | None | None |
| anonymous.rs:28:9:28:13 | s.f() | None | None |
| anonymous.rs:29:9:29:9 | s | None | None |
| anonymous.rs:29:9:29:13 | s.g(...) | None | None |
| anonymous.rs:29:9:29:13 | s.g() | None | None |
| anonymous.rs:30:9:30:14 | nested | None | None |
| regular.rs:27:13:27:21 | Struct {...} | repo::test | crate::regular::Struct |
| regular.rs:28:5:28:5 | s | None | None |
| regular.rs:28:5:28:9 | s.f(...) | repo::test | <crate::regular::Struct as crate::regular::Trait>::f |
| regular.rs:28:5:28:9 | s.f() | repo::test | <crate::regular::Struct as crate::regular::Trait>::f |
| regular.rs:29:5:29:5 | s | None | None |
| regular.rs:29:5:29:9 | s.g(...) | repo::test | <crate::regular::Struct>::g |
| regular.rs:29:5:29:9 | s.g() | repo::test | <crate::regular::Struct>::g |
| regular.rs:30:5:30:5 | s | None | None |
| regular.rs:30:5:30:9 | s.h(...) | repo::test | <_ as crate::regular::TraitWithBlanketImpl>::h |
| regular.rs:30:5:30:9 | s.h() | repo::test | <_ as crate::regular::TraitWithBlanketImpl>::h |
| regular.rs:31:5:31:8 | free | repo::test | crate::regular::free |
| regular.rs:41:9:41:26 | ...::None::<...> | lang:core | crate::option::Option::None |
| regular.rs:42:9:42:20 | ...::Some | lang:core | crate::option::Option::Some |

View File

@@ -1,3 +1,3 @@
multipleStaticCallTargets
| regular.rs:32:5:32:9 | s.g(...) | anonymous.rs:18:9:18:22 | fn g |
| regular.rs:32:5:32:9 | s.g(...) | regular.rs:16:5:16:18 | fn g |
| regular.rs:32:5:32:9 | s.g() | anonymous.rs:18:9:18:22 | fn g |
| regular.rs:32:5:32:9 | s.g() | regular.rs:16:5:16:18 | fn g |

View File

@@ -38,17 +38,17 @@ canonicalPaths
resolvedPaths
| anonymous.rs:30:17:30:30 | OtherStruct {...} | None | None |
| anonymous.rs:31:9:31:9 | s | None | None |
| anonymous.rs:31:9:31:13 | s.f(...) | None | None |
| anonymous.rs:31:9:31:13 | s.f() | None | None |
| anonymous.rs:32:9:32:9 | s | None | None |
| anonymous.rs:32:9:32:13 | s.g(...) | None | None |
| anonymous.rs:32:9:32:13 | s.g() | None | None |
| anonymous.rs:33:9:33:14 | nested | None | None |
| regular.rs:30:13:30:21 | Struct {...} | None | None |
| regular.rs:31:5:31:5 | s | None | None |
| regular.rs:31:5:31:9 | s.f(...) | None | None |
| regular.rs:31:5:31:9 | s.f() | None | None |
| regular.rs:32:5:32:5 | s | None | None |
| regular.rs:32:5:32:9 | s.g(...) | None | None |
| regular.rs:32:5:32:9 | s.g() | None | None |
| regular.rs:33:5:33:5 | s | None | None |
| regular.rs:33:5:33:9 | s.h(...) | None | None |
| regular.rs:33:5:33:9 | s.h() | None | None |
| regular.rs:34:5:34:8 | free | None | None |
| regular.rs:44:9:44:26 | ...::None::<...> | None | None |
| regular.rs:45:9:45:20 | ...::Some | None | None |

View File

@@ -1,5 +1,5 @@
noLocation
| file://:0:0:0:0 | ... .unwrap(...) |
| file://:0:0:0:0 | ... .unwrap() |
| file://:0:0:0:0 | ...: ... |
| file://:0:0:0:0 | ...::Path |
| file://:0:0:0:0 | ...::Path |
@@ -32,7 +32,7 @@ noLocation
| file://:0:0:0:0 | path |
| file://:0:0:0:0 | path |
| file://:0:0:0:0 | path |
| file://:0:0:0:0 | path.parent(...) |
| file://:0:0:0:0 | path.parent() |
| file://:0:0:0:0 | std |
| file://:0:0:0:0 | std |
| file://:0:0:0:0 | std |

View File

@@ -205,8 +205,8 @@ edges
| test.rs:99:19:99:25 | Some(...) | test.rs:99:24:99:24 | x | match |
| test.rs:99:24:99:24 | x | test.rs:99:24:99:24 | x | |
| test.rs:99:24:99:24 | x | test.rs:100:17:100:17 | x | match |
| test.rs:99:29:99:32 | iter | test.rs:99:29:99:39 | iter.next(...) | |
| test.rs:99:29:99:39 | iter.next(...) | test.rs:99:19:99:25 | Some(...) | |
| test.rs:99:29:99:32 | iter | test.rs:99:29:99:39 | iter.next() | |
| test.rs:99:29:99:39 | iter.next() | test.rs:99:19:99:25 | Some(...) | |
| test.rs:99:41:103:9 | { ... } | test.rs:99:15:99:39 | let ... = ... | |
| test.rs:100:13:102:13 | if ... {...} | test.rs:99:41:103:9 | { ... } | |
| test.rs:100:17:100:17 | x | test.rs:100:22:100:22 | 5 | |
@@ -760,8 +760,8 @@ edges
| test.rs:311:87:313:5 | { ... } | test.rs:311:5:313:5 | exit fn test_question_mark_operator_1 (normal) | |
| test.rs:312:9:312:10 | Ok | test.rs:312:12:312:12 | s | |
| test.rs:312:9:312:33 | Ok(...) | test.rs:311:87:313:5 | { ... } | |
| test.rs:312:12:312:12 | s | test.rs:312:12:312:27 | s.parse(...) | |
| test.rs:312:12:312:27 | s.parse(...) | test.rs:312:12:312:28 | TryExpr | |
| test.rs:312:12:312:12 | s | test.rs:312:12:312:27 | s.parse() | |
| test.rs:312:12:312:27 | s.parse() | test.rs:312:12:312:28 | TryExpr | |
| test.rs:312:12:312:28 | TryExpr | test.rs:311:5:313:5 | exit fn test_question_mark_operator_1 (normal) | return |
| test.rs:312:12:312:28 | TryExpr | test.rs:312:32:312:32 | 4 | match |
| test.rs:312:12:312:32 | ... + ... | test.rs:312:9:312:33 | Ok(...) | |

View File

@@ -17,13 +17,13 @@ edges
| main.rs:38:23:38:31 | source(...) | main.rs:26:28:26:33 | ...: i64 | provenance | |
| main.rs:38:23:38:31 | source(...) | main.rs:38:6:38:11 | [post] &mut a [&ref, MyStruct] | provenance | |
| main.rs:39:10:39:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | provenance | |
| main.rs:39:10:39:10 | a [MyStruct] | main.rs:39:10:39:21 | a.get_data(...) | provenance | |
| main.rs:39:10:39:10 | a [MyStruct] | main.rs:39:10:39:21 | a.get_data() | provenance | |
| main.rs:44:12:44:17 | [post] &mut a [&ref, MyStruct] | main.rs:44:17:44:17 | [post] a [MyStruct] | provenance | |
| main.rs:44:17:44:17 | [post] a [MyStruct] | main.rs:45:10:45:10 | a [MyStruct] | provenance | |
| main.rs:44:30:44:38 | source(...) | main.rs:26:28:26:33 | ...: i64 | provenance | |
| main.rs:44:30:44:38 | source(...) | main.rs:44:12:44:17 | [post] &mut a [&ref, MyStruct] | provenance | |
| main.rs:45:10:45:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | provenance | |
| main.rs:45:10:45:10 | a [MyStruct] | main.rs:45:10:45:21 | a.get_data(...) | provenance | |
| main.rs:45:10:45:10 | a [MyStruct] | main.rs:45:10:45:21 | a.get_data() | provenance | |
| main.rs:48:12:48:17 | ...: i64 | main.rs:49:10:49:10 | n | provenance | |
| main.rs:53:9:53:9 | a | main.rs:54:13:54:13 | a | provenance | |
| main.rs:53:13:53:21 | source(...) | main.rs:53:9:53:9 | a | provenance | |
@@ -48,11 +48,11 @@ edges
| main.rs:82:26:82:26 | a | main.rs:78:21:78:26 | ...: i64 | provenance | |
| main.rs:82:26:82:26 | a | main.rs:82:13:82:27 | pass_through(...) | provenance | |
| main.rs:94:22:94:27 | ...: i64 | main.rs:95:14:95:14 | n | provenance | |
| main.rs:98:30:104:5 | { ... } | main.rs:117:13:117:25 | mn.get_data(...) | provenance | |
| main.rs:98:30:104:5 | { ... } | main.rs:117:13:117:25 | mn.get_data() | provenance | |
| main.rs:102:13:102:21 | source(...) | main.rs:98:30:104:5 | { ... } | provenance | |
| main.rs:106:27:106:32 | ...: i64 | main.rs:106:42:112:5 | { ... } | provenance | |
| main.rs:117:9:117:9 | a | main.rs:118:10:118:10 | a | provenance | |
| main.rs:117:13:117:25 | mn.get_data(...) | main.rs:117:9:117:9 | a | provenance | |
| main.rs:117:13:117:25 | mn.get_data() | main.rs:117:9:117:9 | a | provenance | |
| main.rs:123:9:123:9 | a | main.rs:124:16:124:16 | a | provenance | |
| main.rs:123:13:123:21 | source(...) | main.rs:123:9:123:9 | a | provenance | |
| main.rs:124:16:124:16 | a | main.rs:94:22:94:27 | ...: i64 | provenance | |
@@ -115,12 +115,12 @@ nodes
| main.rs:38:11:38:11 | [post] a [MyStruct] | semmle.label | [post] a [MyStruct] |
| main.rs:38:23:38:31 | source(...) | semmle.label | source(...) |
| main.rs:39:10:39:10 | a [MyStruct] | semmle.label | a [MyStruct] |
| main.rs:39:10:39:21 | a.get_data(...) | semmle.label | a.get_data(...) |
| main.rs:39:10:39:21 | a.get_data() | semmle.label | a.get_data() |
| main.rs:44:12:44:17 | [post] &mut a [&ref, MyStruct] | semmle.label | [post] &mut a [&ref, MyStruct] |
| main.rs:44:17:44:17 | [post] a [MyStruct] | semmle.label | [post] a [MyStruct] |
| main.rs:44:30:44:38 | source(...) | semmle.label | source(...) |
| main.rs:45:10:45:10 | a [MyStruct] | semmle.label | a [MyStruct] |
| main.rs:45:10:45:21 | a.get_data(...) | semmle.label | a.get_data(...) |
| main.rs:45:10:45:21 | a.get_data() | semmle.label | a.get_data() |
| main.rs:48:12:48:17 | ...: i64 | semmle.label | ...: i64 |
| main.rs:49:10:49:10 | n | semmle.label | n |
| main.rs:53:9:53:9 | a | semmle.label | a |
@@ -154,7 +154,7 @@ nodes
| main.rs:106:27:106:32 | ...: i64 | semmle.label | ...: i64 |
| main.rs:106:42:112:5 | { ... } | semmle.label | { ... } |
| main.rs:117:9:117:9 | a | semmle.label | a |
| main.rs:117:13:117:25 | mn.get_data(...) | semmle.label | mn.get_data(...) |
| main.rs:117:13:117:25 | mn.get_data() | semmle.label | mn.get_data() |
| main.rs:118:10:118:10 | a | semmle.label | a |
| main.rs:123:9:123:9 | a | semmle.label | a |
| main.rs:123:13:123:21 | source(...) | semmle.label | source(...) |
@@ -204,9 +204,9 @@ nodes
| main.rs:239:14:239:14 | c | semmle.label | c |
subpaths
| main.rs:38:23:38:31 | source(...) | main.rs:26:28:26:33 | ...: i64 | main.rs:26:17:26:25 | SelfParam [Return] [&ref, MyStruct] | main.rs:38:6:38:11 | [post] &mut a [&ref, MyStruct] |
| main.rs:39:10:39:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | main.rs:30:31:32:5 | { ... } | main.rs:39:10:39:21 | a.get_data(...) |
| main.rs:39:10:39:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | main.rs:30:31:32:5 | { ... } | main.rs:39:10:39:21 | a.get_data() |
| main.rs:44:30:44:38 | source(...) | main.rs:26:28:26:33 | ...: i64 | main.rs:26:17:26:25 | SelfParam [Return] [&ref, MyStruct] | main.rs:44:12:44:17 | [post] &mut a [&ref, MyStruct] |
| main.rs:45:10:45:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | main.rs:30:31:32:5 | { ... } | main.rs:45:10:45:21 | a.get_data(...) |
| main.rs:45:10:45:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | main.rs:30:31:32:5 | { ... } | main.rs:45:10:45:21 | a.get_data() |
| main.rs:63:26:63:26 | a | main.rs:57:17:57:22 | ...: i64 | main.rs:57:32:59:1 | { ... } | main.rs:63:13:63:27 | pass_through(...) |
| main.rs:68:26:71:5 | { ... } | main.rs:57:17:57:22 | ...: i64 | main.rs:57:32:59:1 | { ... } | main.rs:68:13:71:6 | pass_through(...) |
| main.rs:82:26:82:26 | a | main.rs:78:21:78:26 | ...: i64 | main.rs:78:36:80:5 | { ... } | main.rs:82:13:82:27 | pass_through(...) |
@@ -217,8 +217,8 @@ subpaths
testFailures
#select
| main.rs:18:10:18:10 | a | main.rs:13:5:13:13 | source(...) | main.rs:18:10:18:10 | a | $@ | main.rs:13:5:13:13 | source(...) | source(...) |
| main.rs:39:10:39:21 | a.get_data(...) | main.rs:38:23:38:31 | source(...) | main.rs:39:10:39:21 | a.get_data(...) | $@ | main.rs:38:23:38:31 | source(...) | source(...) |
| main.rs:45:10:45:21 | a.get_data(...) | main.rs:44:30:44:38 | source(...) | main.rs:45:10:45:21 | a.get_data(...) | $@ | main.rs:44:30:44:38 | source(...) | source(...) |
| main.rs:39:10:39:21 | a.get_data() | main.rs:38:23:38:31 | source(...) | main.rs:39:10:39:21 | a.get_data() | $@ | main.rs:38:23:38:31 | source(...) | source(...) |
| main.rs:45:10:45:21 | a.get_data() | main.rs:44:30:44:38 | source(...) | main.rs:45:10:45:21 | a.get_data() | $@ | main.rs:44:30:44:38 | source(...) | source(...) |
| main.rs:49:10:49:10 | n | main.rs:53:13:53:21 | source(...) | main.rs:49:10:49:10 | n | $@ | main.rs:53:13:53:21 | source(...) | source(...) |
| main.rs:64:10:64:10 | b | main.rs:62:13:62:21 | source(...) | main.rs:64:10:64:10 | b | $@ | main.rs:62:13:62:21 | source(...) | source(...) |
| main.rs:72:10:72:10 | a | main.rs:70:9:70:18 | source(...) | main.rs:72:10:72:10 | a | $@ | main.rs:70:9:70:18 | source(...) | source(...) |

View File

@@ -2,15 +2,15 @@
| main.rs:17:13:17:23 | get_data(...) | main.rs:12:1:14:1 | fn get_data |
| main.rs:18:5:18:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:37:5:37:22 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:37:10:37:21 | a.get_data(...) | main.rs:30:5:32:5 | fn get_data |
| main.rs:37:10:37:21 | a.get_data() | main.rs:30:5:32:5 | fn get_data |
| main.rs:38:5:38:32 | ... .set_data(...) | main.rs:26:5:28:5 | fn set_data |
| main.rs:38:23:38:31 | source(...) | main.rs:1:1:3:1 | fn source |
| main.rs:39:5:39:22 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:39:10:39:21 | a.get_data(...) | main.rs:30:5:32:5 | fn get_data |
| main.rs:39:10:39:21 | a.get_data() | main.rs:30:5:32:5 | fn get_data |
| main.rs:44:5:44:39 | ... .set_data(...) | main.rs:26:5:28:5 | fn set_data |
| main.rs:44:30:44:38 | source(...) | main.rs:1:1:3:1 | fn source |
| main.rs:45:5:45:22 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:45:10:45:21 | a.get_data(...) | main.rs:30:5:32:5 | fn get_data |
| main.rs:45:10:45:21 | a.get_data() | main.rs:30:5:32:5 | fn get_data |
| main.rs:49:5:49:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:53:13:53:21 | source(...) | main.rs:1:1:3:1 | fn source |
| main.rs:54:5:54:14 | data_in(...) | main.rs:48:1:50:1 | fn data_in |
@@ -25,7 +25,7 @@
| main.rs:83:5:83:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:95:9:95:15 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:102:13:102:21 | source(...) | main.rs:1:1:3:1 | fn source |
| main.rs:117:13:117:25 | mn.get_data(...) | main.rs:98:5:104:5 | fn get_data |
| main.rs:117:13:117:25 | mn.get_data() | main.rs:98:5:104:5 | fn get_data |
| main.rs:118:5:118:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
| main.rs:123:13:123:21 | source(...) | main.rs:1:1:3:1 | fn source |
| main.rs:124:5:124:17 | mn.data_in(...) | main.rs:94:5:96:5 | fn data_in |

View File

@@ -330,13 +330,13 @@ localStep
| main.rs:271:29:271:30 | [post] receiver for r1 | main.rs:271:29:271:30 | [post] r1 |
| main.rs:271:29:271:30 | r1 | main.rs:271:29:271:30 | receiver for r1 |
| main.rs:271:29:271:30 | r1 | main.rs:272:29:272:30 | r1 |
| main.rs:271:29:271:35 | r1.ok(...) | main.rs:271:9:271:11 | o1a |
| main.rs:271:29:271:35 | r1.ok() | main.rs:271:9:271:11 | o1a |
| main.rs:272:9:272:11 | [SSA] o1b | main.rs:274:10:274:12 | o1b |
| main.rs:272:9:272:11 | o1b | main.rs:272:9:272:11 | [SSA] o1b |
| main.rs:272:9:272:11 | o1b | main.rs:272:9:272:11 | o1b |
| main.rs:272:29:272:30 | [post] receiver for r1 | main.rs:272:29:272:30 | [post] r1 |
| main.rs:272:29:272:30 | r1 | main.rs:272:29:272:30 | receiver for r1 |
| main.rs:272:29:272:36 | r1.err(...) | main.rs:272:9:272:11 | o1b |
| main.rs:272:29:272:36 | r1.err() | main.rs:272:9:272:11 | o1b |
| main.rs:273:10:273:12 | [post] receiver for o1a | main.rs:273:10:273:12 | [post] o1a |
| main.rs:273:10:273:12 | o1a | main.rs:273:10:273:12 | receiver for o1a |
| main.rs:274:10:274:12 | [post] receiver for o1b | main.rs:274:10:274:12 | [post] o1b |
@@ -352,13 +352,13 @@ localStep
| main.rs:277:29:277:30 | [post] receiver for r2 | main.rs:277:29:277:30 | [post] r2 |
| main.rs:277:29:277:30 | r2 | main.rs:277:29:277:30 | receiver for r2 |
| main.rs:277:29:277:30 | r2 | main.rs:278:29:278:30 | r2 |
| main.rs:277:29:277:35 | r2.ok(...) | main.rs:277:9:277:11 | o2a |
| main.rs:277:29:277:35 | r2.ok() | main.rs:277:9:277:11 | o2a |
| main.rs:278:9:278:11 | [SSA] o2b | main.rs:280:10:280:12 | o2b |
| main.rs:278:9:278:11 | o2b | main.rs:278:9:278:11 | [SSA] o2b |
| main.rs:278:9:278:11 | o2b | main.rs:278:9:278:11 | o2b |
| main.rs:278:29:278:30 | [post] receiver for r2 | main.rs:278:29:278:30 | [post] r2 |
| main.rs:278:29:278:30 | r2 | main.rs:278:29:278:30 | receiver for r2 |
| main.rs:278:29:278:36 | r2.err(...) | main.rs:278:9:278:11 | o2b |
| main.rs:278:29:278:36 | r2.err() | main.rs:278:9:278:11 | o2b |
| main.rs:279:10:279:12 | [post] receiver for o2a | main.rs:279:10:279:12 | [post] o2a |
| main.rs:279:10:279:12 | o2a | main.rs:279:10:279:12 | receiver for o2a |
| main.rs:280:10:280:12 | [post] receiver for o2b | main.rs:280:10:280:12 | [post] o2b |
@@ -646,8 +646,8 @@ localStep
| main.rs:441:9:441:20 | default_name | main.rs:441:9:441:20 | default_name |
| main.rs:441:24:441:33 | [post] receiver for source(...) | main.rs:441:24:441:33 | [post] source(...) |
| main.rs:441:24:441:33 | source(...) | main.rs:441:24:441:33 | receiver for source(...) |
| main.rs:441:24:441:45 | ... .to_string(...) | main.rs:441:9:441:20 | default_name |
| main.rs:441:24:441:45 | ... .to_string(...) | main.rs:442:9:442:20 | SSA phi read(default_name) |
| main.rs:441:24:441:45 | ... .to_string() | main.rs:441:9:441:20 | default_name |
| main.rs:441:24:441:45 | ... .to_string() | main.rs:442:9:442:20 | SSA phi read(default_name) |
| main.rs:442:5:448:5 | for ... in ... { ... } | main.rs:440:75:449:1 | { ... } |
| main.rs:442:9:442:20 | SSA phi read(default_name) | main.rs:444:41:444:67 | default_name |
| main.rs:442:10:442:13 | [SSA] cond | main.rs:443:12:443:15 | cond |
@@ -692,7 +692,7 @@ localStep
| main.rs:468:13:468:13 | [post] receiver for a | main.rs:468:13:468:13 | [post] a |
| main.rs:468:13:468:13 | a | main.rs:468:13:468:13 | receiver for a |
| main.rs:468:13:468:13 | a | main.rs:472:10:472:10 | a |
| main.rs:468:13:468:25 | a.to_string(...) | main.rs:468:9:468:9 | b |
| main.rs:468:13:468:25 | a.to_string() | main.rs:468:9:468:9 | b |
| main.rs:469:9:469:9 | [SSA] c | main.rs:474:10:474:10 | c |
| main.rs:469:9:469:9 | c | main.rs:469:9:469:9 | [SSA] c |
| main.rs:469:9:469:9 | c | main.rs:469:9:469:9 | c |
@@ -700,9 +700,9 @@ localStep
| main.rs:469:13:469:13 | [post] receiver for b | main.rs:469:13:469:13 | [post] b |
| main.rs:469:13:469:13 | b | main.rs:469:13:469:13 | receiver for b |
| main.rs:469:13:469:13 | b | main.rs:470:19:470:19 | b |
| main.rs:469:13:469:28 | [post] receiver for b.parse(...) | main.rs:469:13:469:28 | [post] b.parse(...) |
| main.rs:469:13:469:28 | b.parse(...) | main.rs:469:13:469:28 | receiver for b.parse(...) |
| main.rs:469:13:469:37 | ... .unwrap(...) | main.rs:469:9:469:9 | c |
| main.rs:469:13:469:28 | [post] receiver for b.parse() | main.rs:469:13:469:28 | [post] b.parse() |
| main.rs:469:13:469:28 | b.parse() | main.rs:469:13:469:28 | receiver for b.parse() |
| main.rs:469:13:469:37 | ... .unwrap() | main.rs:469:9:469:9 | c |
| main.rs:470:9:470:9 | [SSA] d | main.rs:475:10:475:10 | d |
| main.rs:470:9:470:9 | d | main.rs:470:9:470:9 | [SSA] d |
| main.rs:470:9:470:9 | d | main.rs:470:9:470:9 | d |
@@ -710,9 +710,9 @@ localStep
| main.rs:470:19:470:19 | [post] receiver for b | main.rs:470:19:470:19 | [post] b |
| main.rs:470:19:470:19 | b | main.rs:470:19:470:19 | receiver for b |
| main.rs:470:19:470:19 | b | main.rs:473:17:473:17 | b |
| main.rs:470:19:470:27 | [post] receiver for b.parse(...) | main.rs:470:19:470:27 | [post] b.parse(...) |
| main.rs:470:19:470:27 | b.parse(...) | main.rs:470:19:470:27 | receiver for b.parse(...) |
| main.rs:470:19:470:36 | ... .unwrap(...) | main.rs:470:9:470:9 | d |
| main.rs:470:19:470:27 | [post] receiver for b.parse() | main.rs:470:19:470:27 | [post] b.parse() |
| main.rs:470:19:470:27 | b.parse() | main.rs:470:19:470:27 | receiver for b.parse() |
| main.rs:470:19:470:36 | ... .unwrap() | main.rs:470:9:470:9 | d |
| main.rs:479:9:479:10 | [SSA] vs | main.rs:481:10:481:11 | vs |
| main.rs:479:9:479:10 | vs | main.rs:479:9:479:10 | [SSA] vs |
| main.rs:479:9:479:10 | vs | main.rs:479:9:479:10 | vs |
@@ -723,16 +723,16 @@ localStep
| main.rs:482:11:482:12 | [post] vs | main.rs:483:11:483:12 | vs |
| main.rs:482:11:482:12 | vs | main.rs:482:11:482:12 | receiver for vs |
| main.rs:482:11:482:12 | vs | main.rs:483:11:483:12 | vs |
| main.rs:482:11:482:19 | [post] receiver for vs.iter(...) | main.rs:482:11:482:19 | [post] vs.iter(...) |
| main.rs:482:11:482:19 | vs.iter(...) | main.rs:482:11:482:19 | receiver for vs.iter(...) |
| main.rs:482:11:482:26 | ... .next(...) | main.rs:482:11:482:26 | receiver for ... .next(...) |
| main.rs:482:11:482:26 | [post] receiver for ... .next(...) | main.rs:482:11:482:26 | [post] ... .next(...) |
| main.rs:482:11:482:19 | [post] receiver for vs.iter() | main.rs:482:11:482:19 | [post] vs.iter() |
| main.rs:482:11:482:19 | vs.iter() | main.rs:482:11:482:19 | receiver for vs.iter() |
| main.rs:482:11:482:26 | ... .next() | main.rs:482:11:482:26 | receiver for ... .next() |
| main.rs:482:11:482:26 | [post] receiver for ... .next() | main.rs:482:11:482:26 | [post] ... .next() |
| main.rs:483:11:483:12 | [post] receiver for vs | main.rs:483:11:483:12 | [post] vs |
| main.rs:483:11:483:12 | [post] vs | main.rs:485:14:485:15 | vs |
| main.rs:483:11:483:12 | vs | main.rs:483:11:483:12 | receiver for vs |
| main.rs:483:11:483:12 | vs | main.rs:485:14:485:15 | vs |
| main.rs:483:11:483:19 | [post] receiver for vs.iter(...) | main.rs:483:11:483:19 | [post] vs.iter(...) |
| main.rs:483:11:483:19 | vs.iter(...) | main.rs:483:11:483:19 | receiver for vs.iter(...) |
| main.rs:483:11:483:19 | [post] receiver for vs.iter() | main.rs:483:11:483:19 | [post] vs.iter() |
| main.rs:483:11:483:19 | vs.iter() | main.rs:483:11:483:19 | receiver for vs.iter() |
| main.rs:483:11:483:26 | ... .nth(...) | main.rs:483:11:483:26 | receiver for ... .nth(...) |
| main.rs:483:11:483:26 | [post] receiver for ... .nth(...) | main.rs:483:11:483:26 | [post] ... .nth(...) |
| main.rs:485:9:485:9 | [SSA] v | main.rs:486:14:486:14 | v |
@@ -753,9 +753,9 @@ localStep
| main.rs:492:27:492:28 | [post] vs | main.rs:497:5:497:6 | vs |
| main.rs:492:27:492:28 | vs | main.rs:492:27:492:28 | receiver for vs |
| main.rs:492:27:492:28 | vs | main.rs:497:5:497:6 | vs |
| main.rs:492:27:492:35 | [post] receiver for vs.iter(...) | main.rs:492:27:492:35 | [post] vs.iter(...) |
| main.rs:492:27:492:35 | vs.iter(...) | main.rs:492:27:492:35 | receiver for vs.iter(...) |
| main.rs:492:27:492:45 | ... .collect(...) | main.rs:492:9:492:11 | vs2 |
| main.rs:492:27:492:35 | [post] receiver for vs.iter() | main.rs:492:27:492:35 | [post] vs.iter() |
| main.rs:492:27:492:35 | vs.iter() | main.rs:492:27:492:35 | receiver for vs.iter() |
| main.rs:492:27:492:45 | ... .collect() | main.rs:492:9:492:11 | vs2 |
| main.rs:493:10:493:10 | [SSA] v | main.rs:494:14:494:14 | v |
| main.rs:493:10:493:10 | v | main.rs:493:10:493:10 | [SSA] v |
| main.rs:493:10:493:10 | v | main.rs:493:10:493:10 | v |
@@ -763,8 +763,8 @@ localStep
| main.rs:497:5:497:6 | [post] vs | main.rs:498:5:498:6 | vs |
| main.rs:497:5:497:6 | vs | main.rs:497:5:497:6 | receiver for vs |
| main.rs:497:5:497:6 | vs | main.rs:498:5:498:6 | vs |
| main.rs:497:5:497:13 | [post] receiver for vs.iter(...) | main.rs:497:5:497:13 | [post] vs.iter(...) |
| main.rs:497:5:497:13 | vs.iter(...) | main.rs:497:5:497:13 | receiver for vs.iter(...) |
| main.rs:497:5:497:13 | [post] receiver for vs.iter() | main.rs:497:5:497:13 | [post] vs.iter() |
| main.rs:497:5:497:13 | vs.iter() | main.rs:497:5:497:13 | receiver for vs.iter() |
| main.rs:497:20:497:20 | ... | main.rs:497:20:497:20 | x |
| main.rs:497:20:497:20 | [SSA] x | main.rs:497:29:497:29 | x |
| main.rs:497:20:497:20 | x | main.rs:497:20:497:20 | [SSA] x |
@@ -773,8 +773,8 @@ localStep
| main.rs:498:5:498:6 | [post] vs | main.rs:500:14:500:15 | vs |
| main.rs:498:5:498:6 | vs | main.rs:498:5:498:6 | receiver for vs |
| main.rs:498:5:498:6 | vs | main.rs:500:14:500:15 | vs |
| main.rs:498:5:498:13 | [post] receiver for vs.iter(...) | main.rs:498:5:498:13 | [post] vs.iter(...) |
| main.rs:498:5:498:13 | vs.iter(...) | main.rs:498:5:498:13 | receiver for vs.iter(...) |
| main.rs:498:5:498:13 | [post] receiver for vs.iter() | main.rs:498:5:498:13 | [post] vs.iter() |
| main.rs:498:5:498:13 | vs.iter() | main.rs:498:5:498:13 | receiver for vs.iter() |
| main.rs:498:25:498:25 | ... | main.rs:498:25:498:25 | x |
| main.rs:498:25:498:25 | [SSA] x | main.rs:498:34:498:34 | x |
| main.rs:498:25:498:25 | x | main.rs:498:25:498:25 | [SSA] x |
@@ -800,17 +800,17 @@ localStep
| main.rs:507:11:507:16 | vs_mut | main.rs:507:11:507:16 | receiver for vs_mut |
| main.rs:507:11:507:16 | vs_mut | main.rs:508:11:508:16 | [SSA] vs_mut |
| main.rs:507:11:507:16 | vs_mut | main.rs:508:11:508:16 | vs_mut |
| main.rs:507:11:507:23 | [post] receiver for vs_mut.iter(...) | main.rs:507:11:507:23 | [post] vs_mut.iter(...) |
| main.rs:507:11:507:23 | vs_mut.iter(...) | main.rs:507:11:507:23 | receiver for vs_mut.iter(...) |
| main.rs:507:11:507:30 | ... .next(...) | main.rs:507:11:507:30 | receiver for ... .next(...) |
| main.rs:507:11:507:30 | [post] receiver for ... .next(...) | main.rs:507:11:507:30 | [post] ... .next(...) |
| main.rs:507:11:507:23 | [post] receiver for vs_mut.iter() | main.rs:507:11:507:23 | [post] vs_mut.iter() |
| main.rs:507:11:507:23 | vs_mut.iter() | main.rs:507:11:507:23 | receiver for vs_mut.iter() |
| main.rs:507:11:507:30 | ... .next() | main.rs:507:11:507:30 | receiver for ... .next() |
| main.rs:507:11:507:30 | [post] receiver for ... .next() | main.rs:507:11:507:30 | [post] ... .next() |
| main.rs:508:11:508:16 | [SSA] vs_mut | main.rs:510:19:510:24 | vs_mut |
| main.rs:508:11:508:16 | [post] receiver for vs_mut | main.rs:508:11:508:16 | [post] vs_mut |
| main.rs:508:11:508:16 | [post] vs_mut | main.rs:510:19:510:24 | vs_mut |
| main.rs:508:11:508:16 | vs_mut | main.rs:508:11:508:16 | receiver for vs_mut |
| main.rs:508:11:508:16 | vs_mut | main.rs:510:19:510:24 | vs_mut |
| main.rs:508:11:508:23 | [post] receiver for vs_mut.iter(...) | main.rs:508:11:508:23 | [post] vs_mut.iter(...) |
| main.rs:508:11:508:23 | vs_mut.iter(...) | main.rs:508:11:508:23 | receiver for vs_mut.iter(...) |
| main.rs:508:11:508:23 | [post] receiver for vs_mut.iter() | main.rs:508:11:508:23 | [post] vs_mut.iter() |
| main.rs:508:11:508:23 | vs_mut.iter() | main.rs:508:11:508:23 | receiver for vs_mut.iter() |
| main.rs:508:11:508:30 | ... .nth(...) | main.rs:508:11:508:30 | receiver for ... .nth(...) |
| main.rs:508:11:508:30 | [post] receiver for ... .nth(...) | main.rs:508:11:508:30 | [post] ... .nth(...) |
| main.rs:510:5:512:5 | for ... in ... { ... } | main.rs:478:16:513:1 | { ... } |
@@ -3037,13 +3037,13 @@ readStep
| main.rs:470:19:470:19 | b | &ref | main.rs:470:19:470:19 | receiver for b |
| main.rs:481:10:481:11 | vs | element | main.rs:481:10:481:14 | vs[0] |
| main.rs:482:11:482:12 | vs | &ref | main.rs:482:11:482:12 | receiver for vs |
| main.rs:482:11:482:35 | ... .unwrap(...) | &ref | main.rs:482:10:482:35 | * ... |
| main.rs:482:11:482:35 | ... .unwrap() | &ref | main.rs:482:10:482:35 | * ... |
| main.rs:483:11:483:12 | vs | &ref | main.rs:483:11:483:12 | receiver for vs |
| main.rs:483:11:483:35 | ... .unwrap(...) | &ref | main.rs:483:10:483:35 | * ... |
| main.rs:483:11:483:35 | ... .unwrap() | &ref | main.rs:483:10:483:35 | * ... |
| main.rs:485:14:485:15 | vs | element | main.rs:485:9:485:9 | v |
| main.rs:488:9:488:10 | &... | &ref | main.rs:488:10:488:10 | v |
| main.rs:488:15:488:16 | vs | &ref | main.rs:488:15:488:16 | receiver for vs |
| main.rs:488:15:488:23 | vs.iter(...) | element | main.rs:488:9:488:10 | &... |
| main.rs:488:15:488:23 | vs.iter() | element | main.rs:488:9:488:10 | &... |
| main.rs:492:27:492:28 | vs | &ref | main.rs:492:27:492:28 | receiver for vs |
| main.rs:493:9:493:10 | &... | &ref | main.rs:493:10:493:10 | v |
| main.rs:493:15:493:17 | vs2 | element | main.rs:493:9:493:10 | &... |
@@ -3052,15 +3052,15 @@ readStep
| main.rs:498:5:498:6 | vs | &ref | main.rs:498:5:498:6 | receiver for vs |
| main.rs:498:34:498:34 | x | &ref | main.rs:498:33:498:34 | * ... |
| main.rs:500:14:500:15 | vs | &ref | main.rs:500:14:500:15 | receiver for vs |
| main.rs:500:14:500:27 | vs.into_iter(...) | element | main.rs:500:9:500:9 | v |
| main.rs:500:14:500:27 | vs.into_iter() | element | main.rs:500:9:500:9 | v |
| main.rs:506:10:506:15 | vs_mut | element | main.rs:506:10:506:18 | vs_mut[0] |
| main.rs:507:11:507:16 | vs_mut | &ref | main.rs:507:11:507:16 | receiver for vs_mut |
| main.rs:507:11:507:39 | ... .unwrap(...) | &ref | main.rs:507:10:507:39 | * ... |
| main.rs:507:11:507:39 | ... .unwrap() | &ref | main.rs:507:10:507:39 | * ... |
| main.rs:508:11:508:16 | vs_mut | &ref | main.rs:508:11:508:16 | receiver for vs_mut |
| main.rs:508:11:508:39 | ... .unwrap(...) | &ref | main.rs:508:10:508:39 | * ... |
| main.rs:508:11:508:39 | ... .unwrap() | &ref | main.rs:508:10:508:39 | * ... |
| main.rs:510:9:510:14 | &mut ... | &ref | main.rs:510:14:510:14 | v |
| main.rs:510:19:510:24 | vs_mut | &ref | main.rs:510:19:510:24 | receiver for vs_mut |
| main.rs:510:19:510:35 | vs_mut.iter_mut(...) | element | main.rs:510:9:510:14 | &mut ... |
| main.rs:510:19:510:35 | vs_mut.iter_mut() | element | main.rs:510:9:510:14 | &mut ... |
| main.rs:524:11:524:15 | c_ref | &ref | main.rs:524:10:524:15 | * ... |
| main.rs:531:10:531:10 | a | &ref | main.rs:531:10:531:10 | receiver for a |
| main.rs:537:10:537:10 | b | &ref | main.rs:537:10:537:10 | receiver for b |

View File

@@ -95,7 +95,7 @@ edges
| main.rs:229:11:229:12 | s1 [Some] | main.rs:230:9:230:15 | Some(...) [Some] | provenance | |
| main.rs:230:9:230:15 | Some(...) [Some] | main.rs:230:14:230:14 | n | provenance | |
| main.rs:230:14:230:14 | n | main.rs:230:25:230:25 | n | provenance | |
| main.rs:240:9:240:10 | s1 [Some] | main.rs:241:10:241:20 | s1.unwrap(...) | provenance | MaD:2 |
| main.rs:240:9:240:10 | s1 [Some] | main.rs:241:10:241:20 | s1.unwrap() | provenance | MaD:2 |
| main.rs:240:14:240:29 | Some(...) [Some] | main.rs:240:9:240:10 | s1 [Some] | provenance | |
| main.rs:240:19:240:28 | source(...) | main.rs:240:14:240:29 | Some(...) [Some] | provenance | |
| main.rs:245:9:245:10 | s1 [Some] | main.rs:246:10:246:24 | s1.unwrap_or(...) | provenance | MaD:4 |
@@ -112,16 +112,16 @@ edges
| main.rs:263:9:263:10 | i1 | main.rs:264:10:264:11 | i1 | provenance | |
| main.rs:263:14:263:15 | s1 [Some] | main.rs:263:14:263:16 | TryExpr | provenance | |
| main.rs:263:14:263:16 | TryExpr | main.rs:263:9:263:10 | i1 | provenance | |
| main.rs:270:9:270:10 | r1 [Ok] | main.rs:271:29:271:35 | r1.ok(...) [Some] | provenance | MaD:10 |
| main.rs:270:9:270:10 | r1 [Ok] | main.rs:271:29:271:35 | r1.ok() [Some] | provenance | MaD:10 |
| main.rs:270:33:270:46 | Ok(...) [Ok] | main.rs:270:9:270:10 | r1 [Ok] | provenance | |
| main.rs:270:36:270:45 | source(...) | main.rs:270:33:270:46 | Ok(...) [Ok] | provenance | |
| main.rs:271:9:271:11 | o1a [Some] | main.rs:273:10:273:21 | o1a.unwrap(...) | provenance | MaD:2 |
| main.rs:271:29:271:35 | r1.ok(...) [Some] | main.rs:271:9:271:11 | o1a [Some] | provenance | |
| main.rs:276:9:276:10 | r2 [Err] | main.rs:278:29:278:36 | r2.err(...) [Some] | provenance | MaD:7 |
| main.rs:271:9:271:11 | o1a [Some] | main.rs:273:10:273:21 | o1a.unwrap() | provenance | MaD:2 |
| main.rs:271:29:271:35 | r1.ok() [Some] | main.rs:271:9:271:11 | o1a [Some] | provenance | |
| main.rs:276:9:276:10 | r2 [Err] | main.rs:278:29:278:36 | r2.err() [Some] | provenance | MaD:7 |
| main.rs:276:33:276:47 | Err(...) [Err] | main.rs:276:9:276:10 | r2 [Err] | provenance | |
| main.rs:276:37:276:46 | source(...) | main.rs:276:33:276:47 | Err(...) [Err] | provenance | |
| main.rs:278:9:278:11 | o2b [Some] | main.rs:280:10:280:21 | o2b.unwrap(...) | provenance | MaD:2 |
| main.rs:278:29:278:36 | r2.err(...) [Some] | main.rs:278:9:278:11 | o2b [Some] | provenance | |
| main.rs:278:9:278:11 | o2b [Some] | main.rs:280:10:280:21 | o2b.unwrap() | provenance | MaD:2 |
| main.rs:278:29:278:36 | r2.err() [Some] | main.rs:278:9:278:11 | o2b [Some] | provenance | |
| main.rs:284:9:284:10 | s1 [Ok] | main.rs:287:14:287:15 | s1 [Ok] | provenance | |
| main.rs:284:32:284:45 | Ok(...) [Ok] | main.rs:284:9:284:10 | s1 [Ok] | provenance | |
| main.rs:284:35:284:44 | source(...) | main.rs:284:32:284:45 | Ok(...) [Ok] | provenance | |
@@ -342,7 +342,7 @@ nodes
| main.rs:240:9:240:10 | s1 [Some] | semmle.label | s1 [Some] |
| main.rs:240:14:240:29 | Some(...) [Some] | semmle.label | Some(...) [Some] |
| main.rs:240:19:240:28 | source(...) | semmle.label | source(...) |
| main.rs:241:10:241:20 | s1.unwrap(...) | semmle.label | s1.unwrap(...) |
| main.rs:241:10:241:20 | s1.unwrap() | semmle.label | s1.unwrap() |
| main.rs:245:9:245:10 | s1 [Some] | semmle.label | s1 [Some] |
| main.rs:245:14:245:29 | Some(...) [Some] | semmle.label | Some(...) [Some] |
| main.rs:245:19:245:28 | source(...) | semmle.label | source(...) |
@@ -366,14 +366,14 @@ nodes
| main.rs:270:33:270:46 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] |
| main.rs:270:36:270:45 | source(...) | semmle.label | source(...) |
| main.rs:271:9:271:11 | o1a [Some] | semmle.label | o1a [Some] |
| main.rs:271:29:271:35 | r1.ok(...) [Some] | semmle.label | r1.ok(...) [Some] |
| main.rs:273:10:273:21 | o1a.unwrap(...) | semmle.label | o1a.unwrap(...) |
| main.rs:271:29:271:35 | r1.ok() [Some] | semmle.label | r1.ok() [Some] |
| main.rs:273:10:273:21 | o1a.unwrap() | semmle.label | o1a.unwrap() |
| main.rs:276:9:276:10 | r2 [Err] | semmle.label | r2 [Err] |
| main.rs:276:33:276:47 | Err(...) [Err] | semmle.label | Err(...) [Err] |
| main.rs:276:37:276:46 | source(...) | semmle.label | source(...) |
| main.rs:278:9:278:11 | o2b [Some] | semmle.label | o2b [Some] |
| main.rs:278:29:278:36 | r2.err(...) [Some] | semmle.label | r2.err(...) [Some] |
| main.rs:280:10:280:21 | o2b.unwrap(...) | semmle.label | o2b.unwrap(...) |
| main.rs:278:29:278:36 | r2.err() [Some] | semmle.label | r2.err() [Some] |
| main.rs:280:10:280:21 | o2b.unwrap() | semmle.label | o2b.unwrap() |
| main.rs:284:9:284:10 | s1 [Ok] | semmle.label | s1 [Ok] |
| main.rs:284:32:284:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] |
| main.rs:284:35:284:44 | source(...) | semmle.label | source(...) |
@@ -528,14 +528,14 @@ testFailures
| main.rs:204:18:204:18 | x | main.rs:198:27:198:36 | source(...) | main.rs:204:18:204:18 | x | $@ | main.rs:198:27:198:36 | source(...) | source(...) |
| main.rs:217:33:217:33 | n | main.rs:214:27:214:36 | source(...) | main.rs:217:33:217:33 | n | $@ | main.rs:214:27:214:36 | source(...) | source(...) |
| main.rs:230:25:230:25 | n | main.rs:227:19:227:28 | source(...) | main.rs:230:25:230:25 | n | $@ | main.rs:227:19:227:28 | source(...) | source(...) |
| main.rs:241:10:241:20 | s1.unwrap(...) | main.rs:240:19:240:28 | source(...) | main.rs:241:10:241:20 | s1.unwrap(...) | $@ | main.rs:240:19:240:28 | source(...) | source(...) |
| main.rs:241:10:241:20 | s1.unwrap() | main.rs:240:19:240:28 | source(...) | main.rs:241:10:241:20 | s1.unwrap() | $@ | main.rs:240:19:240:28 | source(...) | source(...) |
| main.rs:246:10:246:24 | s1.unwrap_or(...) | main.rs:245:19:245:28 | source(...) | main.rs:246:10:246:24 | s1.unwrap_or(...) | $@ | main.rs:245:19:245:28 | source(...) | source(...) |
| main.rs:249:10:249:33 | s2.unwrap_or(...) | main.rs:249:23:249:32 | source(...) | main.rs:249:10:249:33 | s2.unwrap_or(...) | $@ | main.rs:249:23:249:32 | source(...) | source(...) |
| main.rs:254:10:254:32 | s1.unwrap_or_else(...) | main.rs:253:19:253:28 | source(...) | main.rs:254:10:254:32 | s1.unwrap_or_else(...) | $@ | main.rs:253:19:253:28 | source(...) | source(...) |
| main.rs:257:10:257:41 | s2.unwrap_or_else(...) | main.rs:257:31:257:40 | source(...) | main.rs:257:10:257:41 | s2.unwrap_or_else(...) | $@ | main.rs:257:31:257:40 | source(...) | source(...) |
| main.rs:264:10:264:11 | i1 | main.rs:261:19:261:28 | source(...) | main.rs:264:10:264:11 | i1 | $@ | main.rs:261:19:261:28 | source(...) | source(...) |
| main.rs:273:10:273:21 | o1a.unwrap(...) | main.rs:270:36:270:45 | source(...) | main.rs:273:10:273:21 | o1a.unwrap(...) | $@ | main.rs:270:36:270:45 | source(...) | source(...) |
| main.rs:280:10:280:21 | o2b.unwrap(...) | main.rs:276:37:276:46 | source(...) | main.rs:280:10:280:21 | o2b.unwrap(...) | $@ | main.rs:276:37:276:46 | source(...) | source(...) |
| main.rs:273:10:273:21 | o1a.unwrap() | main.rs:270:36:270:45 | source(...) | main.rs:273:10:273:21 | o1a.unwrap() | $@ | main.rs:270:36:270:45 | source(...) | source(...) |
| main.rs:280:10:280:21 | o2b.unwrap() | main.rs:276:37:276:46 | source(...) | main.rs:280:10:280:21 | o2b.unwrap() | $@ | main.rs:276:37:276:46 | source(...) | source(...) |
| main.rs:289:10:289:11 | i1 | main.rs:284:35:284:44 | source(...) | main.rs:289:10:289:11 | i1 | $@ | main.rs:284:35:284:44 | source(...) | source(...) |
| main.rs:298:10:298:22 | s1.expect(...) | main.rs:297:35:297:44 | source(...) | main.rs:298:10:298:22 | s1.expect(...) | $@ | main.rs:297:35:297:44 | source(...) | source(...) |
| main.rs:303:10:303:26 | s2.expect_err(...) | main.rs:301:36:301:45 | source(...) | main.rs:303:10:303:26 | s2.expect_err(...) | $@ | main.rs:301:36:301:45 | source(...) | source(...) |

View File

@@ -7,34 +7,34 @@ models
| 6 | Summary: lang:core; crate::ptr::read; Argument[0].Reference; ReturnValue; value |
| 7 | Summary: lang:core; crate::ptr::write; Argument[1]; Argument[0].Reference; value |
edges
| main.rs:12:9:12:9 | a [Some] | main.rs:13:10:13:19 | a.unwrap(...) | provenance | MaD:2 |
| main.rs:12:9:12:9 | a [Some] | main.rs:14:13:14:21 | a.clone(...) [Some] | provenance | MaD:1 |
| main.rs:12:9:12:9 | a [Some] | main.rs:14:13:14:21 | a.clone(...) [Some] | provenance | generated |
| main.rs:12:9:12:9 | a [Some] | main.rs:13:10:13:19 | a.unwrap() | provenance | MaD:2 |
| main.rs:12:9:12:9 | a [Some] | main.rs:14:13:14:21 | a.clone() [Some] | provenance | MaD:1 |
| main.rs:12:9:12:9 | a [Some] | main.rs:14:13:14:21 | a.clone() [Some] | provenance | generated |
| main.rs:12:13:12:28 | Some(...) [Some] | main.rs:12:9:12:9 | a [Some] | provenance | |
| main.rs:12:18:12:27 | source(...) | main.rs:12:13:12:28 | Some(...) [Some] | provenance | |
| main.rs:14:9:14:9 | b [Some] | main.rs:15:10:15:19 | b.unwrap(...) | provenance | MaD:2 |
| main.rs:14:13:14:21 | a.clone(...) [Some] | main.rs:14:9:14:9 | b [Some] | provenance | |
| main.rs:19:9:19:9 | a [Ok] | main.rs:20:10:20:19 | a.unwrap(...) | provenance | MaD:5 |
| main.rs:19:9:19:9 | a [Ok] | main.rs:21:13:21:21 | a.clone(...) [Ok] | provenance | MaD:4 |
| main.rs:19:9:19:9 | a [Ok] | main.rs:21:13:21:21 | a.clone(...) [Ok] | provenance | generated |
| main.rs:14:9:14:9 | b [Some] | main.rs:15:10:15:19 | b.unwrap() | provenance | MaD:2 |
| main.rs:14:13:14:21 | a.clone() [Some] | main.rs:14:9:14:9 | b [Some] | provenance | |
| main.rs:19:9:19:9 | a [Ok] | main.rs:20:10:20:19 | a.unwrap() | provenance | MaD:5 |
| main.rs:19:9:19:9 | a [Ok] | main.rs:21:13:21:21 | a.clone() [Ok] | provenance | MaD:4 |
| main.rs:19:9:19:9 | a [Ok] | main.rs:21:13:21:21 | a.clone() [Ok] | provenance | generated |
| main.rs:19:31:19:44 | Ok(...) [Ok] | main.rs:19:9:19:9 | a [Ok] | provenance | |
| main.rs:19:34:19:43 | source(...) | main.rs:19:31:19:44 | Ok(...) [Ok] | provenance | |
| main.rs:21:9:21:9 | b [Ok] | main.rs:22:10:22:19 | b.unwrap(...) | provenance | MaD:5 |
| main.rs:21:13:21:21 | a.clone(...) [Ok] | main.rs:21:9:21:9 | b [Ok] | provenance | |
| main.rs:21:9:21:9 | b [Ok] | main.rs:22:10:22:19 | b.unwrap() | provenance | MaD:5 |
| main.rs:21:13:21:21 | a.clone() [Ok] | main.rs:21:9:21:9 | b [Ok] | provenance | |
| 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:21 | a.clone(...) | provenance | generated |
| main.rs:26:9:26:9 | a | main.rs:28:13:28:21 | a.clone() | provenance | generated |
| 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:21 | a.clone(...) | main.rs:28:9:28:9 | b | provenance | |
| main.rs:28:13:28:21 | a.clone() | main.rs:28:9:28:9 | b | provenance | |
| main.rs:41:13:41:13 | w [Wrapper] | main.rs:42:15:42:15 | w [Wrapper] | provenance | |
| main.rs:41:17:41:41 | Wrapper {...} [Wrapper] | main.rs:41:13:41:13 | w [Wrapper] | provenance | |
| main.rs:41:30:41:39 | source(...) | main.rs:41:17:41:41 | Wrapper {...} [Wrapper] | provenance | |
| main.rs:42:15:42:15 | w [Wrapper] | main.rs:43:13:43:28 | Wrapper {...} [Wrapper] | provenance | |
| main.rs:42:15:42:15 | w [Wrapper] | main.rs:45:17:45:25 | w.clone(...) [Wrapper] | provenance | generated |
| main.rs:42:15:42:15 | w [Wrapper] | main.rs:45:17:45:25 | w.clone() [Wrapper] | provenance | generated |
| main.rs:43:13:43:28 | Wrapper {...} [Wrapper] | main.rs:43:26:43:26 | n | provenance | |
| main.rs:43:26:43:26 | n | main.rs:43:38:43:38 | n | provenance | |
| main.rs:45:13:45:13 | u [Wrapper] | main.rs:46:15:46:15 | u [Wrapper] | provenance | |
| main.rs:45:17:45:25 | w.clone(...) [Wrapper] | main.rs:45:13:45:13 | u [Wrapper] | provenance | |
| main.rs:45:17:45:25 | w.clone() [Wrapper] | main.rs:45:13:45:13 | u [Wrapper] | provenance | |
| main.rs:46:15:46:15 | u [Wrapper] | main.rs:47:13:47:28 | Wrapper {...} [Wrapper] | provenance | |
| main.rs:47:13:47:28 | Wrapper {...} [Wrapper] | main.rs:47:26:47:26 | n | provenance | |
| main.rs:47:26:47:26 | n | main.rs:47:38:47:38 | n | provenance | |
@@ -55,22 +55,22 @@ 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] |
| main.rs:12:18:12:27 | source(...) | semmle.label | source(...) |
| main.rs:13:10:13:19 | a.unwrap(...) | semmle.label | a.unwrap(...) |
| main.rs:13:10:13:19 | a.unwrap() | semmle.label | a.unwrap() |
| main.rs:14:9:14:9 | b [Some] | semmle.label | b [Some] |
| main.rs:14:13:14:21 | a.clone(...) [Some] | semmle.label | a.clone(...) [Some] |
| main.rs:15:10:15:19 | b.unwrap(...) | semmle.label | b.unwrap(...) |
| main.rs:14:13:14:21 | a.clone() [Some] | semmle.label | a.clone() [Some] |
| main.rs:15:10:15:19 | b.unwrap() | semmle.label | b.unwrap() |
| main.rs:19:9:19:9 | a [Ok] | semmle.label | a [Ok] |
| main.rs:19:31:19:44 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] |
| main.rs:19:34:19:43 | source(...) | semmle.label | source(...) |
| main.rs:20:10:20:19 | a.unwrap(...) | semmle.label | a.unwrap(...) |
| main.rs:20:10:20:19 | a.unwrap() | semmle.label | a.unwrap() |
| main.rs:21:9:21:9 | b [Ok] | semmle.label | b [Ok] |
| main.rs:21:13:21:21 | a.clone(...) [Ok] | semmle.label | a.clone(...) [Ok] |
| main.rs:22:10:22:19 | b.unwrap(...) | semmle.label | b.unwrap(...) |
| main.rs:21:13:21:21 | a.clone() [Ok] | semmle.label | a.clone() [Ok] |
| main.rs:22:10:22:19 | b.unwrap() | semmle.label | b.unwrap() |
| main.rs:26:9:26:9 | a | semmle.label | a |
| main.rs:26:13:26:22 | source(...) | semmle.label | source(...) |
| main.rs:27:10:27:10 | a | semmle.label | a |
| main.rs:28:9:28:9 | b | semmle.label | b |
| main.rs:28:13:28:21 | a.clone(...) | semmle.label | a.clone(...) |
| main.rs:28:13:28:21 | a.clone() | semmle.label | a.clone() |
| main.rs:29:10:29:10 | b | semmle.label | b |
| main.rs:41:13:41:13 | w [Wrapper] | semmle.label | w [Wrapper] |
| main.rs:41:17:41:41 | Wrapper {...} [Wrapper] | semmle.label | Wrapper {...} [Wrapper] |
@@ -80,7 +80,7 @@ nodes
| main.rs:43:26:43:26 | n | semmle.label | n |
| main.rs:43:38:43:38 | n | semmle.label | n |
| main.rs:45:13:45:13 | u [Wrapper] | semmle.label | u [Wrapper] |
| main.rs:45:17:45:25 | w.clone(...) [Wrapper] | semmle.label | w.clone(...) [Wrapper] |
| main.rs:45:17:45:25 | w.clone() [Wrapper] | semmle.label | w.clone() [Wrapper] |
| main.rs:46:15:46:15 | u [Wrapper] | semmle.label | u [Wrapper] |
| main.rs:47:13:47:28 | Wrapper {...} [Wrapper] | semmle.label | Wrapper {...} [Wrapper] |
| main.rs:47:26:47:26 | n | semmle.label | n |
@@ -103,10 +103,10 @@ nodes
subpaths
testFailures
#select
| main.rs:13:10:13:19 | a.unwrap(...) | main.rs:12:18:12:27 | source(...) | main.rs:13:10:13:19 | a.unwrap(...) | $@ | main.rs:12:18:12:27 | source(...) | source(...) |
| main.rs:15:10:15:19 | b.unwrap(...) | main.rs:12:18:12:27 | source(...) | main.rs:15:10:15:19 | b.unwrap(...) | $@ | main.rs:12:18:12:27 | source(...) | source(...) |
| main.rs:20:10:20:19 | a.unwrap(...) | main.rs:19:34:19:43 | source(...) | main.rs:20:10:20:19 | a.unwrap(...) | $@ | main.rs:19:34:19:43 | source(...) | source(...) |
| main.rs:22:10:22:19 | b.unwrap(...) | main.rs:19:34:19:43 | source(...) | main.rs:22:10:22:19 | b.unwrap(...) | $@ | main.rs:19:34:19:43 | source(...) | source(...) |
| main.rs:13:10:13:19 | a.unwrap() | main.rs:12:18:12:27 | source(...) | main.rs:13:10:13:19 | a.unwrap() | $@ | main.rs:12:18:12:27 | source(...) | source(...) |
| main.rs:15:10:15:19 | b.unwrap() | main.rs:12:18:12:27 | source(...) | main.rs:15:10:15:19 | b.unwrap() | $@ | main.rs:12:18:12:27 | source(...) | source(...) |
| main.rs:20:10:20:19 | a.unwrap() | main.rs:19:34:19:43 | source(...) | main.rs:20:10:20:19 | a.unwrap() | $@ | main.rs:19:34:19:43 | source(...) | source(...) |
| main.rs:22:10:22:19 | b.unwrap() | main.rs:19:34:19:43 | source(...) | main.rs:22:10:22:19 | b.unwrap() | $@ | main.rs:19:34:19:43 | source(...) | source(...) |
| main.rs:27:10:27:10 | a | main.rs:26:13:26:22 | source(...) | main.rs:27:10:27:10 | a | $@ | main.rs:26:13:26:22 | source(...) | source(...) |
| main.rs:29:10:29:10 | b | main.rs:26:13:26:22 | source(...) | main.rs:29:10:29:10 | b | $@ | main.rs:26:13:26:22 | source(...) | source(...) |
| main.rs:43:38:43:38 | n | main.rs:41:30:41:39 | source(...) | main.rs:43:38:43:38 | n | $@ | main.rs:41:30:41:39 | source(...) | source(...) |

View File

@@ -61,26 +61,26 @@ edges
| main.rs:164:14:164:39 | ...::MyNumber(...) [MyNumber] | main.rs:164:33:164:38 | number | provenance | |
| main.rs:164:33:164:38 | number | main.rs:162:26:166:5 | { ... } | provenance | |
| main.rs:174:13:174:21 | my_number [MyNumber] | main.rs:156:18:156:21 | SelfParam [MyNumber] | provenance | |
| main.rs:174:13:174:21 | my_number [MyNumber] | main.rs:175:14:175:34 | my_number.to_number(...) | provenance | |
| main.rs:174:13:174:21 | my_number [MyNumber] | main.rs:175:14:175:34 | my_number.to_number() | provenance | |
| main.rs:174:25:174:54 | ...::MyNumber(...) [MyNumber] | main.rs:174:13:174:21 | my_number [MyNumber] | provenance | |
| main.rs:174:44:174:53 | source(...) | main.rs:174:25:174:54 | ...::MyNumber(...) [MyNumber] | provenance | |
| main.rs:179:13:179:21 | my_number [MyNumber] | main.rs:180:16:180:24 | my_number [MyNumber] | provenance | |
| main.rs:179:25:179:54 | ...::MyNumber(...) [MyNumber] | main.rs:179:13:179:21 | my_number [MyNumber] | provenance | |
| main.rs:179:44:179:53 | source(...) | main.rs:179:25:179:54 | ...::MyNumber(...) [MyNumber] | provenance | |
| main.rs:180:15:180:24 | &my_number [&ref, MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | provenance | |
| main.rs:180:15:180:24 | &my_number [&ref, MyNumber] | main.rs:180:14:180:31 | ... .get(...) | provenance | |
| main.rs:180:15:180:24 | &my_number [&ref, MyNumber] | main.rs:180:14:180:31 | ... .get() | provenance | |
| main.rs:180:16:180:24 | my_number [MyNumber] | main.rs:180:15:180:24 | &my_number [&ref, MyNumber] | provenance | |
| main.rs:184:13:184:21 | my_number [MyNumber] | main.rs:186:14:186:22 | my_number [MyNumber] | provenance | |
| main.rs:184:25:184:54 | ...::MyNumber(...) [MyNumber] | main.rs:184:13:184:21 | my_number [MyNumber] | provenance | |
| main.rs:184:44:184:53 | source(...) | main.rs:184:25:184:54 | ...::MyNumber(...) [MyNumber] | provenance | |
| main.rs:186:14:186:22 | my_number [MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | provenance | |
| main.rs:186:14:186:22 | my_number [MyNumber] | main.rs:186:14:186:28 | my_number.get(...) | provenance | |
| main.rs:186:14:186:22 | my_number [MyNumber] | main.rs:186:14:186:28 | my_number.get() | provenance | |
| main.rs:190:13:190:21 | my_number [&ref, MyNumber] | main.rs:192:14:192:22 | my_number [&ref, MyNumber] | provenance | |
| main.rs:190:25:190:55 | &... [&ref, MyNumber] | main.rs:190:13:190:21 | my_number [&ref, MyNumber] | provenance | |
| main.rs:190:26:190:55 | ...::MyNumber(...) [MyNumber] | main.rs:190:25:190:55 | &... [&ref, MyNumber] | provenance | |
| main.rs:190:45:190:54 | source(...) | main.rs:190:26:190:55 | ...::MyNumber(...) [MyNumber] | provenance | |
| main.rs:192:14:192:22 | my_number [&ref, MyNumber] | main.rs:156:18:156:21 | SelfParam [MyNumber] | provenance | |
| main.rs:192:14:192:22 | my_number [&ref, MyNumber] | main.rs:192:14:192:34 | my_number.to_number(...) | provenance | |
| main.rs:192:14:192:22 | my_number [&ref, MyNumber] | main.rs:192:14:192:34 | my_number.to_number() | provenance | |
| main.rs:200:29:200:38 | ...: i64 | main.rs:201:14:201:18 | value | provenance | |
| main.rs:201:10:201:10 | [post] n [&ref] | main.rs:200:16:200:26 | ...: ... [Return] [&ref] | provenance | |
| main.rs:201:14:201:18 | value | main.rs:201:10:201:10 | [post] n [&ref] | provenance | |
@@ -106,9 +106,9 @@ edges
| main.rs:234:36:234:45 | source(...) | main.rs:228:37:228:47 | ...: i64 | provenance | |
| main.rs:234:36:234:45 | source(...) | main.rs:234:20:234:33 | [post] &mut my_number [&ref, MyNumber] | provenance | |
| main.rs:235:14:235:22 | my_number [MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | provenance | |
| main.rs:235:14:235:22 | my_number [MyNumber] | main.rs:235:14:235:28 | my_number.get(...) | provenance | |
| main.rs:235:14:235:22 | my_number [MyNumber] | main.rs:235:14:235:28 | my_number.get() | provenance | |
| main.rs:237:14:237:22 | my_number [MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | provenance | |
| main.rs:237:14:237:22 | my_number [MyNumber] | main.rs:237:14:237:28 | my_number.get(...) | provenance | |
| main.rs:237:14:237:22 | my_number [MyNumber] | main.rs:237:14:237:28 | my_number.get() | provenance | |
| main.rs:243:9:243:17 | [post] my_number [MyNumber] | main.rs:244:24:244:32 | my_number [MyNumber] | provenance | |
| main.rs:243:9:243:17 | [post] my_number [MyNumber] | main.rs:246:24:246:32 | my_number [MyNumber] | provenance | |
| main.rs:243:23:243:32 | source(...) | main.rs:223:27:223:37 | ...: i64 | provenance | |
@@ -201,24 +201,24 @@ nodes
| main.rs:174:13:174:21 | my_number [MyNumber] | semmle.label | my_number [MyNumber] |
| main.rs:174:25:174:54 | ...::MyNumber(...) [MyNumber] | semmle.label | ...::MyNumber(...) [MyNumber] |
| main.rs:174:44:174:53 | source(...) | semmle.label | source(...) |
| main.rs:175:14:175:34 | my_number.to_number(...) | semmle.label | my_number.to_number(...) |
| main.rs:175:14:175:34 | my_number.to_number() | semmle.label | my_number.to_number() |
| main.rs:179:13:179:21 | my_number [MyNumber] | semmle.label | my_number [MyNumber] |
| main.rs:179:25:179:54 | ...::MyNumber(...) [MyNumber] | semmle.label | ...::MyNumber(...) [MyNumber] |
| main.rs:179:44:179:53 | source(...) | semmle.label | source(...) |
| main.rs:180:14:180:31 | ... .get(...) | semmle.label | ... .get(...) |
| main.rs:180:14:180:31 | ... .get() | semmle.label | ... .get() |
| main.rs:180:15:180:24 | &my_number [&ref, MyNumber] | semmle.label | &my_number [&ref, MyNumber] |
| main.rs:180:16:180:24 | my_number [MyNumber] | semmle.label | my_number [MyNumber] |
| main.rs:184:13:184:21 | my_number [MyNumber] | semmle.label | my_number [MyNumber] |
| main.rs:184:25:184:54 | ...::MyNumber(...) [MyNumber] | semmle.label | ...::MyNumber(...) [MyNumber] |
| main.rs:184:44:184:53 | source(...) | semmle.label | source(...) |
| main.rs:186:14:186:22 | my_number [MyNumber] | semmle.label | my_number [MyNumber] |
| main.rs:186:14:186:28 | my_number.get(...) | semmle.label | my_number.get(...) |
| main.rs:186:14:186:28 | my_number.get() | semmle.label | my_number.get() |
| main.rs:190:13:190:21 | my_number [&ref, MyNumber] | semmle.label | my_number [&ref, MyNumber] |
| main.rs:190:25:190:55 | &... [&ref, MyNumber] | semmle.label | &... [&ref, MyNumber] |
| main.rs:190:26:190:55 | ...::MyNumber(...) [MyNumber] | semmle.label | ...::MyNumber(...) [MyNumber] |
| main.rs:190:45:190:54 | source(...) | semmle.label | source(...) |
| main.rs:192:14:192:22 | my_number [&ref, MyNumber] | semmle.label | my_number [&ref, MyNumber] |
| main.rs:192:14:192:34 | my_number.to_number(...) | semmle.label | my_number.to_number(...) |
| main.rs:192:14:192:34 | my_number.to_number() | semmle.label | my_number.to_number() |
| main.rs:200:16:200:26 | ...: ... [Return] [&ref] | semmle.label | ...: ... [Return] [&ref] |
| main.rs:200:29:200:38 | ...: i64 | semmle.label | ...: i64 |
| main.rs:201:10:201:10 | [post] n [&ref] | semmle.label | [post] n [&ref] |
@@ -245,9 +245,9 @@ nodes
| main.rs:234:25:234:33 | [post] my_number [MyNumber] | semmle.label | [post] my_number [MyNumber] |
| main.rs:234:36:234:45 | source(...) | semmle.label | source(...) |
| main.rs:235:14:235:22 | my_number [MyNumber] | semmle.label | my_number [MyNumber] |
| main.rs:235:14:235:28 | my_number.get(...) | semmle.label | my_number.get(...) |
| main.rs:235:14:235:28 | my_number.get() | semmle.label | my_number.get() |
| main.rs:237:14:237:22 | my_number [MyNumber] | semmle.label | my_number [MyNumber] |
| main.rs:237:14:237:28 | my_number.get(...) | semmle.label | my_number.get(...) |
| main.rs:237:14:237:28 | my_number.get() | semmle.label | my_number.get() |
| main.rs:243:9:243:17 | [post] my_number [MyNumber] | semmle.label | [post] my_number [MyNumber] |
| main.rs:243:23:243:32 | source(...) | semmle.label | source(...) |
| main.rs:244:14:244:33 | to_number(...) | semmle.label | to_number(...) |
@@ -262,15 +262,15 @@ nodes
| main.rs:255:14:255:33 | to_number(...) | semmle.label | to_number(...) |
| main.rs:255:24:255:32 | my_number [MyNumber] | semmle.label | my_number [MyNumber] |
subpaths
| main.rs:174:13:174:21 | my_number [MyNumber] | main.rs:156:18:156:21 | SelfParam [MyNumber] | main.rs:156:31:160:5 | { ... } | main.rs:175:14:175:34 | my_number.to_number(...) |
| main.rs:180:15:180:24 | &my_number [&ref, MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | main.rs:162:26:166:5 | { ... } | main.rs:180:14:180:31 | ... .get(...) |
| main.rs:186:14:186:22 | my_number [MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | main.rs:162:26:166:5 | { ... } | main.rs:186:14:186:28 | my_number.get(...) |
| main.rs:192:14:192:22 | my_number [&ref, MyNumber] | main.rs:156:18:156:21 | SelfParam [MyNumber] | main.rs:156:31:160:5 | { ... } | main.rs:192:14:192:34 | my_number.to_number(...) |
| main.rs:174:13:174:21 | my_number [MyNumber] | main.rs:156:18:156:21 | SelfParam [MyNumber] | main.rs:156:31:160:5 | { ... } | main.rs:175:14:175:34 | my_number.to_number() |
| main.rs:180:15:180:24 | &my_number [&ref, MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | main.rs:162:26:166:5 | { ... } | main.rs:180:14:180:31 | ... .get() |
| main.rs:186:14:186:22 | my_number [MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | main.rs:162:26:166:5 | { ... } | main.rs:186:14:186:28 | my_number.get() |
| main.rs:192:14:192:22 | my_number [&ref, MyNumber] | main.rs:156:18:156:21 | SelfParam [MyNumber] | main.rs:156:31:160:5 | { ... } | main.rs:192:14:192:34 | my_number.to_number() |
| main.rs:210:20:210:29 | source(...) | main.rs:200:29:200:38 | ...: i64 | main.rs:200:16:200:26 | ...: ... [Return] [&ref] | main.rs:210:17:210:17 | [post] p [&ref] |
| main.rs:218:25:218:34 | source(...) | main.rs:200:29:200:38 | ...: i64 | main.rs:200:16:200:26 | ...: ... [Return] [&ref] | main.rs:218:17:218:22 | [post] &mut n [&ref] |
| main.rs:234:36:234:45 | source(...) | main.rs:228:37:228:47 | ...: i64 | main.rs:228:19:228:34 | ...: ... [Return] [&ref, MyNumber] | main.rs:234:20:234:33 | [post] &mut my_number [&ref, MyNumber] |
| main.rs:235:14:235:22 | my_number [MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | main.rs:162:26:166:5 | { ... } | main.rs:235:14:235:28 | my_number.get(...) |
| main.rs:237:14:237:22 | my_number [MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | main.rs:162:26:166:5 | { ... } | main.rs:237:14:237:28 | my_number.get(...) |
| main.rs:235:14:235:22 | my_number [MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | main.rs:162:26:166:5 | { ... } | main.rs:235:14:235:28 | my_number.get() |
| main.rs:237:14:237:22 | my_number [MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | main.rs:162:26:166:5 | { ... } | main.rs:237:14:237:28 | my_number.get() |
| main.rs:243:23:243:32 | source(...) | main.rs:223:27:223:37 | ...: i64 | main.rs:223:16:223:24 | SelfParam [Return] [&ref, MyNumber] | main.rs:243:9:243:17 | [post] my_number [MyNumber] |
| main.rs:244:24:244:32 | my_number [MyNumber] | main.rs:149:14:149:24 | ...: MyNumber [MyNumber] | main.rs:149:34:153:1 | { ... } | main.rs:244:14:244:33 | to_number(...) |
| main.rs:246:24:246:32 | my_number [MyNumber] | main.rs:149:14:149:24 | ...: MyNumber [MyNumber] | main.rs:149:34:153:1 | { ... } | main.rs:246:14:246:33 | to_number(...) |
@@ -287,14 +287,14 @@ testFailures
| main.rs:74:14:74:15 | * ... | main.rs:73:14:73:23 | source(...) | main.rs:74:14:74:15 | * ... | $@ | main.rs:73:14:73:23 | source(...) | source(...) |
| main.rs:106:14:106:15 | * ... | main.rs:105:14:105:23 | source(...) | main.rs:106:14:106:15 | * ... | $@ | main.rs:105:14:105:23 | source(...) | source(...) |
| main.rs:113:14:113:15 | * ... | main.rs:112:25:112:34 | source(...) | main.rs:113:14:113:15 | * ... | $@ | main.rs:112:25:112:34 | source(...) | source(...) |
| main.rs:175:14:175:34 | my_number.to_number(...) | main.rs:174:44:174:53 | source(...) | main.rs:175:14:175:34 | my_number.to_number(...) | $@ | main.rs:174:44:174:53 | source(...) | source(...) |
| main.rs:180:14:180:31 | ... .get(...) | main.rs:179:44:179:53 | source(...) | main.rs:180:14:180:31 | ... .get(...) | $@ | main.rs:179:44:179:53 | source(...) | source(...) |
| main.rs:186:14:186:28 | my_number.get(...) | main.rs:184:44:184:53 | source(...) | main.rs:186:14:186:28 | my_number.get(...) | $@ | main.rs:184:44:184:53 | source(...) | source(...) |
| main.rs:192:14:192:34 | my_number.to_number(...) | main.rs:190:45:190:54 | source(...) | main.rs:192:14:192:34 | my_number.to_number(...) | $@ | main.rs:190:45:190:54 | source(...) | source(...) |
| main.rs:175:14:175:34 | my_number.to_number() | main.rs:174:44:174:53 | source(...) | main.rs:175:14:175:34 | my_number.to_number() | $@ | main.rs:174:44:174:53 | source(...) | source(...) |
| main.rs:180:14:180:31 | ... .get() | main.rs:179:44:179:53 | source(...) | main.rs:180:14:180:31 | ... .get() | $@ | main.rs:179:44:179:53 | source(...) | source(...) |
| main.rs:186:14:186:28 | my_number.get() | main.rs:184:44:184:53 | source(...) | main.rs:186:14:186:28 | my_number.get() | $@ | main.rs:184:44:184:53 | source(...) | source(...) |
| main.rs:192:14:192:34 | my_number.to_number() | main.rs:190:45:190:54 | source(...) | main.rs:192:14:192:34 | my_number.to_number() | $@ | main.rs:190:45:190:54 | source(...) | source(...) |
| main.rs:211:14:211:15 | * ... | main.rs:210:20:210:29 | source(...) | main.rs:211:14:211:15 | * ... | $@ | main.rs:210:20:210:29 | source(...) | source(...) |
| main.rs:219:14:219:14 | n | main.rs:218:25:218:34 | source(...) | main.rs:219:14:219:14 | n | $@ | main.rs:218:25:218:34 | source(...) | source(...) |
| main.rs:235:14:235:28 | my_number.get(...) | main.rs:234:36:234:45 | source(...) | main.rs:235:14:235:28 | my_number.get(...) | $@ | main.rs:234:36:234:45 | source(...) | source(...) |
| main.rs:237:14:237:28 | my_number.get(...) | main.rs:234:36:234:45 | source(...) | main.rs:237:14:237:28 | my_number.get(...) | $@ | main.rs:234:36:234:45 | source(...) | source(...) |
| main.rs:235:14:235:28 | my_number.get() | main.rs:234:36:234:45 | source(...) | main.rs:235:14:235:28 | my_number.get() | $@ | main.rs:234:36:234:45 | source(...) | source(...) |
| main.rs:237:14:237:28 | my_number.get() | main.rs:234:36:234:45 | source(...) | main.rs:237:14:237:28 | my_number.get() | $@ | main.rs:234:36:234:45 | source(...) | source(...) |
| main.rs:244:14:244:33 | to_number(...) | main.rs:243:23:243:32 | source(...) | main.rs:244:14:244:33 | to_number(...) | $@ | main.rs:243:23:243:32 | source(...) | source(...) |
| main.rs:246:14:246:33 | to_number(...) | main.rs:243:23:243:32 | source(...) | main.rs:246:14:246:33 | to_number(...) | $@ | main.rs:243:23:243:32 | source(...) | source(...) |
| main.rs:253:14:253:33 | to_number(...) | main.rs:252:30:252:39 | source(...) | main.rs:253:14:253:33 | to_number(...) | $@ | main.rs:252:30:252:39 | source(...) | source(...) |

View File

@@ -18,11 +18,11 @@ edges
| main.rs:52:6:52:7 | s2 | main.rs:53:7:53:8 | s2 | provenance | |
| main.rs:52:11:52:26 | ...::from(...) | main.rs:52:6:52:7 | s2 | provenance | |
| main.rs:52:24:52:25 | s1 | main.rs:52:11:52:26 | ...::from(...) | provenance | MaD:2 |
| main.rs:57:6:57:7 | s1 | main.rs:58:11:58:24 | s1.to_string(...) | provenance | MaD:1 |
| main.rs:57:6:57:7 | s1 | main.rs:58:11:58:24 | s1.to_string() | provenance | MaD:1 |
| main.rs:57:11:57:26 | source_slice(...) | main.rs:57:6:57:7 | s1 | provenance | |
| main.rs:58:6:58:7 | s2 | main.rs:59:7:59:8 | s2 | provenance | |
| main.rs:58:11:58:24 | s1.to_string(...) | main.rs:58:6:58:7 | s2 | provenance | |
| main.rs:63:9:63:9 | s | main.rs:64:16:64:25 | s.as_str(...) | provenance | MaD:3 |
| main.rs:58:11:58:24 | s1.to_string() | main.rs:58:6:58:7 | s2 | provenance | |
| main.rs:63:9:63:9 | s | main.rs:64:16:64:25 | s.as_str() | provenance | MaD:3 |
| main.rs:63:13:63:22 | source(...) | main.rs:63:9:63:9 | s | provenance | |
| main.rs:68:9:68:9 | s | main.rs:70:34:70:61 | MacroExpr | provenance | |
| main.rs:68:9:68:9 | s | main.rs:73:34:73:59 | MacroExpr | provenance | |
@@ -71,11 +71,11 @@ nodes
| main.rs:57:6:57:7 | s1 | semmle.label | s1 |
| main.rs:57:11:57:26 | source_slice(...) | semmle.label | source_slice(...) |
| main.rs:58:6:58:7 | s2 | semmle.label | s2 |
| main.rs:58:11:58:24 | s1.to_string(...) | semmle.label | s1.to_string(...) |
| main.rs:58:11:58:24 | s1.to_string() | semmle.label | s1.to_string() |
| main.rs:59:7:59:8 | s2 | semmle.label | s2 |
| main.rs:63:9:63:9 | s | semmle.label | s |
| main.rs:63:13:63:22 | source(...) | semmle.label | source(...) |
| main.rs:64:16:64:25 | s.as_str(...) | semmle.label | s.as_str(...) |
| main.rs:64:16:64:25 | s.as_str() | semmle.label | s.as_str() |
| main.rs:68:9:68:9 | s | semmle.label | s |
| main.rs:68:13:68:22 | source(...) | semmle.label | source(...) |
| main.rs:70:9:70:18 | formatted1 | semmle.label | formatted1 |
@@ -113,7 +113,7 @@ testFailures
| main.rs:38:10:38:11 | s4 | main.rs:32:14:32:23 | source(...) | main.rs:38:10:38:11 | s4 | $@ | main.rs:32:14:32:23 | source(...) | source(...) |
| main.rs:53:7:53:8 | s2 | main.rs:51:11:51:26 | source_slice(...) | main.rs:53:7:53:8 | s2 | $@ | main.rs:51:11:51:26 | source_slice(...) | source_slice(...) |
| main.rs:59:7:59:8 | s2 | main.rs:57:11:57:26 | source_slice(...) | main.rs:59:7:59:8 | s2 | $@ | main.rs:57:11:57:26 | source_slice(...) | source_slice(...) |
| main.rs:64:16:64:25 | s.as_str(...) | main.rs:63:13:63:22 | source(...) | main.rs:64:16:64:25 | s.as_str(...) | $@ | main.rs:63:13:63:22 | source(...) | source(...) |
| main.rs:64:16:64:25 | s.as_str() | main.rs:63:13:63:22 | source(...) | main.rs:64:16:64:25 | s.as_str() | $@ | main.rs:63:13:63:22 | source(...) | source(...) |
| main.rs:71:10:71:19 | formatted1 | main.rs:68:13:68:22 | source(...) | main.rs:71:10:71:19 | formatted1 | $@ | main.rs:68:13:68:22 | source(...) | source(...) |
| main.rs:74:10:74:19 | formatted2 | main.rs:68:13:68:22 | source(...) | main.rs:74:10:74:19 | formatted2 | $@ | main.rs:68:13:68:22 | source(...) | source(...) |
| main.rs:78:10:78:19 | formatted3 | main.rs:76:17:76:32 | source_usize(...) | main.rs:78:10:78:19 | formatted3 | $@ | main.rs:76:17:76:32 | source_usize(...) | source_usize(...) |

View File

@@ -9,6 +9,6 @@ trait T1<T>: T2<S<T>> {
trait T2<T>: T1<S<T>> {
fn bar(self) {
self.foo()
self.foo() // $ method=foo
}
}

View File

@@ -24,36 +24,36 @@ mod field_access {
fn simple_field_access() {
let x = MyThing { a: S };
println!("{:?}", x.a);
println!("{:?}", x.a); // $ fieldof=MyThing
}
fn generic_field_access() {
// Explicit type argument
let x = GenericThing::<S> { a: S };
println!("{:?}", x.a);
let x = GenericThing::<S> { a: S }; // $ type=x:A.S
println!("{:?}", x.a); // $ fieldof=GenericThing
// Implicit type argument
let y = GenericThing { a: S };
println!("{:?}", x.a);
println!("{:?}", x.a); // $ fieldof=GenericThing
// The type of the field `a` can only be inferred from the concrete type
// in the struct declaration.
let x = OptionS {
a: MyOption::MyNone(),
};
println!("{:?}", x.a);
println!("{:?}", x.a); // $ fieldof=OptionS
// The type of the field `a` can only be inferred from the type argument
let x = GenericThing::<MyOption<S>> {
a: MyOption::MyNone(),
};
println!("{:?}", x.a);
println!("{:?}", x.a); // $ fieldof=GenericThing
let mut x = GenericThing {
a: MyOption::MyNone(),
};
// Only after this access can we infer the type parameter of `x`
let a: MyOption<S> = x.a;
let a: MyOption<S> = x.a; // $ fieldof=GenericThing
println!("{:?}", a);
}
@@ -85,8 +85,8 @@ mod method_impl {
pub fn g(x: Foo, y: Foo) -> Foo {
println!("main.rs::m1::g");
x.m1();
y.m2()
x.m1(); // $ method=m1
y.m2() // $ method=m2
}
}
@@ -102,20 +102,22 @@ mod method_non_parametric_impl {
struct S2;
impl MyThing<S1> {
// MyThing<S1>::m1
fn m1(self) -> S1 {
self.a
self.a // $ fieldof=MyThing
}
}
impl MyThing<S2> {
// MyThing<S2>::m1
fn m1(self) -> Self {
Self { a: self.a }
Self { a: self.a } // $ fieldof=MyThing
}
}
impl<T> MyThing<T> {
fn m2(self) -> T {
self.a
self.a // $ fieldof=MyThing
}
}
@@ -124,17 +126,17 @@ mod method_non_parametric_impl {
let y = MyThing { a: S2 };
// simple field access
println!("{:?}", x.a);
println!("{:?}", y.a);
println!("{:?}", x.a); // $ fieldof=MyThing
println!("{:?}", y.a); // $ fieldof=MyThing
println!("{:?}", x.m1()); // missing call target
println!("{:?}", y.m1().a); // missing call target
println!("{:?}", x.m1()); // $ MISSING: method=MyThing<S1>::m1
println!("{:?}", y.m1().a); // $ MISSING: method=MyThing<S2>::m1, field=MyThing
let x = MyThing { a: S1 };
let y = MyThing { a: S2 };
println!("{:?}", x.m2());
println!("{:?}", y.m2());
println!("{:?}", x.m2()); // $ method=m2
println!("{:?}", y.m2()); // $ method=m2
}
}
@@ -161,18 +163,20 @@ mod method_non_parametric_trait_impl {
}
fn call_trait_m1<T1, T2: MyTrait<T1>>(x: T2) -> T1 {
x.m1()
x.m1() // $ method=m1
}
impl MyTrait<S1> for MyThing<S1> {
// MyThing<S1>::m1
fn m1(self) -> S1 {
self.a
self.a // $ fieldof=MyThing
}
}
impl MyTrait<Self> for MyThing<S2> {
// MyThing<S2>::m1
fn m1(self) -> Self {
Self { a: self.a }
Self { a: self.a } // $ fieldof=MyThing
}
}
@@ -180,14 +184,14 @@ mod method_non_parametric_trait_impl {
let x = MyThing { a: S1 };
let y = MyThing { a: S2 };
println!("{:?}", x.m1()); // missing call target
println!("{:?}", y.m1().a); // missing call target
println!("{:?}", x.m1()); // $ MISSING: method=MyThing<S1>::m1
println!("{:?}", y.m1().a); // $ MISSING: method=MyThing<S2>::m1, field=MyThing
let x = MyThing { a: S1 };
let y = MyThing { a: S2 };
println!("{:?}", call_trait_m1(x)); // missing
println!("{:?}", call_trait_m1(y).a); // missing
println!("{:?}", call_trait_m1(x)); // MISSING: type=call_trait_m1(...):S1
println!("{:?}", call_trait_m1(y).a); // MISSING: field=MyThing
}
}
@@ -203,32 +207,34 @@ mod type_parameter_bounds {
// Two traits with the same method name.
trait FirstTrait<FT> {
// FirstTrait::method
fn method(self) -> FT;
}
trait SecondTrait<ST> {
// SecondTrait::method
fn method(self) -> ST;
}
fn call_first_trait_per_bound<I: Debug, T: SecondTrait<I>>(x: T) {
// The type parameter bound determines which method this call is resolved to.
let s1 = x.method();
let s1 = x.method(); // $ method=SecondTrait::method
println!("{:?}", s1);
}
fn call_second_trait_per_bound<I: Debug, T: SecondTrait<I>>(x: T) {
// The type parameter bound determines which method this call is resolved to.
let s2 = x.method();
let s2 = x.method(); // $ method=SecondTrait::method
println!("{:?}", s2);
}
fn trait_bound_with_type<T: FirstTrait<S1>>(x: T) {
let s = x.method();
println!("{:?}", s);
let s = x.method(); // $ method=FirstTrait::method
println!("{:?}", s); // $ type=s:S1
}
fn trait_per_bound_with_type<T: FirstTrait<S1>>(x: T) {
let s = x.method();
let s = x.method(); // $ method=FirstTrait::method
println!("{:?}", s);
}
@@ -240,15 +246,15 @@ mod type_parameter_bounds {
fn call_trait_per_bound_with_type_1<T: Pair<S1, S2>>(x: T, y: T) {
// The type in the type parameter bound determines the return type.
let s1 = x.fst();
let s2 = y.snd();
let s1 = x.fst(); // $ method=fst
let s2 = y.snd(); // $ method=snd
println!("{:?}, {:?}", s1, s2);
}
fn call_trait_per_bound_with_type_2<T2: Debug, T: Pair<S1, T2>>(x: T, y: T) {
// The type in the type parameter bound determines the return type.
let s1 = x.fst();
let s2 = y.snd();
let s1 = x.fst(); // $ method=fst
let s2 = y.snd(); // $ method=snd
println!("{:?}, {:?}", s1, s2);
}
}
@@ -271,23 +277,23 @@ mod function_trait_bounds {
where
Self: Sized,
{
self.m1()
self.m1() // $ method=m1
}
}
// Type parameter with bound occurs in the root of a parameter type.
fn call_trait_m1<T1, T2: MyTrait<T1>>(x: T2) -> T1 {
x.m1()
x.m1() // $ method=m1 type=x.m1():T1
}
// Type parameter with bound occurs nested within another type.
fn call_trait_thing_m1<T1, T2: MyTrait<T1>>(x: MyThing<T2>) -> T1 {
x.a.m1()
x.a.m1() // $ fieldof=MyThing method=m1
}
impl<T> MyTrait<T> for MyThing<T> {
fn m1(self) -> T {
self.a
self.a // $ fieldof=MyThing
}
}
@@ -295,14 +301,14 @@ mod function_trait_bounds {
let x = MyThing { a: S1 };
let y = MyThing { a: S2 };
println!("{:?}", x.m1());
println!("{:?}", y.m1());
println!("{:?}", x.m1()); // $ method=m1
println!("{:?}", y.m1()); // $ method=m1
let x = MyThing { a: S1 };
let y = MyThing { a: S2 };
println!("{:?}", x.m2());
println!("{:?}", y.m2());
println!("{:?}", x.m2()); // $ method=m2
println!("{:?}", y.m2()); // $ method=m2
let x2 = MyThing { a: S1 };
let y2 = MyThing { a: S2 };
@@ -343,6 +349,7 @@ mod trait_associated_type {
impl MyTrait for S {
type AssociatedType = S;
// S::m1
fn m1(self) -> Self::AssociatedType {
S
}
@@ -350,10 +357,10 @@ mod trait_associated_type {
pub fn f() {
let x = S;
println!("{:?}", x.m1());
println!("{:?}", x.m1()); // $ method=S::m1
let x = S;
println!("{:?}", x.m2()); // missing
println!("{:?}", x.m2()); // $ method=m2
}
}
@@ -382,8 +389,8 @@ mod generic_enum {
let x = MyEnum::C1(S1);
let y = MyEnum::C2 { a: S2 };
println!("{:?}", x.m1());
println!("{:?}", y.m1());
println!("{:?}", x.m1()); // $ method=m1
println!("{:?}", y.m1()); // $ method=m1
}
}
@@ -404,6 +411,7 @@ mod method_supertraits {
struct S2;
trait MyTrait1<Tr1> {
// MyTrait1::m1
fn m1(self) -> Tr1;
}
@@ -413,7 +421,7 @@ mod method_supertraits {
Self: Sized,
{
if 1 + 1 > 2 {
self.m1()
self.m1() // $ method=MyTrait1::m1
} else {
Self::m1(self)
}
@@ -426,24 +434,26 @@ mod method_supertraits {
Self: Sized,
{
if 1 + 1 > 2 {
self.m2().a
self.m2().a // $ method=m2 $ fieldof=MyThing
} else {
Self::m2(self).a
Self::m2(self).a // $ fieldof=MyThing
}
}
}
impl<T> MyTrait1<T> for MyThing<T> {
// MyThing::m1
fn m1(self) -> T {
self.a
self.a // $ fieldof=MyThing
}
}
impl<T> MyTrait2<T> for MyThing<T> {}
impl<T> MyTrait1<MyThing<T>> for MyThing2<T> {
// MyThing2::m1
fn m1(self) -> MyThing<T> {
MyThing { a: self.a }
MyThing { a: self.a } // $ fieldof=MyThing2
}
}
@@ -455,20 +465,20 @@ mod method_supertraits {
let x = MyThing { a: S1 };
let y = MyThing { a: S2 };
println!("{:?}", x.m1());
println!("{:?}", y.m1());
println!("{:?}", x.m1()); // $ method=MyThing::m1
println!("{:?}", y.m1()); // $ method=MyThing::m1
let x = MyThing { a: S1 };
let y = MyThing { a: S2 };
println!("{:?}", x.m2());
println!("{:?}", y.m2());
println!("{:?}", x.m2()); // $ method=m2
println!("{:?}", y.m2()); // $ method=m2
let x = MyThing2 { a: S1 };
let y = MyThing2 { a: S2 };
println!("{:?}", x.m3());
println!("{:?}", y.m3());
println!("{:?}", x.m3()); // $ method=m3
println!("{:?}", y.m3()); // $ method=m3
}
}
@@ -572,14 +582,16 @@ mod option_methods {
}
trait MyTrait<S> {
// MyTrait::set
fn set(&mut self, value: S);
fn call_set(&mut self, value: S) {
self.set(value);
self.set(value); // $ method=MyTrait::set
}
}
impl<T> MyTrait<T> for MyOption<T> {
// MyOption::set
fn set(&mut self, value: T) {}
}
@@ -602,15 +614,15 @@ mod option_methods {
struct S;
pub fn f() {
let x1 = MyOption::<S>::new(); // `::new` missing type `S`
let x1 = MyOption::<S>::new(); // $ MISSING: type=x1:T.S
println!("{:?}", x1);
let mut x2 = MyOption::new();
x2.set(S);
x2.set(S); // $ method=MyOption::set
println!("{:?}", x2);
let mut x3 = MyOption::new(); // missing type `S` from `MyOption<S>` (but can resolve `MyTrait<S>`)
x3.call_set(S);
x3.call_set(S); // $ method=call_set
println!("{:?}", x3);
let mut x4 = MyOption::new();
@@ -618,7 +630,7 @@ mod option_methods {
println!("{:?}", x4);
let x5 = MyOption::MySome(MyOption::<S>::MyNone());
println!("{:?}", x5.flatten()); // missing call target
println!("{:?}", x5.flatten()); // MISSING: method=flatten
let x6 = MyOption::MySome(MyOption::<S>::MyNone());
println!("{:?}", MyOption::<MyOption<S>>::flatten(x6));
@@ -656,26 +668,26 @@ mod method_call_type_conversion {
impl<T> S<T> {
fn m1(self) -> T {
self.0
self.0 // $ fieldof=S
}
fn m2(&self) -> &T {
&self.0
&self.0 // $ fieldof=S
}
fn m3(self: &S<T>) -> &T {
&self.0
&self.0 // $ fieldof=S
}
}
pub fn f() {
let x1 = S(S2);
println!("{:?}", x1.m1());
println!("{:?}", x1.m1()); // $ method=m1
let x2 = S(S2);
// implicit borrow
println!("{:?}", x2.m2());
println!("{:?}", x2.m3());
println!("{:?}", x2.m2()); // $ method=m2
println!("{:?}", x2.m3()); // $ method=m3
let x3 = S(S2);
// explicit borrow
@@ -684,32 +696,35 @@ mod method_call_type_conversion {
let x4 = &S(S2);
// explicit borrow
println!("{:?}", x4.m2());
println!("{:?}", x4.m3());
println!("{:?}", x4.m2()); // $ method=m2
println!("{:?}", x4.m3()); // $ method=m3
let x5 = &S(S2);
// implicit dereference
println!("{:?}", x5.m1());
println!("{:?}", x5.0);
println!("{:?}", x5.m1()); // $ method=m1
println!("{:?}", x5.0); // $ fieldof=S
let x6 = &S(S2);
// explicit dereference
println!("{:?}", (*x6).m1());
println!("{:?}", (*x6).m1()); // $ method=m1
}
}
mod trait_implicit_self_borrow {
trait MyTrait {
// MyTrait::foo
fn foo(&self) -> &Self;
// MyTrait::bar
fn bar(&self) -> &Self {
self.foo()
self.foo() // $ method=MyTrait::foo
}
}
struct MyStruct;
impl MyTrait for MyStruct {
// MyStruct::foo
fn foo(&self) -> &MyStruct {
self
}
@@ -717,7 +732,7 @@ mod trait_implicit_self_borrow {
pub fn f() {
let x = MyStruct;
x.bar();
x.bar(); // $ method=MyTrait::bar
}
}
@@ -734,7 +749,7 @@ mod implicit_self_borrow {
pub fn f() {
let x = MyStruct(S);
x.foo();
x.foo(); // $ method=foo
}
}
@@ -761,8 +776,8 @@ mod borrowed_typed {
pub fn f() {
let x = S {};
x.f1();
x.f2();
x.f1(); // $ method=f1
x.f2(); // $ method=f2
S::f3(&x);
}
}

View File

@@ -1,18 +1,61 @@
import rust
import utils.test.InlineExpectationsTest
import codeql.rust.internal.TypeInference as TypeInference
import TypeInference
import utils.test.InlineExpectationsTest
query predicate inferType(AstNode n, TypePath path, Type t) {
t = TypeInference::inferType(n, path)
}
query predicate resolveMethodCallExpr(MethodCallExpr mce, Function f) {
f = resolveMethodCallExpr(mce)
module ResolveTest implements TestSig {
string getARelevantTag() { result = ["method", "fieldof"] }
private predicate functionHasValue(Function f, string value) {
f.getAPrecedingComment().getCommentText() = value
or
not exists(f.getAPrecedingComment()) and
// TODO: Default to canonical path once that is available
value = f.getName().getText()
}
predicate hasActualResult(Location location, string element, string tag, string value) {
exists(AstNode source, AstNode target |
location = source.getLocation() and
element = source.toString()
|
target = resolveMethodCallExpr(source) and
functionHasValue(target, value) and
tag = "method"
or
target = resolveStructFieldExpr(source) and
any(Struct s | s.getStructField(_) = target).getName().getText() = value and
tag = "fieldof"
or
target = resolveTupleFieldExpr(source) and
any(Struct s | s.getTupleField(_) = target).getName().getText() = value and
tag = "fieldof"
)
}
}
query predicate resolveFieldExpr(FieldExpr fe, AstNode target) {
target = resolveStructFieldExpr(fe)
or
target = resolveTupleFieldExpr(fe)
module TypeTest implements TestSig {
string getARelevantTag() { result = "type" }
predicate tagIsOptional(string expectedTag) { expectedTag = "type" }
predicate hasActualResult(Location location, string element, string tag, string value) { none() }
predicate hasOptionalResult(Location location, string element, string tag, string value) {
tag = "type" and
exists(AstNode n, TypePath path, Type t |
t = TypeInference::inferType(n, path) and
location = n.getLocation() and
element = n.toString() and
if path.isEmpty()
then value = element + ":" + t
else value = element + ":" + path.toString() + "." + t.toString()
)
}
}
import MakeTest<MergeTests<ResolveTest, TypeTest>>

View File

@@ -1312,8 +1312,8 @@ edges
| main.rs:532:5:532:13 | print_i64 | main.rs:532:15:532:15 | a | |
| main.rs:532:5:532:25 | print_i64(...) | main.rs:533:5:533:14 | ExprStmt | |
| main.rs:532:5:532:26 | ExprStmt | main.rs:532:5:532:13 | print_i64 | |
| main.rs:532:15:532:15 | a | main.rs:532:15:532:24 | a.my_get(...) | |
| main.rs:532:15:532:24 | a.my_get(...) | main.rs:532:5:532:25 | print_i64(...) | |
| main.rs:532:15:532:15 | a | main.rs:532:15:532:24 | a.my_get() | |
| main.rs:532:15:532:24 | a.my_get() | main.rs:532:5:532:25 | print_i64(...) | |
| main.rs:533:5:533:5 | a | main.rs:533:5:533:9 | a.val | |
| main.rs:533:5:533:9 | a.val | main.rs:533:13:533:13 | 5 | |
| main.rs:533:5:533:13 | ... = ... | main.rs:534:5:534:26 | ExprStmt | |
@@ -1322,8 +1322,8 @@ edges
| main.rs:534:5:534:13 | print_i64 | main.rs:534:15:534:15 | a | |
| main.rs:534:5:534:25 | print_i64(...) | main.rs:535:5:535:28 | ExprStmt | |
| main.rs:534:5:534:26 | ExprStmt | main.rs:534:5:534:13 | print_i64 | |
| main.rs:534:15:534:15 | a | main.rs:534:15:534:24 | a.my_get(...) | |
| main.rs:534:15:534:24 | a.my_get(...) | main.rs:534:5:534:25 | print_i64(...) | |
| main.rs:534:15:534:15 | a | main.rs:534:15:534:24 | a.my_get() | |
| main.rs:534:15:534:24 | a.my_get() | main.rs:534:5:534:25 | print_i64(...) | |
| main.rs:535:5:535:5 | a | main.rs:535:25:535:25 | 2 | |
| main.rs:535:5:535:27 | ... = ... | main.rs:536:5:536:26 | ExprStmt | |
| main.rs:535:5:535:28 | ExprStmt | main.rs:535:5:535:5 | a | |
@@ -1332,8 +1332,8 @@ edges
| main.rs:536:5:536:13 | print_i64 | main.rs:536:15:536:15 | a | |
| main.rs:536:5:536:25 | print_i64(...) | main.rs:530:14:537:1 | { ... } | |
| main.rs:536:5:536:26 | ExprStmt | main.rs:536:5:536:13 | print_i64 | |
| main.rs:536:15:536:15 | a | main.rs:536:15:536:24 | a.my_get(...) | |
| main.rs:536:15:536:24 | a.my_get(...) | main.rs:536:5:536:25 | print_i64(...) | |
| main.rs:536:15:536:15 | a | main.rs:536:15:536:24 | a.my_get() | |
| main.rs:536:15:536:24 | a.my_get() | main.rs:536:5:536:25 | print_i64(...) | |
| main.rs:539:1:546:1 | enter fn arrays | main.rs:540:5:540:26 | let ... = ... | |
| main.rs:539:1:546:1 | exit fn arrays (normal) | main.rs:539:1:546:1 | exit fn arrays | |
| main.rs:539:13:546:1 | { ... } | main.rs:539:1:546:1 | exit fn arrays (normal) | |
@@ -1419,8 +1419,8 @@ edges
| main.rs:568:11:568:11 | a | main.rs:568:7:568:11 | mut a | |
| main.rs:568:15:568:33 | MyStruct {...} | main.rs:568:11:568:11 | a | |
| main.rs:568:31:568:31 | 1 | main.rs:568:15:568:33 | MyStruct {...} | |
| main.rs:569:3:569:3 | a | main.rs:569:3:569:9 | a.bar(...) | |
| main.rs:569:3:569:9 | a.bar(...) | main.rs:571:3:571:19 | ExprStmt | |
| main.rs:569:3:569:3 | a | main.rs:569:3:569:9 | a.bar() | |
| main.rs:569:3:569:9 | a.bar() | main.rs:571:3:571:19 | ExprStmt | |
| main.rs:569:3:569:10 | ExprStmt | main.rs:569:3:569:3 | a | |
| main.rs:571:3:571:11 | print_i64 | main.rs:571:13:571:13 | a | |
| main.rs:571:3:571:18 | print_i64(...) | main.rs:567:30:572:1 | { ... } | |

View File

@@ -15,13 +15,13 @@ edges
| src/main.rs:40:52:40:60 | file_path | src/main.rs:40:38:40:61 | ...::from(...) | provenance | MaD:4 |
| src/main.rs:45:24:45:32 | file_path | src/main.rs:45:5:45:22 | ...::read_to_string | provenance | MaD:1 Sink:MaD:1 |
| src/main.rs:50:11:50:19 | file_path | src/main.rs:53:52:53:60 | file_path | provenance | |
| src/main.rs:53:9:53:17 | file_path | src/main.rs:54:21:54:44 | file_path.canonicalize(...) [Ok] | provenance | Config |
| src/main.rs:53:9:53:17 | file_path | src/main.rs:54:21:54:44 | file_path.canonicalize() [Ok] | provenance | Config |
| src/main.rs:53:21:53:62 | public_path.join(...) | src/main.rs:53:9:53:17 | file_path | provenance | |
| src/main.rs:53:38:53:61 | ...::from(...) | src/main.rs:53:21:53:62 | public_path.join(...) | provenance | MaD:3 |
| src/main.rs:53:52:53:60 | file_path | src/main.rs:53:38:53:61 | ...::from(...) | provenance | MaD:4 |
| src/main.rs:54:9:54:17 | file_path | src/main.rs:59:24:59:32 | file_path | provenance | |
| src/main.rs:54:21:54:44 | file_path.canonicalize(...) [Ok] | src/main.rs:54:21:54:53 | ... .unwrap(...) | provenance | MaD:2 |
| src/main.rs:54:21:54:53 | ... .unwrap(...) | src/main.rs:54:9:54:17 | file_path | provenance | |
| src/main.rs:54:21:54:44 | file_path.canonicalize() [Ok] | src/main.rs:54:21:54:53 | ... .unwrap() | provenance | MaD:2 |
| src/main.rs:54:21:54:53 | ... .unwrap() | src/main.rs:54:9:54:17 | file_path | provenance | |
| src/main.rs:59:24:59:32 | file_path | src/main.rs:59:5:59:22 | ...::read_to_string | provenance | MaD:1 Sink:MaD:1 |
models
| 1 | Sink: lang:std; crate::fs::read_to_string; path-injection; Argument[0] |
@@ -48,8 +48,8 @@ nodes
| src/main.rs:53:38:53:61 | ...::from(...) | semmle.label | ...::from(...) |
| src/main.rs:53:52:53:60 | file_path | semmle.label | file_path |
| src/main.rs:54:9:54:17 | file_path | semmle.label | file_path |
| src/main.rs:54:21:54:44 | file_path.canonicalize(...) [Ok] | semmle.label | file_path.canonicalize(...) [Ok] |
| src/main.rs:54:21:54:53 | ... .unwrap(...) | semmle.label | ... .unwrap(...) |
| src/main.rs:54:21:54:44 | file_path.canonicalize() [Ok] | semmle.label | file_path.canonicalize() [Ok] |
| src/main.rs:54:21:54:53 | ... .unwrap() | semmle.label | ... .unwrap() |
| src/main.rs:59:5:59:22 | ...::read_to_string | semmle.label | ...::read_to_string |
| src/main.rs:59:24:59:32 | file_path | semmle.label | file_path |
subpaths

View File

@@ -1,31 +1,31 @@
#select
| sqlx.rs:62:26:62:46 | safe_query_3.as_str(...) | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:62:26:62:46 | safe_query_3.as_str(...) | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value |
| sqlx.rs:63:26:63:48 | unsafe_query_1.as_str(...) | sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:63:26:63:48 | unsafe_query_1.as_str(...) | This query depends on a $@. | sqlx.rs:47:22:47:35 | ...::args | user-provided value |
| sqlx.rs:65:30:65:52 | unsafe_query_2.as_str(...) | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:65:30:65:52 | unsafe_query_2.as_str(...) | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value |
| sqlx.rs:67:30:67:52 | unsafe_query_4.as_str(...) | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:67:30:67:52 | unsafe_query_4.as_str(...) | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value |
| sqlx.rs:73:25:73:45 | safe_query_3.as_str(...) | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:73:25:73:45 | safe_query_3.as_str(...) | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value |
| sqlx.rs:74:25:74:47 | unsafe_query_1.as_str(...) | sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:74:25:74:47 | unsafe_query_1.as_str(...) | This query depends on a $@. | sqlx.rs:47:22:47:35 | ...::args | user-provided value |
| sqlx.rs:76:29:76:51 | unsafe_query_2.as_str(...) | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:76:29:76:51 | unsafe_query_2.as_str(...) | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value |
| sqlx.rs:78:29:78:51 | unsafe_query_4.as_str(...) | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:78:29:78:51 | unsafe_query_4.as_str(...) | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value |
| sqlx.rs:62:26:62:46 | safe_query_3.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:62:26:62:46 | safe_query_3.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value |
| sqlx.rs:63:26:63:48 | unsafe_query_1.as_str() | sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:63:26:63:48 | unsafe_query_1.as_str() | This query depends on a $@. | sqlx.rs:47:22:47:35 | ...::args | user-provided value |
| sqlx.rs:65:30:65:52 | unsafe_query_2.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:65:30:65:52 | unsafe_query_2.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value |
| sqlx.rs:67:30:67:52 | unsafe_query_4.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:67:30:67:52 | unsafe_query_4.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value |
| sqlx.rs:73:25:73:45 | safe_query_3.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:73:25:73:45 | safe_query_3.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value |
| sqlx.rs:74:25:74:47 | unsafe_query_1.as_str() | sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:74:25:74:47 | unsafe_query_1.as_str() | This query depends on a $@. | sqlx.rs:47:22:47:35 | ...::args | user-provided value |
| sqlx.rs:76:29:76:51 | unsafe_query_2.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:76:29:76:51 | unsafe_query_2.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value |
| sqlx.rs:78:29:78:51 | unsafe_query_4.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:78:29:78:51 | unsafe_query_4.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value |
edges
| 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:1 |
| sqlx.rs:47:22:47:37 | ...::args(...) [element] | sqlx.rs:47:22:47:44 | ... .nth(...) [Some] | provenance | MaD:10 |
| sqlx.rs:47:22:47:44 | ... .nth(...) [Some] | sqlx.rs:47:22:47:77 | ... .unwrap_or(...) | provenance | MaD:5 |
| 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:49:25:49:52 | remote_string.parse(...) [Ok] | provenance | MaD:8 |
| sqlx.rs:48:9:48:21 | remote_string | sqlx.rs:49:25:49:52 | remote_string.parse() [Ok] | provenance | MaD:8 |
| 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:56:34:56:89 | MacroExpr | provenance | |
| sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:48:25:48:69 | ...::get(...) [Ok] | provenance | Src:MaD:2 |
| sqlx.rs:48:25:48:69 | ...::get(...) [Ok] | sqlx.rs:48:25:48:78 | ... .unwrap(...) | provenance | MaD:6 |
| sqlx.rs:48:25:48:78 | ... .unwrap(...) | sqlx.rs:48:25:48:85 | ... .text(...) [Ok] | provenance | MaD:11 |
| sqlx.rs:48:25:48:85 | ... .text(...) [Ok] | sqlx.rs:48:25:48:118 | ... .unwrap_or(...) | provenance | MaD:7 |
| sqlx.rs:48:25:48:69 | ...::get(...) [Ok] | sqlx.rs:48:25:48:78 | ... .unwrap() | provenance | MaD:6 |
| sqlx.rs:48:25:48:78 | ... .unwrap() | sqlx.rs:48:25:48:85 | ... .text() [Ok] | provenance | MaD:11 |
| sqlx.rs:48:25:48:85 | ... .text() [Ok] | sqlx.rs:48:25:48:118 | ... .unwrap_or(...) | provenance | MaD:7 |
| sqlx.rs:48:25:48:118 | ... .unwrap_or(...) | sqlx.rs:48:9:48:21 | remote_string | provenance | |
| sqlx.rs:49:9:49:21 | remote_number | sqlx.rs:52:32:52:87 | MacroExpr | provenance | |
| sqlx.rs:49:25:49:52 | remote_string.parse(...) [Ok] | sqlx.rs:49:25:49:65 | ... .unwrap_or(...) | provenance | MaD:7 |
| sqlx.rs:49:25:49:52 | remote_string.parse() [Ok] | sqlx.rs:49:25:49:65 | ... .unwrap_or(...) | provenance | MaD:7 |
| sqlx.rs:49:25:49:65 | ... .unwrap_or(...) | sqlx.rs:49:9:49:21 | remote_number | provenance | |
| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:62:26:62:46 | safe_query_3.as_str(...) | provenance | MaD:3 |
| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:73:25:73:45 | safe_query_3.as_str(...) | provenance | MaD:3 |
| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:62:26:62:46 | safe_query_3.as_str() | provenance | MaD:3 |
| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:73:25:73:45 | safe_query_3.as_str() | provenance | MaD:3 |
| sqlx.rs:52:24:52:88 | res | sqlx.rs:52:32:52:87 | { ... } | provenance | |
| sqlx.rs:52:32:52:87 | ...::format(...) | sqlx.rs:52:24:52:88 | res | provenance | |
| sqlx.rs:52:32:52:87 | ...::must_use(...) | sqlx.rs:52:9:52:20 | safe_query_3 | provenance | |
@@ -39,17 +39,17 @@ edges
| sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:76:29:76:42 | unsafe_query_2 [&ref] | provenance | |
| sqlx.rs:54:26:54:39 | &remote_string [&ref] | sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | provenance | |
| sqlx.rs:54:27:54:39 | remote_string | sqlx.rs:54:26:54:39 | &remote_string [&ref] | provenance | |
| sqlx.rs:56:9:56:22 | unsafe_query_4 | sqlx.rs:67:30:67:52 | unsafe_query_4.as_str(...) | provenance | MaD:3 |
| sqlx.rs:56:9:56:22 | unsafe_query_4 | sqlx.rs:78:29:78:51 | unsafe_query_4.as_str(...) | provenance | MaD:3 |
| sqlx.rs:56:9:56:22 | unsafe_query_4 | sqlx.rs:67:30:67:52 | unsafe_query_4.as_str() | provenance | MaD:3 |
| sqlx.rs:56:9:56:22 | unsafe_query_4 | sqlx.rs:78:29:78:51 | unsafe_query_4.as_str() | provenance | MaD:3 |
| sqlx.rs:56:26:56:90 | res | sqlx.rs:56:34:56:89 | { ... } | provenance | |
| sqlx.rs:56:34:56:89 | ...::format(...) | sqlx.rs:56:26:56:90 | res | provenance | |
| sqlx.rs:56:34:56:89 | ...::must_use(...) | sqlx.rs:56:9:56:22 | unsafe_query_4 | provenance | |
| sqlx.rs:56:34:56:89 | MacroExpr | sqlx.rs:56:34:56:89 | ...::format(...) | provenance | MaD:4 |
| sqlx.rs:56:34:56:89 | { ... } | sqlx.rs:56:34:56:89 | ...::must_use(...) | provenance | MaD:9 |
| sqlx.rs:63:26:63:39 | unsafe_query_1 [&ref] | sqlx.rs:63:26:63:48 | unsafe_query_1.as_str(...) | provenance | MaD:3 |
| sqlx.rs:65:30:65:43 | unsafe_query_2 [&ref] | sqlx.rs:65:30:65:52 | unsafe_query_2.as_str(...) | provenance | MaD:3 |
| sqlx.rs:74:25:74:38 | unsafe_query_1 [&ref] | sqlx.rs:74:25:74:47 | unsafe_query_1.as_str(...) | provenance | MaD:3 |
| sqlx.rs:76:29:76:42 | unsafe_query_2 [&ref] | sqlx.rs:76:29:76:51 | unsafe_query_2.as_str(...) | provenance | MaD:3 |
| sqlx.rs:63:26:63:39 | unsafe_query_1 [&ref] | sqlx.rs:63:26:63:48 | unsafe_query_1.as_str() | provenance | MaD:3 |
| sqlx.rs:65:30:65:43 | unsafe_query_2 [&ref] | sqlx.rs:65:30:65:52 | unsafe_query_2.as_str() | provenance | MaD:3 |
| sqlx.rs:74:25:74:38 | unsafe_query_1 [&ref] | sqlx.rs:74:25:74:47 | unsafe_query_1.as_str() | provenance | MaD:3 |
| sqlx.rs:76:29:76:42 | unsafe_query_2 [&ref] | sqlx.rs:76:29:76:51 | unsafe_query_2.as_str() | provenance | MaD:3 |
models
| 1 | Source: lang:std; crate::env::args; command-line-source; ReturnValue.Element |
| 2 | Source: repo:https://github.com/seanmonstar/reqwest:reqwest; crate::blocking::get; remote; ReturnValue.Field[crate::result::Result::Ok(0)] |
@@ -71,11 +71,11 @@ nodes
| 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(...) [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] |
| sqlx.rs:48:25:48:78 | ... .unwrap() | semmle.label | ... .unwrap() |
| sqlx.rs:48:25:48:85 | ... .text() [Ok] | semmle.label | ... .text() [Ok] |
| sqlx.rs:48:25:48:118 | ... .unwrap_or(...) | semmle.label | ... .unwrap_or(...) |
| sqlx.rs:49:9:49:21 | remote_number | semmle.label | remote_number |
| sqlx.rs:49:25:49:52 | remote_string.parse(...) [Ok] | semmle.label | remote_string.parse(...) [Ok] |
| sqlx.rs:49:25:49:52 | remote_string.parse() [Ok] | semmle.label | remote_string.parse() [Ok] |
| sqlx.rs:49:25:49:65 | ... .unwrap_or(...) | semmle.label | ... .unwrap_or(...) |
| sqlx.rs:52:9:52:20 | safe_query_3 | semmle.label | safe_query_3 |
| sqlx.rs:52:24:52:88 | res | semmle.label | res |
@@ -95,16 +95,16 @@ nodes
| sqlx.rs:56:34:56:89 | ...::must_use(...) | semmle.label | ...::must_use(...) |
| sqlx.rs:56:34:56:89 | MacroExpr | semmle.label | MacroExpr |
| sqlx.rs:56:34:56:89 | { ... } | semmle.label | { ... } |
| sqlx.rs:62:26:62:46 | safe_query_3.as_str(...) | semmle.label | safe_query_3.as_str(...) |
| sqlx.rs:62:26:62:46 | safe_query_3.as_str() | semmle.label | safe_query_3.as_str() |
| sqlx.rs:63:26:63:39 | unsafe_query_1 [&ref] | semmle.label | unsafe_query_1 [&ref] |
| sqlx.rs:63:26:63:48 | unsafe_query_1.as_str(...) | semmle.label | unsafe_query_1.as_str(...) |
| sqlx.rs:63:26:63:48 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() |
| sqlx.rs:65:30:65:43 | unsafe_query_2 [&ref] | semmle.label | unsafe_query_2 [&ref] |
| sqlx.rs:65:30:65:52 | unsafe_query_2.as_str(...) | semmle.label | unsafe_query_2.as_str(...) |
| sqlx.rs:67:30:67:52 | unsafe_query_4.as_str(...) | semmle.label | unsafe_query_4.as_str(...) |
| sqlx.rs:73:25:73:45 | safe_query_3.as_str(...) | semmle.label | safe_query_3.as_str(...) |
| sqlx.rs:65:30:65:52 | unsafe_query_2.as_str() | semmle.label | unsafe_query_2.as_str() |
| sqlx.rs:67:30:67:52 | unsafe_query_4.as_str() | semmle.label | unsafe_query_4.as_str() |
| sqlx.rs:73:25:73:45 | safe_query_3.as_str() | semmle.label | safe_query_3.as_str() |
| sqlx.rs:74:25:74:38 | unsafe_query_1 [&ref] | semmle.label | unsafe_query_1 [&ref] |
| sqlx.rs:74:25:74:47 | unsafe_query_1.as_str(...) | semmle.label | unsafe_query_1.as_str(...) |
| sqlx.rs:74:25:74:47 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() |
| sqlx.rs:76:29:76:42 | unsafe_query_2 [&ref] | semmle.label | unsafe_query_2 [&ref] |
| sqlx.rs:76:29:76:51 | unsafe_query_2.as_str(...) | semmle.label | unsafe_query_2.as_str(...) |
| sqlx.rs:78:29:78:51 | unsafe_query_4.as_str(...) | semmle.label | unsafe_query_4.as_str(...) |
| sqlx.rs:76:29:76:51 | unsafe_query_2.as_str() | semmle.label | unsafe_query_2.as_str() |
| sqlx.rs:78:29:78:51 | unsafe_query_4.as_str() | semmle.label | unsafe_query_4.as_str() |
subpaths

View File

@@ -21,8 +21,8 @@ edges
| main.rs:12:27:12:59 | { ... } | main.rs:12:27:12:59 | ...::must_use(...) | provenance | MaD:7 |
| 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:15:13:34 | ...::parse(...) [Ok] | main.rs:13:15:13:43 | ... .unwrap(...) | provenance | MaD:6 |
| main.rs:13:15:13:43 | ... .unwrap(...) | main.rs:13:9:13:11 | url | provenance | |
| main.rs:13:15:13:34 | ...::parse(...) [Ok] | main.rs:13:15:13:43 | ... .unwrap() | provenance | MaD:6 |
| 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:8 |
| 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 |
@@ -78,7 +78,7 @@ nodes
| main.rs:12:50:12:57 | password | semmle.label | password |
| main.rs:13:9:13:11 | url | semmle.label | url |
| main.rs:13:15:13:34 | ...::parse(...) [Ok] | semmle.label | ...::parse(...) [Ok] |
| main.rs:13:15:13:43 | ... .unwrap(...) | semmle.label | ... .unwrap(...) |
| 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 |

View File

@@ -181,37 +181,37 @@ edges
| test_logging.rs:167:40:167:63 | MacroExpr | test_logging.rs:167:40:167:63 | ...::Some(...) [Some] | provenance | |
| test_logging.rs:167:56:167:63 | password | test_logging.rs:167:40:167:63 | MacroExpr | provenance | |
| test_logging.rs:168:34:168:66 | res | test_logging.rs:168:42:168:65 | { ... } | provenance | |
| test_logging.rs:168:34:168:75 | ... .as_str(...) | test_logging.rs:168:27:168:32 | expect | provenance | MaD:1 Sink:MaD:1 |
| test_logging.rs:168:34:168:75 | ... .as_str() | test_logging.rs:168:27:168:32 | expect | provenance | MaD:1 Sink:MaD:1 |
| test_logging.rs:168:42:168:65 | ...::format(...) | test_logging.rs:168:34:168:66 | res | provenance | |
| test_logging.rs:168:42:168:65 | ...::must_use(...) | test_logging.rs:168:34:168:75 | ... .as_str(...) | provenance | MaD:12 |
| test_logging.rs:168:42:168:65 | ...::must_use(...) | test_logging.rs:168:34:168:75 | ... .as_str() | provenance | MaD:12 |
| test_logging.rs:168:42:168:65 | MacroExpr | test_logging.rs:168:42:168:65 | ...::format(...) | provenance | MaD:13 |
| test_logging.rs:168:42:168:65 | { ... } | test_logging.rs:168:42:168:65 | ...::must_use(...) | provenance | MaD:14 |
| test_logging.rs:168:58:168:65 | password | test_logging.rs:168:42:168:65 | MacroExpr | provenance | |
| test_logging.rs:174:36:174:70 | res | test_logging.rs:174:44:174:69 | { ... } | provenance | |
| test_logging.rs:174:36:174:81 | ... .as_bytes(...) | test_logging.rs:174:30:174:34 | write | provenance | MaD:5 Sink:MaD:5 |
| test_logging.rs:174:36:174:81 | ... .as_bytes() | test_logging.rs:174:30:174:34 | write | provenance | MaD:5 Sink:MaD:5 |
| test_logging.rs:174:44:174:69 | ...::format(...) | test_logging.rs:174:36:174:70 | res | provenance | |
| test_logging.rs:174:44:174:69 | ...::must_use(...) | test_logging.rs:174:36:174:81 | ... .as_bytes(...) | provenance | MaD:11 |
| test_logging.rs:174:44:174:69 | ...::must_use(...) | test_logging.rs:174:36:174:81 | ... .as_bytes() | provenance | MaD:11 |
| test_logging.rs:174:44:174:69 | MacroExpr | test_logging.rs:174:44:174:69 | ...::format(...) | provenance | MaD:13 |
| test_logging.rs:174:44:174:69 | { ... } | test_logging.rs:174:44:174:69 | ...::must_use(...) | provenance | MaD:14 |
| test_logging.rs:174:62:174:69 | password | test_logging.rs:174:44:174:69 | MacroExpr | provenance | |
| test_logging.rs:175:40:175:74 | res | test_logging.rs:175:48:175:73 | { ... } | provenance | |
| test_logging.rs:175:40:175:85 | ... .as_bytes(...) | test_logging.rs:175:30:175:38 | write_all | provenance | MaD:6 Sink:MaD:6 |
| test_logging.rs:175:40:175:85 | ... .as_bytes() | test_logging.rs:175:30:175:38 | write_all | provenance | MaD:6 Sink:MaD:6 |
| test_logging.rs:175:48:175:73 | ...::format(...) | test_logging.rs:175:40:175:74 | res | provenance | |
| test_logging.rs:175:48:175:73 | ...::must_use(...) | test_logging.rs:175:40:175:85 | ... .as_bytes(...) | provenance | MaD:11 |
| test_logging.rs:175:48:175:73 | ...::must_use(...) | test_logging.rs:175:40:175:85 | ... .as_bytes() | provenance | MaD:11 |
| test_logging.rs:175:48:175:73 | MacroExpr | test_logging.rs:175:48:175:73 | ...::format(...) | provenance | MaD:13 |
| test_logging.rs:175:48:175:73 | { ... } | test_logging.rs:175:48:175:73 | ...::must_use(...) | provenance | MaD:14 |
| test_logging.rs:175:66:175:73 | password | test_logging.rs:175:48:175:73 | MacroExpr | provenance | |
| test_logging.rs:178:15:178:49 | res | test_logging.rs:178:23:178:48 | { ... } | provenance | |
| test_logging.rs:178:15:178:60 | ... .as_bytes(...) | test_logging.rs:178:9:178:13 | write | provenance | MaD:5 Sink:MaD:5 |
| test_logging.rs:178:15:178:60 | ... .as_bytes() | test_logging.rs:178:9:178:13 | write | provenance | MaD:5 Sink:MaD:5 |
| test_logging.rs:178:23:178:48 | ...::format(...) | test_logging.rs:178:15:178:49 | res | provenance | |
| test_logging.rs:178:23:178:48 | ...::must_use(...) | test_logging.rs:178:15:178:60 | ... .as_bytes(...) | provenance | MaD:11 |
| test_logging.rs:178:23:178:48 | ...::must_use(...) | test_logging.rs:178:15:178:60 | ... .as_bytes() | provenance | MaD:11 |
| test_logging.rs:178:23:178:48 | MacroExpr | test_logging.rs:178:23:178:48 | ...::format(...) | provenance | MaD:13 |
| test_logging.rs:178:23:178:48 | { ... } | test_logging.rs:178:23:178:48 | ...::must_use(...) | provenance | MaD:14 |
| test_logging.rs:178:41:178:48 | password | test_logging.rs:178:23:178:48 | MacroExpr | provenance | |
| test_logging.rs:181:15:181:49 | res | test_logging.rs:181:23:181:48 | { ... } | provenance | |
| test_logging.rs:181:15:181:60 | ... .as_bytes(...) | test_logging.rs:181:9:181:13 | write | provenance | MaD:4 Sink:MaD:4 |
| test_logging.rs:181:15:181:60 | ... .as_bytes() | test_logging.rs:181:9:181:13 | write | provenance | MaD:4 Sink:MaD:4 |
| test_logging.rs:181:23:181:48 | ...::format(...) | test_logging.rs:181:15:181:49 | res | provenance | |
| test_logging.rs:181:23:181:48 | ...::must_use(...) | test_logging.rs:181:15:181:60 | ... .as_bytes(...) | provenance | MaD:11 |
| test_logging.rs:181:23:181:48 | ...::must_use(...) | test_logging.rs:181:15:181:60 | ... .as_bytes() | provenance | MaD:11 |
| test_logging.rs:181:23:181:48 | MacroExpr | test_logging.rs:181:23:181:48 | ...::format(...) | provenance | MaD:13 |
| test_logging.rs:181:23:181:48 | { ... } | test_logging.rs:181:23:181:48 | ...::must_use(...) | provenance | MaD:14 |
| test_logging.rs:181:41:181:48 | password | test_logging.rs:181:23:181:48 | MacroExpr | provenance | |
@@ -400,7 +400,7 @@ nodes
| test_logging.rs:167:56:167:63 | password | semmle.label | password |
| test_logging.rs:168:27:168:32 | expect | semmle.label | expect |
| test_logging.rs:168:34:168:66 | res | semmle.label | res |
| test_logging.rs:168:34:168:75 | ... .as_str(...) | semmle.label | ... .as_str(...) |
| test_logging.rs:168:34:168:75 | ... .as_str() | semmle.label | ... .as_str() |
| test_logging.rs:168:42:168:65 | ...::format(...) | semmle.label | ...::format(...) |
| test_logging.rs:168:42:168:65 | ...::must_use(...) | semmle.label | ...::must_use(...) |
| test_logging.rs:168:42:168:65 | MacroExpr | semmle.label | MacroExpr |
@@ -408,7 +408,7 @@ nodes
| test_logging.rs:168:58:168:65 | password | semmle.label | password |
| test_logging.rs:174:30:174:34 | write | semmle.label | write |
| test_logging.rs:174:36:174:70 | res | semmle.label | res |
| test_logging.rs:174:36:174:81 | ... .as_bytes(...) | semmle.label | ... .as_bytes(...) |
| test_logging.rs:174:36:174:81 | ... .as_bytes() | semmle.label | ... .as_bytes() |
| test_logging.rs:174:44:174:69 | ...::format(...) | semmle.label | ...::format(...) |
| test_logging.rs:174:44:174:69 | ...::must_use(...) | semmle.label | ...::must_use(...) |
| test_logging.rs:174:44:174:69 | MacroExpr | semmle.label | MacroExpr |
@@ -416,7 +416,7 @@ nodes
| test_logging.rs:174:62:174:69 | password | semmle.label | password |
| test_logging.rs:175:30:175:38 | write_all | semmle.label | write_all |
| test_logging.rs:175:40:175:74 | res | semmle.label | res |
| test_logging.rs:175:40:175:85 | ... .as_bytes(...) | semmle.label | ... .as_bytes(...) |
| test_logging.rs:175:40:175:85 | ... .as_bytes() | semmle.label | ... .as_bytes() |
| test_logging.rs:175:48:175:73 | ...::format(...) | semmle.label | ...::format(...) |
| test_logging.rs:175:48:175:73 | ...::must_use(...) | semmle.label | ...::must_use(...) |
| test_logging.rs:175:48:175:73 | MacroExpr | semmle.label | MacroExpr |
@@ -424,7 +424,7 @@ nodes
| test_logging.rs:175:66:175:73 | password | semmle.label | password |
| test_logging.rs:178:9:178:13 | write | semmle.label | write |
| test_logging.rs:178:15:178:49 | res | semmle.label | res |
| test_logging.rs:178:15:178:60 | ... .as_bytes(...) | semmle.label | ... .as_bytes(...) |
| test_logging.rs:178:15:178:60 | ... .as_bytes() | semmle.label | ... .as_bytes() |
| test_logging.rs:178:23:178:48 | ...::format(...) | semmle.label | ...::format(...) |
| test_logging.rs:178:23:178:48 | ...::must_use(...) | semmle.label | ...::must_use(...) |
| test_logging.rs:178:23:178:48 | MacroExpr | semmle.label | MacroExpr |
@@ -432,7 +432,7 @@ nodes
| test_logging.rs:178:41:178:48 | password | semmle.label | password |
| test_logging.rs:181:9:181:13 | write | semmle.label | write |
| test_logging.rs:181:15:181:49 | res | semmle.label | res |
| test_logging.rs:181:15:181:60 | ... .as_bytes(...) | semmle.label | ... .as_bytes(...) |
| test_logging.rs:181:15:181:60 | ... .as_bytes() | semmle.label | ... .as_bytes() |
| test_logging.rs:181:23:181:48 | ...::format(...) | semmle.label | ...::format(...) |
| test_logging.rs:181:23:181:48 | ...::must_use(...) | semmle.label | ...::must_use(...) |
| test_logging.rs:181:23:181:48 | MacroExpr | semmle.label | MacroExpr |