From 4fb4bfd6cf6eaeab5a63f9bda4859105cac6ed6a Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 28 May 2025 17:10:39 +0200 Subject: [PATCH 1/2] Rust: Add path resolution test for extern crate --- .../library-tests/path-resolution/main.rs | 5 +- .../path-resolution/path-resolution.expected | 139 +++++++++--------- 2 files changed, 73 insertions(+), 71 deletions(-) diff --git a/rust/ql/test/library-tests/path-resolution/main.rs b/rust/ql/test/library-tests/path-resolution/main.rs index ce44915a9d4b..3b68cff897a0 100644 --- a/rust/ql/test/library-tests/path-resolution/main.rs +++ b/rust/ql/test/library-tests/path-resolution/main.rs @@ -285,7 +285,7 @@ mod m13 { pub struct f {} // I72 mod m14 { - use crate::m13::f; // $ item=I71 item=I72 + use zelf::m13::f; // $ item=I71 item=I72 #[rustfmt::skip] fn g(x: f) { // $ item=I72 @@ -621,6 +621,8 @@ mod m24 { } // I121 } +extern crate self as zelf; + fn main() { my::nested::nested1::nested2::f(); // $ item=I4 my::f(); // $ item=I38 @@ -650,4 +652,5 @@ fn main() { m18::m19::m20::g(); // $ item=I103 m23::f(); // $ item=I108 m24::f(); // $ item=I121 + zelf::h(); // $ item=I25 } diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index 054905f39096..67653ba472ff 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -61,7 +61,7 @@ resolvePath | main.rs:30:17:30:21 | super | main.rs:18:5:36:5 | mod m2 | | main.rs:30:17:30:24 | ...::f | main.rs:19:9:21:9 | fn f | | main.rs:33:17:33:17 | f | main.rs:19:9:21:9 | fn f | -| main.rs:40:9:40:13 | super | main.rs:1:1:653:2 | SourceFile | +| main.rs:40:9:40:13 | super | main.rs:1:1:656:2 | SourceFile | | main.rs:40:9:40:17 | ...::m1 | main.rs:13:1:37:1 | mod m1 | | main.rs:40:9:40:21 | ...::m2 | main.rs:18:5:36:5 | mod m2 | | main.rs:40:9:40:24 | ...::g | main.rs:23:9:27:9 | fn g | @@ -73,7 +73,7 @@ resolvePath | main.rs:61:17:61:19 | Foo | main.rs:59:9:59:21 | struct Foo | | main.rs:64:13:64:15 | Foo | main.rs:53:5:53:17 | struct Foo | | main.rs:66:5:66:5 | f | main.rs:55:5:62:5 | fn f | -| main.rs:68:5:68:8 | self | main.rs:1:1:653:2 | SourceFile | +| main.rs:68:5:68:8 | self | main.rs:1:1:656:2 | SourceFile | | main.rs:68:5:68:11 | ...::i | main.rs:71:1:83:1 | fn i | | main.rs:74:13:74:15 | Foo | main.rs:48:1:48:13 | struct Foo | | main.rs:78:16:78:18 | i32 | {EXTERNAL LOCATION} | struct i32 | @@ -88,7 +88,7 @@ resolvePath | main.rs:87:57:87:66 | ...::g | my2/nested2.rs:7:9:9:9 | fn g | | main.rs:87:80:87:86 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | | main.rs:100:5:100:22 | f_defined_in_macro | main.rs:99:18:99:42 | fn f_defined_in_macro | -| main.rs:117:13:117:17 | super | main.rs:1:1:653:2 | SourceFile | +| main.rs:117:13:117:17 | super | main.rs:1:1:656:2 | SourceFile | | main.rs:117:13:117:21 | ...::m5 | main.rs:103:1:107:1 | mod m5 | | main.rs:118:9:118:9 | f | main.rs:104:5:106:5 | fn f | | main.rs:118:9:118:9 | f | main.rs:110:5:112:5 | fn f | @@ -145,13 +145,6 @@ resolvePath | main.rs:278:16:278:16 | T | main.rs:272:7:272:7 | T | | main.rs:279:14:279:17 | Self | main.rs:270:5:280:5 | trait MyParamTrait | | main.rs:279:14:279:33 | ...::AssociatedType | main.rs:274:9:274:28 | type AssociatedType | -| main.rs:288:13:288:17 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | -| main.rs:288:13:288:22 | ...::m13 | main.rs:283:1:296:1 | mod m13 | -| main.rs:288:13:288:25 | ...::f | main.rs:284:5:284:17 | fn f | -| main.rs:288:13:288:25 | ...::f | main.rs:284:19:285:19 | struct f | -| main.rs:291:17:291:17 | f | main.rs:284:19:285:19 | struct f | -| main.rs:292:21:292:21 | f | main.rs:284:19:285:19 | struct f | -| main.rs:293:13:293:13 | f | main.rs:284:5:284:17 | fn f | | main.rs:307:9:307:14 | Trait1 | main.rs:299:5:303:5 | trait Trait1 | | main.rs:310:13:310:16 | Self | main.rs:305:5:313:5 | trait Trait2 | | main.rs:310:13:310:19 | ...::g | main.rs:302:9:302:20 | fn g | @@ -266,65 +259,65 @@ resolvePath | main.rs:620:9:620:36 | GenericStruct::<...> | main.rs:563:5:566:5 | struct GenericStruct | | main.rs:620:9:620:47 | ...::call_both | main.rs:586:9:589:9 | fn call_both | | main.rs:620:25:620:35 | Implementor | main.rs:592:5:592:23 | struct Implementor | -| main.rs:625:5:625:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:625:5:625:14 | ...::nested | my.rs:1:1:1:15 | mod nested | -| main.rs:625:5:625:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | -| main.rs:625:5:625:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | -| main.rs:625:5:625:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | -| main.rs:626:5:626:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:626:5:626:9 | ...::f | my.rs:5:1:7:1 | fn f | -| main.rs:627:5:627:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | -| main.rs:627:5:627:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | -| main.rs:627:5:627:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | -| main.rs:627:5:627:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:628:5:628:5 | f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:629:5:629:5 | g | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:630:5:630:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | -| main.rs:630:5:630:12 | ...::h | main.rs:50:1:69:1 | fn h | -| main.rs:631:5:631:6 | m1 | main.rs:13:1:37:1 | mod m1 | -| main.rs:631:5:631:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | -| main.rs:631:5:631:13 | ...::g | main.rs:23:9:27:9 | fn g | -| main.rs:632:5:632:6 | m1 | main.rs:13:1:37:1 | mod m1 | -| main.rs:632:5:632:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | -| main.rs:632:5:632:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 | -| main.rs:632:5:632:17 | ...::h | main.rs:30:27:34:13 | fn h | -| main.rs:633:5:633:6 | m4 | main.rs:39:1:46:1 | mod m4 | -| main.rs:633:5:633:9 | ...::i | main.rs:42:5:45:5 | fn i | -| main.rs:634:5:634:5 | h | main.rs:50:1:69:1 | fn h | -| main.rs:635:5:635:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:636:5:636:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:637:5:637:5 | j | main.rs:97:1:101:1 | fn j | -| main.rs:638:5:638:6 | m6 | main.rs:109:1:120:1 | mod m6 | -| main.rs:638:5:638:9 | ...::g | main.rs:114:5:119:5 | fn g | -| main.rs:639:5:639:6 | m7 | main.rs:122:1:141:1 | mod m7 | -| main.rs:639:5:639:9 | ...::f | main.rs:133:5:140:5 | fn f | -| main.rs:640:5:640:6 | m8 | main.rs:143:1:197:1 | mod m8 | -| main.rs:640:5:640:9 | ...::g | main.rs:181:5:196:5 | fn g | -| main.rs:641:5:641:6 | m9 | main.rs:199:1:207:1 | mod m9 | -| main.rs:641:5:641:9 | ...::f | main.rs:202:5:206:5 | fn f | -| main.rs:642:5:642:7 | m11 | main.rs:230:1:267:1 | mod m11 | -| main.rs:642:5:642:10 | ...::f | main.rs:235:5:238:5 | fn f | -| main.rs:643:5:643:7 | m15 | main.rs:298:1:352:1 | mod m15 | -| main.rs:643:5:643:10 | ...::f | main.rs:339:5:351:5 | fn f | -| main.rs:644:5:644:7 | m16 | main.rs:354:1:446:1 | mod m16 | -| main.rs:644:5:644:10 | ...::f | main.rs:421:5:445:5 | fn f | -| main.rs:645:5:645:7 | m17 | main.rs:448:1:478:1 | mod m17 | -| main.rs:645:5:645:10 | ...::f | main.rs:472:5:477:5 | fn f | -| main.rs:646:5:646:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | -| main.rs:646:5:646:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | -| main.rs:647:5:647:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | -| main.rs:647:5:647:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | -| main.rs:648:5:648:7 | my3 | my2/mod.rs:12:1:12:12 | mod my3 | -| main.rs:648:5:648:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | -| main.rs:649:5:649:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | -| main.rs:650:5:650:7 | m18 | main.rs:480:1:498:1 | mod m18 | -| main.rs:650:5:650:12 | ...::m19 | main.rs:485:5:497:5 | mod m19 | -| main.rs:650:5:650:17 | ...::m20 | main.rs:490:9:496:9 | mod m20 | -| main.rs:650:5:650:20 | ...::g | main.rs:491:13:495:13 | fn g | -| main.rs:651:5:651:7 | m23 | main.rs:527:1:552:1 | mod m23 | -| main.rs:651:5:651:10 | ...::f | main.rs:547:5:551:5 | fn f | -| main.rs:652:5:652:7 | m24 | main.rs:554:1:622:1 | mod m24 | -| main.rs:652:5:652:10 | ...::f | main.rs:608:5:621:5 | fn f | +| main.rs:627:5:627:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:627:5:627:14 | ...::nested | my.rs:1:1:1:15 | mod nested | +| main.rs:627:5:627:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | +| main.rs:627:5:627:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | +| main.rs:627:5:627:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | +| main.rs:628:5:628:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:628:5:628:9 | ...::f | my.rs:5:1:7:1 | fn f | +| main.rs:629:5:629:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | +| main.rs:629:5:629:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | +| main.rs:629:5:629:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | +| main.rs:629:5:629:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:630:5:630:5 | f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:631:5:631:5 | g | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:632:5:632:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:632:5:632:12 | ...::h | main.rs:50:1:69:1 | fn h | +| main.rs:633:5:633:6 | m1 | main.rs:13:1:37:1 | mod m1 | +| main.rs:633:5:633:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | +| main.rs:633:5:633:13 | ...::g | main.rs:23:9:27:9 | fn g | +| main.rs:634:5:634:6 | m1 | main.rs:13:1:37:1 | mod m1 | +| main.rs:634:5:634:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | +| main.rs:634:5:634:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 | +| main.rs:634:5:634:17 | ...::h | main.rs:30:27:34:13 | fn h | +| main.rs:635:5:635:6 | m4 | main.rs:39:1:46:1 | mod m4 | +| main.rs:635:5:635:9 | ...::i | main.rs:42:5:45:5 | fn i | +| main.rs:636:5:636:5 | h | main.rs:50:1:69:1 | fn h | +| main.rs:637:5:637:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:638:5:638:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:639:5:639:5 | j | main.rs:97:1:101:1 | fn j | +| main.rs:640:5:640:6 | m6 | main.rs:109:1:120:1 | mod m6 | +| main.rs:640:5:640:9 | ...::g | main.rs:114:5:119:5 | fn g | +| main.rs:641:5:641:6 | m7 | main.rs:122:1:141:1 | mod m7 | +| main.rs:641:5:641:9 | ...::f | main.rs:133:5:140:5 | fn f | +| main.rs:642:5:642:6 | m8 | main.rs:143:1:197:1 | mod m8 | +| main.rs:642:5:642:9 | ...::g | main.rs:181:5:196:5 | fn g | +| main.rs:643:5:643:6 | m9 | main.rs:199:1:207:1 | mod m9 | +| main.rs:643:5:643:9 | ...::f | main.rs:202:5:206:5 | fn f | +| main.rs:644:5:644:7 | m11 | main.rs:230:1:267:1 | mod m11 | +| main.rs:644:5:644:10 | ...::f | main.rs:235:5:238:5 | fn f | +| main.rs:645:5:645:7 | m15 | main.rs:298:1:352:1 | mod m15 | +| main.rs:645:5:645:10 | ...::f | main.rs:339:5:351:5 | fn f | +| main.rs:646:5:646:7 | m16 | main.rs:354:1:446:1 | mod m16 | +| main.rs:646:5:646:10 | ...::f | main.rs:421:5:445:5 | fn f | +| main.rs:647:5:647:7 | m17 | main.rs:448:1:478:1 | mod m17 | +| main.rs:647:5:647:10 | ...::f | main.rs:472:5:477:5 | fn f | +| main.rs:648:5:648:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | +| main.rs:648:5:648:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | +| main.rs:649:5:649:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | +| main.rs:649:5:649:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | +| main.rs:650:5:650:7 | my3 | my2/mod.rs:12:1:12:12 | mod my3 | +| main.rs:650:5:650:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | +| main.rs:651:5:651:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | +| main.rs:652:5:652:7 | m18 | main.rs:480:1:498:1 | mod m18 | +| main.rs:652:5:652:12 | ...::m19 | main.rs:485:5:497:5 | mod m19 | +| main.rs:652:5:652:17 | ...::m20 | main.rs:490:9:496:9 | mod m20 | +| main.rs:652:5:652:20 | ...::g | main.rs:491:13:495:13 | fn g | +| main.rs:653:5:653:7 | m23 | main.rs:527:1:552:1 | mod m23 | +| main.rs:653:5:653:10 | ...::f | main.rs:547:5:551:5 | fn f | +| main.rs:654:5:654:7 | m24 | main.rs:554:1:622:1 | mod m24 | +| main.rs:654:5:654:10 | ...::f | main.rs:608:5:621:5 | fn f | | my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | | my2/mod.rs:5:5:5:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | @@ -340,7 +333,7 @@ resolvePath | my2/my3/mod.rs:3:5:3:5 | g | my2/mod.rs:3:1:6:1 | fn g | | my2/my3/mod.rs:4:5:4:5 | h | main.rs:50:1:69:1 | fn h | | my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:17:30 | SourceFile | -| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:653:2 | SourceFile | +| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:656:2 | SourceFile | | my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:50:1:69:1 | fn h | | my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:17:30 | SourceFile | | my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g | @@ -367,3 +360,9 @@ resolvePath | my/nested.rs:21:5:21:20 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | | my/nested.rs:21:5:21:23 | ...::f | my/nested.rs:3:9:5:9 | fn f | testFailures +| main.rs:288:27:288:48 | //... | Missing result: item=I71 | +| main.rs:288:27:288:48 | //... | Missing result: item=I72 | +| main.rs:291:22:291:34 | //... | Missing result: item=I72 | +| main.rs:292:27:292:39 | //... | Missing result: item=I72 | +| main.rs:293:18:293:30 | //... | Missing result: item=I71 | +| main.rs:655:16:655:28 | //... | Missing result: item=I25 | From 721ffb11cf0acec4cd2b90cc74f96dc2eb5132cb Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 28 May 2025 17:14:23 +0200 Subject: [PATCH 2/2] Rust: Path resolution for `extern crate`s --- .../codeql/rust/internal/PathResolution.qll | 61 +- .../PathResolutionConsistency.expected | 61 ++ .../PathResolutionConsistency.expected | 7 + .../strings/inline-taint-flow.expected | 3 + .../test/library-tests/path-resolution/my.rs | 2 +- .../path-resolution/path-resolution.expected | 16 +- .../PathResolutionConsistency.expected | 13 + .../PathResolutionConsistency.expected | 7 + .../diagnostics/SummaryStatsReduced.expected | 2 +- .../PathResolutionConsistency.expected | 271 +++++ .../TypeInferenceConsistency.expected | 3 - .../CWE-312/CleartextLogging.expected | 987 +++++++++--------- .../security/CWE-312/test_logging.rs | 87 +- .../PathResolutionConsistency.expected | 4 + .../PathResolutionConsistency.expected | 14 + .../PathResolutionConsistency.expected | 31 + 16 files changed, 1040 insertions(+), 529 deletions(-) create mode 100644 rust/ql/test/library-tests/dataflow/strings/CONSISTENCY/PathResolutionConsistency.expected create mode 100644 rust/ql/test/query-tests/diagnostics/CONSISTENCY/PathResolutionConsistency.expected delete mode 100644 rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/TypeInferenceConsistency.expected create mode 100644 rust/ql/test/query-tests/unusedentities/CONSISTENCY/PathResolutionConsistency.expected diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index d23679ee81be..b1d733036bec 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -127,12 +127,25 @@ abstract class ItemNode extends Locatable { or crateDependencyEdge(this, name, result) or + externCrateEdge(this, name, result) + or // items made available through `use` are available to nodes that contain the `use` exists(UseItemNode use | use = this.getASuccessorRec(_) and result = use.(ItemNode).getASuccessorRec(name) ) or + exists(ExternCrateItemNode ec | result = ec.(ItemNode).getASuccessorRec(name) | + ec = this.getASuccessorRec(_) + or + // if the extern crate appears in the crate root, then the crate name is also added + // to the 'extern prelude', see https://doc.rust-lang.org/reference/items/extern-crates.html + exists(Crate c | + ec = c.getSourceFile().(ItemNode).getASuccessorRec(_) and + this = c.getASourceFile() + ) + ) + or // items made available through macro calls are available to nodes that contain the macro call exists(MacroCallItemNode call | call = this.getASuccessorRec(_) and @@ -353,16 +366,30 @@ class CrateItemNode extends ItemNode instanceof Crate { override predicate providesCanonicalPathPrefixFor(Crate c, ItemNode child) { this.hasCanonicalPath(c) and - exists(ModuleLikeNode m | - child.getImmediateParent() = m and - not m = child.(SourceFileItemNode).getSuper() and - m = super.getSourceFile() + exists(SourceFileItemNode file | + child.getImmediateParent() = file and + not file = child.(SourceFileItemNode).getSuper() and + file = super.getSourceFile() ) } override string getCanonicalPath(Crate c) { c = this and result = Crate.super.getName() } } +class ExternCrateItemNode extends ItemNode instanceof ExternCrate { + override string getName() { result = super.getRename().getName().getText() } + + override Namespace getNamespace() { none() } + + override Visibility getVisibility() { none() } + + override TypeParam getTypeParam(int i) { none() } + + override predicate hasCanonicalPath(Crate c) { none() } + + override string getCanonicalPath(Crate c) { none() } +} + /** An item that can occur in a trait or an `impl` block. */ abstract private class AssocItemNode extends ItemNode, AssocItem { /** Holds if this associated item has an implementation. */ @@ -793,6 +820,10 @@ class TypeAliasItemNode extends AssocItemNode instanceof TypeAlias { override Visibility getVisibility() { result = TypeAlias.super.getVisibility() } override TypeParam getTypeParam(int i) { result = super.getGenericParamList().getTypeParam(i) } + + override predicate hasCanonicalPath(Crate c) { none() } + + override string getCanonicalPath(Crate c) { none() } } private class UnionItemNode extends ItemNode instanceof Union { @@ -1063,12 +1094,12 @@ private predicate crateDefEdge(CrateItemNode c, string name, ItemNode i) { } /** - * Holds if `m` depends on crate `dep` named `name`. + * Holds if `file` depends on crate `dep` named `name`. */ -private predicate crateDependencyEdge(ModuleLikeNode m, string name, CrateItemNode dep) { +private predicate crateDependencyEdge(SourceFileItemNode file, string name, CrateItemNode dep) { exists(CrateItemNode c | dep = c.(Crate).getDependency(name) and - m = c.getASourceFile() + file = c.getASourceFile() ) } @@ -1404,6 +1435,22 @@ private predicate useImportEdge(Use use, string name, ItemNode item) { ) } +/** Holds if `ec` imports `crate` as `name`. */ +pragma[nomagic] +private predicate externCrateEdge(ExternCrateItemNode ec, string name, CrateItemNode crate) { + name = ec.getName() and + exists(SourceFile f, string s | + ec.getFile() = f.getFile() and + s = ec.(ExternCrate).getIdentifier().getText() + | + crateDependencyEdge(f, s, crate) + or + // `extern crate` is used to import the current crate + s = "self" and + ec.getFile() = crate.getASourceFile().getFile() + ) +} + /** * Holds if `i` is available inside `f` because it is reexported in * [the `core` prelude][1] or [the `std` prelude][2]. diff --git a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected index 0aa771632529..385df7882d8b 100644 --- a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected @@ -1,3 +1,64 @@ +multiplePathResolutions +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:112:62:112:73 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:119:58:119:69 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | +| test.rs:775:50:775:61 | ...::from | file://:0:0:0:0 | fn from | multipleCanonicalPaths | file://:0:0:0:0 | fn to_ordering | file://:0:0:0:0 | Crate(typenum@1.18.0) | ::to_ordering | | file://:0:0:0:0 | fn to_ordering | file://:0:0:0:0 | Crate(typenum@1.18.0) | ::to_ordering | diff --git a/rust/ql/test/library-tests/dataflow/strings/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/strings/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..090ecfe601ce --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/strings/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,7 @@ +multiplePathResolutions +| main.rs:52:11:52:22 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:52:11:52:22 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:52:11:52:22 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:52:11:52:22 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:52:11:52:22 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:52:11:52:22 | ...::from | file://:0:0:0:0 | fn from | diff --git a/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected b/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected index 63076f6b5dfd..5c56cf594e78 100644 --- a/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected +++ b/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected @@ -22,8 +22,10 @@ edges | 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:16 | s | 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:64:16:64:16 | s | main.rs:64:16:64:25 | s.as_str() | provenance | MaD:3 | | main.rs:68:9:68:9 | s | main.rs:70:34:70:61 | MacroExpr | provenance | | | main.rs:68:9:68:9 | s | main.rs:73:34:73:59 | MacroExpr | provenance | | | main.rs:68:13:68:22 | source(...) | main.rs:68:9:68:9 | s | provenance | | @@ -75,6 +77,7 @@ nodes | 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:16 | s | semmle.label | s | | 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(...) | diff --git a/rust/ql/test/library-tests/path-resolution/my.rs b/rust/ql/test/library-tests/path-resolution/my.rs index 3d7b150214aa..f2488df4959c 100644 --- a/rust/ql/test/library-tests/path-resolution/my.rs +++ b/rust/ql/test/library-tests/path-resolution/my.rs @@ -21,7 +21,7 @@ type Result< T, // T > = ::std::result::Result< T, // $ item=T - String,> // $ item=Result + String,> // $ item=Result $ item=String ; // my::Result fn int_div( diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index 67653ba472ff..666c80dae774 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -145,6 +145,13 @@ resolvePath | main.rs:278:16:278:16 | T | main.rs:272:7:272:7 | T | | main.rs:279:14:279:17 | Self | main.rs:270:5:280:5 | trait MyParamTrait | | main.rs:279:14:279:33 | ...::AssociatedType | main.rs:274:9:274:28 | type AssociatedType | +| main.rs:288:13:288:16 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:288:13:288:21 | ...::m13 | main.rs:283:1:296:1 | mod m13 | +| main.rs:288:13:288:24 | ...::f | main.rs:284:5:284:17 | fn f | +| main.rs:288:13:288:24 | ...::f | main.rs:284:19:285:19 | struct f | +| main.rs:291:17:291:17 | f | main.rs:284:19:285:19 | struct f | +| main.rs:292:21:292:21 | f | main.rs:284:19:285:19 | struct f | +| main.rs:293:13:293:13 | f | main.rs:284:5:284:17 | fn f | | main.rs:307:9:307:14 | Trait1 | main.rs:299:5:303:5 | trait Trait1 | | main.rs:310:13:310:16 | Self | main.rs:305:5:313:5 | trait Trait2 | | main.rs:310:13:310:19 | ...::g | main.rs:302:9:302:20 | fn g | @@ -318,6 +325,8 @@ resolvePath | main.rs:653:5:653:10 | ...::f | main.rs:547:5:551:5 | fn f | | main.rs:654:5:654:7 | m24 | main.rs:554:1:622:1 | mod m24 | | main.rs:654:5:654:10 | ...::f | main.rs:608:5:621:5 | fn f | +| main.rs:655:5:655:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:655:5:655:11 | ...::h | main.rs:50:1:69:1 | fn h | | my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | | my2/mod.rs:5:5:5:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | @@ -347,6 +356,7 @@ resolvePath | my.rs:22:5:22:17 | ...::result | {EXTERNAL LOCATION} | mod result | | my.rs:22:5:24:12 | ...::Result::<...> | {EXTERNAL LOCATION} | enum Result | | my.rs:23:5:23:5 | T | my.rs:21:5:21:5 | T | +| my.rs:24:5:24:10 | String | {EXTERNAL LOCATION} | struct String | | my.rs:28:8:28:10 | i32 | {EXTERNAL LOCATION} | struct i32 | | my.rs:29:8:29:10 | i32 | {EXTERNAL LOCATION} | struct i32 | | my.rs:30:6:30:16 | Result::<...> | my.rs:18:34:25:1 | type Result<...> | @@ -360,9 +370,3 @@ resolvePath | my/nested.rs:21:5:21:20 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | | my/nested.rs:21:5:21:23 | ...::f | my/nested.rs:3:9:5:9 | fn f | testFailures -| main.rs:288:27:288:48 | //... | Missing result: item=I71 | -| main.rs:288:27:288:48 | //... | Missing result: item=I72 | -| main.rs:291:22:291:34 | //... | Missing result: item=I72 | -| main.rs:292:27:292:39 | //... | Missing result: item=I72 | -| main.rs:293:18:293:30 | //... | Missing result: item=I71 | -| main.rs:655:16:655:28 | //... | Missing result: item=I25 | diff --git a/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected index e4c5c7393e43..85a794a0410d 100644 --- a/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected @@ -7,3 +7,16 @@ multipleMethodCallTargets | main.rs:459:9:459:23 | z.add_assign(...) | file://:0:0:0:0 | fn add_assign | | main.rs:459:9:459:23 | z.add_assign(...) | file://:0:0:0:0 | fn add_assign | | main.rs:459:9:459:23 | z.add_assign(...) | file://:0:0:0:0 | fn add_assign | +multiplePathResolutions +| main.rs:85:19:85:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:85:19:85:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:85:19:85:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:85:19:85:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:85:19:85:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:85:19:85:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:102:19:102:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:102:19:102:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:102:19:102:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:102:19:102:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:102:19:102:30 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:102:19:102:30 | ...::from | file://:0:0:0:0 | fn from | diff --git a/rust/ql/test/query-tests/diagnostics/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/diagnostics/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..8e261e296765 --- /dev/null +++ b/rust/ql/test/query-tests/diagnostics/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,7 @@ +multiplePathResolutions +| my_struct.rs:25:19:25:30 | ...::from | file://:0:0:0:0 | fn from | +| my_struct.rs:25:19:25:30 | ...::from | file://:0:0:0:0 | fn from | +| my_struct.rs:25:19:25:30 | ...::from | file://:0:0:0:0 | fn from | +| my_struct.rs:25:19:25:30 | ...::from | file://:0:0:0:0 | fn from | +| my_struct.rs:25:19:25:30 | ...::from | file://:0:0:0:0 | fn from | +| my_struct.rs:25:19:25:30 | ...::from | file://:0:0:0:0 | fn from | diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStatsReduced.expected b/rust/ql/test/query-tests/diagnostics/SummaryStatsReduced.expected index ed21d9772fce..563e370b4ed3 100644 --- a/rust/ql/test/query-tests/diagnostics/SummaryStatsReduced.expected +++ b/rust/ql/test/query-tests/diagnostics/SummaryStatsReduced.expected @@ -6,7 +6,7 @@ | Files extracted - without errors % | 57 | | Inconsistencies - AST | 0 | | Inconsistencies - CFG | 0 | -| Inconsistencies - Path resolution | 0 | +| Inconsistencies - Path resolution | 1 | | Inconsistencies - SSA | 0 | | Inconsistencies - data flow | 0 | | Lines of code extracted | 60 | diff --git a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected index ea9e17f0c1d4..3156d05ef173 100644 --- a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/PathResolutionConsistency.expected @@ -1,3 +1,274 @@ +multiplePathResolutions +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:46:24:46:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:47:56:47:67 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:48:97:48:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:50:24:50:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:51:24:51:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:55:26:55:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:61:28:61:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:99:24:99:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:100:97:100:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:101:24:101:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:102:26:102:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:103:28:103:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:172:24:172:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:173:97:173:108 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:174:24:174:35 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:175:26:175:37 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:176:28:176:39 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | +| sqlx.rs:202:57:202:68 | ...::from | file://:0:0:0:0 | fn from | multipleCanonicalPaths | file://:0:0:0:0 | fn encode | file://:0:0:0:0 | Crate(core@0.0.0) | ::encode | | file://:0:0:0:0 | fn encode | file://:0:0:0:0 | Crate(core@0.0.0) | ::encode | diff --git a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/TypeInferenceConsistency.expected b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/TypeInferenceConsistency.expected deleted file mode 100644 index 9bd564492406..000000000000 --- a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/TypeInferenceConsistency.expected +++ /dev/null @@ -1,3 +0,0 @@ -illFormedTypeMention -| sqlx.rs:158:13:158:81 | ...::BoxDynError | -| sqlx.rs:160:17:160:86 | ...::BoxDynError | diff --git a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected index 594834bca1fe..62dc985847f0 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected @@ -1,253 +1,259 @@ #select +| test_logging.rs:42:5:42:36 | ...::log | test_logging.rs:42:28:42:35 | password | test_logging.rs:42:5:42:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:42:28:42:35 | password | password | | test_logging.rs:43:5:43:36 | ...::log | test_logging.rs:43:28:43:35 | password | test_logging.rs:43:5:43:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:43:28:43:35 | password | password | -| test_logging.rs:44:5:44:36 | ...::log | test_logging.rs:44:28:44:35 | password | test_logging.rs:44:5:44:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:44:28:44:35 | password | password | -| test_logging.rs:45:5:45:35 | ...::log | test_logging.rs:45:27:45:34 | password | test_logging.rs:45:5:45:35 | ...::log | This operation writes $@ to a log file. | test_logging.rs:45:27:45:34 | password | password | -| test_logging.rs:46:5:46:36 | ...::log | test_logging.rs:46:28:46:35 | password | test_logging.rs:46:5:46:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:46:28:46:35 | password | password | -| test_logging.rs:47:5:47:35 | ...::log | test_logging.rs:47:27:47:34 | password | test_logging.rs:47:5:47:35 | ...::log | This operation writes $@ to a log file. | test_logging.rs:47:27:47:34 | password | password | -| test_logging.rs:48:5:48:48 | ...::log | test_logging.rs:48:40:48:47 | password | test_logging.rs:48:5:48:48 | ...::log | This operation writes $@ to a log file. | test_logging.rs:48:40:48:47 | password | password | -| test_logging.rs:53:5:53:36 | ...::log | test_logging.rs:53:28:53:35 | password | test_logging.rs:53:5:53:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:53:28:53:35 | password | password | -| test_logging.rs:55:5:55:49 | ...::log | test_logging.rs:55:41:55:48 | password | test_logging.rs:55:5:55:49 | ...::log | This operation writes $@ to a log file. | test_logging.rs:55:41:55:48 | password | password | -| test_logging.rs:57:5:57:47 | ...::log | test_logging.rs:57:39:57:46 | password | test_logging.rs:57:5:57:47 | ...::log | This operation writes $@ to a log file. | test_logging.rs:57:39:57:46 | password | password | -| test_logging.rs:58:5:58:34 | ...::log | test_logging.rs:58:24:58:31 | password | test_logging.rs:58:5:58:34 | ...::log | This operation writes $@ to a log file. | test_logging.rs:58:24:58:31 | password | password | -| test_logging.rs:59:5:59:36 | ...::log | test_logging.rs:59:24:59:31 | password | test_logging.rs:59:5:59:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:59:24:59:31 | password | password | -| test_logging.rs:61:5:61:54 | ...::log | test_logging.rs:61:46:61:53 | password | test_logging.rs:61:5:61:54 | ...::log | This operation writes $@ to a log file. | test_logging.rs:61:46:61:53 | password | password | -| test_logging.rs:62:5:62:55 | ...::log | test_logging.rs:62:21:62:28 | password | test_logging.rs:62:5:62:55 | ...::log | This operation writes $@ to a log file. | test_logging.rs:62:21:62:28 | password | password | -| test_logging.rs:66:5:66:48 | ...::log | test_logging.rs:66:40:66:47 | password | test_logging.rs:66:5:66:48 | ...::log | This operation writes $@ to a log file. | test_logging.rs:66:40:66:47 | password | password | -| test_logging.rs:68:5:68:66 | ...::log | test_logging.rs:68:58:68:65 | password | test_logging.rs:68:5:68:66 | ...::log | This operation writes $@ to a log file. | test_logging.rs:68:58:68:65 | password | password | -| test_logging.rs:69:5:69:67 | ...::log | test_logging.rs:69:19:69:26 | password | test_logging.rs:69:5:69:67 | ...::log | This operation writes $@ to a log file. | test_logging.rs:69:19:69:26 | password | password | -| test_logging.rs:73:5:73:47 | ...::log | test_logging.rs:73:39:73:46 | password | test_logging.rs:73:5:73:47 | ...::log | This operation writes $@ to a log file. | test_logging.rs:73:39:73:46 | password | password | -| test_logging.rs:75:5:75:65 | ...::log | test_logging.rs:75:57:75:64 | password | test_logging.rs:75:5:75:65 | ...::log | This operation writes $@ to a log file. | test_logging.rs:75:57:75:64 | password | password | -| test_logging.rs:76:5:76:51 | ...::log | test_logging.rs:76:21:76:28 | password | test_logging.rs:76:5:76:51 | ...::log | This operation writes $@ to a log file. | test_logging.rs:76:21:76:28 | password | password | -| test_logging.rs:77:5:77:47 | ...::log | test_logging.rs:77:39:77:46 | password | test_logging.rs:77:5:77:47 | ...::log | This operation writes $@ to a log file. | test_logging.rs:77:39:77:46 | password | password | -| test_logging.rs:83:5:83:44 | ...::log | test_logging.rs:83:36:83:43 | password | test_logging.rs:83:5:83:44 | ...::log | This operation writes $@ to a log file. | test_logging.rs:83:36:83:43 | password | password | -| test_logging.rs:85:5:85:62 | ...::log | test_logging.rs:85:54:85:61 | password | test_logging.rs:85:5:85:62 | ...::log | This operation writes $@ to a log file. | test_logging.rs:85:54:85:61 | password | password | -| test_logging.rs:86:5:86:48 | ...::log | test_logging.rs:86:21:86:28 | password | test_logging.rs:86:5:86:48 | ...::log | This operation writes $@ to a log file. | test_logging.rs:86:21:86:28 | password | password | -| test_logging.rs:87:5:87:44 | ...::log | test_logging.rs:87:36:87:43 | password | test_logging.rs:87:5:87:44 | ...::log | This operation writes $@ to a log file. | test_logging.rs:87:36:87:43 | password | password | -| test_logging.rs:95:5:95:29 | ...::log | test_logging.rs:94:15:94:22 | password | test_logging.rs:95:5:95:29 | ...::log | This operation writes $@ to a log file. | test_logging.rs:94:15:94:22 | password | password | -| test_logging.rs:98:5:98:19 | ...::log | test_logging.rs:97:42:97:49 | password | test_logging.rs:98:5:98:19 | ...::log | This operation writes $@ to a log file. | test_logging.rs:97:42:97:49 | password | password | -| test_logging.rs:101:5:101:19 | ...::log | test_logging.rs:100:38:100:45 | password | test_logging.rs:101:5:101:19 | ...::log | This operation writes $@ to a log file. | test_logging.rs:100:38:100:45 | password | password | -| test_logging.rs:119:5:119:42 | ...::log | test_logging.rs:119:28:119:41 | get_password(...) | test_logging.rs:119:5:119:42 | ...::log | This operation writes $@ to a log file. | test_logging.rs:119:28:119:41 | get_password(...) | get_password(...) | -| test_logging.rs:132:5:132:32 | ...::log | test_logging.rs:130:25:130:32 | password | test_logging.rs:132:5:132:32 | ...::log | This operation writes $@ to a log file. | test_logging.rs:130:25:130:32 | password | password | -| test_logging.rs:139:5:139:38 | ...::log | test_logging.rs:139:27:139:37 | s1.password | test_logging.rs:139:5:139:38 | ...::log | This operation writes $@ to a log file. | test_logging.rs:139:27:139:37 | s1.password | s1.password | -| test_logging.rs:146:5:146:38 | ...::log | test_logging.rs:146:27:146:37 | s2.password | test_logging.rs:146:5:146:38 | ...::log | This operation writes $@ to a log file. | test_logging.rs:146:27:146:37 | s2.password | s2.password | -| test_logging.rs:171:22:171:31 | log_expect | test_logging.rs:171:70:171:78 | password2 | test_logging.rs:171:22:171:31 | log_expect | This operation writes $@ to a log file. | test_logging.rs:171:70:171:78 | password2 | password2 | -| test_logging.rs:175:24:175:33 | log_expect | test_logging.rs:175:72:175:80 | password2 | test_logging.rs:175:24:175:33 | log_expect | This operation writes $@ to a log file. | test_logging.rs:175:72:175:80 | password2 | password2 | -| test_logging.rs:183:25:183:34 | log_unwrap | test_logging.rs:182:51:182:59 | password2 | test_logging.rs:183:25:183:34 | log_unwrap | This operation writes $@ to a log file. | test_logging.rs:182:51:182:59 | password2 | password2 | -| test_logging.rs:187:5:187:38 | ...::_print | test_logging.rs:187:30:187:37 | password | test_logging.rs:187:5:187:38 | ...::_print | This operation writes $@ to a log file. | test_logging.rs:187:30:187:37 | password | password | -| test_logging.rs:188:5:188:38 | ...::_print | test_logging.rs:188:30:188:37 | password | test_logging.rs:188:5:188:38 | ...::_print | This operation writes $@ to a log file. | test_logging.rs:188:30:188:37 | password | password | -| test_logging.rs:189:5:189:39 | ...::_eprint | test_logging.rs:189:31:189:38 | password | test_logging.rs:189:5:189:39 | ...::_eprint | This operation writes $@ to a log file. | test_logging.rs:189:31:189:38 | password | password | -| test_logging.rs:190:5:190:39 | ...::_eprint | test_logging.rs:190:31:190:38 | password | test_logging.rs:190:5:190:39 | ...::_eprint | This operation writes $@ to a log file. | test_logging.rs:190:31:190:38 | password | password | -| test_logging.rs:193:16:193:47 | ...::panic_fmt | test_logging.rs:193:39:193:46 | password | test_logging.rs:193:16:193:47 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:193:39:193:46 | password | password | -| test_logging.rs:194:16:194:46 | ...::panic_fmt | test_logging.rs:194:38:194:45 | password | test_logging.rs:194:16:194:46 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:194:38:194:45 | password | password | -| test_logging.rs:195:16:195:55 | ...::panic_fmt | test_logging.rs:195:47:195:54 | password | test_logging.rs:195:16:195:55 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:195:47:195:54 | password | password | -| test_logging.rs:196:16:196:53 | ...::panic_fmt | test_logging.rs:196:45:196:52 | password | test_logging.rs:196:16:196:53 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:196:45:196:52 | password | password | -| test_logging.rs:197:16:197:55 | ...::panic_fmt | test_logging.rs:197:47:197:54 | password | test_logging.rs:197:16:197:55 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:197:47:197:54 | password | password | -| test_logging.rs:198:16:198:57 | ...::assert_failed | test_logging.rs:198:49:198:56 | password | test_logging.rs:198:16:198:57 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:198:49:198:56 | password | password | -| test_logging.rs:199:16:199:57 | ...::assert_failed | test_logging.rs:199:49:199:56 | password | test_logging.rs:199:16:199:57 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:199:49:199:56 | password | password | -| test_logging.rs:200:16:200:61 | ...::panic_fmt | test_logging.rs:200:53:200:60 | password | test_logging.rs:200:16:200:61 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:200:53:200:60 | password | password | -| test_logging.rs:201:16:201:63 | ...::assert_failed | test_logging.rs:201:55:201:62 | password | test_logging.rs:201:16:201:63 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:201:55:201:62 | password | password | -| test_logging.rs:202:17:202:64 | ...::assert_failed | test_logging.rs:202:56:202:63 | password | test_logging.rs:202:17:202:64 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:202:56:202:63 | password | password | -| test_logging.rs:203:27:203:32 | expect | test_logging.rs:203:58:203:65 | password | test_logging.rs:203:27:203:32 | expect | This operation writes $@ to a log file. | test_logging.rs:203:58:203:65 | password | password | -| test_logging.rs:209:30:209:34 | write | test_logging.rs:209:62:209:69 | password | test_logging.rs:209:30:209:34 | write | This operation writes $@ to a log file. | test_logging.rs:209:62:209:69 | password | password | -| test_logging.rs:210:30:210:38 | write_all | test_logging.rs:210:66:210:73 | password | test_logging.rs:210:30:210:38 | write_all | This operation writes $@ to a log file. | test_logging.rs:210:66:210:73 | password | password | -| test_logging.rs:213:9:213:13 | write | test_logging.rs:213:41:213:48 | password | test_logging.rs:213:9:213:13 | write | This operation writes $@ to a log file. | test_logging.rs:213:41:213:48 | password | password | -| test_logging.rs:216:9:216:13 | write | test_logging.rs:216:41:216:48 | password | test_logging.rs:216:9:216:13 | write | This operation writes $@ to a log file. | test_logging.rs:216:41:216:48 | password | password | +| test_logging.rs:44:5:44:35 | ...::log | test_logging.rs:44:27:44:34 | password | test_logging.rs:44:5:44:35 | ...::log | This operation writes $@ to a log file. | test_logging.rs:44:27:44:34 | password | password | +| test_logging.rs:45:5:45:36 | ...::log | test_logging.rs:45:28:45:35 | password | test_logging.rs:45:5:45:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:45:28:45:35 | password | password | +| test_logging.rs:46:5:46:35 | ...::log | test_logging.rs:46:27:46:34 | password | test_logging.rs:46:5:46:35 | ...::log | This operation writes $@ to a log file. | test_logging.rs:46:27:46:34 | password | password | +| test_logging.rs:47:5:47:48 | ...::log | test_logging.rs:47:40:47:47 | password | test_logging.rs:47:5:47:48 | ...::log | This operation writes $@ to a log file. | test_logging.rs:47:40:47:47 | password | password | +| test_logging.rs:52:5:52:36 | ...::log | test_logging.rs:52:28:52:35 | password | test_logging.rs:52:5:52:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:52:28:52:35 | password | password | +| test_logging.rs:54:5:54:49 | ...::log | test_logging.rs:54:41:54:48 | password | test_logging.rs:54:5:54:49 | ...::log | This operation writes $@ to a log file. | test_logging.rs:54:41:54:48 | password | password | +| test_logging.rs:56:5:56:47 | ...::log | test_logging.rs:56:39:56:46 | password | test_logging.rs:56:5:56:47 | ...::log | This operation writes $@ to a log file. | test_logging.rs:56:39:56:46 | password | password | +| test_logging.rs:57:5:57:34 | ...::log | test_logging.rs:57:24:57:31 | password | test_logging.rs:57:5:57:34 | ...::log | This operation writes $@ to a log file. | test_logging.rs:57:24:57:31 | password | password | +| test_logging.rs:58:5:58:36 | ...::log | test_logging.rs:58:24:58:31 | password | test_logging.rs:58:5:58:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:58:24:58:31 | password | password | +| test_logging.rs:60:5:60:54 | ...::log | test_logging.rs:60:46:60:53 | password | test_logging.rs:60:5:60:54 | ...::log | This operation writes $@ to a log file. | test_logging.rs:60:46:60:53 | password | password | +| test_logging.rs:61:5:61:55 | ...::log | test_logging.rs:61:21:61:28 | password | test_logging.rs:61:5:61:55 | ...::log | This operation writes $@ to a log file. | test_logging.rs:61:21:61:28 | password | password | +| test_logging.rs:65:5:65:48 | ...::log | test_logging.rs:65:40:65:47 | password | test_logging.rs:65:5:65:48 | ...::log | This operation writes $@ to a log file. | test_logging.rs:65:40:65:47 | password | password | +| test_logging.rs:67:5:67:66 | ...::log | test_logging.rs:67:58:67:65 | password | test_logging.rs:67:5:67:66 | ...::log | This operation writes $@ to a log file. | test_logging.rs:67:58:67:65 | password | password | +| test_logging.rs:68:5:68:67 | ...::log | test_logging.rs:68:19:68:26 | password | test_logging.rs:68:5:68:67 | ...::log | This operation writes $@ to a log file. | test_logging.rs:68:19:68:26 | password | password | +| test_logging.rs:72:5:72:47 | ...::log | test_logging.rs:72:39:72:46 | password | test_logging.rs:72:5:72:47 | ...::log | This operation writes $@ to a log file. | test_logging.rs:72:39:72:46 | password | password | +| test_logging.rs:74:5:74:65 | ...::log | test_logging.rs:74:57:74:64 | password | test_logging.rs:74:5:74:65 | ...::log | This operation writes $@ to a log file. | test_logging.rs:74:57:74:64 | password | password | +| test_logging.rs:75:5:75:51 | ...::log | test_logging.rs:75:21:75:28 | password | test_logging.rs:75:5:75:51 | ...::log | This operation writes $@ to a log file. | test_logging.rs:75:21:75:28 | password | password | +| test_logging.rs:76:5:76:47 | ...::log | test_logging.rs:76:39:76:46 | password | test_logging.rs:76:5:76:47 | ...::log | This operation writes $@ to a log file. | test_logging.rs:76:39:76:46 | password | password | +| test_logging.rs:82:5:82:44 | ...::log | test_logging.rs:82:36:82:43 | password | test_logging.rs:82:5:82:44 | ...::log | This operation writes $@ to a log file. | test_logging.rs:82:36:82:43 | password | password | +| test_logging.rs:84:5:84:62 | ...::log | test_logging.rs:84:54:84:61 | password | test_logging.rs:84:5:84:62 | ...::log | This operation writes $@ to a log file. | test_logging.rs:84:54:84:61 | password | password | +| test_logging.rs:85:5:85:48 | ...::log | test_logging.rs:85:21:85:28 | password | test_logging.rs:85:5:85:48 | ...::log | This operation writes $@ to a log file. | test_logging.rs:85:21:85:28 | password | password | +| test_logging.rs:86:5:86:44 | ...::log | test_logging.rs:86:36:86:43 | password | test_logging.rs:86:5:86:44 | ...::log | This operation writes $@ to a log file. | test_logging.rs:86:36:86:43 | password | password | +| test_logging.rs:94:5:94:29 | ...::log | test_logging.rs:93:15:93:22 | password | test_logging.rs:94:5:94:29 | ...::log | This operation writes $@ to a log file. | test_logging.rs:93:15:93:22 | password | password | +| test_logging.rs:97:5:97:19 | ...::log | test_logging.rs:96:42:96:49 | password | test_logging.rs:97:5:97:19 | ...::log | This operation writes $@ to a log file. | test_logging.rs:96:42:96:49 | password | password | +| test_logging.rs:100:5:100:19 | ...::log | test_logging.rs:99:38:99:45 | password | test_logging.rs:100:5:100:19 | ...::log | This operation writes $@ to a log file. | test_logging.rs:99:38:99:45 | password | password | +| test_logging.rs:118:5:118:42 | ...::log | test_logging.rs:118:28:118:41 | get_password(...) | test_logging.rs:118:5:118:42 | ...::log | This operation writes $@ to a log file. | test_logging.rs:118:28:118:41 | get_password(...) | get_password(...) | +| test_logging.rs:131:5:131:32 | ...::log | test_logging.rs:129:25:129:32 | password | test_logging.rs:131:5:131:32 | ...::log | This operation writes $@ to a log file. | test_logging.rs:129:25:129:32 | password | password | +| test_logging.rs:141:5:141:38 | ...::log | test_logging.rs:141:27:141:37 | s1.password | test_logging.rs:141:5:141:38 | ...::log | This operation writes $@ to a log file. | test_logging.rs:141:27:141:37 | s1.password | s1.password | +| test_logging.rs:151:5:151:38 | ...::log | test_logging.rs:151:27:151:37 | s2.password | test_logging.rs:151:5:151:38 | ...::log | This operation writes $@ to a log file. | test_logging.rs:151:27:151:37 | s2.password | s2.password | +| test_logging.rs:176:22:176:31 | log_expect | test_logging.rs:176:70:176:78 | password2 | test_logging.rs:176:22:176:31 | log_expect | This operation writes $@ to a log file. | test_logging.rs:176:70:176:78 | password2 | password2 | +| test_logging.rs:180:24:180:33 | log_expect | test_logging.rs:180:72:180:80 | password2 | test_logging.rs:180:24:180:33 | log_expect | This operation writes $@ to a log file. | test_logging.rs:180:72:180:80 | password2 | password2 | +| test_logging.rs:184:25:184:34 | log_expect | test_logging.rs:183:51:183:59 | password2 | test_logging.rs:184:25:184:34 | log_expect | This operation writes $@ to a log file. | test_logging.rs:183:51:183:59 | password2 | password2 | +| test_logging.rs:188:25:188:34 | log_unwrap | test_logging.rs:187:51:187:59 | password2 | test_logging.rs:188:25:188:34 | log_unwrap | This operation writes $@ to a log file. | test_logging.rs:187:51:187:59 | password2 | password2 | +| test_logging.rs:192:5:192:38 | ...::_print | test_logging.rs:192:30:192:37 | password | test_logging.rs:192:5:192:38 | ...::_print | This operation writes $@ to a log file. | test_logging.rs:192:30:192:37 | password | password | +| test_logging.rs:193:5:193:38 | ...::_print | test_logging.rs:193:30:193:37 | password | test_logging.rs:193:5:193:38 | ...::_print | This operation writes $@ to a log file. | test_logging.rs:193:30:193:37 | password | password | +| test_logging.rs:194:5:194:39 | ...::_eprint | test_logging.rs:194:31:194:38 | password | test_logging.rs:194:5:194:39 | ...::_eprint | This operation writes $@ to a log file. | test_logging.rs:194:31:194:38 | password | password | +| test_logging.rs:195:5:195:39 | ...::_eprint | test_logging.rs:195:31:195:38 | password | test_logging.rs:195:5:195:39 | ...::_eprint | This operation writes $@ to a log file. | test_logging.rs:195:31:195:38 | password | password | +| test_logging.rs:199:13:199:44 | ...::panic_fmt | test_logging.rs:199:36:199:43 | password | test_logging.rs:199:13:199:44 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:199:36:199:43 | password | password | +| test_logging.rs:202:13:202:43 | ...::panic_fmt | test_logging.rs:202:35:202:42 | password | test_logging.rs:202:13:202:43 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:202:35:202:42 | password | password | +| test_logging.rs:205:13:205:52 | ...::panic_fmt | test_logging.rs:205:44:205:51 | password | test_logging.rs:205:13:205:52 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:205:44:205:51 | password | password | +| test_logging.rs:208:13:208:50 | ...::panic_fmt | test_logging.rs:208:42:208:49 | password | test_logging.rs:208:13:208:50 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:208:42:208:49 | password | password | +| test_logging.rs:211:13:211:52 | ...::panic_fmt | test_logging.rs:211:44:211:51 | password | test_logging.rs:211:13:211:52 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:211:44:211:51 | password | password | +| test_logging.rs:214:13:214:54 | ...::assert_failed | test_logging.rs:214:46:214:53 | password | test_logging.rs:214:13:214:54 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:214:46:214:53 | password | password | +| test_logging.rs:217:13:217:54 | ...::assert_failed | test_logging.rs:217:46:217:53 | password | test_logging.rs:217:13:217:54 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:217:46:217:53 | password | password | +| test_logging.rs:220:13:220:58 | ...::panic_fmt | test_logging.rs:220:50:220:57 | password | test_logging.rs:220:13:220:58 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:220:50:220:57 | password | password | +| test_logging.rs:223:13:223:60 | ...::assert_failed | test_logging.rs:223:52:223:59 | password | test_logging.rs:223:13:223:60 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:223:52:223:59 | password | password | +| test_logging.rs:226:13:226:60 | ...::assert_failed | test_logging.rs:226:52:226:59 | password | test_logging.rs:226:13:226:60 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:226:52:226:59 | password | password | +| test_logging.rs:229:23:229:28 | expect | test_logging.rs:229:54:229:61 | password | test_logging.rs:229:23:229:28 | expect | This operation writes $@ to a log file. | test_logging.rs:229:54:229:61 | password | password | +| test_logging.rs:242:10:242:14 | write | test_logging.rs:242:42:242:49 | password | test_logging.rs:242:10:242:14 | write | This operation writes $@ to a log file. | test_logging.rs:242:42:242:49 | password | password | +| test_logging.rs:245:10:245:18 | write_all | test_logging.rs:245:46:245:53 | password | test_logging.rs:245:10:245:18 | write_all | This operation writes $@ to a log file. | test_logging.rs:245:46:245:53 | password | password | +| test_logging.rs:248:9:248:13 | write | test_logging.rs:248:41:248:48 | password | test_logging.rs:248:9:248:13 | write | This operation writes $@ to a log file. | test_logging.rs:248:41:248:48 | password | password | +| test_logging.rs:251:9:251:13 | write | test_logging.rs:251:41:251:48 | password | test_logging.rs:251:9:251:13 | write | This operation writes $@ to a log file. | test_logging.rs:251:41:251:48 | password | password | edges -| test_logging.rs:43:12:43:35 | MacroExpr | test_logging.rs:43:5:43:36 | ...::log | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:42:12:42:35 | MacroExpr | test_logging.rs:42:5:42:36 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:42:28:42:35 | password | test_logging.rs:42:12:42:35 | MacroExpr | provenance | | +| test_logging.rs:43:12:43:35 | MacroExpr | test_logging.rs:43:5:43:36 | ...::log | provenance | MaD:13 Sink:MaD:13 | | test_logging.rs:43:28:43:35 | password | test_logging.rs:43:12:43:35 | MacroExpr | provenance | | -| test_logging.rs:44:12:44:35 | MacroExpr | test_logging.rs:44:5:44:36 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:44:28:44:35 | password | test_logging.rs:44:12:44:35 | MacroExpr | provenance | | -| test_logging.rs:45:11:45:34 | MacroExpr | test_logging.rs:45:5:45:35 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:45:27:45:34 | password | test_logging.rs:45:11:45:34 | MacroExpr | provenance | | -| test_logging.rs:46:12:46:35 | MacroExpr | test_logging.rs:46:5:46:36 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:46:28:46:35 | password | test_logging.rs:46:12:46:35 | MacroExpr | provenance | | -| test_logging.rs:47:11:47:34 | MacroExpr | test_logging.rs:47:5:47:35 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:47:27:47:34 | password | test_logging.rs:47:11:47:34 | MacroExpr | provenance | | -| test_logging.rs:48:24:48:47 | MacroExpr | test_logging.rs:48:5:48:48 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:48:40:48:47 | password | test_logging.rs:48:24:48:47 | MacroExpr | provenance | | -| test_logging.rs:53:12:53:35 | MacroExpr | test_logging.rs:53:5:53:36 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:53:28:53:35 | password | test_logging.rs:53:12:53:35 | MacroExpr | provenance | | -| test_logging.rs:55:12:55:48 | MacroExpr | test_logging.rs:55:5:55:49 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:55:41:55:48 | password | test_logging.rs:55:12:55:48 | MacroExpr | provenance | | -| test_logging.rs:57:12:57:46 | MacroExpr | test_logging.rs:57:5:57:47 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:57:39:57:46 | password | test_logging.rs:57:12:57:46 | MacroExpr | provenance | | -| test_logging.rs:58:12:58:33 | MacroExpr | test_logging.rs:58:5:58:34 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:58:24:58:31 | password | test_logging.rs:58:12:58:33 | MacroExpr | provenance | | -| test_logging.rs:59:12:59:35 | MacroExpr | test_logging.rs:59:5:59:36 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:59:24:59:31 | password | test_logging.rs:59:12:59:35 | MacroExpr | provenance | | -| test_logging.rs:61:30:61:53 | MacroExpr | test_logging.rs:61:5:61:54 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:61:46:61:53 | password | test_logging.rs:61:30:61:53 | MacroExpr | provenance | | -| test_logging.rs:62:20:62:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:62:5:62:55 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:62:20:62:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:62:5:62:55 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:62:20:62:28 | &... [&ref, tuple.0] | test_logging.rs:62:5:62:55 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:62:20:62:28 | &password | test_logging.rs:62:20:62:28 | TupleExpr [tuple.0] | provenance | | -| test_logging.rs:62:20:62:28 | &password [&ref] | test_logging.rs:62:20:62:28 | TupleExpr [tuple.0, &ref] | provenance | | -| test_logging.rs:62:20:62:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:62:20:62:28 | &... [&ref, tuple.0, &ref] | provenance | | -| test_logging.rs:62:20:62:28 | TupleExpr [tuple.0] | test_logging.rs:62:20:62:28 | &... [&ref, tuple.0] | provenance | | -| test_logging.rs:62:21:62:28 | password | test_logging.rs:62:20:62:28 | &password | provenance | Config | -| test_logging.rs:62:21:62:28 | password | test_logging.rs:62:20:62:28 | &password [&ref] | provenance | | -| test_logging.rs:66:24:66:47 | MacroExpr | test_logging.rs:66:5:66:48 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:66:40:66:47 | password | test_logging.rs:66:24:66:47 | MacroExpr | provenance | | -| test_logging.rs:68:42:68:65 | MacroExpr | test_logging.rs:68:5:68:66 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:68:58:68:65 | password | test_logging.rs:68:42:68:65 | MacroExpr | provenance | | -| test_logging.rs:69:18:69:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:69:5:69:67 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:69:18:69:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:69:5:69:67 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:69:18:69:26 | &... [&ref, tuple.0] | test_logging.rs:69:5:69:67 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:69:18:69:26 | &password | test_logging.rs:69:18:69:26 | TupleExpr [tuple.0] | provenance | | -| test_logging.rs:69:18:69:26 | &password [&ref] | test_logging.rs:69:18:69:26 | TupleExpr [tuple.0, &ref] | provenance | | -| test_logging.rs:69:18:69:26 | TupleExpr [tuple.0, &ref] | test_logging.rs:69:18:69:26 | &... [&ref, tuple.0, &ref] | provenance | | -| test_logging.rs:69:18:69:26 | TupleExpr [tuple.0] | test_logging.rs:69:18:69:26 | &... [&ref, tuple.0] | provenance | | -| test_logging.rs:69:19:69:26 | password | test_logging.rs:69:18:69:26 | &password | provenance | Config | -| test_logging.rs:69:19:69:26 | password | test_logging.rs:69:18:69:26 | &password [&ref] | provenance | | -| test_logging.rs:73:23:73:46 | MacroExpr | test_logging.rs:73:5:73:47 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:73:39:73:46 | password | test_logging.rs:73:23:73:46 | MacroExpr | provenance | | -| test_logging.rs:75:41:75:64 | MacroExpr | test_logging.rs:75:5:75:65 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:75:57:75:64 | password | test_logging.rs:75:41:75:64 | MacroExpr | provenance | | -| test_logging.rs:76:20:76:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:76:5:76:51 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:76:20:76:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:76:5:76:51 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:76:20:76:28 | &... [&ref, tuple.0] | test_logging.rs:76:5:76:51 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:76:20:76:28 | &password | test_logging.rs:76:20:76:28 | TupleExpr [tuple.0] | provenance | | -| test_logging.rs:76:20:76:28 | &password [&ref] | test_logging.rs:76:20:76:28 | TupleExpr [tuple.0, &ref] | provenance | | -| test_logging.rs:76:20:76:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:76:20:76:28 | &... [&ref, tuple.0, &ref] | provenance | | -| test_logging.rs:76:20:76:28 | TupleExpr [tuple.0] | test_logging.rs:76:20:76:28 | &... [&ref, tuple.0] | provenance | | -| test_logging.rs:76:21:76:28 | password | test_logging.rs:76:20:76:28 | &password | provenance | Config | -| test_logging.rs:76:21:76:28 | password | test_logging.rs:76:20:76:28 | &password [&ref] | provenance | | -| test_logging.rs:77:23:77:46 | MacroExpr | test_logging.rs:77:5:77:47 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:77:39:77:46 | password | test_logging.rs:77:23:77:46 | MacroExpr | provenance | | -| test_logging.rs:83:20:83:43 | MacroExpr | test_logging.rs:83:5:83:44 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:83:36:83:43 | password | test_logging.rs:83:20:83:43 | MacroExpr | provenance | | -| test_logging.rs:85:38:85:61 | MacroExpr | test_logging.rs:85:5:85:62 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:85:54:85:61 | password | test_logging.rs:85:38:85:61 | MacroExpr | provenance | | -| test_logging.rs:86:20:86:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:86:5:86:48 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:86:20:86:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:86:5:86:48 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:86:20:86:28 | &... [&ref, tuple.0] | test_logging.rs:86:5:86:48 | ...::log | provenance | MaD:13 Sink:MaD:13 Sink:MaD:13 | -| test_logging.rs:86:20:86:28 | &password | test_logging.rs:86:20:86:28 | TupleExpr [tuple.0] | provenance | | -| test_logging.rs:86:20:86:28 | &password [&ref] | test_logging.rs:86:20:86:28 | TupleExpr [tuple.0, &ref] | provenance | | -| test_logging.rs:86:20:86:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:86:20:86:28 | &... [&ref, tuple.0, &ref] | provenance | | -| test_logging.rs:86:20:86:28 | TupleExpr [tuple.0] | test_logging.rs:86:20:86:28 | &... [&ref, tuple.0] | provenance | | -| test_logging.rs:86:21:86:28 | password | test_logging.rs:86:20:86:28 | &password | provenance | Config | -| test_logging.rs:86:21:86:28 | password | test_logging.rs:86:20:86:28 | &password [&ref] | provenance | | -| test_logging.rs:87:20:87:43 | MacroExpr | test_logging.rs:87:5:87:44 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:87:36:87:43 | password | test_logging.rs:87:20:87:43 | MacroExpr | provenance | | -| test_logging.rs:94:9:94:10 | m1 | test_logging.rs:95:11:95:28 | MacroExpr | provenance | | -| test_logging.rs:94:14:94:22 | &password | test_logging.rs:94:9:94:10 | m1 | provenance | | -| test_logging.rs:94:15:94:22 | password | test_logging.rs:94:14:94:22 | &password | provenance | Config | -| test_logging.rs:95:11:95:28 | MacroExpr | test_logging.rs:95:5:95:29 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:97:9:97:10 | m2 | test_logging.rs:98:11:98:18 | MacroExpr | provenance | | -| test_logging.rs:97:41:97:49 | &password | test_logging.rs:97:9:97:10 | m2 | provenance | | -| test_logging.rs:97:42:97:49 | password | test_logging.rs:97:41:97:49 | &password | provenance | Config | -| test_logging.rs:98:11:98:18 | MacroExpr | test_logging.rs:98:5:98:19 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:100:9:100:10 | m3 | test_logging.rs:101:11:101:18 | MacroExpr | provenance | | -| test_logging.rs:100:14:100:46 | res | test_logging.rs:100:22:100:45 | { ... } | provenance | | -| test_logging.rs:100:22:100:45 | ...::format(...) | test_logging.rs:100:14:100:46 | res | provenance | | -| test_logging.rs:100:22:100:45 | ...::must_use(...) | test_logging.rs:100:9:100:10 | m3 | provenance | | -| test_logging.rs:100:22:100:45 | MacroExpr | test_logging.rs:100:22:100:45 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:100:22:100:45 | { ... } | test_logging.rs:100:22:100:45 | ...::must_use(...) | provenance | MaD:17 | -| test_logging.rs:100:38:100:45 | password | test_logging.rs:100:22:100:45 | MacroExpr | provenance | | -| test_logging.rs:101:11:101:18 | MacroExpr | test_logging.rs:101:5:101:19 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:119:12:119:41 | MacroExpr | test_logging.rs:119:5:119:42 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:119:28:119:41 | get_password(...) | test_logging.rs:119:12:119:41 | MacroExpr | provenance | | -| test_logging.rs:130:9:130:10 | t1 [tuple.1] | test_logging.rs:132:28:132:29 | t1 [tuple.1] | provenance | | -| test_logging.rs:130:14:130:33 | TupleExpr [tuple.1] | test_logging.rs:130:9:130:10 | t1 [tuple.1] | provenance | | -| test_logging.rs:130:25:130:32 | password | test_logging.rs:130:14:130:33 | TupleExpr [tuple.1] | provenance | | -| test_logging.rs:132:12:132:31 | MacroExpr | test_logging.rs:132:5:132:32 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:132:28:132:29 | t1 [tuple.1] | test_logging.rs:132:28:132:31 | t1.1 | provenance | | -| test_logging.rs:132:28:132:31 | t1.1 | test_logging.rs:132:12:132:31 | MacroExpr | provenance | | -| test_logging.rs:139:11:139:37 | MacroExpr | test_logging.rs:139:5:139:38 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:139:27:139:37 | s1.password | test_logging.rs:139:11:139:37 | MacroExpr | provenance | | -| test_logging.rs:146:11:146:37 | MacroExpr | test_logging.rs:146:5:146:38 | ...::log | provenance | MaD:12 Sink:MaD:12 | -| test_logging.rs:146:27:146:37 | s2.password | test_logging.rs:146:11:146:37 | MacroExpr | provenance | | -| test_logging.rs:171:33:171:79 | &... | test_logging.rs:171:22:171:31 | log_expect | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:171:33:171:79 | &... [&ref] | test_logging.rs:171:22:171:31 | log_expect | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:171:34:171:79 | MacroExpr | test_logging.rs:171:33:171:79 | &... | provenance | Config | -| test_logging.rs:171:34:171:79 | MacroExpr | test_logging.rs:171:33:171:79 | &... [&ref] | provenance | | -| test_logging.rs:171:34:171:79 | res | test_logging.rs:171:42:171:78 | { ... } | provenance | | -| test_logging.rs:171:42:171:78 | ...::format(...) | test_logging.rs:171:34:171:79 | res | provenance | | -| test_logging.rs:171:42:171:78 | ...::must_use(...) | test_logging.rs:171:34:171:79 | MacroExpr | provenance | | -| test_logging.rs:171:42:171:78 | MacroExpr | test_logging.rs:171:42:171:78 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:171:42:171:78 | { ... } | test_logging.rs:171:42:171:78 | ...::must_use(...) | provenance | MaD:17 | -| test_logging.rs:171:70:171:78 | password2 | test_logging.rs:171:42:171:78 | MacroExpr | provenance | | -| test_logging.rs:175:35:175:81 | &... | test_logging.rs:175:24:175:33 | log_expect | provenance | MaD:10 Sink:MaD:10 | -| test_logging.rs:175:35:175:81 | &... [&ref] | test_logging.rs:175:24:175:33 | log_expect | provenance | MaD:10 Sink:MaD:10 | -| test_logging.rs:175:36:175:81 | MacroExpr | test_logging.rs:175:35:175:81 | &... | provenance | Config | -| test_logging.rs:175:36:175:81 | MacroExpr | test_logging.rs:175:35:175:81 | &... [&ref] | provenance | | -| test_logging.rs:175:36:175:81 | res | test_logging.rs:175:44:175:80 | { ... } | provenance | | -| test_logging.rs:175:44:175:80 | ...::format(...) | test_logging.rs:175:36:175:81 | res | provenance | | -| test_logging.rs:175:44:175:80 | ...::must_use(...) | test_logging.rs:175:36:175:81 | MacroExpr | provenance | | -| test_logging.rs:175:44:175:80 | MacroExpr | test_logging.rs:175:44:175:80 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:175:44:175:80 | { ... } | test_logging.rs:175:44:175:80 | ...::must_use(...) | provenance | MaD:17 | -| test_logging.rs:175:72:175:80 | password2 | test_logging.rs:175:44:175:80 | MacroExpr | provenance | | -| test_logging.rs:182:9:182:19 | err_result3 [Err] | test_logging.rs:183:13:183:23 | err_result3 [Err] | provenance | | -| test_logging.rs:182:47:182:60 | Err(...) [Err] | test_logging.rs:182:9:182:19 | err_result3 [Err] | provenance | | -| test_logging.rs:182:51:182:59 | password2 | test_logging.rs:182:47:182:60 | Err(...) [Err] | provenance | | -| test_logging.rs:183:13:183:23 | err_result3 [Err] | test_logging.rs:183:25:183:34 | log_unwrap | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:187:12:187:37 | MacroExpr | test_logging.rs:187:5:187:38 | ...::_print | provenance | MaD:8 Sink:MaD:8 | -| test_logging.rs:187:30:187:37 | password | test_logging.rs:187:12:187:37 | MacroExpr | provenance | | -| test_logging.rs:188:14:188:37 | MacroExpr | test_logging.rs:188:5:188:38 | ...::_print | provenance | MaD:8 Sink:MaD:8 | -| test_logging.rs:188:30:188:37 | password | test_logging.rs:188:14:188:37 | MacroExpr | provenance | | -| test_logging.rs:189:13:189:38 | MacroExpr | test_logging.rs:189:5:189:39 | ...::_eprint | provenance | MaD:7 Sink:MaD:7 | -| test_logging.rs:189:31:189:38 | password | test_logging.rs:189:13:189:38 | MacroExpr | provenance | | -| test_logging.rs:190:15:190:38 | MacroExpr | test_logging.rs:190:5:190:39 | ...::_eprint | provenance | MaD:7 Sink:MaD:7 | -| test_logging.rs:190:31:190:38 | password | test_logging.rs:190:15:190:38 | MacroExpr | provenance | | -| test_logging.rs:193:23:193:46 | MacroExpr | test_logging.rs:193:16:193:47 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | -| test_logging.rs:193:39:193:46 | password | test_logging.rs:193:23:193:46 | MacroExpr | provenance | | -| test_logging.rs:194:22:194:45 | MacroExpr | test_logging.rs:194:16:194:46 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | -| test_logging.rs:194:38:194:45 | password | test_logging.rs:194:22:194:45 | MacroExpr | provenance | | -| test_logging.rs:195:31:195:54 | MacroExpr | test_logging.rs:195:16:195:55 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | -| test_logging.rs:195:47:195:54 | password | test_logging.rs:195:31:195:54 | MacroExpr | provenance | | -| test_logging.rs:196:29:196:52 | MacroExpr | test_logging.rs:196:16:196:53 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | -| test_logging.rs:196:45:196:52 | password | test_logging.rs:196:29:196:52 | MacroExpr | provenance | | -| test_logging.rs:197:31:197:54 | MacroExpr | test_logging.rs:197:16:197:55 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | -| test_logging.rs:197:47:197:54 | password | test_logging.rs:197:31:197:54 | MacroExpr | provenance | | -| test_logging.rs:198:33:198:56 | ...::Some(...) [Some] | test_logging.rs:198:16:198:57 | ...::assert_failed | provenance | MaD:2 Sink:MaD:2 | -| test_logging.rs:198:33:198:56 | MacroExpr | test_logging.rs:198:33:198:56 | ...::Some(...) [Some] | provenance | | -| test_logging.rs:198:49:198:56 | password | test_logging.rs:198:33:198:56 | MacroExpr | provenance | | -| test_logging.rs:199:33:199:56 | ...::Some(...) [Some] | test_logging.rs:199:16:199:57 | ...::assert_failed | provenance | MaD:2 Sink:MaD:2 | -| test_logging.rs:199:33:199:56 | MacroExpr | test_logging.rs:199:33:199:56 | ...::Some(...) [Some] | provenance | | -| test_logging.rs:199:49:199:56 | password | test_logging.rs:199:33:199:56 | MacroExpr | provenance | | -| test_logging.rs:200:37:200:60 | MacroExpr | test_logging.rs:200:16:200:61 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | -| test_logging.rs:200:53:200:60 | password | test_logging.rs:200:37:200:60 | MacroExpr | provenance | | -| test_logging.rs:201:39:201:62 | ...::Some(...) [Some] | test_logging.rs:201:16:201:63 | ...::assert_failed | provenance | MaD:2 Sink:MaD:2 | -| test_logging.rs:201:39:201:62 | MacroExpr | test_logging.rs:201:39:201:62 | ...::Some(...) [Some] | provenance | | -| test_logging.rs:201:55:201:62 | password | test_logging.rs:201:39:201:62 | MacroExpr | provenance | | -| test_logging.rs:202:40:202:63 | ...::Some(...) [Some] | test_logging.rs:202:17:202:64 | ...::assert_failed | provenance | MaD:2 Sink:MaD:2 | -| test_logging.rs:202:40:202:63 | MacroExpr | test_logging.rs:202:40:202:63 | ...::Some(...) [Some] | provenance | | -| test_logging.rs:202:56:202:63 | password | test_logging.rs:202:40:202:63 | MacroExpr | provenance | | -| test_logging.rs:203:34:203:66 | res | test_logging.rs:203:42:203:65 | { ... } | provenance | | -| test_logging.rs:203:34:203:75 | ... .as_str() | test_logging.rs:203:27:203:32 | expect | provenance | MaD:1 Sink:MaD:1 | -| test_logging.rs:203:42:203:65 | ...::format(...) | test_logging.rs:203:34:203:66 | res | provenance | | -| test_logging.rs:203:42:203:65 | ...::must_use(...) | test_logging.rs:203:34:203:75 | ... .as_str() | provenance | MaD:15 | -| test_logging.rs:203:42:203:65 | MacroExpr | test_logging.rs:203:42:203:65 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:203:42:203:65 | { ... } | test_logging.rs:203:42:203:65 | ...::must_use(...) | provenance | MaD:17 | -| test_logging.rs:203:58:203:65 | password | test_logging.rs:203:42:203:65 | MacroExpr | provenance | | -| test_logging.rs:209:36:209:70 | res | test_logging.rs:209:44:209:69 | { ... } | provenance | | -| test_logging.rs:209:36:209:81 | ... .as_bytes() | test_logging.rs:209:30:209:34 | write | provenance | MaD:5 Sink:MaD:5 | -| test_logging.rs:209:44:209:69 | ...::format(...) | test_logging.rs:209:36:209:70 | res | provenance | | -| test_logging.rs:209:44:209:69 | ...::must_use(...) | test_logging.rs:209:36:209:81 | ... .as_bytes() | provenance | MaD:14 | -| test_logging.rs:209:44:209:69 | MacroExpr | test_logging.rs:209:44:209:69 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:209:44:209:69 | { ... } | test_logging.rs:209:44:209:69 | ...::must_use(...) | provenance | MaD:17 | -| test_logging.rs:209:62:209:69 | password | test_logging.rs:209:44:209:69 | MacroExpr | provenance | | -| test_logging.rs:210:40:210:74 | res | test_logging.rs:210:48:210:73 | { ... } | provenance | | -| test_logging.rs:210:40:210:85 | ... .as_bytes() | test_logging.rs:210:30:210:38 | write_all | provenance | MaD:6 Sink:MaD:6 | -| test_logging.rs:210:48:210:73 | ...::format(...) | test_logging.rs:210:40:210:74 | res | provenance | | -| test_logging.rs:210:48:210:73 | ...::must_use(...) | test_logging.rs:210:40:210:85 | ... .as_bytes() | provenance | MaD:14 | -| test_logging.rs:210:48:210:73 | MacroExpr | test_logging.rs:210:48:210:73 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:210:48:210:73 | { ... } | test_logging.rs:210:48:210:73 | ...::must_use(...) | provenance | MaD:17 | -| test_logging.rs:210:66:210:73 | password | test_logging.rs:210:48:210:73 | MacroExpr | provenance | | -| test_logging.rs:213:15:213:49 | res | test_logging.rs:213:23:213:48 | { ... } | provenance | | -| test_logging.rs:213:15:213:60 | ... .as_bytes() | test_logging.rs:213:9:213:13 | write | provenance | MaD:5 Sink:MaD:5 | -| test_logging.rs:213:23:213:48 | ...::format(...) | test_logging.rs:213:15:213:49 | res | provenance | | -| test_logging.rs:213:23:213:48 | ...::must_use(...) | test_logging.rs:213:15:213:60 | ... .as_bytes() | provenance | MaD:14 | -| test_logging.rs:213:23:213:48 | MacroExpr | test_logging.rs:213:23:213:48 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:213:23:213:48 | { ... } | test_logging.rs:213:23:213:48 | ...::must_use(...) | provenance | MaD:17 | -| test_logging.rs:213:41:213:48 | password | test_logging.rs:213:23:213:48 | MacroExpr | provenance | | -| test_logging.rs:216:15:216:49 | res | test_logging.rs:216:23:216:48 | { ... } | provenance | | -| test_logging.rs:216:15:216:60 | ... .as_bytes() | test_logging.rs:216:9:216:13 | write | provenance | MaD:4 Sink:MaD:4 | -| test_logging.rs:216:23:216:48 | ...::format(...) | test_logging.rs:216:15:216:49 | res | provenance | | -| test_logging.rs:216:23:216:48 | ...::must_use(...) | test_logging.rs:216:15:216:60 | ... .as_bytes() | provenance | MaD:14 | -| test_logging.rs:216:23:216:48 | MacroExpr | test_logging.rs:216:23:216:48 | ...::format(...) | provenance | MaD:16 | -| test_logging.rs:216:23:216:48 | { ... } | test_logging.rs:216:23:216:48 | ...::must_use(...) | provenance | MaD:17 | -| test_logging.rs:216:41:216:48 | password | test_logging.rs:216:23:216:48 | MacroExpr | provenance | | +| test_logging.rs:44:11:44:34 | MacroExpr | test_logging.rs:44:5:44:35 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:44:27:44:34 | password | test_logging.rs:44:11:44:34 | MacroExpr | provenance | | +| test_logging.rs:45:12:45:35 | MacroExpr | test_logging.rs:45:5:45:36 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:45:28:45:35 | password | test_logging.rs:45:12:45:35 | MacroExpr | provenance | | +| test_logging.rs:46:11:46:34 | MacroExpr | test_logging.rs:46:5:46:35 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:46:27:46:34 | password | test_logging.rs:46:11:46:34 | MacroExpr | provenance | | +| test_logging.rs:47:24:47:47 | MacroExpr | test_logging.rs:47:5:47:48 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:47:40:47:47 | password | test_logging.rs:47:24:47:47 | MacroExpr | provenance | | +| test_logging.rs:52:12:52:35 | MacroExpr | test_logging.rs:52:5:52:36 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:52:28:52:35 | password | test_logging.rs:52:12:52:35 | MacroExpr | provenance | | +| test_logging.rs:54:12:54:48 | MacroExpr | test_logging.rs:54:5:54:49 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:54:41:54:48 | password | test_logging.rs:54:12:54:48 | MacroExpr | provenance | | +| test_logging.rs:56:12:56:46 | MacroExpr | test_logging.rs:56:5:56:47 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:56:39:56:46 | password | test_logging.rs:56:12:56:46 | MacroExpr | provenance | | +| test_logging.rs:57:12:57:33 | MacroExpr | test_logging.rs:57:5:57:34 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:57:24:57:31 | password | test_logging.rs:57:12:57:33 | MacroExpr | provenance | | +| test_logging.rs:58:12:58:35 | MacroExpr | test_logging.rs:58:5:58:36 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:58:24:58:31 | password | test_logging.rs:58:12:58:35 | MacroExpr | provenance | | +| test_logging.rs:60:30:60:53 | MacroExpr | test_logging.rs:60:5:60:54 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:60:46:60:53 | password | test_logging.rs:60:30:60:53 | MacroExpr | provenance | | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:61:20:61:28 | &password | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0] | provenance | | +| test_logging.rs:61:20:61:28 | &password [&ref] | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0, &ref] | provenance | | +| test_logging.rs:61:20:61:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | provenance | | +| test_logging.rs:61:20:61:28 | TupleExpr [tuple.0] | test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | provenance | | +| test_logging.rs:61:21:61:28 | password | test_logging.rs:61:20:61:28 | &password | provenance | Config | +| test_logging.rs:61:21:61:28 | password | test_logging.rs:61:20:61:28 | &password [&ref] | provenance | | +| test_logging.rs:65:24:65:47 | MacroExpr | test_logging.rs:65:5:65:48 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:65:40:65:47 | password | test_logging.rs:65:24:65:47 | MacroExpr | provenance | | +| test_logging.rs:67:42:67:65 | MacroExpr | test_logging.rs:67:5:67:66 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:67:58:67:65 | password | test_logging.rs:67:42:67:65 | MacroExpr | provenance | | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:68:18:68:26 | &password | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0] | provenance | | +| test_logging.rs:68:18:68:26 | &password [&ref] | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0, &ref] | provenance | | +| test_logging.rs:68:18:68:26 | TupleExpr [tuple.0, &ref] | test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | provenance | | +| test_logging.rs:68:18:68:26 | TupleExpr [tuple.0] | test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | provenance | | +| test_logging.rs:68:19:68:26 | password | test_logging.rs:68:18:68:26 | &password | provenance | Config | +| test_logging.rs:68:19:68:26 | password | test_logging.rs:68:18:68:26 | &password [&ref] | provenance | | +| test_logging.rs:72:23:72:46 | MacroExpr | test_logging.rs:72:5:72:47 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:72:39:72:46 | password | test_logging.rs:72:23:72:46 | MacroExpr | provenance | | +| test_logging.rs:74:41:74:64 | MacroExpr | test_logging.rs:74:5:74:65 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:74:57:74:64 | password | test_logging.rs:74:41:74:64 | MacroExpr | provenance | | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:51 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:51 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | test_logging.rs:75:5:75:51 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:75:20:75:28 | &password | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0] | provenance | | +| test_logging.rs:75:20:75:28 | &password [&ref] | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0, &ref] | provenance | | +| test_logging.rs:75:20:75:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | provenance | | +| test_logging.rs:75:20:75:28 | TupleExpr [tuple.0] | test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | provenance | | +| test_logging.rs:75:21:75:28 | password | test_logging.rs:75:20:75:28 | &password | provenance | Config | +| test_logging.rs:75:21:75:28 | password | test_logging.rs:75:20:75:28 | &password [&ref] | provenance | | +| test_logging.rs:76:23:76:46 | MacroExpr | test_logging.rs:76:5:76:47 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:76:39:76:46 | password | test_logging.rs:76:23:76:46 | MacroExpr | provenance | | +| test_logging.rs:82:20:82:43 | MacroExpr | test_logging.rs:82:5:82:44 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:82:36:82:43 | password | test_logging.rs:82:20:82:43 | MacroExpr | provenance | | +| test_logging.rs:84:38:84:61 | MacroExpr | test_logging.rs:84:5:84:62 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:84:54:84:61 | password | test_logging.rs:84:38:84:61 | MacroExpr | provenance | | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:48 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:48 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | test_logging.rs:85:5:85:48 | ...::log | provenance | MaD:14 Sink:MaD:14 Sink:MaD:14 | +| test_logging.rs:85:20:85:28 | &password | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0] | provenance | | +| test_logging.rs:85:20:85:28 | &password [&ref] | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0, &ref] | provenance | | +| test_logging.rs:85:20:85:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | provenance | | +| test_logging.rs:85:20:85:28 | TupleExpr [tuple.0] | test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | provenance | | +| test_logging.rs:85:21:85:28 | password | test_logging.rs:85:20:85:28 | &password | provenance | Config | +| test_logging.rs:85:21:85:28 | password | test_logging.rs:85:20:85:28 | &password [&ref] | provenance | | +| test_logging.rs:86:20:86:43 | MacroExpr | test_logging.rs:86:5:86:44 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:86:36:86:43 | password | test_logging.rs:86:20:86:43 | MacroExpr | provenance | | +| test_logging.rs:93:9:93:10 | m1 | test_logging.rs:94:11:94:28 | MacroExpr | provenance | | +| test_logging.rs:93:14:93:22 | &password | test_logging.rs:93:9:93:10 | m1 | provenance | | +| test_logging.rs:93:15:93:22 | password | test_logging.rs:93:14:93:22 | &password | provenance | Config | +| test_logging.rs:94:11:94:28 | MacroExpr | test_logging.rs:94:5:94:29 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:96:9:96:10 | m2 | test_logging.rs:97:11:97:18 | MacroExpr | provenance | | +| test_logging.rs:96:41:96:49 | &password | test_logging.rs:96:9:96:10 | m2 | provenance | | +| test_logging.rs:96:42:96:49 | password | test_logging.rs:96:41:96:49 | &password | provenance | Config | +| test_logging.rs:97:11:97:18 | MacroExpr | test_logging.rs:97:5:97:19 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:99:9:99:10 | m3 | test_logging.rs:100:11:100:18 | MacroExpr | provenance | | +| test_logging.rs:99:14:99:46 | res | test_logging.rs:99:22:99:45 | { ... } | provenance | | +| test_logging.rs:99:22:99:45 | ...::format(...) | test_logging.rs:99:14:99:46 | res | provenance | | +| test_logging.rs:99:22:99:45 | ...::must_use(...) | test_logging.rs:99:9:99:10 | m3 | provenance | | +| test_logging.rs:99:22:99:45 | MacroExpr | test_logging.rs:99:22:99:45 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:99:22:99:45 | { ... } | test_logging.rs:99:22:99:45 | ...::must_use(...) | provenance | MaD:18 | +| test_logging.rs:99:38:99:45 | password | test_logging.rs:99:22:99:45 | MacroExpr | provenance | | +| test_logging.rs:100:11:100:18 | MacroExpr | test_logging.rs:100:5:100:19 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:118:12:118:41 | MacroExpr | test_logging.rs:118:5:118:42 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:118:28:118:41 | get_password(...) | test_logging.rs:118:12:118:41 | MacroExpr | provenance | | +| test_logging.rs:129:9:129:10 | t1 [tuple.1] | test_logging.rs:131:28:131:29 | t1 [tuple.1] | provenance | | +| test_logging.rs:129:14:129:33 | TupleExpr [tuple.1] | test_logging.rs:129:9:129:10 | t1 [tuple.1] | provenance | | +| test_logging.rs:129:25:129:32 | password | test_logging.rs:129:14:129:33 | TupleExpr [tuple.1] | provenance | | +| test_logging.rs:131:12:131:31 | MacroExpr | test_logging.rs:131:5:131:32 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:131:28:131:29 | t1 [tuple.1] | test_logging.rs:131:28:131:31 | t1.1 | provenance | | +| test_logging.rs:131:28:131:31 | t1.1 | test_logging.rs:131:12:131:31 | MacroExpr | provenance | | +| test_logging.rs:141:11:141:37 | MacroExpr | test_logging.rs:141:5:141:38 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:141:27:141:37 | s1.password | test_logging.rs:141:11:141:37 | MacroExpr | provenance | | +| test_logging.rs:151:11:151:37 | MacroExpr | test_logging.rs:151:5:151:38 | ...::log | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:151:27:151:37 | s2.password | test_logging.rs:151:11:151:37 | MacroExpr | provenance | | +| test_logging.rs:176:33:176:79 | &... | test_logging.rs:176:22:176:31 | log_expect | provenance | MaD:9 Sink:MaD:9 | +| test_logging.rs:176:33:176:79 | &... [&ref] | test_logging.rs:176:22:176:31 | log_expect | provenance | MaD:9 Sink:MaD:9 | +| test_logging.rs:176:34:176:79 | MacroExpr | test_logging.rs:176:33:176:79 | &... | provenance | Config | +| test_logging.rs:176:34:176:79 | MacroExpr | test_logging.rs:176:33:176:79 | &... [&ref] | provenance | | +| test_logging.rs:176:34:176:79 | res | test_logging.rs:176:42:176:78 | { ... } | provenance | | +| test_logging.rs:176:42:176:78 | ...::format(...) | test_logging.rs:176:34:176:79 | res | provenance | | +| test_logging.rs:176:42:176:78 | ...::must_use(...) | test_logging.rs:176:34:176:79 | MacroExpr | provenance | | +| test_logging.rs:176:42:176:78 | MacroExpr | test_logging.rs:176:42:176:78 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:176:42:176:78 | { ... } | test_logging.rs:176:42:176:78 | ...::must_use(...) | provenance | MaD:18 | +| test_logging.rs:176:70:176:78 | password2 | test_logging.rs:176:42:176:78 | MacroExpr | provenance | | +| test_logging.rs:180:35:180:81 | &... | test_logging.rs:180:24:180:33 | log_expect | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:180:35:180:81 | &... [&ref] | test_logging.rs:180:24:180:33 | log_expect | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:180:36:180:81 | MacroExpr | test_logging.rs:180:35:180:81 | &... | provenance | Config | +| test_logging.rs:180:36:180:81 | MacroExpr | test_logging.rs:180:35:180:81 | &... [&ref] | provenance | | +| test_logging.rs:180:36:180:81 | res | test_logging.rs:180:44:180:80 | { ... } | provenance | | +| test_logging.rs:180:44:180:80 | ...::format(...) | test_logging.rs:180:36:180:81 | res | provenance | | +| test_logging.rs:180:44:180:80 | ...::must_use(...) | test_logging.rs:180:36:180:81 | MacroExpr | provenance | | +| test_logging.rs:180:44:180:80 | MacroExpr | test_logging.rs:180:44:180:80 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:180:44:180:80 | { ... } | test_logging.rs:180:44:180:80 | ...::must_use(...) | provenance | MaD:18 | +| test_logging.rs:180:72:180:80 | password2 | test_logging.rs:180:44:180:80 | MacroExpr | provenance | | +| test_logging.rs:183:9:183:19 | err_result2 [Err] | test_logging.rs:184:13:184:23 | err_result2 [Err] | provenance | | +| test_logging.rs:183:47:183:68 | Err(...) [Err] | test_logging.rs:183:9:183:19 | err_result2 [Err] | provenance | | +| test_logging.rs:183:51:183:59 | password2 | test_logging.rs:183:51:183:67 | password2.clone() | provenance | generated | +| test_logging.rs:183:51:183:67 | password2.clone() | test_logging.rs:183:47:183:68 | Err(...) [Err] | provenance | | +| test_logging.rs:184:13:184:23 | err_result2 [Err] | test_logging.rs:184:25:184:34 | log_expect | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:187:9:187:19 | err_result3 [Err] | test_logging.rs:188:13:188:23 | err_result3 [Err] | provenance | | +| test_logging.rs:187:47:187:60 | Err(...) [Err] | test_logging.rs:187:9:187:19 | err_result3 [Err] | provenance | | +| test_logging.rs:187:51:187:59 | password2 | test_logging.rs:187:47:187:60 | Err(...) [Err] | provenance | | +| test_logging.rs:188:13:188:23 | err_result3 [Err] | test_logging.rs:188:25:188:34 | log_unwrap | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:192:12:192:37 | MacroExpr | test_logging.rs:192:5:192:38 | ...::_print | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:192:30:192:37 | password | test_logging.rs:192:12:192:37 | MacroExpr | provenance | | +| test_logging.rs:193:14:193:37 | MacroExpr | test_logging.rs:193:5:193:38 | ...::_print | provenance | MaD:8 Sink:MaD:8 | +| test_logging.rs:193:30:193:37 | password | test_logging.rs:193:14:193:37 | MacroExpr | provenance | | +| test_logging.rs:194:13:194:38 | MacroExpr | test_logging.rs:194:5:194:39 | ...::_eprint | provenance | MaD:7 Sink:MaD:7 | +| test_logging.rs:194:31:194:38 | password | test_logging.rs:194:13:194:38 | MacroExpr | provenance | | +| test_logging.rs:195:15:195:38 | MacroExpr | test_logging.rs:195:5:195:39 | ...::_eprint | provenance | MaD:7 Sink:MaD:7 | +| test_logging.rs:195:31:195:38 | password | test_logging.rs:195:15:195:38 | MacroExpr | provenance | | +| test_logging.rs:199:20:199:43 | MacroExpr | test_logging.rs:199:13:199:44 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:199:36:199:43 | password | test_logging.rs:199:20:199:43 | MacroExpr | provenance | | +| test_logging.rs:202:19:202:42 | MacroExpr | test_logging.rs:202:13:202:43 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:202:35:202:42 | password | test_logging.rs:202:19:202:42 | MacroExpr | provenance | | +| test_logging.rs:205:28:205:51 | MacroExpr | test_logging.rs:205:13:205:52 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:205:44:205:51 | password | test_logging.rs:205:28:205:51 | MacroExpr | provenance | | +| test_logging.rs:208:26:208:49 | MacroExpr | test_logging.rs:208:13:208:50 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:208:42:208:49 | password | test_logging.rs:208:26:208:49 | MacroExpr | provenance | | +| test_logging.rs:211:28:211:51 | MacroExpr | test_logging.rs:211:13:211:52 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:211:44:211:51 | password | test_logging.rs:211:28:211:51 | MacroExpr | provenance | | +| test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | test_logging.rs:214:13:214:54 | ...::assert_failed | provenance | MaD:2 Sink:MaD:2 | +| test_logging.rs:214:30:214:53 | MacroExpr | test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | provenance | | +| test_logging.rs:214:46:214:53 | password | test_logging.rs:214:30:214:53 | MacroExpr | provenance | | +| test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | test_logging.rs:217:13:217:54 | ...::assert_failed | provenance | MaD:2 Sink:MaD:2 | +| test_logging.rs:217:30:217:53 | MacroExpr | test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | provenance | | +| test_logging.rs:217:46:217:53 | password | test_logging.rs:217:30:217:53 | MacroExpr | provenance | | +| test_logging.rs:220:34:220:57 | MacroExpr | test_logging.rs:220:13:220:58 | ...::panic_fmt | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:220:50:220:57 | password | test_logging.rs:220:34:220:57 | MacroExpr | provenance | | +| test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | test_logging.rs:223:13:223:60 | ...::assert_failed | provenance | MaD:2 Sink:MaD:2 | +| test_logging.rs:223:36:223:59 | MacroExpr | test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | provenance | | +| test_logging.rs:223:52:223:59 | password | test_logging.rs:223:36:223:59 | MacroExpr | provenance | | +| test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | test_logging.rs:226:13:226:60 | ...::assert_failed | provenance | MaD:2 Sink:MaD:2 | +| test_logging.rs:226:36:226:59 | MacroExpr | test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | provenance | | +| test_logging.rs:226:52:226:59 | password | test_logging.rs:226:36:226:59 | MacroExpr | provenance | | +| test_logging.rs:229:30:229:62 | res | test_logging.rs:229:38:229:61 | { ... } | provenance | | +| test_logging.rs:229:30:229:71 | ... .as_str() | test_logging.rs:229:23:229:28 | expect | provenance | MaD:1 Sink:MaD:1 | +| test_logging.rs:229:38:229:61 | ...::format(...) | test_logging.rs:229:30:229:62 | res | provenance | | +| test_logging.rs:229:38:229:61 | ...::must_use(...) | test_logging.rs:229:30:229:71 | ... .as_str() | provenance | MaD:16 | +| test_logging.rs:229:38:229:61 | MacroExpr | test_logging.rs:229:38:229:61 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:229:38:229:61 | { ... } | test_logging.rs:229:38:229:61 | ...::must_use(...) | provenance | MaD:18 | +| test_logging.rs:229:54:229:61 | password | test_logging.rs:229:38:229:61 | MacroExpr | provenance | | +| test_logging.rs:242:16:242:50 | res | test_logging.rs:242:24:242:49 | { ... } | provenance | | +| test_logging.rs:242:16:242:61 | ... .as_bytes() | test_logging.rs:242:10:242:14 | write | provenance | MaD:5 Sink:MaD:5 | +| test_logging.rs:242:24:242:49 | ...::format(...) | test_logging.rs:242:16:242:50 | res | provenance | | +| test_logging.rs:242:24:242:49 | ...::must_use(...) | test_logging.rs:242:16:242:61 | ... .as_bytes() | provenance | MaD:15 | +| test_logging.rs:242:24:242:49 | MacroExpr | test_logging.rs:242:24:242:49 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:242:24:242:49 | { ... } | test_logging.rs:242:24:242:49 | ...::must_use(...) | provenance | MaD:18 | +| test_logging.rs:242:42:242:49 | password | test_logging.rs:242:24:242:49 | MacroExpr | provenance | | +| test_logging.rs:245:20:245:54 | res | test_logging.rs:245:28:245:53 | { ... } | provenance | | +| test_logging.rs:245:20:245:65 | ... .as_bytes() | test_logging.rs:245:10:245:18 | write_all | provenance | MaD:6 Sink:MaD:6 | +| test_logging.rs:245:28:245:53 | ...::format(...) | test_logging.rs:245:20:245:54 | res | provenance | | +| test_logging.rs:245:28:245:53 | ...::must_use(...) | test_logging.rs:245:20:245:65 | ... .as_bytes() | provenance | MaD:15 | +| test_logging.rs:245:28:245:53 | MacroExpr | test_logging.rs:245:28:245:53 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:245:28:245:53 | { ... } | test_logging.rs:245:28:245:53 | ...::must_use(...) | provenance | MaD:18 | +| test_logging.rs:245:46:245:53 | password | test_logging.rs:245:28:245:53 | MacroExpr | provenance | | +| test_logging.rs:248:15:248:49 | res | test_logging.rs:248:23:248:48 | { ... } | provenance | | +| test_logging.rs:248:15:248:60 | ... .as_bytes() | test_logging.rs:248:9:248:13 | write | provenance | MaD:5 Sink:MaD:5 | +| test_logging.rs:248:23:248:48 | ...::format(...) | test_logging.rs:248:15:248:49 | res | provenance | | +| test_logging.rs:248:23:248:48 | ...::must_use(...) | test_logging.rs:248:15:248:60 | ... .as_bytes() | provenance | MaD:15 | +| test_logging.rs:248:23:248:48 | MacroExpr | test_logging.rs:248:23:248:48 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:248:23:248:48 | { ... } | test_logging.rs:248:23:248:48 | ...::must_use(...) | provenance | MaD:18 | +| test_logging.rs:248:41:248:48 | password | test_logging.rs:248:23:248:48 | MacroExpr | provenance | | +| test_logging.rs:251:15:251:49 | res | test_logging.rs:251:23:251:48 | { ... } | provenance | | +| test_logging.rs:251:15:251:60 | ... .as_bytes() | test_logging.rs:251:9:251:13 | write | provenance | MaD:4 Sink:MaD:4 | +| test_logging.rs:251:23:251:48 | ...::format(...) | test_logging.rs:251:15:251:49 | res | provenance | | +| test_logging.rs:251:23:251:48 | ...::must_use(...) | test_logging.rs:251:15:251:60 | ... .as_bytes() | provenance | MaD:15 | +| test_logging.rs:251:23:251:48 | MacroExpr | test_logging.rs:251:23:251:48 | ...::format(...) | provenance | MaD:17 | +| test_logging.rs:251:23:251:48 | { ... } | test_logging.rs:251:23:251:48 | ...::must_use(...) | provenance | MaD:18 | +| test_logging.rs:251:41:251:48 | password | test_logging.rs:251:23:251:48 | MacroExpr | provenance | | models | 1 | Sink: lang:core; ::expect; log-injection; Argument[0] | | 2 | Sink: lang:core; crate::panicking::assert_failed; log-injection; Argument[3].Field[crate::option::Option::Some(0)] | @@ -259,250 +265,257 @@ models | 8 | Sink: lang:std; crate::io::stdio::_print; log-injection; Argument[0] | | 9 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_expect; log-injection; Argument[0] | | 10 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_expect; log-injection; Argument[0] | -| 11 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_unwrap; log-injection; Argument[self].Field[crate::result::Result::Err(0)] | -| 12 | Sink: repo:https://github.com/rust-lang/log:log; crate::__private_api::log; log-injection; Argument[1] | -| 13 | Sink: repo:https://github.com/rust-lang/log:log; crate::__private_api::log; log-injection; Argument[3] | -| 14 | Summary: lang:alloc; ::as_bytes; Argument[self]; ReturnValue; value | -| 15 | Summary: lang:alloc; ::as_str; Argument[self]; ReturnValue; value | -| 16 | Summary: lang:alloc; crate::fmt::format; Argument[0]; ReturnValue; taint | -| 17 | Summary: lang:core; crate::hint::must_use; Argument[0]; ReturnValue; value | +| 11 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_expect; log-injection; Argument[self].Field[crate::result::Result::Err(0)] | +| 12 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_unwrap; log-injection; Argument[self].Field[crate::result::Result::Err(0)] | +| 13 | Sink: repo:https://github.com/rust-lang/log:log; crate::__private_api::log; log-injection; Argument[1] | +| 14 | Sink: repo:https://github.com/rust-lang/log:log; crate::__private_api::log; log-injection; Argument[3] | +| 15 | Summary: lang:alloc; ::as_bytes; Argument[self]; ReturnValue; value | +| 16 | Summary: lang:alloc; ::as_str; Argument[self]; ReturnValue; value | +| 17 | Summary: lang:alloc; crate::fmt::format; Argument[0]; ReturnValue; taint | +| 18 | Summary: lang:core; crate::hint::must_use; Argument[0]; ReturnValue; value | nodes +| test_logging.rs:42:5:42:36 | ...::log | semmle.label | ...::log | +| test_logging.rs:42:12:42:35 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:42:28:42:35 | password | semmle.label | password | | test_logging.rs:43:5:43:36 | ...::log | semmle.label | ...::log | | test_logging.rs:43:12:43:35 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:43:28:43:35 | password | semmle.label | password | -| test_logging.rs:44:5:44:36 | ...::log | semmle.label | ...::log | -| test_logging.rs:44:12:44:35 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:44:28:44:35 | password | semmle.label | password | -| test_logging.rs:45:5:45:35 | ...::log | semmle.label | ...::log | -| test_logging.rs:45:11:45:34 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:45:27:45:34 | password | semmle.label | password | -| test_logging.rs:46:5:46:36 | ...::log | semmle.label | ...::log | -| test_logging.rs:46:12:46:35 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:46:28:46:35 | password | semmle.label | password | -| test_logging.rs:47:5:47:35 | ...::log | semmle.label | ...::log | -| test_logging.rs:47:11:47:34 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:47:27:47:34 | password | semmle.label | password | -| test_logging.rs:48:5:48:48 | ...::log | semmle.label | ...::log | -| test_logging.rs:48:24:48:47 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:48:40:48:47 | password | semmle.label | password | -| test_logging.rs:53:5:53:36 | ...::log | semmle.label | ...::log | -| test_logging.rs:53:12:53:35 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:53:28:53:35 | password | semmle.label | password | -| test_logging.rs:55:5:55:49 | ...::log | semmle.label | ...::log | -| test_logging.rs:55:12:55:48 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:55:41:55:48 | password | semmle.label | password | -| test_logging.rs:57:5:57:47 | ...::log | semmle.label | ...::log | -| test_logging.rs:57:12:57:46 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:57:39:57:46 | password | semmle.label | password | -| test_logging.rs:58:5:58:34 | ...::log | semmle.label | ...::log | -| test_logging.rs:58:12:58:33 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:44:5:44:35 | ...::log | semmle.label | ...::log | +| test_logging.rs:44:11:44:34 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:44:27:44:34 | password | semmle.label | password | +| test_logging.rs:45:5:45:36 | ...::log | semmle.label | ...::log | +| test_logging.rs:45:12:45:35 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:45:28:45:35 | password | semmle.label | password | +| test_logging.rs:46:5:46:35 | ...::log | semmle.label | ...::log | +| test_logging.rs:46:11:46:34 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:46:27:46:34 | password | semmle.label | password | +| test_logging.rs:47:5:47:48 | ...::log | semmle.label | ...::log | +| test_logging.rs:47:24:47:47 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:47:40:47:47 | password | semmle.label | password | +| test_logging.rs:52:5:52:36 | ...::log | semmle.label | ...::log | +| test_logging.rs:52:12:52:35 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:52:28:52:35 | password | semmle.label | password | +| test_logging.rs:54:5:54:49 | ...::log | semmle.label | ...::log | +| test_logging.rs:54:12:54:48 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:54:41:54:48 | password | semmle.label | password | +| test_logging.rs:56:5:56:47 | ...::log | semmle.label | ...::log | +| test_logging.rs:56:12:56:46 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:56:39:56:46 | password | semmle.label | password | +| test_logging.rs:57:5:57:34 | ...::log | semmle.label | ...::log | +| test_logging.rs:57:12:57:33 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:57:24:57:31 | password | semmle.label | password | +| test_logging.rs:58:5:58:36 | ...::log | semmle.label | ...::log | +| test_logging.rs:58:12:58:35 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:58:24:58:31 | password | semmle.label | password | -| test_logging.rs:59:5:59:36 | ...::log | semmle.label | ...::log | -| test_logging.rs:59:12:59:35 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:59:24:59:31 | password | semmle.label | password | -| test_logging.rs:61:5:61:54 | ...::log | semmle.label | ...::log | -| test_logging.rs:61:30:61:53 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:61:46:61:53 | password | semmle.label | password | -| test_logging.rs:62:5:62:55 | ...::log | semmle.label | ...::log | -| test_logging.rs:62:20:62:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | -| test_logging.rs:62:20:62:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | -| test_logging.rs:62:20:62:28 | &password | semmle.label | &password | -| test_logging.rs:62:20:62:28 | &password [&ref] | semmle.label | &password [&ref] | -| test_logging.rs:62:20:62:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | -| test_logging.rs:62:20:62:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| test_logging.rs:62:21:62:28 | password | semmle.label | password | -| test_logging.rs:66:5:66:48 | ...::log | semmle.label | ...::log | -| test_logging.rs:66:24:66:47 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:66:40:66:47 | password | semmle.label | password | -| test_logging.rs:68:5:68:66 | ...::log | semmle.label | ...::log | -| test_logging.rs:68:42:68:65 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:68:58:68:65 | password | semmle.label | password | -| test_logging.rs:69:5:69:67 | ...::log | semmle.label | ...::log | -| test_logging.rs:69:18:69:26 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | -| test_logging.rs:69:18:69:26 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | -| test_logging.rs:69:18:69:26 | &password | semmle.label | &password | -| test_logging.rs:69:18:69:26 | &password [&ref] | semmle.label | &password [&ref] | -| test_logging.rs:69:18:69:26 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | -| test_logging.rs:69:18:69:26 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| test_logging.rs:69:19:69:26 | password | semmle.label | password | -| test_logging.rs:73:5:73:47 | ...::log | semmle.label | ...::log | -| test_logging.rs:73:23:73:46 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:73:39:73:46 | password | semmle.label | password | -| test_logging.rs:75:5:75:65 | ...::log | semmle.label | ...::log | -| test_logging.rs:75:41:75:64 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:75:57:75:64 | password | semmle.label | password | -| test_logging.rs:76:5:76:51 | ...::log | semmle.label | ...::log | -| test_logging.rs:76:20:76:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | -| test_logging.rs:76:20:76:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | -| test_logging.rs:76:20:76:28 | &password | semmle.label | &password | -| test_logging.rs:76:20:76:28 | &password [&ref] | semmle.label | &password [&ref] | -| test_logging.rs:76:20:76:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | -| test_logging.rs:76:20:76:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| test_logging.rs:76:21:76:28 | password | semmle.label | password | -| test_logging.rs:77:5:77:47 | ...::log | semmle.label | ...::log | -| test_logging.rs:77:23:77:46 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:77:39:77:46 | password | semmle.label | password | -| test_logging.rs:83:5:83:44 | ...::log | semmle.label | ...::log | -| test_logging.rs:83:20:83:43 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:83:36:83:43 | password | semmle.label | password | -| test_logging.rs:85:5:85:62 | ...::log | semmle.label | ...::log | -| test_logging.rs:85:38:85:61 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:85:54:85:61 | password | semmle.label | password | -| test_logging.rs:86:5:86:48 | ...::log | semmle.label | ...::log | -| test_logging.rs:86:20:86:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | -| test_logging.rs:86:20:86:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | -| test_logging.rs:86:20:86:28 | &password | semmle.label | &password | -| test_logging.rs:86:20:86:28 | &password [&ref] | semmle.label | &password [&ref] | -| test_logging.rs:86:20:86:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | -| test_logging.rs:86:20:86:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| test_logging.rs:86:21:86:28 | password | semmle.label | password | -| test_logging.rs:87:5:87:44 | ...::log | semmle.label | ...::log | -| test_logging.rs:87:20:87:43 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:87:36:87:43 | password | semmle.label | password | -| test_logging.rs:94:9:94:10 | m1 | semmle.label | m1 | -| test_logging.rs:94:14:94:22 | &password | semmle.label | &password | -| test_logging.rs:94:15:94:22 | password | semmle.label | password | -| test_logging.rs:95:5:95:29 | ...::log | semmle.label | ...::log | -| test_logging.rs:95:11:95:28 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:97:9:97:10 | m2 | semmle.label | m2 | -| test_logging.rs:97:41:97:49 | &password | semmle.label | &password | -| test_logging.rs:97:42:97:49 | password | semmle.label | password | -| test_logging.rs:98:5:98:19 | ...::log | semmle.label | ...::log | -| test_logging.rs:98:11:98:18 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:100:9:100:10 | m3 | semmle.label | m3 | -| test_logging.rs:100:14:100:46 | res | semmle.label | res | -| test_logging.rs:100:22:100:45 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:100:22:100:45 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:100:22:100:45 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:100:22:100:45 | { ... } | semmle.label | { ... } | -| test_logging.rs:100:38:100:45 | password | semmle.label | password | -| test_logging.rs:101:5:101:19 | ...::log | semmle.label | ...::log | -| test_logging.rs:101:11:101:18 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:119:5:119:42 | ...::log | semmle.label | ...::log | -| test_logging.rs:119:12:119:41 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:119:28:119:41 | get_password(...) | semmle.label | get_password(...) | -| test_logging.rs:130:9:130:10 | t1 [tuple.1] | semmle.label | t1 [tuple.1] | -| test_logging.rs:130:14:130:33 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] | -| test_logging.rs:130:25:130:32 | password | semmle.label | password | -| test_logging.rs:132:5:132:32 | ...::log | semmle.label | ...::log | -| test_logging.rs:132:12:132:31 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:132:28:132:29 | t1 [tuple.1] | semmle.label | t1 [tuple.1] | -| test_logging.rs:132:28:132:31 | t1.1 | semmle.label | t1.1 | -| test_logging.rs:139:5:139:38 | ...::log | semmle.label | ...::log | -| test_logging.rs:139:11:139:37 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:139:27:139:37 | s1.password | semmle.label | s1.password | -| test_logging.rs:146:5:146:38 | ...::log | semmle.label | ...::log | -| test_logging.rs:146:11:146:37 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:146:27:146:37 | s2.password | semmle.label | s2.password | -| test_logging.rs:171:22:171:31 | log_expect | semmle.label | log_expect | -| test_logging.rs:171:33:171:79 | &... | semmle.label | &... | -| test_logging.rs:171:33:171:79 | &... [&ref] | semmle.label | &... [&ref] | -| test_logging.rs:171:34:171:79 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:171:34:171:79 | res | semmle.label | res | -| test_logging.rs:171:42:171:78 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:171:42:171:78 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:171:42:171:78 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:171:42:171:78 | { ... } | semmle.label | { ... } | -| test_logging.rs:171:70:171:78 | password2 | semmle.label | password2 | -| test_logging.rs:175:24:175:33 | log_expect | semmle.label | log_expect | -| test_logging.rs:175:35:175:81 | &... | semmle.label | &... | -| test_logging.rs:175:35:175:81 | &... [&ref] | semmle.label | &... [&ref] | -| test_logging.rs:175:36:175:81 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:175:36:175:81 | res | semmle.label | res | -| test_logging.rs:175:44:175:80 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:175:44:175:80 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:175:44:175:80 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:175:44:175:80 | { ... } | semmle.label | { ... } | -| test_logging.rs:175:72:175:80 | password2 | semmle.label | password2 | -| test_logging.rs:182:9:182:19 | err_result3 [Err] | semmle.label | err_result3 [Err] | -| test_logging.rs:182:47:182:60 | Err(...) [Err] | semmle.label | Err(...) [Err] | -| test_logging.rs:182:51:182:59 | password2 | semmle.label | password2 | -| test_logging.rs:183:13:183:23 | err_result3 [Err] | semmle.label | err_result3 [Err] | -| test_logging.rs:183:25:183:34 | log_unwrap | semmle.label | log_unwrap | -| test_logging.rs:187:5:187:38 | ...::_print | semmle.label | ...::_print | -| test_logging.rs:187:12:187:37 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:187:30:187:37 | password | semmle.label | password | -| test_logging.rs:188:5:188:38 | ...::_print | semmle.label | ...::_print | -| test_logging.rs:188:14:188:37 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:188:30:188:37 | password | semmle.label | password | -| test_logging.rs:189:5:189:39 | ...::_eprint | semmle.label | ...::_eprint | -| test_logging.rs:189:13:189:38 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:189:31:189:38 | password | semmle.label | password | -| test_logging.rs:190:5:190:39 | ...::_eprint | semmle.label | ...::_eprint | -| test_logging.rs:190:15:190:38 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:190:31:190:38 | password | semmle.label | password | -| test_logging.rs:193:16:193:47 | ...::panic_fmt | semmle.label | ...::panic_fmt | -| test_logging.rs:193:23:193:46 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:193:39:193:46 | password | semmle.label | password | -| test_logging.rs:194:16:194:46 | ...::panic_fmt | semmle.label | ...::panic_fmt | -| test_logging.rs:194:22:194:45 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:194:38:194:45 | password | semmle.label | password | -| test_logging.rs:195:16:195:55 | ...::panic_fmt | semmle.label | ...::panic_fmt | -| test_logging.rs:195:31:195:54 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:195:47:195:54 | password | semmle.label | password | -| test_logging.rs:196:16:196:53 | ...::panic_fmt | semmle.label | ...::panic_fmt | -| test_logging.rs:196:29:196:52 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:196:45:196:52 | password | semmle.label | password | -| test_logging.rs:197:16:197:55 | ...::panic_fmt | semmle.label | ...::panic_fmt | -| test_logging.rs:197:31:197:54 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:197:47:197:54 | password | semmle.label | password | -| test_logging.rs:198:16:198:57 | ...::assert_failed | semmle.label | ...::assert_failed | -| test_logging.rs:198:33:198:56 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | -| test_logging.rs:198:33:198:56 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:198:49:198:56 | password | semmle.label | password | -| test_logging.rs:199:16:199:57 | ...::assert_failed | semmle.label | ...::assert_failed | -| test_logging.rs:199:33:199:56 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | -| test_logging.rs:199:33:199:56 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:199:49:199:56 | password | semmle.label | password | -| test_logging.rs:200:16:200:61 | ...::panic_fmt | semmle.label | ...::panic_fmt | -| test_logging.rs:200:37:200:60 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:200:53:200:60 | password | semmle.label | password | -| test_logging.rs:201:16:201:63 | ...::assert_failed | semmle.label | ...::assert_failed | -| test_logging.rs:201:39:201:62 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | -| test_logging.rs:201:39:201:62 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:201:55:201:62 | password | semmle.label | password | -| test_logging.rs:202:17:202:64 | ...::assert_failed | semmle.label | ...::assert_failed | -| test_logging.rs:202:40:202:63 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | -| test_logging.rs:202:40:202:63 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:202:56:202:63 | password | semmle.label | password | -| test_logging.rs:203:27:203:32 | expect | semmle.label | expect | -| test_logging.rs:203:34:203:66 | res | semmle.label | res | -| test_logging.rs:203:34:203:75 | ... .as_str() | semmle.label | ... .as_str() | -| test_logging.rs:203:42:203:65 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:203:42:203:65 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:203:42:203:65 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:203:42:203:65 | { ... } | semmle.label | { ... } | -| test_logging.rs:203:58:203:65 | password | semmle.label | password | -| test_logging.rs:209:30:209:34 | write | semmle.label | write | -| test_logging.rs:209:36:209:70 | res | semmle.label | res | -| test_logging.rs:209:36:209:81 | ... .as_bytes() | semmle.label | ... .as_bytes() | -| test_logging.rs:209:44:209:69 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:209:44:209:69 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:209:44:209:69 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:209:44:209:69 | { ... } | semmle.label | { ... } | -| test_logging.rs:209:62:209:69 | password | semmle.label | password | -| test_logging.rs:210:30:210:38 | write_all | semmle.label | write_all | -| test_logging.rs:210:40:210:74 | res | semmle.label | res | -| test_logging.rs:210:40:210:85 | ... .as_bytes() | semmle.label | ... .as_bytes() | -| test_logging.rs:210:48:210:73 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:210:48:210:73 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:210:48:210:73 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:210:48:210:73 | { ... } | semmle.label | { ... } | -| test_logging.rs:210:66:210:73 | password | semmle.label | password | -| test_logging.rs:213:9:213:13 | write | semmle.label | write | -| test_logging.rs:213:15:213:49 | res | semmle.label | res | -| test_logging.rs:213:15:213:60 | ... .as_bytes() | semmle.label | ... .as_bytes() | -| test_logging.rs:213:23:213:48 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:213:23:213:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:213:23:213:48 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:213:23:213:48 | { ... } | semmle.label | { ... } | -| test_logging.rs:213:41:213:48 | password | semmle.label | password | -| test_logging.rs:216:9:216:13 | write | semmle.label | write | -| test_logging.rs:216:15:216:49 | res | semmle.label | res | -| test_logging.rs:216:15:216:60 | ... .as_bytes() | semmle.label | ... .as_bytes() | -| test_logging.rs:216:23:216:48 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:216:23:216:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:216:23:216:48 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:216:23:216:48 | { ... } | semmle.label | { ... } | -| test_logging.rs:216:41:216:48 | password | semmle.label | password | +| test_logging.rs:60:5:60:54 | ...::log | semmle.label | ...::log | +| test_logging.rs:60:30:60:53 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:60:46:60:53 | password | semmle.label | password | +| test_logging.rs:61:5:61:55 | ...::log | semmle.label | ...::log | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | +| test_logging.rs:61:20:61:28 | &password | semmle.label | &password | +| test_logging.rs:61:20:61:28 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:61:20:61:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | +| test_logging.rs:61:20:61:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| test_logging.rs:61:21:61:28 | password | semmle.label | password | +| test_logging.rs:65:5:65:48 | ...::log | semmle.label | ...::log | +| test_logging.rs:65:24:65:47 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:65:40:65:47 | password | semmle.label | password | +| test_logging.rs:67:5:67:66 | ...::log | semmle.label | ...::log | +| test_logging.rs:67:42:67:65 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:67:58:67:65 | password | semmle.label | password | +| test_logging.rs:68:5:68:67 | ...::log | semmle.label | ...::log | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | +| test_logging.rs:68:18:68:26 | &password | semmle.label | &password | +| test_logging.rs:68:18:68:26 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:68:18:68:26 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | +| test_logging.rs:68:18:68:26 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| test_logging.rs:68:19:68:26 | password | semmle.label | password | +| test_logging.rs:72:5:72:47 | ...::log | semmle.label | ...::log | +| test_logging.rs:72:23:72:46 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:72:39:72:46 | password | semmle.label | password | +| test_logging.rs:74:5:74:65 | ...::log | semmle.label | ...::log | +| test_logging.rs:74:41:74:64 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:74:57:74:64 | password | semmle.label | password | +| test_logging.rs:75:5:75:51 | ...::log | semmle.label | ...::log | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | +| test_logging.rs:75:20:75:28 | &password | semmle.label | &password | +| test_logging.rs:75:20:75:28 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:75:20:75:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | +| test_logging.rs:75:20:75:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| test_logging.rs:75:21:75:28 | password | semmle.label | password | +| test_logging.rs:76:5:76:47 | ...::log | semmle.label | ...::log | +| test_logging.rs:76:23:76:46 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:76:39:76:46 | password | semmle.label | password | +| test_logging.rs:82:5:82:44 | ...::log | semmle.label | ...::log | +| test_logging.rs:82:20:82:43 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:82:36:82:43 | password | semmle.label | password | +| test_logging.rs:84:5:84:62 | ...::log | semmle.label | ...::log | +| test_logging.rs:84:38:84:61 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:84:54:84:61 | password | semmle.label | password | +| test_logging.rs:85:5:85:48 | ...::log | semmle.label | ...::log | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | +| test_logging.rs:85:20:85:28 | &password | semmle.label | &password | +| test_logging.rs:85:20:85:28 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:85:20:85:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | +| test_logging.rs:85:20:85:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| test_logging.rs:85:21:85:28 | password | semmle.label | password | +| test_logging.rs:86:5:86:44 | ...::log | semmle.label | ...::log | +| test_logging.rs:86:20:86:43 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:86:36:86:43 | password | semmle.label | password | +| test_logging.rs:93:9:93:10 | m1 | semmle.label | m1 | +| test_logging.rs:93:14:93:22 | &password | semmle.label | &password | +| test_logging.rs:93:15:93:22 | password | semmle.label | password | +| test_logging.rs:94:5:94:29 | ...::log | semmle.label | ...::log | +| test_logging.rs:94:11:94:28 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:96:9:96:10 | m2 | semmle.label | m2 | +| test_logging.rs:96:41:96:49 | &password | semmle.label | &password | +| test_logging.rs:96:42:96:49 | password | semmle.label | password | +| test_logging.rs:97:5:97:19 | ...::log | semmle.label | ...::log | +| test_logging.rs:97:11:97:18 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:99:9:99:10 | m3 | semmle.label | m3 | +| test_logging.rs:99:14:99:46 | res | semmle.label | res | +| test_logging.rs:99:22:99:45 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:99:22:99:45 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:99:22:99:45 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:99:22:99:45 | { ... } | semmle.label | { ... } | +| test_logging.rs:99:38:99:45 | password | semmle.label | password | +| test_logging.rs:100:5:100:19 | ...::log | semmle.label | ...::log | +| test_logging.rs:100:11:100:18 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:118:5:118:42 | ...::log | semmle.label | ...::log | +| test_logging.rs:118:12:118:41 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:118:28:118:41 | get_password(...) | semmle.label | get_password(...) | +| test_logging.rs:129:9:129:10 | t1 [tuple.1] | semmle.label | t1 [tuple.1] | +| test_logging.rs:129:14:129:33 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] | +| test_logging.rs:129:25:129:32 | password | semmle.label | password | +| test_logging.rs:131:5:131:32 | ...::log | semmle.label | ...::log | +| test_logging.rs:131:12:131:31 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:131:28:131:29 | t1 [tuple.1] | semmle.label | t1 [tuple.1] | +| test_logging.rs:131:28:131:31 | t1.1 | semmle.label | t1.1 | +| test_logging.rs:141:5:141:38 | ...::log | semmle.label | ...::log | +| test_logging.rs:141:11:141:37 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:141:27:141:37 | s1.password | semmle.label | s1.password | +| test_logging.rs:151:5:151:38 | ...::log | semmle.label | ...::log | +| test_logging.rs:151:11:151:37 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:151:27:151:37 | s2.password | semmle.label | s2.password | +| test_logging.rs:176:22:176:31 | log_expect | semmle.label | log_expect | +| test_logging.rs:176:33:176:79 | &... | semmle.label | &... | +| test_logging.rs:176:33:176:79 | &... [&ref] | semmle.label | &... [&ref] | +| test_logging.rs:176:34:176:79 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:176:34:176:79 | res | semmle.label | res | +| test_logging.rs:176:42:176:78 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:176:42:176:78 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:176:42:176:78 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:176:42:176:78 | { ... } | semmle.label | { ... } | +| test_logging.rs:176:70:176:78 | password2 | semmle.label | password2 | +| test_logging.rs:180:24:180:33 | log_expect | semmle.label | log_expect | +| test_logging.rs:180:35:180:81 | &... | semmle.label | &... | +| test_logging.rs:180:35:180:81 | &... [&ref] | semmle.label | &... [&ref] | +| test_logging.rs:180:36:180:81 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:180:36:180:81 | res | semmle.label | res | +| test_logging.rs:180:44:180:80 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:180:44:180:80 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:180:44:180:80 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:180:44:180:80 | { ... } | semmle.label | { ... } | +| test_logging.rs:180:72:180:80 | password2 | semmle.label | password2 | +| test_logging.rs:183:9:183:19 | err_result2 [Err] | semmle.label | err_result2 [Err] | +| test_logging.rs:183:47:183:68 | Err(...) [Err] | semmle.label | Err(...) [Err] | +| test_logging.rs:183:51:183:59 | password2 | semmle.label | password2 | +| test_logging.rs:183:51:183:67 | password2.clone() | semmle.label | password2.clone() | +| test_logging.rs:184:13:184:23 | err_result2 [Err] | semmle.label | err_result2 [Err] | +| test_logging.rs:184:25:184:34 | log_expect | semmle.label | log_expect | +| test_logging.rs:187:9:187:19 | err_result3 [Err] | semmle.label | err_result3 [Err] | +| test_logging.rs:187:47:187:60 | Err(...) [Err] | semmle.label | Err(...) [Err] | +| test_logging.rs:187:51:187:59 | password2 | semmle.label | password2 | +| test_logging.rs:188:13:188:23 | err_result3 [Err] | semmle.label | err_result3 [Err] | +| test_logging.rs:188:25:188:34 | log_unwrap | semmle.label | log_unwrap | +| test_logging.rs:192:5:192:38 | ...::_print | semmle.label | ...::_print | +| test_logging.rs:192:12:192:37 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:192:30:192:37 | password | semmle.label | password | +| test_logging.rs:193:5:193:38 | ...::_print | semmle.label | ...::_print | +| test_logging.rs:193:14:193:37 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:193:30:193:37 | password | semmle.label | password | +| test_logging.rs:194:5:194:39 | ...::_eprint | semmle.label | ...::_eprint | +| test_logging.rs:194:13:194:38 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:194:31:194:38 | password | semmle.label | password | +| test_logging.rs:195:5:195:39 | ...::_eprint | semmle.label | ...::_eprint | +| test_logging.rs:195:15:195:38 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:195:31:195:38 | password | semmle.label | password | +| test_logging.rs:199:13:199:44 | ...::panic_fmt | semmle.label | ...::panic_fmt | +| test_logging.rs:199:20:199:43 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:199:36:199:43 | password | semmle.label | password | +| test_logging.rs:202:13:202:43 | ...::panic_fmt | semmle.label | ...::panic_fmt | +| test_logging.rs:202:19:202:42 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:202:35:202:42 | password | semmle.label | password | +| test_logging.rs:205:13:205:52 | ...::panic_fmt | semmle.label | ...::panic_fmt | +| test_logging.rs:205:28:205:51 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:205:44:205:51 | password | semmle.label | password | +| test_logging.rs:208:13:208:50 | ...::panic_fmt | semmle.label | ...::panic_fmt | +| test_logging.rs:208:26:208:49 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:208:42:208:49 | password | semmle.label | password | +| test_logging.rs:211:13:211:52 | ...::panic_fmt | semmle.label | ...::panic_fmt | +| test_logging.rs:211:28:211:51 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:211:44:211:51 | password | semmle.label | password | +| test_logging.rs:214:13:214:54 | ...::assert_failed | semmle.label | ...::assert_failed | +| test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | +| test_logging.rs:214:30:214:53 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:214:46:214:53 | password | semmle.label | password | +| test_logging.rs:217:13:217:54 | ...::assert_failed | semmle.label | ...::assert_failed | +| test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | +| test_logging.rs:217:30:217:53 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:217:46:217:53 | password | semmle.label | password | +| test_logging.rs:220:13:220:58 | ...::panic_fmt | semmle.label | ...::panic_fmt | +| test_logging.rs:220:34:220:57 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:220:50:220:57 | password | semmle.label | password | +| test_logging.rs:223:13:223:60 | ...::assert_failed | semmle.label | ...::assert_failed | +| test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | +| test_logging.rs:223:36:223:59 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:223:52:223:59 | password | semmle.label | password | +| test_logging.rs:226:13:226:60 | ...::assert_failed | semmle.label | ...::assert_failed | +| test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | +| test_logging.rs:226:36:226:59 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:226:52:226:59 | password | semmle.label | password | +| test_logging.rs:229:23:229:28 | expect | semmle.label | expect | +| test_logging.rs:229:30:229:62 | res | semmle.label | res | +| test_logging.rs:229:30:229:71 | ... .as_str() | semmle.label | ... .as_str() | +| test_logging.rs:229:38:229:61 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:229:38:229:61 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:229:38:229:61 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:229:38:229:61 | { ... } | semmle.label | { ... } | +| test_logging.rs:229:54:229:61 | password | semmle.label | password | +| test_logging.rs:242:10:242:14 | write | semmle.label | write | +| test_logging.rs:242:16:242:50 | res | semmle.label | res | +| test_logging.rs:242:16:242:61 | ... .as_bytes() | semmle.label | ... .as_bytes() | +| test_logging.rs:242:24:242:49 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:242:24:242:49 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:242:24:242:49 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:242:24:242:49 | { ... } | semmle.label | { ... } | +| test_logging.rs:242:42:242:49 | password | semmle.label | password | +| test_logging.rs:245:10:245:18 | write_all | semmle.label | write_all | +| test_logging.rs:245:20:245:54 | res | semmle.label | res | +| test_logging.rs:245:20:245:65 | ... .as_bytes() | semmle.label | ... .as_bytes() | +| test_logging.rs:245:28:245:53 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:245:28:245:53 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:245:28:245:53 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:245:28:245:53 | { ... } | semmle.label | { ... } | +| test_logging.rs:245:46:245:53 | password | semmle.label | password | +| test_logging.rs:248:9:248:13 | write | semmle.label | write | +| test_logging.rs:248:15:248:49 | res | semmle.label | res | +| test_logging.rs:248:15:248:60 | ... .as_bytes() | semmle.label | ... .as_bytes() | +| test_logging.rs:248:23:248:48 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:248:23:248:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:248:23:248:48 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:248:23:248:48 | { ... } | semmle.label | { ... } | +| test_logging.rs:248:41:248:48 | password | semmle.label | password | +| test_logging.rs:251:9:251:13 | write | semmle.label | write | +| test_logging.rs:251:15:251:49 | res | semmle.label | res | +| test_logging.rs:251:15:251:60 | ... .as_bytes() | semmle.label | ... .as_bytes() | +| test_logging.rs:251:23:251:48 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:251:23:251:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:251:23:251:48 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:251:23:251:48 | { ... } | semmle.label | { ... } | +| test_logging.rs:251:41:251:48 | password | semmle.label | password | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-312/test_logging.rs b/rust/ql/test/query-tests/security/CWE-312/test_logging.rs index 3e8dbe816364..4b12005a6cb5 100644 --- a/rust/ql/test/query-tests/security/CWE-312/test_logging.rs +++ b/rust/ql/test/query-tests/security/CWE-312/test_logging.rs @@ -1,8 +1,7 @@ - -use log::{debug, error, info, trace, warn, log, Level}; -use std::io::Write as _; -use std::fmt::Write as _; +use log::{debug, error, info, log, trace, warn, Level}; use log_err::{LogErrOption, LogErrResult}; +use std::fmt::Write as _; +use std::io::Write as _; // --- tests --- @@ -134,14 +133,20 @@ fn test_log(harmless: String, password: String, encrypted_password: String) { trace!("message = {:#?}", t1); // $ MISSING: Alert[rust/cleartext-logging]=t1 // logging from a struct - let s1 = MyStruct1 { harmless: "foo".to_string(), password: "123456".to_string() }; // $ MISSING: Source=s1 + let s1 = MyStruct1 { + harmless: "foo".to_string(), + password: "123456".to_string(), // $ MISSING: Source=s1 + }; warn!("message = {}", s1.harmless); warn!("message = {}", s1.password); // $ Alert[rust/cleartext-logging] warn!("message = {}", s1); // $ MISSING: Alert[rust/cleartext-logging]=s1 warn!("message = {:?}", s1); // $ MISSING: Alert[rust/cleartext-logging]=s1 warn!("message = {:#?}", s1); // $ MISSING: Alert[rust/cleartext-logging]=s1 - let s2 = MyStruct2 { harmless: "foo".to_string(), password: "123456".to_string() }; // $ MISSING: Source=s2 + let s2 = MyStruct2 { + harmless: "foo".to_string(), + password: "123456".to_string(), // $ MISSING: Source=s2 + }; warn!("message = {}", s2.harmless); warn!("message = {}", s2.password); // $ Alert[rust/cleartext-logging] warn!("message = {}", s2); // (this implementation does not output the password field) @@ -175,8 +180,8 @@ fn test_log(harmless: String, password: String, encrypted_password: String) { let _ = err_result.log_expect(&format!("Failed with password: {}", password2)); // $ Alert[rust/cleartext-logging] // test `log_expect` with sensitive `Result.Err` - let err_result2: Result = Err(password2.clone()); - let _ = err_result2.log_expect(""); // $ MISSING: Alert[rust/cleartext-logging] + let err_result2: Result = Err(password2.clone()); // $ Source=s3 + let _ = err_result2.log_expect(""); // $ Alert[rust/cleartext-logging]=s3 // test `log_unwrap` with sensitive `Result.Err` let err_result3: Result = Err(password2); // $ Source=err_result3 @@ -190,24 +195,54 @@ fn test_std(password: String, i: i32, opt_i: Option) { eprintln!("message = {}", password); // $ Alert[rust/cleartext-logging] match i { - 1 => { panic!("message = {}", password); } // $ Alert[rust/cleartext-logging] - 2 => { todo!("message = {}", password); } // $ Alert[rust/cleartext-logging] - 3 => { unimplemented!("message = {}", password); } // $ Alert[rust/cleartext-logging] - 4 => { unreachable!("message = {}", password); } // $ Alert[rust/cleartext-logging] - 5 => { assert!(false, "message = {}", password); } // $ Alert[rust/cleartext-logging] - 6 => { assert_eq!(1, 2, "message = {}", password); } // $ Alert[rust/cleartext-logging] - 7 => { assert_ne!(1, 1, "message = {}", password); } // $ Alert[rust/cleartext-logging] - 8 => { debug_assert!(false, "message = {}", password); } // $ Alert[rust/cleartext-logging] - 9 => { debug_assert_eq!(1, 2, "message = {}", password); } // $ Alert[rust/cleartext-logging] - 10 => { debug_assert_ne!(1, 1, "message = {}", password); } // $ Alert[rust/cleartext-logging] - 11 => { _ = opt_i.expect(format!("message = {}", password).as_str()); } // $ Alert[rust/cleartext-logging] + 1 => { + panic!("message = {}", password); // $ Alert[rust/cleartext-logging] + } + 2 => { + todo!("message = {}", password); // $ Alert[rust/cleartext-logging] + } + 3 => { + unimplemented!("message = {}", password); // $ Alert[rust/cleartext-logging] + } + 4 => { + unreachable!("message = {}", password); // $ Alert[rust/cleartext-logging] + } + 5 => { + assert!(false, "message = {}", password); // $ Alert[rust/cleartext-logging] + } + 6 => { + assert_eq!(1, 2, "message = {}", password); // $ Alert[rust/cleartext-logging] + } + 7 => { + assert_ne!(1, 1, "message = {}", password); // $ Alert[rust/cleartext-logging] + } + 8 => { + debug_assert!(false, "message = {}", password); // $ Alert[rust/cleartext-logging] + } + 9 => { + debug_assert_eq!(1, 2, "message = {}", password); // $ Alert[rust/cleartext-logging] + } + 10 => { + debug_assert_ne!(1, 1, "message = {}", password); // $ Alert[rust/cleartext-logging] + } + 11 => { + _ = opt_i.expect(format!("message = {}", password).as_str()); // $ Alert[rust/cleartext-logging] + } _ => {} } - std::io::stdout().lock().write_fmt(format_args!("message = {}\n", password)); // $ MISSING: Alert[rust/cleartext-logging] - std::io::stderr().lock().write_fmt(format_args!("message = {}\n", password)); // $ MISSING: Alert[rust/cleartext-logging] - std::io::stdout().lock().write(format!("message = {}\n", password).as_bytes()); // $ Alert[rust/cleartext-logging] - std::io::stdout().lock().write_all(format!("message = {}\n", password).as_bytes()); // $ Alert[rust/cleartext-logging] + std::io::stdout() + .lock() + .write_fmt(format_args!("message = {}\n", password)); // $ MISSING: Alert[rust/cleartext-logging] + std::io::stderr() + .lock() + .write_fmt(format_args!("message = {}\n", password)); // $ MISSING: Alert[rust/cleartext-logging] + std::io::stdout() + .lock() + .write(format!("message = {}\n", password).as_bytes()); // $ Alert[rust/cleartext-logging] + std::io::stdout() + .lock() + .write_all(format!("message = {}\n", password).as_bytes()); // $ Alert[rust/cleartext-logging] let mut out = std::io::stdout().lock(); out.write(format!("message = {}\n", password).as_bytes()); // $ Alert[rust/cleartext-logging] @@ -219,6 +254,10 @@ fn test_std(password: String, i: i32, opt_i: Option) { fn main() { simple_logger::SimpleLogger::new().init().unwrap(); - test_log("harmless".to_string(), "123456".to_string(), "[encrypted]".to_string()); + test_log( + "harmless".to_string(), + "123456".to_string(), + "[encrypted]".to_string(), + ); test_std("123456".to_string(), 0, None); } diff --git a/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected index d3d59980e32f..99dc5510ef34 100644 --- a/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-770/CONSISTENCY/PathResolutionConsistency.expected @@ -13,3 +13,7 @@ multiplePathResolutions | main.rs:223:13:223:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | | main.rs:224:13:224:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | | main.rs:224:13:224:16 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | +| main.rs:229:13:229:37 | ...::with_capacity | file://:0:0:0:0 | fn with_capacity | +| main.rs:229:13:229:37 | ...::with_capacity | file://:0:0:0:0 | fn with_capacity | +| main.rs:233:18:233:42 | ...::with_capacity | file://:0:0:0:0 | fn with_capacity | +| main.rs:233:18:233:42 | ...::with_capacity | file://:0:0:0:0 | fn with_capacity | diff --git a/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected index 804c13f6434b..7345aedbab9a 100644 --- a/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected @@ -9,3 +9,17 @@ multiplePathResolutions | deallocation.rs:112:3:112:12 | ...::free | file://:0:0:0:0 | fn free | | deallocation.rs:112:29:112:32 | libc | file://:0:0:0:0 | Crate(libc@0.2.171) | | deallocation.rs:112:29:112:32 | libc | file://:0:0:0:0 | Crate(libc@0.2.172) | +| deallocation.rs:260:11:260:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:260:11:260:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:260:11:260:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:260:11:260:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:260:11:260:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:260:11:260:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:261:11:261:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:261:11:261:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:261:11:261:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:261:11:261:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:261:11:261:22 | ...::from | file://:0:0:0:0 | fn from | +| deallocation.rs:261:11:261:22 | ...::from | file://:0:0:0:0 | fn from | +| lifetime.rs:415:32:415:49 | ...::clone | file://:0:0:0:0 | fn clone | +| lifetime.rs:415:32:415:49 | ...::clone | file://:0:0:0:0 | fn clone | diff --git a/rust/ql/test/query-tests/unusedentities/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/unusedentities/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..8563020471c5 --- /dev/null +++ b/rust/ql/test/query-tests/unusedentities/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,31 @@ +multiplePathResolutions +| main.rs:13:13:13:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:13:13:13:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:13:13:13:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:13:13:13:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:13:13:13:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:13:13:13:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:14:13:14:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:14:13:14:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:14:13:14:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:14:13:14:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:14:13:14:24 | ...::from | file://:0:0:0:0 | fn from | +| main.rs:14:13:14:24 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:165:20:165:31 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:165:20:165:31 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:165:20:165:31 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:165:20:165:31 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:165:20:165:31 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:165:20:165:31 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:171:9:171:17 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:171:9:171:17 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:171:9:171:17 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:171:9:171:17 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:171:9:171:17 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:171:9:171:17 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:177:9:177:26 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:177:9:177:26 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:177:9:177:26 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:177:9:177:26 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:177:9:177:26 | ...::from | file://:0:0:0:0 | fn from | +| unreachable.rs:177:9:177:26 | ...::from | file://:0:0:0:0 | fn from |