From 209c50a48f143eae26f2b9d167a18bc2e30dee80 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 2 Jul 2025 10:58:09 +0200 Subject: [PATCH 1/2] Rust: Fix type inference for library parameters --- rust/ql/lib/codeql/rust/internal/TypeInference.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index 38f3437c9850..fd26ae260e6f 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -614,7 +614,7 @@ private module CallExprBaseMatchingInput implements MatchingInputSig { exists(Param p, int i | paramPos(this.getParamList(), p, i) and i = dpos.asPosition() and - result = inferAnnotatedType(p.getPat(), path) + result = p.getTypeRepr().(TypeMention).resolveTypeAt(path) ) or exists(SelfParam self | From eba3c6908176dd40a88624ad855eedc08c3d9e19 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 2 Jul 2025 11:15:35 +0200 Subject: [PATCH 2/2] Rust: Update expected test output --- .../dataflow/modeled/inline-flow.expected | 76 +++- .../library-tests/dataflow/modeled/main.rs | 6 +- .../PathResolutionConsistency.expected | 7 + .../test/library-tests/type-inference/main.rs | 12 +- .../type-inference/type-inference.expected | 379 ++++++++++++++++++ .../PathResolutionConsistency.expected | 4 + .../security/CWE-089/SqlInjection.expected | 55 ++- .../test/query-tests/security/CWE-089/sqlx.rs | 4 +- .../PathResolutionConsistency.expected | 5 + .../CWE-312/CleartextLogging.expected | 291 ++++++++++---- .../security/CWE-312/test_logging.rs | 10 +- .../UncontrolledAllocationSize.expected | 80 ++-- .../test/query-tests/security/CWE-770/main.rs | 4 +- 13 files changed, 772 insertions(+), 161 deletions(-) create mode 100644 rust/ql/test/library-tests/frameworks/postgres/CONSISTENCY/PathResolutionConsistency.expected diff --git a/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected b/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected index cce06005edc7..d3eddedf983f 100644 --- a/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected @@ -3,15 +3,18 @@ models | 2 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | | 3 | Summary: ::zip; Argument[0].Field[core::option::Option::Some(0)]; ReturnValue.Field[core::option::Option::Some(0)].Field[1]; value | | 4 | Summary: ::into_inner; Argument[0].Field[core::pin::Pin::__pointer]; ReturnValue; value | -| 5 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::__pointer]; value | -| 6 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 7 | Summary: lang:alloc; ::into_pin; Argument[0]; ReturnValue; value | -| 8 | Summary: lang:alloc; ::new; Argument[0]; ReturnValue.Reference; value | -| 9 | Summary: lang:alloc; ::pin; Argument[0]; ReturnValue.Reference; value | -| 10 | Summary: lang:core; ::into_inner; Argument[0]; ReturnValue; value | -| 11 | Summary: lang:core; ::new; Argument[0]; ReturnValue; value | -| 12 | Summary: lang:core; crate::ptr::read; Argument[0].Reference; ReturnValue; value | -| 13 | Summary: lang:core; crate::ptr::write; Argument[1]; Argument[0].Reference; value | +| 5 | Summary: ::new; Argument[0].Reference; ReturnValue; value | +| 6 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::__pointer]; value | +| 7 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 8 | Summary: lang:alloc; ::into_pin; Argument[0]; ReturnValue; value | +| 9 | Summary: lang:alloc; ::new; Argument[0]; ReturnValue.Reference; value | +| 10 | Summary: lang:alloc; ::pin; Argument[0]; ReturnValue.Reference; value | +| 11 | Summary: lang:core; ::into_inner; Argument[0]; ReturnValue; value | +| 12 | Summary: lang:core; ::into_inner_unchecked; Argument[0]; ReturnValue; value | +| 13 | Summary: lang:core; ::new; Argument[0]; ReturnValue; value | +| 14 | Summary: lang:core; ::new_unchecked; Argument[0].Reference; ReturnValue; value | +| 15 | Summary: lang:core; crate::ptr::read; Argument[0].Reference; ReturnValue; value | +| 16 | Summary: lang:core; crate::ptr::write; Argument[1]; Argument[0].Reference; value | edges | main.rs:12:9:12:9 | a [Some] | main.rs:13:10:13:19 | a.unwrap() | provenance | MaD:2 | | main.rs:12:9:12:9 | a [Some] | main.rs:14:13:14:13 | a [Some] | provenance | | @@ -20,11 +23,11 @@ edges | main.rs:14:9:14:9 | b [Some] | main.rs:15:10:15:19 | b.unwrap() | provenance | MaD:2 | | main.rs:14:13:14:13 | a [Some] | main.rs:14:13:14:21 | a.clone() [Some] | provenance | generated | | main.rs:14:13:14:21 | a.clone() [Some] | main.rs:14:9:14:9 | b [Some] | provenance | | -| main.rs:19:9:19:9 | a [Ok] | main.rs:20:10:20:19 | a.unwrap() | provenance | MaD:6 | +| main.rs:19:9:19:9 | a [Ok] | main.rs:20:10:20:19 | a.unwrap() | provenance | MaD:7 | | main.rs:19:9:19:9 | a [Ok] | main.rs:21:13:21:13 | a [Ok] | provenance | | | main.rs:19:31:19:44 | Ok(...) [Ok] | main.rs:19:9:19:9 | a [Ok] | provenance | | | main.rs:19:34:19:43 | source(...) | main.rs:19:31:19:44 | Ok(...) [Ok] | provenance | | -| main.rs:21:9:21:9 | b [Ok] | main.rs:22:10:22:19 | b.unwrap() | provenance | MaD:6 | +| main.rs:21:9:21:9 | b [Ok] | main.rs:22:10:22:19 | b.unwrap() | provenance | MaD:7 | | main.rs:21:13:21:13 | a [Ok] | main.rs:21:13:21:21 | a.clone() [Ok] | provenance | generated | | main.rs:21:13:21:21 | a.clone() [Ok] | main.rs:21:9:21:9 | b [Ok] | provenance | | | main.rs:26:9:26:9 | a | main.rs:27:10:27:10 | a | provenance | | @@ -64,8 +67,8 @@ edges | main.rs:69:18:69:23 | TuplePat [tuple.1] | main.rs:69:22:69:22 | m | provenance | | | main.rs:69:22:69:22 | m | main.rs:71:22:71:22 | m | provenance | | | main.rs:92:29:92:29 | [post] y [&ref] | main.rs:93:33:93:33 | y [&ref] | provenance | | -| main.rs:92:32:92:41 | source(...) | main.rs:92:29:92:29 | [post] y [&ref] | provenance | MaD:13 | -| main.rs:93:33:93:33 | y [&ref] | main.rs:93:18:93:34 | ...::read(...) | provenance | MaD:12 | +| main.rs:92:32:92:41 | source(...) | main.rs:92:29:92:29 | [post] y [&ref] | provenance | MaD:16 | +| main.rs:93:33:93:33 | y [&ref] | main.rs:93:18:93:34 | ...::read(...) | provenance | MaD:15 | | main.rs:108:13:108:17 | mut i | main.rs:109:34:109:34 | i | provenance | | | main.rs:108:13:108:17 | mut i | main.rs:110:33:110:33 | i | provenance | | | main.rs:108:13:108:17 | mut i | main.rs:111:47:111:47 | i | provenance | | @@ -76,26 +79,42 @@ edges | main.rs:109:13:109:20 | mut pin1 [Pin, &ref] | main.rs:115:31:115:34 | pin1 [Pin, &ref] | provenance | | | main.rs:109:24:109:35 | ...::new(...) [&ref] | main.rs:109:13:109:20 | mut pin1 [&ref] | provenance | | | main.rs:109:24:109:35 | ...::new(...) [Pin, &ref] | main.rs:109:13:109:20 | mut pin1 [Pin, &ref] | provenance | | -| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) [&ref] | provenance | MaD:11 | -| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) [Pin, &ref] | provenance | MaD:5 | +| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) [&ref] | provenance | MaD:13 | +| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) [Pin, &ref] | provenance | MaD:6 | | main.rs:109:34:109:34 | i | main.rs:109:33:109:34 | &i [&ref] | provenance | | | main.rs:110:13:110:20 | mut pin2 [&ref] | main.rs:116:15:116:18 | pin2 [&ref] | provenance | | | main.rs:110:24:110:34 | ...::pin(...) [&ref] | main.rs:110:13:110:20 | mut pin2 [&ref] | provenance | | -| main.rs:110:33:110:33 | i | main.rs:110:24:110:34 | ...::pin(...) [&ref] | provenance | MaD:9 | +| main.rs:110:33:110:33 | i | main.rs:110:24:110:34 | ...::pin(...) [&ref] | provenance | MaD:10 | | main.rs:111:13:111:20 | mut pin3 [&ref] | main.rs:117:15:117:18 | pin3 [&ref] | provenance | | | main.rs:111:24:111:49 | ...::into_pin(...) [&ref] | main.rs:111:13:111:20 | mut pin3 [&ref] | provenance | | -| main.rs:111:38:111:48 | ...::new(...) [&ref] | main.rs:111:24:111:49 | ...::into_pin(...) [&ref] | provenance | MaD:7 | -| main.rs:111:47:111:47 | i | main.rs:111:38:111:48 | ...::new(...) [&ref] | provenance | MaD:8 | +| main.rs:111:38:111:48 | ...::new(...) [&ref] | main.rs:111:24:111:49 | ...::into_pin(...) [&ref] | provenance | MaD:8 | +| main.rs:111:47:111:47 | i | main.rs:111:38:111:48 | ...::new(...) [&ref] | provenance | MaD:9 | | main.rs:114:15:114:18 | pin1 [&ref] | main.rs:114:14:114:18 | * ... | provenance | | | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | main.rs:115:14:115:35 | * ... | provenance | | -| main.rs:115:31:115:34 | pin1 [&ref] | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | provenance | MaD:10 | +| main.rs:115:31:115:34 | pin1 [&ref] | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | provenance | MaD:11 | | main.rs:115:31:115:34 | pin1 [Pin, &ref] | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | provenance | MaD:4 | | main.rs:116:15:116:18 | pin2 [&ref] | main.rs:116:14:116:18 | * ... | provenance | | | main.rs:117:15:117:18 | pin3 [&ref] | main.rs:117:14:117:18 | * ... | provenance | | +| main.rs:122:13:122:18 | mut ms [MyStruct] | main.rs:123:34:123:35 | ms [MyStruct] | provenance | | | main.rs:122:13:122:18 | mut ms [MyStruct] | main.rs:127:14:127:15 | ms [MyStruct] | provenance | | | main.rs:122:22:122:49 | MyStruct {...} [MyStruct] | main.rs:122:13:122:18 | mut ms [MyStruct] | provenance | | | main.rs:122:38:122:47 | source(...) | main.rs:122:22:122:49 | MyStruct {...} [MyStruct] | provenance | | +| main.rs:123:13:123:20 | mut pin1 [MyStruct] | main.rs:129:30:129:33 | pin1 [MyStruct] | provenance | | +| main.rs:123:24:123:36 | ...::new(...) [MyStruct] | main.rs:123:13:123:20 | mut pin1 [MyStruct] | provenance | | +| main.rs:123:33:123:35 | &ms [&ref, MyStruct] | main.rs:123:24:123:36 | ...::new(...) [MyStruct] | provenance | MaD:5 | +| main.rs:123:34:123:35 | ms [MyStruct] | main.rs:123:33:123:35 | &ms [&ref, MyStruct] | provenance | | | main.rs:127:14:127:15 | ms [MyStruct] | main.rs:127:14:127:19 | ms.val | provenance | | +| main.rs:129:14:129:34 | ...::into_inner(...) [MyStruct] | main.rs:129:14:129:38 | ... .val | provenance | | +| main.rs:129:30:129:33 | pin1 [MyStruct] | main.rs:129:14:129:34 | ...::into_inner(...) [MyStruct] | provenance | MaD:11 | +| main.rs:136:13:136:18 | mut ms [MyStruct] | main.rs:137:44:137:45 | ms [MyStruct] | provenance | | +| main.rs:136:22:136:49 | MyStruct {...} [MyStruct] | main.rs:136:13:136:18 | mut ms [MyStruct] | provenance | | +| main.rs:136:38:136:47 | source(...) | main.rs:136:22:136:49 | MyStruct {...} [MyStruct] | provenance | | +| main.rs:137:13:137:20 | mut pin5 [MyStruct] | main.rs:139:40:139:43 | pin5 [MyStruct] | provenance | | +| main.rs:137:24:137:46 | ...::new_unchecked(...) [MyStruct] | main.rs:137:13:137:20 | mut pin5 [MyStruct] | provenance | | +| main.rs:137:43:137:45 | &ms [&ref, MyStruct] | main.rs:137:24:137:46 | ...::new_unchecked(...) [MyStruct] | provenance | MaD:14 | +| main.rs:137:44:137:45 | ms [MyStruct] | main.rs:137:43:137:45 | &ms [&ref, MyStruct] | provenance | | +| main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [MyStruct] | main.rs:139:14:139:48 | ... .val | provenance | | +| main.rs:139:40:139:43 | pin5 [MyStruct] | main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [MyStruct] | provenance | MaD:12 | nodes | main.rs:12:9:12:9 | a [Some] | semmle.label | a [Some] | | main.rs:12:13:12:28 | Some(...) [Some] | semmle.label | Some(...) [Some] | @@ -183,8 +202,25 @@ nodes | main.rs:122:13:122:18 | mut ms [MyStruct] | semmle.label | mut ms [MyStruct] | | main.rs:122:22:122:49 | MyStruct {...} [MyStruct] | semmle.label | MyStruct {...} [MyStruct] | | main.rs:122:38:122:47 | source(...) | semmle.label | source(...) | +| main.rs:123:13:123:20 | mut pin1 [MyStruct] | semmle.label | mut pin1 [MyStruct] | +| main.rs:123:24:123:36 | ...::new(...) [MyStruct] | semmle.label | ...::new(...) [MyStruct] | +| main.rs:123:33:123:35 | &ms [&ref, MyStruct] | semmle.label | &ms [&ref, MyStruct] | +| main.rs:123:34:123:35 | ms [MyStruct] | semmle.label | ms [MyStruct] | | main.rs:127:14:127:15 | ms [MyStruct] | semmle.label | ms [MyStruct] | | main.rs:127:14:127:19 | ms.val | semmle.label | ms.val | +| main.rs:129:14:129:34 | ...::into_inner(...) [MyStruct] | semmle.label | ...::into_inner(...) [MyStruct] | +| main.rs:129:14:129:38 | ... .val | semmle.label | ... .val | +| main.rs:129:30:129:33 | pin1 [MyStruct] | semmle.label | pin1 [MyStruct] | +| main.rs:136:13:136:18 | mut ms [MyStruct] | semmle.label | mut ms [MyStruct] | +| main.rs:136:22:136:49 | MyStruct {...} [MyStruct] | semmle.label | MyStruct {...} [MyStruct] | +| main.rs:136:38:136:47 | source(...) | semmle.label | source(...) | +| main.rs:137:13:137:20 | mut pin5 [MyStruct] | semmle.label | mut pin5 [MyStruct] | +| main.rs:137:24:137:46 | ...::new_unchecked(...) [MyStruct] | semmle.label | ...::new_unchecked(...) [MyStruct] | +| main.rs:137:43:137:45 | &ms [&ref, MyStruct] | semmle.label | &ms [&ref, MyStruct] | +| main.rs:137:44:137:45 | ms [MyStruct] | semmle.label | ms [MyStruct] | +| main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [MyStruct] | semmle.label | ...::into_inner_unchecked(...) [MyStruct] | +| main.rs:139:14:139:48 | ... .val | semmle.label | ... .val | +| main.rs:139:40:139:43 | pin5 [MyStruct] | semmle.label | pin5 [MyStruct] | subpaths | main.rs:50:15:50:15 | w [Wrapper] | main.rs:43:18:43:22 | SelfParam [Wrapper] | main.rs:43:33:45:9 | { ... } [Wrapper] | main.rs:53:17:53:25 | w.clone() [Wrapper] | testFailures @@ -205,3 +241,5 @@ testFailures | main.rs:116:14:116:18 | * ... | main.rs:108:21:108:30 | source(...) | main.rs:116:14:116:18 | * ... | $@ | main.rs:108:21:108:30 | source(...) | source(...) | | main.rs:117:14:117:18 | * ... | main.rs:108:21:108:30 | source(...) | main.rs:117:14:117:18 | * ... | $@ | main.rs:108:21:108:30 | source(...) | source(...) | | main.rs:127:14:127:19 | ms.val | main.rs:122:38:122:47 | source(...) | main.rs:127:14:127:19 | ms.val | $@ | main.rs:122:38:122:47 | source(...) | source(...) | +| main.rs:129:14:129:38 | ... .val | main.rs:122:38:122:47 | source(...) | main.rs:129:14:129:38 | ... .val | $@ | main.rs:122:38:122:47 | source(...) | source(...) | +| main.rs:139:14:139:48 | ... .val | main.rs:136:38:136:47 | source(...) | main.rs:139:14:139:48 | ... .val | $@ | main.rs:136:38:136:47 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/modeled/main.rs b/rust/ql/test/library-tests/dataflow/modeled/main.rs index 567fe9c59c78..66a928782267 100644 --- a/rust/ql/test/library-tests/dataflow/modeled/main.rs +++ b/rust/ql/test/library-tests/dataflow/modeled/main.rs @@ -95,8 +95,8 @@ mod ptr { } } -use std::pin::Pin; use std::pin::pin; +use std::pin::Pin; #[derive(Clone)] struct MyStruct { @@ -126,7 +126,7 @@ fn test_pin() { let mut pin4 = pin!(&ms); sink(ms.val); // $ hasValueFlow=41 sink(pin1.val); // $ MISSING: hasValueFlow=41 - sink(Pin::into_inner(pin1).val); // $ MISSING: hasValueFlow=41 + sink(Pin::into_inner(pin1).val); // $ hasValueFlow=41 sink(pin2.val); // $ MISSING: hasValueFlow=41 sink(pin3.val); // $ MISSING: hasValueFlow=41 sink(pin4.val); // $ MISSING: hasValueFlow=41 @@ -136,7 +136,7 @@ fn test_pin() { let mut ms = MyStruct { val: source(42) }; let mut pin5 = Pin::new_unchecked(&ms); sink(pin5.val); // $ MISSING: hasValueFlow=42 - sink(Pin::into_inner_unchecked(pin5).val); // $ MISSING: hasValueFlow=42 + sink(Pin::into_inner_unchecked(pin5).val); // $ hasValueFlow=42 } { diff --git a/rust/ql/test/library-tests/frameworks/postgres/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/frameworks/postgres/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..8c8a9767934d --- /dev/null +++ b/rust/ql/test/library-tests/frameworks/postgres/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,7 @@ +multipleCallTargets +| main.rs:22:18:22:31 | query.as_str() | +| main.rs:23:24:23:37 | query.as_str() | +| main.rs:25:18:25:31 | query.as_str() | +| main.rs:28:16:28:29 | query.as_str() | +| main.rs:29:20:29:33 | query.as_str() | +| main.rs:30:20:30:33 | query.as_str() | diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index cf5906622959..d7cf7f127c0f 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -1951,7 +1951,7 @@ mod indexers { mod macros { pub fn f() { - let x = format!("Hello, {}", "World!"); // $ MISSING: type=x:String -- needs https://github.com/github/codeql/pull/19658 + let x = format!("Hello, {}", "World!"); // $ type=x:String } } @@ -2119,15 +2119,15 @@ mod loops { let vals4b = [1u16, 2, 3].to_vec(); // $ MISSING: type=vals4b:Vec type=vals4b:T.u16 for u in vals4b {} // $ MISSING: type=u:u16 - let vals5 = Vec::from([1u32, 2, 3]); // $ type=vals5:Vec MISSING: type=vals5:T.u32 - for u in vals5 {} // $ MISSING: type=u:u32 + let vals5 = Vec::from([1u32, 2, 3]); // $ type=vals5:Vec type=vals5:T.u32 + for u in vals5 {} // $ type=u:u32 let vals6: Vec<&u64> = [1u64, 2, 3].iter().collect(); // $ type=vals6:Vec type=vals6:T.&T.u64 for u in vals6 {} // $ type=u:&T.u64 - let mut vals7 = Vec::new(); // $ type=vals7:Vec MISSING: type=vals7:T.u8 + let mut vals7 = Vec::new(); // $ type=vals7:Vec type=vals7:T.u8 vals7.push(1u8); // $ method=push - for u in vals7 {} // $ MISSING: type=u:u8 + for u in vals7 {} // $ type=u:u8 let matrix1 = vec![vec![1, 2], vec![3, 4]]; // $ MISSING: type=matrix1:Vec type=matrix1:T.Vec type=matrix1:T.T.i32 for row in matrix1 { @@ -2136,7 +2136,7 @@ mod loops { } } - let mut map1 = std::collections::HashMap::new(); // $ MISSING: type=map1:Hashmap type=map1:K.i32 type=map1:V.Box type1=map1:V.T.&T.str + let mut map1 = std::collections::HashMap::new(); // $ type=map1:HashMap type=map1:K.i32 type=map1:V.Box type1=map1:V.T.&T.str map1.insert(1, Box::new("one")); // $ method=insert map1.insert(2, Box::new("two")); // $ method=insert for key in map1.keys() {} // $ method=keys MISSING: type=key:i32 diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index 0c5510cea193..c1aa69a8b626 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -163,6 +163,8 @@ inferType | main.rs:26:17:26:32 | MyThing {...} | | main.rs:5:5:8:5 | MyThing | | main.rs:26:30:26:30 | S | | main.rs:2:5:3:13 | S | | main.rs:27:18:27:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:27:18:27:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:27:18:27:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:27:26:27:26 | x | | main.rs:5:5:8:5 | MyThing | | main.rs:27:26:27:28 | x.a | | main.rs:2:5:3:13 | S | | main.rs:30:29:30:29 | x | | main.rs:16:5:19:5 | GenericThing | @@ -172,6 +174,8 @@ inferType | main.rs:31:17:31:17 | x | A | {EXTERNAL LOCATION} | bool | | main.rs:31:17:31:19 | x.a | | {EXTERNAL LOCATION} | bool | | main.rs:32:18:32:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:32:18:32:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:32:18:32:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:32:26:32:26 | a | | {EXTERNAL LOCATION} | bool | | main.rs:37:13:37:13 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:37:13:37:13 | x | A | main.rs:2:5:3:13 | S | @@ -179,6 +183,8 @@ inferType | main.rs:37:17:37:42 | GenericThing::<...> {...} | A | main.rs:2:5:3:13 | S | | main.rs:37:40:37:40 | S | | main.rs:2:5:3:13 | S | | main.rs:38:18:38:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:38:18:38:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:38:18:38:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:38:26:38:26 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:38:26:38:26 | x | A | main.rs:2:5:3:13 | S | | main.rs:38:26:38:28 | x.a | | main.rs:2:5:3:13 | S | @@ -188,6 +194,8 @@ inferType | main.rs:41:17:41:37 | GenericThing {...} | A | main.rs:2:5:3:13 | S | | main.rs:41:35:41:35 | S | | main.rs:2:5:3:13 | S | | main.rs:42:18:42:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:42:18:42:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:42:18:42:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:42:26:42:26 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:42:26:42:26 | x | A | main.rs:2:5:3:13 | S | | main.rs:42:26:42:28 | x.a | | main.rs:2:5:3:13 | S | @@ -196,6 +204,8 @@ inferType | main.rs:47:16:47:33 | ...::MyNone(...) | | main.rs:10:5:14:5 | MyOption | | main.rs:47:16:47:33 | ...::MyNone(...) | T | main.rs:2:5:3:13 | S | | main.rs:49:18:49:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:49:18:49:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:49:18:49:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:49:26:49:26 | x | | main.rs:21:5:23:5 | OptionS | | main.rs:49:26:49:28 | x.a | | main.rs:10:5:14:5 | MyOption | | main.rs:49:26:49:28 | x.a | T | main.rs:2:5:3:13 | S | @@ -208,6 +218,8 @@ inferType | main.rs:53:16:53:33 | ...::MyNone(...) | | main.rs:10:5:14:5 | MyOption | | main.rs:53:16:53:33 | ...::MyNone(...) | T | main.rs:2:5:3:13 | S | | main.rs:55:18:55:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:55:18:55:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:55:18:55:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:55:26:55:26 | x | | main.rs:16:5:19:5 | GenericThing | | main.rs:55:26:55:26 | x | A | main.rs:10:5:14:5 | MyOption | | main.rs:55:26:55:26 | x | A.T | main.rs:2:5:3:13 | S | @@ -229,6 +241,8 @@ inferType | main.rs:61:30:61:32 | x.a | | main.rs:10:5:14:5 | MyOption | | main.rs:61:30:61:32 | x.a | T | main.rs:2:5:3:13 | S | | main.rs:62:18:62:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:62:18:62:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:62:18:62:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:62:26:62:26 | a | | main.rs:10:5:14:5 | MyOption | | main.rs:62:26:62:26 | a | T | main.rs:2:5:3:13 | S | | main.rs:75:19:75:22 | SelfParam | | main.rs:72:5:72:21 | Foo | @@ -239,6 +253,8 @@ inferType | main.rs:80:13:80:16 | self | | main.rs:72:5:72:21 | Foo | | main.rs:84:23:89:5 | { ... } | | main.rs:72:5:72:21 | Foo | | main.rs:85:18:85:33 | "main.rs::m1::f\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:85:18:85:33 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:85:18:85:33 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:86:13:86:13 | x | | main.rs:72:5:72:21 | Foo | | main.rs:86:17:86:22 | Foo {...} | | main.rs:72:5:72:21 | Foo | | main.rs:87:13:87:13 | y | | main.rs:72:5:72:21 | Foo | @@ -248,6 +264,8 @@ inferType | main.rs:91:22:91:22 | y | | main.rs:72:5:72:21 | Foo | | main.rs:91:37:95:5 | { ... } | | main.rs:72:5:72:21 | Foo | | main.rs:92:18:92:33 | "main.rs::m1::g\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:92:18:92:33 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:92:18:92:33 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:93:9:93:9 | x | | main.rs:72:5:72:21 | Foo | | main.rs:93:9:93:14 | x.m1() | | main.rs:72:5:72:21 | Foo | | main.rs:94:9:94:9 | y | | main.rs:72:5:72:21 | Foo | @@ -301,18 +319,26 @@ inferType | main.rs:157:17:157:33 | MyThing {...} | A | main.rs:132:5:133:14 | S2 | | main.rs:157:30:157:31 | S2 | | main.rs:132:5:133:14 | S2 | | main.rs:160:18:160:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:160:18:160:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:160:18:160:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:160:26:160:26 | x | | main.rs:125:5:128:5 | MyThing | | main.rs:160:26:160:26 | x | A | main.rs:130:5:131:14 | S1 | | main.rs:160:26:160:28 | x.a | | main.rs:130:5:131:14 | S1 | | main.rs:161:18:161:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:161:18:161:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:161:18:161:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:161:26:161:26 | y | | main.rs:125:5:128:5 | MyThing | | main.rs:161:26:161:26 | y | A | main.rs:132:5:133:14 | S2 | | main.rs:161:26:161:28 | y.a | | main.rs:132:5:133:14 | S2 | | main.rs:163:18:163:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:163:18:163:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:163:18:163:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:163:26:163:26 | x | | main.rs:125:5:128:5 | MyThing | | main.rs:163:26:163:26 | x | A | main.rs:130:5:131:14 | S1 | | main.rs:163:26:163:31 | x.m1() | | main.rs:130:5:131:14 | S1 | | main.rs:164:18:164:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:164:18:164:33 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:164:18:164:33 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:164:26:164:26 | y | | main.rs:125:5:128:5 | MyThing | | main.rs:164:26:164:26 | y | A | main.rs:132:5:133:14 | S2 | | main.rs:164:26:164:31 | y.m1() | | main.rs:125:5:128:5 | MyThing | @@ -329,10 +355,14 @@ inferType | main.rs:167:17:167:33 | MyThing {...} | A | main.rs:132:5:133:14 | S2 | | main.rs:167:30:167:31 | S2 | | main.rs:132:5:133:14 | S2 | | main.rs:169:18:169:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:169:18:169:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:169:18:169:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:169:26:169:26 | x | | main.rs:125:5:128:5 | MyThing | | main.rs:169:26:169:26 | x | A | main.rs:130:5:131:14 | S1 | | main.rs:169:26:169:31 | x.m2() | | main.rs:130:5:131:14 | S1 | | main.rs:170:18:170:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:170:18:170:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:170:18:170:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:170:26:170:26 | y | | main.rs:125:5:128:5 | MyThing | | main.rs:170:26:170:26 | y | A | main.rs:132:5:133:14 | S2 | | main.rs:170:26:170:31 | y.m2() | | main.rs:132:5:133:14 | S2 | @@ -472,10 +502,14 @@ inferType | main.rs:325:24:325:40 | MyThing {...} | A | main.rs:190:5:191:14 | S3 | | main.rs:325:37:325:38 | S3 | | main.rs:190:5:191:14 | S3 | | main.rs:329:18:329:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:329:18:329:38 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:329:18:329:38 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:329:26:329:33 | thing_s1 | | main.rs:175:5:178:5 | MyThing | | main.rs:329:26:329:33 | thing_s1 | A | main.rs:186:5:187:14 | S1 | | main.rs:329:26:329:38 | thing_s1.m1() | | main.rs:186:5:187:14 | S1 | | main.rs:330:18:330:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:330:18:330:40 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:330:18:330:40 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:330:26:330:33 | thing_s2 | | main.rs:175:5:178:5 | MyThing | | main.rs:330:26:330:33 | thing_s2 | A | main.rs:188:5:189:14 | S2 | | main.rs:330:26:330:38 | thing_s2.m1() | | main.rs:175:5:178:5 | MyThing | @@ -486,6 +520,8 @@ inferType | main.rs:331:22:331:29 | thing_s3 | A | main.rs:190:5:191:14 | S3 | | main.rs:331:22:331:34 | thing_s3.m1() | | main.rs:190:5:191:14 | S3 | | main.rs:332:18:332:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:332:18:332:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:332:18:332:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:332:26:332:27 | s3 | | main.rs:190:5:191:14 | S3 | | main.rs:334:13:334:14 | p1 | | main.rs:180:5:184:5 | MyPair | | main.rs:334:13:334:14 | p1 | P1 | main.rs:186:5:187:14 | S1 | @@ -496,6 +532,8 @@ inferType | main.rs:334:31:334:32 | S1 | | main.rs:186:5:187:14 | S1 | | main.rs:334:39:334:40 | S1 | | main.rs:186:5:187:14 | S1 | | main.rs:335:18:335:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:335:18:335:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:335:18:335:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:335:26:335:27 | p1 | | main.rs:180:5:184:5 | MyPair | | main.rs:335:26:335:27 | p1 | P1 | main.rs:186:5:187:14 | S1 | | main.rs:335:26:335:27 | p1 | P2 | main.rs:186:5:187:14 | S1 | @@ -509,6 +547,8 @@ inferType | main.rs:337:31:337:32 | S1 | | main.rs:186:5:187:14 | S1 | | main.rs:337:39:337:40 | S2 | | main.rs:188:5:189:14 | S2 | | main.rs:338:18:338:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:338:18:338:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:338:18:338:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:338:26:338:27 | p2 | | main.rs:180:5:184:5 | MyPair | | main.rs:338:26:338:27 | p2 | P1 | main.rs:186:5:187:14 | S1 | | main.rs:338:26:338:27 | p2 | P2 | main.rs:188:5:189:14 | S2 | @@ -526,6 +566,8 @@ inferType | main.rs:341:30:341:31 | S1 | | main.rs:186:5:187:14 | S1 | | main.rs:342:17:342:18 | S3 | | main.rs:190:5:191:14 | S3 | | main.rs:344:18:344:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:344:18:344:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:344:18:344:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:344:26:344:27 | p3 | | main.rs:180:5:184:5 | MyPair | | main.rs:344:26:344:27 | p3 | P1 | main.rs:175:5:178:5 | MyThing | | main.rs:344:26:344:27 | p3 | P1.A | main.rs:186:5:187:14 | S1 | @@ -545,6 +587,8 @@ inferType | main.rs:348:17:348:17 | a | P2 | main.rs:186:5:187:14 | S1 | | main.rs:348:17:348:23 | a.fst() | | main.rs:186:5:187:14 | S1 | | main.rs:349:18:349:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:349:18:349:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:349:18:349:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:349:26:349:26 | x | | main.rs:186:5:187:14 | S1 | | main.rs:350:13:350:13 | y | | main.rs:186:5:187:14 | S1 | | main.rs:350:17:350:17 | a | | main.rs:180:5:184:5 | MyPair | @@ -552,6 +596,8 @@ inferType | main.rs:350:17:350:17 | a | P2 | main.rs:186:5:187:14 | S1 | | main.rs:350:17:350:23 | a.snd() | | main.rs:186:5:187:14 | S1 | | main.rs:351:18:351:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:351:18:351:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:351:18:351:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:351:26:351:26 | y | | main.rs:186:5:187:14 | S1 | | main.rs:357:13:357:13 | b | | main.rs:180:5:184:5 | MyPair | | main.rs:357:13:357:13 | b | P1 | main.rs:188:5:189:14 | S2 | @@ -567,6 +613,8 @@ inferType | main.rs:358:17:358:17 | b | P2 | main.rs:186:5:187:14 | S1 | | main.rs:358:17:358:23 | b.fst() | | main.rs:186:5:187:14 | S1 | | main.rs:359:18:359:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:359:18:359:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:359:18:359:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:359:26:359:26 | x | | main.rs:186:5:187:14 | S1 | | main.rs:360:13:360:13 | y | | main.rs:188:5:189:14 | S2 | | main.rs:360:17:360:17 | b | | main.rs:180:5:184:5 | MyPair | @@ -574,12 +622,16 @@ inferType | main.rs:360:17:360:17 | b | P2 | main.rs:186:5:187:14 | S1 | | main.rs:360:17:360:23 | b.snd() | | main.rs:188:5:189:14 | S2 | | main.rs:361:18:361:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:361:18:361:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:361:18:361:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:361:26:361:26 | y | | main.rs:188:5:189:14 | S2 | | main.rs:365:13:365:13 | x | | main.rs:186:5:187:14 | S1 | | main.rs:365:17:365:39 | call_trait_m1(...) | | main.rs:186:5:187:14 | S1 | | main.rs:365:31:365:38 | thing_s1 | | main.rs:175:5:178:5 | MyThing | | main.rs:365:31:365:38 | thing_s1 | A | main.rs:186:5:187:14 | S1 | | main.rs:366:18:366:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:366:18:366:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:366:18:366:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:366:26:366:26 | x | | main.rs:186:5:187:14 | S1 | | main.rs:367:13:367:13 | y | | main.rs:175:5:178:5 | MyThing | | main.rs:367:13:367:13 | y | A | main.rs:188:5:189:14 | S2 | @@ -588,6 +640,8 @@ inferType | main.rs:367:31:367:38 | thing_s2 | | main.rs:175:5:178:5 | MyThing | | main.rs:367:31:367:38 | thing_s2 | A | main.rs:188:5:189:14 | S2 | | main.rs:368:18:368:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:368:18:368:28 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:368:18:368:28 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:368:26:368:26 | y | | main.rs:175:5:178:5 | MyThing | | main.rs:368:26:368:26 | y | A | main.rs:188:5:189:14 | S2 | | main.rs:368:26:368:28 | y.a | | main.rs:188:5:189:14 | S2 | @@ -605,6 +659,8 @@ inferType | main.rs:372:25:372:25 | a | P1 | main.rs:186:5:187:14 | S1 | | main.rs:372:25:372:25 | a | P2 | main.rs:186:5:187:14 | S1 | | main.rs:373:18:373:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:373:18:373:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:373:18:373:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:373:26:373:26 | x | | main.rs:186:5:187:14 | S1 | | main.rs:374:13:374:13 | y | | main.rs:186:5:187:14 | S1 | | main.rs:374:17:374:26 | get_snd(...) | | main.rs:186:5:187:14 | S1 | @@ -612,6 +668,8 @@ inferType | main.rs:374:25:374:25 | a | P1 | main.rs:186:5:187:14 | S1 | | main.rs:374:25:374:25 | a | P2 | main.rs:186:5:187:14 | S1 | | main.rs:375:18:375:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:375:18:375:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:375:18:375:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:375:26:375:26 | y | | main.rs:186:5:187:14 | S1 | | main.rs:378:13:378:13 | b | | main.rs:180:5:184:5 | MyPair | | main.rs:378:13:378:13 | b | P1 | main.rs:188:5:189:14 | S2 | @@ -627,6 +685,8 @@ inferType | main.rs:379:25:379:25 | b | P1 | main.rs:188:5:189:14 | S2 | | main.rs:379:25:379:25 | b | P2 | main.rs:186:5:187:14 | S1 | | main.rs:380:18:380:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:380:18:380:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:380:18:380:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:380:26:380:26 | x | | main.rs:186:5:187:14 | S1 | | main.rs:381:13:381:13 | y | | main.rs:188:5:189:14 | S2 | | main.rs:381:17:381:26 | get_snd(...) | | main.rs:188:5:189:14 | S2 | @@ -634,6 +694,8 @@ inferType | main.rs:381:25:381:25 | b | P1 | main.rs:188:5:189:14 | S2 | | main.rs:381:25:381:25 | b | P2 | main.rs:186:5:187:14 | S1 | | main.rs:382:18:382:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:382:18:382:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:382:18:382:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:382:26:382:26 | y | | main.rs:188:5:189:14 | S2 | | main.rs:384:13:384:13 | c | | main.rs:180:5:184:5 | MyPair | | main.rs:384:13:384:13 | c | P1 | main.rs:190:5:191:14 | S3 | @@ -739,9 +801,13 @@ inferType | main.rs:490:13:490:13 | x | | main.rs:397:5:398:14 | S1 | | main.rs:490:17:490:18 | S1 | | main.rs:397:5:398:14 | S1 | | main.rs:491:18:491:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:491:18:491:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:491:18:491:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:491:26:491:26 | x | | main.rs:397:5:398:14 | S1 | | main.rs:491:26:491:42 | x.common_method() | | main.rs:397:5:398:14 | S1 | | main.rs:492:18:492:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:492:18:492:44 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:492:18:492:44 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:492:26:492:26 | x | | main.rs:397:5:398:14 | S1 | | main.rs:492:26:492:44 | x.common_method_2() | | main.rs:397:5:398:14 | S1 | | main.rs:494:13:494:13 | y | | main.rs:430:5:430:22 | S2 | @@ -750,6 +816,8 @@ inferType | main.rs:494:17:494:22 | S2(...) | T2 | main.rs:397:5:398:14 | S1 | | main.rs:494:20:494:21 | S1 | | main.rs:397:5:398:14 | S1 | | main.rs:495:18:495:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:495:18:495:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:495:18:495:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:495:26:495:26 | y | | main.rs:430:5:430:22 | S2 | | main.rs:495:26:495:26 | y | T2 | main.rs:397:5:398:14 | S1 | | main.rs:495:26:495:42 | y.common_method() | | main.rs:397:5:398:14 | S1 | @@ -759,6 +827,8 @@ inferType | main.rs:497:17:497:21 | S2(...) | T2 | {EXTERNAL LOCATION} | i32 | | main.rs:497:20:497:20 | 0 | | {EXTERNAL LOCATION} | i32 | | main.rs:498:18:498:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:498:18:498:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:498:18:498:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:498:26:498:26 | z | | main.rs:430:5:430:22 | S2 | | main.rs:498:26:498:26 | z | T2 | {EXTERNAL LOCATION} | i32 | | main.rs:498:26:498:42 | z.common_method() | | main.rs:397:5:398:14 | S1 | @@ -768,6 +838,8 @@ inferType | main.rs:500:17:500:22 | S3(...) | T3 | main.rs:397:5:398:14 | S1 | | main.rs:500:20:500:21 | S1 | | main.rs:397:5:398:14 | S1 | | main.rs:501:18:501:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:501:18:501:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:501:18:501:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:501:26:501:26 | w | | main.rs:468:5:469:22 | S3 | | main.rs:501:26:501:26 | w | T3 | main.rs:397:5:398:14 | S1 | | main.rs:501:26:501:31 | w.m(...) | | file://:0:0:0:0 | & | @@ -781,24 +853,32 @@ inferType | main.rs:528:18:528:18 | x | | main.rs:526:45:526:61 | T | | main.rs:528:18:528:27 | x.method() | | main.rs:526:35:526:42 | I | | main.rs:529:18:529:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:529:18:529:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:529:18:529:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:529:26:529:27 | s1 | | main.rs:526:35:526:42 | I | | main.rs:532:65:532:65 | x | | main.rs:532:46:532:62 | T | | main.rs:534:13:534:14 | s2 | | main.rs:532:36:532:43 | I | | main.rs:534:18:534:18 | x | | main.rs:532:46:532:62 | T | | main.rs:534:18:534:27 | x.method() | | main.rs:532:36:532:43 | I | | main.rs:535:18:535:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:535:18:535:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:535:18:535:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:535:26:535:27 | s2 | | main.rs:532:36:532:43 | I | | main.rs:538:49:538:49 | x | | main.rs:538:30:538:46 | T | | main.rs:539:13:539:13 | s | | main.rs:508:5:509:14 | S1 | | main.rs:539:17:539:17 | x | | main.rs:538:30:538:46 | T | | main.rs:539:17:539:26 | x.method() | | main.rs:508:5:509:14 | S1 | | main.rs:540:18:540:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:540:18:540:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:540:18:540:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:540:26:540:26 | s | | main.rs:508:5:509:14 | S1 | | main.rs:543:53:543:53 | x | | main.rs:543:34:543:50 | T | | main.rs:544:13:544:13 | s | | main.rs:508:5:509:14 | S1 | | main.rs:544:17:544:17 | x | | main.rs:543:34:543:50 | T | | main.rs:544:17:544:26 | x.method() | | main.rs:508:5:509:14 | S1 | | main.rs:545:18:545:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:545:18:545:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:545:18:545:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:545:26:545:26 | s | | main.rs:508:5:509:14 | S1 | | main.rs:549:16:549:19 | SelfParam | | main.rs:548:5:552:5 | Self [trait Pair] | | main.rs:551:16:551:19 | SelfParam | | main.rs:548:5:552:5 | Self [trait Pair] | @@ -811,6 +891,8 @@ inferType | main.rs:557:18:557:18 | y | | main.rs:554:41:554:55 | T | | main.rs:557:18:557:24 | y.snd() | | main.rs:511:5:512:14 | S2 | | main.rs:558:18:558:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:558:18:558:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:558:18:558:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:558:32:558:33 | s1 | | main.rs:508:5:509:14 | S1 | | main.rs:558:36:558:37 | s2 | | main.rs:511:5:512:14 | S2 | | main.rs:561:69:561:69 | x | | main.rs:561:52:561:66 | T | @@ -822,6 +904,8 @@ inferType | main.rs:564:18:564:18 | y | | main.rs:561:52:561:66 | T | | main.rs:564:18:564:24 | y.snd() | | main.rs:561:41:561:49 | T2 | | main.rs:565:18:565:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:565:18:565:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:565:18:565:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:565:32:565:33 | s1 | | main.rs:508:5:509:14 | S1 | | main.rs:565:36:565:37 | s2 | | main.rs:561:41:561:49 | T2 | | main.rs:568:50:568:50 | x | | main.rs:568:41:568:47 | T | @@ -833,6 +917,8 @@ inferType | main.rs:571:18:571:18 | y | | main.rs:568:41:568:47 | T | | main.rs:571:18:571:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | | main.rs:572:18:572:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:572:18:572:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:572:18:572:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:572:32:572:33 | s1 | | {EXTERNAL LOCATION} | bool | | main.rs:572:36:572:37 | s2 | | {EXTERNAL LOCATION} | i64 | | main.rs:575:54:575:54 | x | | main.rs:575:41:575:51 | T | @@ -844,6 +930,8 @@ inferType | main.rs:578:18:578:18 | y | | main.rs:575:41:575:51 | T | | main.rs:578:18:578:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | | main.rs:579:18:579:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:579:18:579:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:579:18:579:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:579:32:579:33 | s1 | | {EXTERNAL LOCATION} | u8 | | main.rs:579:36:579:37 | s2 | | {EXTERNAL LOCATION} | i64 | | main.rs:595:15:595:18 | SelfParam | | main.rs:594:5:603:5 | Self [trait MyTrait] | @@ -879,10 +967,14 @@ inferType | main.rs:623:17:623:33 | MyThing {...} | T | main.rs:591:5:592:14 | S2 | | main.rs:623:30:623:31 | S2 | | main.rs:591:5:592:14 | S2 | | main.rs:625:18:625:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:625:18:625:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:625:18:625:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:625:26:625:26 | x | | main.rs:584:5:587:5 | MyThing | | main.rs:625:26:625:26 | x | T | main.rs:589:5:590:14 | S1 | | main.rs:625:26:625:31 | x.m1() | | main.rs:589:5:590:14 | S1 | | main.rs:626:18:626:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:626:18:626:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:626:18:626:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:626:26:626:26 | y | | main.rs:584:5:587:5 | MyThing | | main.rs:626:26:626:26 | y | T | main.rs:591:5:592:14 | S2 | | main.rs:626:26:626:31 | y.m1() | | main.rs:591:5:592:14 | S2 | @@ -897,10 +989,14 @@ inferType | main.rs:629:17:629:33 | MyThing {...} | T | main.rs:591:5:592:14 | S2 | | main.rs:629:30:629:31 | S2 | | main.rs:591:5:592:14 | S2 | | main.rs:631:18:631:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:631:18:631:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:631:18:631:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:631:26:631:26 | x | | main.rs:584:5:587:5 | MyThing | | main.rs:631:26:631:26 | x | T | main.rs:589:5:590:14 | S1 | | main.rs:631:26:631:31 | x.m2() | | main.rs:589:5:590:14 | S1 | | main.rs:632:18:632:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:632:18:632:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:632:18:632:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:632:26:632:26 | y | | main.rs:584:5:587:5 | MyThing | | main.rs:632:26:632:26 | y | T | main.rs:591:5:592:14 | S2 | | main.rs:632:26:632:31 | y.m2() | | main.rs:591:5:592:14 | S2 | @@ -915,10 +1011,14 @@ inferType | main.rs:635:18:635:34 | MyThing {...} | T | main.rs:591:5:592:14 | S2 | | main.rs:635:31:635:32 | S2 | | main.rs:591:5:592:14 | S2 | | main.rs:637:18:637:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:637:18:637:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:637:18:637:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:637:26:637:42 | call_trait_m1(...) | | main.rs:589:5:590:14 | S1 | | main.rs:637:40:637:41 | x2 | | main.rs:584:5:587:5 | MyThing | | main.rs:637:40:637:41 | x2 | T | main.rs:589:5:590:14 | S1 | | main.rs:638:18:638:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:638:18:638:42 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:638:18:638:42 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:638:26:638:42 | call_trait_m1(...) | | main.rs:591:5:592:14 | S2 | | main.rs:638:40:638:41 | y2 | | main.rs:584:5:587:5 | MyThing | | main.rs:638:40:638:41 | y2 | T | main.rs:591:5:592:14 | S2 | @@ -946,6 +1046,8 @@ inferType | main.rs:647:37:647:38 | x3 | T | main.rs:584:5:587:5 | MyThing | | main.rs:647:37:647:38 | x3 | T.T | main.rs:589:5:590:14 | S1 | | main.rs:648:18:648:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:648:18:648:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:648:18:648:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:648:26:648:26 | a | | main.rs:589:5:590:14 | S1 | | main.rs:649:13:649:13 | b | | main.rs:591:5:592:14 | S2 | | main.rs:649:17:649:39 | call_trait_thing_m1(...) | | main.rs:591:5:592:14 | S2 | @@ -953,6 +1055,8 @@ inferType | main.rs:649:37:649:38 | y3 | T | main.rs:584:5:587:5 | MyThing | | main.rs:649:37:649:38 | y3 | T.T | main.rs:591:5:592:14 | S2 | | main.rs:650:18:650:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:650:18:650:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:650:18:650:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:650:26:650:26 | b | | main.rs:591:5:592:14 | S2 | | main.rs:661:19:661:22 | SelfParam | | main.rs:655:5:658:5 | Wrapper | | main.rs:661:19:661:22 | SelfParam | A | main.rs:660:10:660:10 | A | @@ -1027,6 +1131,8 @@ inferType | main.rs:773:13:773:14 | x1 | | main.rs:706:5:707:13 | S | | main.rs:773:18:773:18 | S | | main.rs:706:5:707:13 | S | | main.rs:775:18:775:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:775:18:775:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:775:18:775:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:775:26:775:27 | x1 | | main.rs:706:5:707:13 | S | | main.rs:775:26:775:32 | x1.m1() | | main.rs:712:5:713:14 | AT | | main.rs:777:13:777:14 | x2 | | main.rs:706:5:707:13 | S | @@ -1035,16 +1141,22 @@ inferType | main.rs:779:17:779:18 | x2 | | main.rs:706:5:707:13 | S | | main.rs:779:17:779:23 | x2.m2() | | main.rs:712:5:713:14 | AT | | main.rs:780:18:780:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:780:18:780:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:780:18:780:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:780:26:780:26 | y | | main.rs:712:5:713:14 | AT | | main.rs:782:13:782:14 | x3 | | main.rs:706:5:707:13 | S | | main.rs:782:18:782:18 | S | | main.rs:706:5:707:13 | S | | main.rs:784:18:784:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:784:18:784:43 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:784:18:784:43 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:784:26:784:27 | x3 | | main.rs:706:5:707:13 | S | | main.rs:784:26:784:34 | x3.put(...) | | main.rs:655:5:658:5 | Wrapper | | main.rs:784:26:784:34 | x3.put(...) | A | {EXTERNAL LOCATION} | i32 | | main.rs:784:26:784:43 | ... .unwrap() | | {EXTERNAL LOCATION} | i32 | | main.rs:784:33:784:33 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:787:18:787:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:787:18:787:49 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:787:18:787:49 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:787:26:787:27 | x3 | | main.rs:706:5:707:13 | S | | main.rs:787:26:787:40 | x3.putTwo(...) | | main.rs:655:5:658:5 | Wrapper | | main.rs:787:26:787:40 | x3.putTwo(...) | A | main.rs:726:36:726:50 | AssociatedParam | @@ -1053,15 +1165,21 @@ inferType | main.rs:787:39:787:39 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:789:20:789:20 | S | | main.rs:706:5:707:13 | S | | main.rs:790:18:790:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:790:18:790:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:790:18:790:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:792:13:792:14 | x5 | | main.rs:709:5:710:14 | S2 | | main.rs:792:18:792:19 | S2 | | main.rs:709:5:710:14 | S2 | | main.rs:793:18:793:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:793:18:793:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:793:18:793:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:793:26:793:27 | x5 | | main.rs:709:5:710:14 | S2 | | main.rs:793:26:793:32 | x5.m1() | | main.rs:655:5:658:5 | Wrapper | | main.rs:793:26:793:32 | x5.m1() | A | main.rs:709:5:710:14 | S2 | | main.rs:794:13:794:14 | x6 | | main.rs:709:5:710:14 | S2 | | main.rs:794:18:794:19 | S2 | | main.rs:709:5:710:14 | S2 | | main.rs:795:18:795:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:795:18:795:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:795:18:795:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:795:26:795:27 | x6 | | main.rs:709:5:710:14 | S2 | | main.rs:795:26:795:32 | x6.m2() | | main.rs:655:5:658:5 | Wrapper | | main.rs:795:26:795:32 | x6.m2() | A | main.rs:709:5:710:14 | S2 | @@ -1095,10 +1213,14 @@ inferType | main.rs:826:17:826:36 | ...::C2 {...} | A | main.rs:812:5:813:14 | S2 | | main.rs:826:33:826:34 | S2 | | main.rs:812:5:813:14 | S2 | | main.rs:828:18:828:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:828:18:828:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:828:18:828:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:828:26:828:26 | x | | main.rs:804:5:808:5 | MyEnum | | main.rs:828:26:828:26 | x | A | main.rs:810:5:811:14 | S1 | | main.rs:828:26:828:31 | x.m1() | | main.rs:810:5:811:14 | S1 | | main.rs:829:18:829:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:829:18:829:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:829:18:829:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:829:26:829:26 | y | | main.rs:804:5:808:5 | MyEnum | | main.rs:829:26:829:26 | y | A | main.rs:812:5:813:14 | S2 | | main.rs:829:26:829:31 | y.m1() | | main.rs:812:5:813:14 | S2 | @@ -1157,6 +1279,8 @@ inferType | main.rs:908:17:908:22 | x.m1() | | main.rs:834:5:837:5 | MyThing | | main.rs:908:17:908:22 | x.m1() | A | main.rs:844:5:845:14 | S1 | | main.rs:909:18:909:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:909:18:909:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:909:18:909:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:909:26:909:26 | a | | main.rs:834:5:837:5 | MyThing | | main.rs:909:26:909:26 | a | A | main.rs:844:5:845:14 | S1 | | main.rs:913:13:913:13 | x | | main.rs:834:5:837:5 | MyThing | @@ -1170,10 +1294,14 @@ inferType | main.rs:914:17:914:33 | MyThing {...} | A | main.rs:846:5:847:14 | S2 | | main.rs:914:30:914:31 | S2 | | main.rs:846:5:847:14 | S2 | | main.rs:916:18:916:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:916:18:916:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:916:18:916:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:916:26:916:26 | x | | main.rs:834:5:837:5 | MyThing | | main.rs:916:26:916:26 | x | A | main.rs:844:5:845:14 | S1 | | main.rs:916:26:916:31 | x.m1() | | main.rs:844:5:845:14 | S1 | | main.rs:917:18:917:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:917:18:917:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:917:18:917:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:917:26:917:26 | y | | main.rs:834:5:837:5 | MyThing | | main.rs:917:26:917:26 | y | A | main.rs:846:5:847:14 | S2 | | main.rs:917:26:917:31 | y.m1() | | main.rs:846:5:847:14 | S2 | @@ -1188,10 +1316,14 @@ inferType | main.rs:920:17:920:33 | MyThing {...} | A | main.rs:846:5:847:14 | S2 | | main.rs:920:30:920:31 | S2 | | main.rs:846:5:847:14 | S2 | | main.rs:922:18:922:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:922:18:922:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:922:18:922:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:922:26:922:26 | x | | main.rs:834:5:837:5 | MyThing | | main.rs:922:26:922:26 | x | A | main.rs:844:5:845:14 | S1 | | main.rs:922:26:922:31 | x.m2() | | main.rs:844:5:845:14 | S1 | | main.rs:923:18:923:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:923:18:923:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:923:18:923:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:923:26:923:26 | y | | main.rs:834:5:837:5 | MyThing | | main.rs:923:26:923:26 | y | A | main.rs:846:5:847:14 | S2 | | main.rs:923:26:923:31 | y.m2() | | main.rs:846:5:847:14 | S2 | @@ -1206,10 +1338,14 @@ inferType | main.rs:926:17:926:34 | MyThing2 {...} | A | main.rs:846:5:847:14 | S2 | | main.rs:926:31:926:32 | S2 | | main.rs:846:5:847:14 | S2 | | main.rs:928:18:928:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:928:18:928:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:928:18:928:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:928:26:928:26 | x | | main.rs:839:5:842:5 | MyThing2 | | main.rs:928:26:928:26 | x | A | main.rs:844:5:845:14 | S1 | | main.rs:928:26:928:31 | x.m3() | | main.rs:844:5:845:14 | S1 | | main.rs:929:18:929:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:929:18:929:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:929:18:929:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:929:26:929:26 | y | | main.rs:839:5:842:5 | MyThing2 | | main.rs:929:26:929:26 | y | A | main.rs:846:5:847:14 | S2 | | main.rs:929:26:929:31 | y.m3() | | main.rs:846:5:847:14 | S2 | @@ -1249,6 +1385,8 @@ inferType | main.rs:970:13:970:13 | x | | main.rs:942:5:943:14 | S1 | | main.rs:970:17:970:18 | S1 | | main.rs:942:5:943:14 | S1 | | main.rs:971:18:971:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:971:18:971:31 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:971:18:971:31 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:971:26:971:31 | id(...) | | file://:0:0:0:0 | & | | main.rs:971:26:971:31 | id(...) | &T | main.rs:942:5:943:14 | S1 | | main.rs:971:29:971:30 | &x | | file://:0:0:0:0 | & | @@ -1257,6 +1395,8 @@ inferType | main.rs:973:13:973:13 | x | | main.rs:942:5:943:14 | S1 | | main.rs:973:17:973:18 | S1 | | main.rs:942:5:943:14 | S1 | | main.rs:974:18:974:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:974:18:974:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:974:18:974:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:974:26:974:37 | id::<...>(...) | | file://:0:0:0:0 | & | | main.rs:974:26:974:37 | id::<...>(...) | &T | main.rs:942:5:943:14 | S1 | | main.rs:974:35:974:36 | &x | | file://:0:0:0:0 | & | @@ -1265,6 +1405,8 @@ inferType | main.rs:976:13:976:13 | x | | main.rs:942:5:943:14 | S1 | | main.rs:976:17:976:18 | S1 | | main.rs:942:5:943:14 | S1 | | main.rs:977:18:977:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:977:18:977:44 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:977:18:977:44 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:977:26:977:44 | id::<...>(...) | | file://:0:0:0:0 | & | | main.rs:977:26:977:44 | id::<...>(...) | &T | main.rs:942:5:943:14 | S1 | | main.rs:977:42:977:43 | &x | | file://:0:0:0:0 | & | @@ -1289,10 +1431,14 @@ inferType | main.rs:998:19:998:22 | self | Snd | main.rs:996:15:996:17 | Snd | | main.rs:999:43:999:82 | MacroExpr | | main.rs:996:15:996:17 | Snd | | main.rs:999:50:999:81 | "PairNone has no second elemen... | | {EXTERNAL LOCATION} | str | +| main.rs:999:50:999:81 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:999:50:999:81 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:999:50:999:81 | MacroExpr | | main.rs:996:15:996:17 | Snd | | main.rs:999:50:999:81 | { ... } | | main.rs:996:15:996:17 | Snd | | main.rs:1000:43:1000:81 | MacroExpr | | main.rs:996:15:996:17 | Snd | | main.rs:1000:50:1000:80 | "PairFst has no second element... | | {EXTERNAL LOCATION} | str | +| main.rs:1000:50:1000:80 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1000:50:1000:80 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1000:50:1000:80 | MacroExpr | | main.rs:996:15:996:17 | Snd | | main.rs:1000:50:1000:80 | { ... } | | main.rs:996:15:996:17 | Snd | | main.rs:1001:37:1001:39 | snd | | main.rs:996:15:996:17 | Snd | @@ -1315,6 +1461,8 @@ inferType | main.rs:1029:17:1029:29 | t.unwrapSnd() | Snd | main.rs:1013:5:1014:14 | S3 | | main.rs:1029:17:1029:41 | ... .unwrapSnd() | | main.rs:1013:5:1014:14 | S3 | | main.rs:1030:18:1030:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1030:18:1030:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1030:18:1030:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1030:26:1030:26 | x | | main.rs:1013:5:1014:14 | S3 | | main.rs:1035:13:1035:14 | p1 | | main.rs:988:5:994:5 | PairOption | | main.rs:1035:13:1035:14 | p1 | Fst | main.rs:1007:5:1008:14 | S1 | @@ -1325,6 +1473,8 @@ inferType | main.rs:1035:47:1035:48 | S1 | | main.rs:1007:5:1008:14 | S1 | | main.rs:1035:51:1035:52 | S2 | | main.rs:1010:5:1011:14 | S2 | | main.rs:1036:18:1036:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1036:18:1036:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1036:18:1036:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1036:26:1036:27 | p1 | | main.rs:988:5:994:5 | PairOption | | main.rs:1036:26:1036:27 | p1 | Fst | main.rs:1007:5:1008:14 | S1 | | main.rs:1036:26:1036:27 | p1 | Snd | main.rs:1010:5:1011:14 | S2 | @@ -1335,6 +1485,8 @@ inferType | main.rs:1039:26:1039:47 | ...::PairNone(...) | Fst | main.rs:1007:5:1008:14 | S1 | | main.rs:1039:26:1039:47 | ...::PairNone(...) | Snd | main.rs:1010:5:1011:14 | S2 | | main.rs:1040:18:1040:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1040:18:1040:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1040:18:1040:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1040:26:1040:27 | p2 | | main.rs:988:5:994:5 | PairOption | | main.rs:1040:26:1040:27 | p2 | Fst | main.rs:1007:5:1008:14 | S1 | | main.rs:1040:26:1040:27 | p2 | Snd | main.rs:1010:5:1011:14 | S2 | @@ -1346,6 +1498,8 @@ inferType | main.rs:1043:34:1043:56 | ...::PairSnd(...) | Snd | main.rs:1013:5:1014:14 | S3 | | main.rs:1043:54:1043:55 | S3 | | main.rs:1013:5:1014:14 | S3 | | main.rs:1044:18:1044:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1044:18:1044:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1044:18:1044:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1044:26:1044:27 | p3 | | main.rs:988:5:994:5 | PairOption | | main.rs:1044:26:1044:27 | p3 | Fst | main.rs:1010:5:1011:14 | S2 | | main.rs:1044:26:1044:27 | p3 | Snd | main.rs:1013:5:1014:14 | S3 | @@ -1356,6 +1510,8 @@ inferType | main.rs:1047:35:1047:56 | ...::PairNone(...) | Fst | main.rs:1010:5:1011:14 | S2 | | main.rs:1047:35:1047:56 | ...::PairNone(...) | Snd | main.rs:1013:5:1014:14 | S3 | | main.rs:1048:18:1048:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1048:18:1048:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1048:18:1048:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1048:26:1048:27 | p3 | | main.rs:988:5:994:5 | PairOption | | main.rs:1048:26:1048:27 | p3 | Fst | main.rs:1010:5:1011:14 | S2 | | main.rs:1048:26:1048:27 | p3 | Snd | main.rs:1013:5:1014:14 | S3 | @@ -1404,6 +1560,8 @@ inferType | main.rs:1094:13:1094:14 | x1 | | main.rs:1055:5:1059:5 | MyOption | | main.rs:1094:18:1094:37 | ...::new(...) | | main.rs:1055:5:1059:5 | MyOption | | main.rs:1095:18:1095:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1095:18:1095:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1095:18:1095:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1095:26:1095:27 | x1 | | main.rs:1055:5:1059:5 | MyOption | | main.rs:1097:13:1097:18 | mut x2 | | main.rs:1055:5:1059:5 | MyOption | | main.rs:1097:13:1097:18 | mut x2 | T | main.rs:1090:5:1091:13 | S | @@ -1413,6 +1571,8 @@ inferType | main.rs:1098:9:1098:10 | x2 | T | main.rs:1090:5:1091:13 | S | | main.rs:1098:16:1098:16 | S | | main.rs:1090:5:1091:13 | S | | main.rs:1099:18:1099:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1099:18:1099:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1099:18:1099:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1099:26:1099:27 | x2 | | main.rs:1055:5:1059:5 | MyOption | | main.rs:1099:26:1099:27 | x2 | T | main.rs:1090:5:1091:13 | S | | main.rs:1101:13:1101:18 | mut x3 | | main.rs:1055:5:1059:5 | MyOption | @@ -1420,6 +1580,8 @@ inferType | main.rs:1102:9:1102:10 | x3 | | main.rs:1055:5:1059:5 | MyOption | | main.rs:1102:21:1102:21 | S | | main.rs:1090:5:1091:13 | S | | main.rs:1103:18:1103:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1103:18:1103:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1103:18:1103:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1103:26:1103:27 | x3 | | main.rs:1055:5:1059:5 | MyOption | | main.rs:1105:13:1105:18 | mut x4 | | main.rs:1055:5:1059:5 | MyOption | | main.rs:1105:13:1105:18 | mut x4 | T | main.rs:1090:5:1091:13 | S | @@ -1432,6 +1594,8 @@ inferType | main.rs:1106:28:1106:29 | x4 | T | main.rs:1090:5:1091:13 | S | | main.rs:1106:32:1106:32 | S | | main.rs:1090:5:1091:13 | S | | main.rs:1107:18:1107:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1107:18:1107:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1107:18:1107:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1107:26:1107:27 | x4 | | main.rs:1055:5:1059:5 | MyOption | | main.rs:1107:26:1107:27 | x4 | T | main.rs:1090:5:1091:13 | S | | main.rs:1109:13:1109:14 | x5 | | main.rs:1055:5:1059:5 | MyOption | @@ -1443,6 +1607,8 @@ inferType | main.rs:1109:35:1109:57 | ...::MyNone(...) | | main.rs:1055:5:1059:5 | MyOption | | main.rs:1109:35:1109:57 | ...::MyNone(...) | T | main.rs:1090:5:1091:13 | S | | main.rs:1110:18:1110:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1110:18:1110:37 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1110:18:1110:37 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1110:26:1110:27 | x5 | | main.rs:1055:5:1059:5 | MyOption | | main.rs:1110:26:1110:27 | x5 | T | main.rs:1055:5:1059:5 | MyOption | | main.rs:1110:26:1110:27 | x5 | T.T | main.rs:1090:5:1091:13 | S | @@ -1457,6 +1623,8 @@ inferType | main.rs:1112:35:1112:57 | ...::MyNone(...) | | main.rs:1055:5:1059:5 | MyOption | | main.rs:1112:35:1112:57 | ...::MyNone(...) | T | main.rs:1090:5:1091:13 | S | | main.rs:1113:18:1113:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1113:18:1113:61 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1113:18:1113:61 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1113:26:1113:61 | ...::flatten(...) | | main.rs:1055:5:1059:5 | MyOption | | main.rs:1113:26:1113:61 | ...::flatten(...) | T | main.rs:1090:5:1091:13 | S | | main.rs:1113:59:1113:60 | x6 | | main.rs:1055:5:1059:5 | MyOption | @@ -1479,6 +1647,8 @@ inferType | main.rs:1119:13:1119:31 | ...::MySome(...) | T | main.rs:1090:5:1091:13 | S | | main.rs:1119:30:1119:30 | S | | main.rs:1090:5:1091:13 | S | | main.rs:1121:18:1121:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1121:18:1121:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1121:18:1121:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1121:26:1121:32 | from_if | | main.rs:1055:5:1059:5 | MyOption | | main.rs:1121:26:1121:32 | from_if | T | main.rs:1090:5:1091:13 | S | | main.rs:1124:13:1124:22 | from_match | | main.rs:1055:5:1059:5 | MyOption | @@ -1496,6 +1666,8 @@ inferType | main.rs:1126:22:1126:40 | ...::MySome(...) | T | main.rs:1090:5:1091:13 | S | | main.rs:1126:39:1126:39 | S | | main.rs:1090:5:1091:13 | S | | main.rs:1128:18:1128:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1128:18:1128:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1128:18:1128:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1128:26:1128:35 | from_match | | main.rs:1055:5:1059:5 | MyOption | | main.rs:1128:26:1128:35 | from_match | T | main.rs:1090:5:1091:13 | S | | main.rs:1131:13:1131:21 | from_loop | | main.rs:1055:5:1059:5 | MyOption | @@ -1511,6 +1683,8 @@ inferType | main.rs:1135:19:1135:37 | ...::MySome(...) | T | main.rs:1090:5:1091:13 | S | | main.rs:1135:36:1135:36 | S | | main.rs:1090:5:1091:13 | S | | main.rs:1137:18:1137:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1137:18:1137:34 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1137:18:1137:34 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1137:26:1137:34 | from_loop | | main.rs:1055:5:1059:5 | MyOption | | main.rs:1137:26:1137:34 | from_loop | T | main.rs:1090:5:1091:13 | S | | main.rs:1155:15:1155:18 | SelfParam | | main.rs:1143:5:1144:19 | S | @@ -1576,6 +1750,8 @@ inferType | main.rs:1187:18:1187:22 | S(...) | T | main.rs:1146:5:1147:14 | S2 | | main.rs:1187:20:1187:21 | S2 | | main.rs:1146:5:1147:14 | S2 | | main.rs:1188:18:1188:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1188:18:1188:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1188:18:1188:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1188:26:1188:27 | x1 | | main.rs:1143:5:1144:19 | S | | main.rs:1188:26:1188:27 | x1 | T | main.rs:1146:5:1147:14 | S2 | | main.rs:1188:26:1188:32 | x1.m1() | | main.rs:1146:5:1147:14 | S2 | @@ -1585,11 +1761,15 @@ inferType | main.rs:1190:18:1190:22 | S(...) | T | main.rs:1146:5:1147:14 | S2 | | main.rs:1190:20:1190:21 | S2 | | main.rs:1146:5:1147:14 | S2 | | main.rs:1192:18:1192:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1192:18:1192:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1192:18:1192:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1192:26:1192:27 | x2 | | main.rs:1143:5:1144:19 | S | | main.rs:1192:26:1192:27 | x2 | T | main.rs:1146:5:1147:14 | S2 | | main.rs:1192:26:1192:32 | x2.m2() | | file://:0:0:0:0 | & | | main.rs:1192:26:1192:32 | x2.m2() | &T | main.rs:1146:5:1147:14 | S2 | | main.rs:1193:18:1193:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1193:18:1193:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1193:18:1193:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1193:26:1193:27 | x2 | | main.rs:1143:5:1144:19 | S | | main.rs:1193:26:1193:27 | x2 | T | main.rs:1146:5:1147:14 | S2 | | main.rs:1193:26:1193:32 | x2.m3() | | file://:0:0:0:0 | & | @@ -1600,6 +1780,8 @@ inferType | main.rs:1195:18:1195:22 | S(...) | T | main.rs:1146:5:1147:14 | S2 | | main.rs:1195:20:1195:21 | S2 | | main.rs:1146:5:1147:14 | S2 | | main.rs:1197:18:1197:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1197:18:1197:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1197:18:1197:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1197:26:1197:41 | ...::m2(...) | | file://:0:0:0:0 | & | | main.rs:1197:26:1197:41 | ...::m2(...) | &T | main.rs:1146:5:1147:14 | S2 | | main.rs:1197:38:1197:40 | &x3 | | file://:0:0:0:0 | & | @@ -1608,6 +1790,8 @@ inferType | main.rs:1197:39:1197:40 | x3 | | main.rs:1143:5:1144:19 | S | | main.rs:1197:39:1197:40 | x3 | T | main.rs:1146:5:1147:14 | S2 | | main.rs:1198:18:1198:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1198:18:1198:41 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1198:18:1198:41 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1198:26:1198:41 | ...::m3(...) | | file://:0:0:0:0 | & | | main.rs:1198:26:1198:41 | ...::m3(...) | &T | main.rs:1146:5:1147:14 | S2 | | main.rs:1198:38:1198:40 | &x3 | | file://:0:0:0:0 | & | @@ -1625,12 +1809,16 @@ inferType | main.rs:1200:19:1200:23 | S(...) | T | main.rs:1146:5:1147:14 | S2 | | main.rs:1200:21:1200:22 | S2 | | main.rs:1146:5:1147:14 | S2 | | main.rs:1202:18:1202:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1202:18:1202:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1202:18:1202:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1202:26:1202:27 | x4 | | file://:0:0:0:0 | & | | main.rs:1202:26:1202:27 | x4 | &T | main.rs:1143:5:1144:19 | S | | main.rs:1202:26:1202:27 | x4 | &T.T | main.rs:1146:5:1147:14 | S2 | | main.rs:1202:26:1202:32 | x4.m2() | | file://:0:0:0:0 | & | | main.rs:1202:26:1202:32 | x4.m2() | &T | main.rs:1146:5:1147:14 | S2 | | main.rs:1203:18:1203:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1203:18:1203:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1203:18:1203:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1203:26:1203:27 | x4 | | file://:0:0:0:0 | & | | main.rs:1203:26:1203:27 | x4 | &T | main.rs:1143:5:1144:19 | S | | main.rs:1203:26:1203:27 | x4 | &T.T | main.rs:1146:5:1147:14 | S2 | @@ -1646,11 +1834,15 @@ inferType | main.rs:1205:19:1205:23 | S(...) | T | main.rs:1146:5:1147:14 | S2 | | main.rs:1205:21:1205:22 | S2 | | main.rs:1146:5:1147:14 | S2 | | main.rs:1207:18:1207:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1207:18:1207:32 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1207:18:1207:32 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1207:26:1207:27 | x5 | | file://:0:0:0:0 | & | | main.rs:1207:26:1207:27 | x5 | &T | main.rs:1143:5:1144:19 | S | | main.rs:1207:26:1207:27 | x5 | &T.T | main.rs:1146:5:1147:14 | S2 | | main.rs:1207:26:1207:32 | x5.m1() | | main.rs:1146:5:1147:14 | S2 | | main.rs:1208:18:1208:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1208:18:1208:29 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1208:18:1208:29 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1208:26:1208:27 | x5 | | file://:0:0:0:0 | & | | main.rs:1208:26:1208:27 | x5 | &T | main.rs:1143:5:1144:19 | S | | main.rs:1208:26:1208:27 | x5 | &T.T | main.rs:1146:5:1147:14 | S2 | @@ -1665,6 +1857,8 @@ inferType | main.rs:1210:19:1210:23 | S(...) | T | main.rs:1146:5:1147:14 | S2 | | main.rs:1210:21:1210:22 | S2 | | main.rs:1146:5:1147:14 | S2 | | main.rs:1213:18:1213:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1213:18:1213:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1213:18:1213:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1213:26:1213:30 | (...) | | main.rs:1143:5:1144:19 | S | | main.rs:1213:26:1213:30 | (...) | T | main.rs:1146:5:1147:14 | S2 | | main.rs:1213:26:1213:35 | ... .m1() | | main.rs:1146:5:1147:14 | S2 | @@ -1690,6 +1884,8 @@ inferType | main.rs:1218:17:1218:23 | x7.m1() | | file://:0:0:0:0 | & | | main.rs:1218:17:1218:23 | x7.m1() | &T | main.rs:1146:5:1147:14 | S2 | | main.rs:1219:18:1219:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1219:18:1219:27 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1219:18:1219:27 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1219:26:1219:27 | x7 | | main.rs:1143:5:1144:19 | S | | main.rs:1219:26:1219:27 | x7 | T | file://:0:0:0:0 | & | | main.rs:1219:26:1219:27 | x7 | T.&T | main.rs:1146:5:1147:14 | S2 | @@ -1711,6 +1907,8 @@ inferType | main.rs:1229:17:1229:24 | my_thing | | file://:0:0:0:0 | & | | main.rs:1229:17:1229:24 | my_thing | &T | main.rs:1149:5:1152:5 | MyInt | | main.rs:1230:18:1230:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1230:18:1230:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1230:18:1230:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1233:13:1233:20 | my_thing | | file://:0:0:0:0 | & | | main.rs:1233:13:1233:20 | my_thing | &T | main.rs:1149:5:1152:5 | MyInt | | main.rs:1233:24:1233:39 | &... | | file://:0:0:0:0 | & | @@ -1721,6 +1919,8 @@ inferType | main.rs:1234:17:1234:24 | my_thing | | file://:0:0:0:0 | & | | main.rs:1234:17:1234:24 | my_thing | &T | main.rs:1149:5:1152:5 | MyInt | | main.rs:1235:18:1235:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1235:18:1235:26 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1235:18:1235:26 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1242:16:1242:20 | SelfParam | | file://:0:0:0:0 | & | | main.rs:1242:16:1242:20 | SelfParam | &T | main.rs:1240:5:1248:5 | Self [trait MyTrait] | | main.rs:1245:16:1245:20 | SelfParam | | file://:0:0:0:0 | & | @@ -1881,6 +2081,8 @@ inferType | main.rs:1325:22:1325:30 | &mut flag | &T | main.rs:1283:5:1286:5 | MyFlag | | main.rs:1325:27:1325:30 | flag | | main.rs:1283:5:1286:5 | MyFlag | | main.rs:1326:18:1326:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1326:18:1326:29 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1326:18:1326:29 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1326:26:1326:29 | flag | | main.rs:1283:5:1286:5 | MyFlag | | main.rs:1340:43:1343:5 | { ... } | | {EXTERNAL LOCATION} | Result | | main.rs:1340:43:1343:5 | { ... } | E | main.rs:1333:5:1334:14 | S1 | @@ -1950,6 +2152,8 @@ inferType | main.rs:1363:53:1366:9 | { ... } | | {EXTERNAL LOCATION} | Result | | main.rs:1363:53:1366:9 | { ... } | E | main.rs:1333:5:1334:14 | S1 | | main.rs:1364:22:1364:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1364:22:1364:30 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1364:22:1364:30 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1365:13:1365:34 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1365:13:1365:34 | ...::Ok::<...>(...) | E | main.rs:1333:5:1334:14 | S1 | | main.rs:1367:9:1367:23 | ...::Err(...) | | {EXTERNAL LOCATION} | Result | @@ -1960,14 +2164,20 @@ inferType | main.rs:1371:37:1371:52 | try_same_error(...) | E | main.rs:1333:5:1334:14 | S1 | | main.rs:1371:37:1371:52 | try_same_error(...) | T | main.rs:1333:5:1334:14 | S1 | | main.rs:1372:22:1372:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1372:22:1372:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1372:22:1372:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1375:37:1375:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1375:37:1375:55 | try_convert_error(...) | E | main.rs:1336:5:1337:14 | S2 | | main.rs:1375:37:1375:55 | try_convert_error(...) | T | main.rs:1333:5:1334:14 | S1 | | main.rs:1376:22:1376:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1376:22:1376:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1376:22:1376:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1379:37:1379:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1379:37:1379:49 | try_chained(...) | E | main.rs:1336:5:1337:14 | S2 | | main.rs:1379:37:1379:49 | try_chained(...) | T | main.rs:1333:5:1334:14 | S1 | | main.rs:1380:22:1380:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1380:22:1380:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1380:22:1380:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1383:37:1383:63 | try_complex(...) | | {EXTERNAL LOCATION} | Result | | main.rs:1383:37:1383:63 | try_complex(...) | E | main.rs:1333:5:1334:14 | S1 | | main.rs:1383:37:1383:63 | try_complex(...) | T | main.rs:1333:5:1334:14 | S1 | @@ -1976,6 +2186,8 @@ inferType | main.rs:1383:49:1383:62 | ...::Ok(...) | T | main.rs:1333:5:1334:14 | S1 | | main.rs:1383:60:1383:61 | S1 | | main.rs:1333:5:1334:14 | S1 | | main.rs:1384:22:1384:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1384:22:1384:35 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1384:22:1384:35 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1391:13:1391:13 | x | | {EXTERNAL LOCATION} | i32 | | main.rs:1391:22:1391:22 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:1392:13:1392:13 | y | | {EXTERNAL LOCATION} | i32 | @@ -2928,8 +3140,13 @@ inferType | main.rs:1948:24:1948:25 | xs | | file://:0:0:0:0 | [] | | main.rs:1948:24:1948:25 | xs | [T;...] | main.rs:1897:5:1898:13 | S | | main.rs:1948:24:1948:25 | xs | [T] | main.rs:1897:5:1898:13 | S | +| main.rs:1954:13:1954:13 | x | | {EXTERNAL LOCATION} | String | +| main.rs:1954:17:1954:46 | MacroExpr | | {EXTERNAL LOCATION} | String | | main.rs:1954:25:1954:35 | "Hello, {}" | | {EXTERNAL LOCATION} | str | | main.rs:1954:25:1954:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | +| main.rs:1954:25:1954:45 | ...::must_use(...) | | {EXTERNAL LOCATION} | String | +| main.rs:1954:25:1954:45 | FormatArgsExpr | | {EXTERNAL LOCATION} | Arguments | +| main.rs:1954:25:1954:45 | MacroExpr | | {EXTERNAL LOCATION} | Arguments | | main.rs:1954:25:1954:45 | { ... } | | {EXTERNAL LOCATION} | String | | main.rs:1954:38:1954:45 | "World!" | | {EXTERNAL LOCATION} | str | | main.rs:1963:19:1963:22 | SelfParam | | main.rs:1959:5:1964:5 | Self [trait MyAdd] | @@ -3152,11 +3369,38 @@ inferType | main.rs:2075:9:2079:9 | [...] | | file://:0:0:0:0 | [] | | main.rs:2075:9:2079:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | | main.rs:2076:13:2076:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2076:26:2076:30 | "foo" | | {EXTERNAL LOCATION} | Cow | +| main.rs:2076:26:2076:30 | "foo" | | {EXTERNAL LOCATION} | Box | +| main.rs:2076:26:2076:30 | "foo" | | {EXTERNAL LOCATION} | char | | main.rs:2076:26:2076:30 | "foo" | | {EXTERNAL LOCATION} | str | +| main.rs:2076:26:2076:30 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2076:26:2076:30 | "foo" | &T | {EXTERNAL LOCATION} | String | +| main.rs:2076:26:2076:30 | "foo" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2076:26:2076:30 | "foo" | A | {EXTERNAL LOCATION} | Global | +| main.rs:2076:26:2076:30 | "foo" | B | {EXTERNAL LOCATION} | str | +| main.rs:2076:26:2076:30 | "foo" | T | {EXTERNAL LOCATION} | str | | main.rs:2077:13:2077:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2077:26:2077:30 | "bar" | | {EXTERNAL LOCATION} | Cow | +| main.rs:2077:26:2077:30 | "bar" | | {EXTERNAL LOCATION} | Box | +| main.rs:2077:26:2077:30 | "bar" | | {EXTERNAL LOCATION} | char | | main.rs:2077:26:2077:30 | "bar" | | {EXTERNAL LOCATION} | str | +| main.rs:2077:26:2077:30 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2077:26:2077:30 | "bar" | &T | {EXTERNAL LOCATION} | String | +| main.rs:2077:26:2077:30 | "bar" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2077:26:2077:30 | "bar" | A | {EXTERNAL LOCATION} | Global | +| main.rs:2077:26:2077:30 | "bar" | B | {EXTERNAL LOCATION} | str | +| main.rs:2077:26:2077:30 | "bar" | T | {EXTERNAL LOCATION} | str | | main.rs:2078:13:2078:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2078:26:2078:30 | "baz" | | {EXTERNAL LOCATION} | Cow | +| main.rs:2078:26:2078:30 | "baz" | | {EXTERNAL LOCATION} | Box | +| main.rs:2078:26:2078:30 | "baz" | | {EXTERNAL LOCATION} | char | | main.rs:2078:26:2078:30 | "baz" | | {EXTERNAL LOCATION} | str | +| main.rs:2078:26:2078:30 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2078:26:2078:30 | "baz" | &T | {EXTERNAL LOCATION} | String | +| main.rs:2078:26:2078:30 | "baz" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2078:26:2078:30 | "baz" | A | {EXTERNAL LOCATION} | Global | +| main.rs:2078:26:2078:30 | "baz" | B | {EXTERNAL LOCATION} | str | +| main.rs:2078:26:2078:30 | "baz" | T | {EXTERNAL LOCATION} | str | | main.rs:2080:13:2080:13 | s | | {EXTERNAL LOCATION} | String | | main.rs:2080:18:2080:25 | strings2 | | file://:0:0:0:0 | [] | | main.rs:2080:18:2080:25 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | @@ -3169,11 +3413,38 @@ inferType | main.rs:2083:10:2087:9 | [...] | | file://:0:0:0:0 | [] | | main.rs:2083:10:2087:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | | main.rs:2084:13:2084:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2084:26:2084:30 | "foo" | | {EXTERNAL LOCATION} | Cow | +| main.rs:2084:26:2084:30 | "foo" | | {EXTERNAL LOCATION} | Box | +| main.rs:2084:26:2084:30 | "foo" | | {EXTERNAL LOCATION} | char | | main.rs:2084:26:2084:30 | "foo" | | {EXTERNAL LOCATION} | str | +| main.rs:2084:26:2084:30 | "foo" | | file://:0:0:0:0 | & | +| main.rs:2084:26:2084:30 | "foo" | &T | {EXTERNAL LOCATION} | String | +| main.rs:2084:26:2084:30 | "foo" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2084:26:2084:30 | "foo" | A | {EXTERNAL LOCATION} | Global | +| main.rs:2084:26:2084:30 | "foo" | B | {EXTERNAL LOCATION} | str | +| main.rs:2084:26:2084:30 | "foo" | T | {EXTERNAL LOCATION} | str | | main.rs:2085:13:2085:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2085:26:2085:30 | "bar" | | {EXTERNAL LOCATION} | Cow | +| main.rs:2085:26:2085:30 | "bar" | | {EXTERNAL LOCATION} | Box | +| main.rs:2085:26:2085:30 | "bar" | | {EXTERNAL LOCATION} | char | | main.rs:2085:26:2085:30 | "bar" | | {EXTERNAL LOCATION} | str | +| main.rs:2085:26:2085:30 | "bar" | | file://:0:0:0:0 | & | +| main.rs:2085:26:2085:30 | "bar" | &T | {EXTERNAL LOCATION} | String | +| main.rs:2085:26:2085:30 | "bar" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2085:26:2085:30 | "bar" | A | {EXTERNAL LOCATION} | Global | +| main.rs:2085:26:2085:30 | "bar" | B | {EXTERNAL LOCATION} | str | +| main.rs:2085:26:2085:30 | "bar" | T | {EXTERNAL LOCATION} | str | | main.rs:2086:13:2086:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | +| main.rs:2086:26:2086:30 | "baz" | | {EXTERNAL LOCATION} | Cow | +| main.rs:2086:26:2086:30 | "baz" | | {EXTERNAL LOCATION} | Box | +| main.rs:2086:26:2086:30 | "baz" | | {EXTERNAL LOCATION} | char | | main.rs:2086:26:2086:30 | "baz" | | {EXTERNAL LOCATION} | str | +| main.rs:2086:26:2086:30 | "baz" | | file://:0:0:0:0 | & | +| main.rs:2086:26:2086:30 | "baz" | &T | {EXTERNAL LOCATION} | String | +| main.rs:2086:26:2086:30 | "baz" | &T | {EXTERNAL LOCATION} | str | +| main.rs:2086:26:2086:30 | "baz" | A | {EXTERNAL LOCATION} | Global | +| main.rs:2086:26:2086:30 | "baz" | B | {EXTERNAL LOCATION} | str | +| main.rs:2086:26:2086:30 | "baz" | T | {EXTERNAL LOCATION} | str | | main.rs:2088:18:2088:25 | strings3 | | file://:0:0:0:0 | & | | main.rs:2088:18:2088:25 | strings3 | &T | file://:0:0:0:0 | [] | | main.rs:2088:18:2088:25 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | @@ -3238,23 +3509,69 @@ inferType | main.rs:2119:32:2119:32 | 3 | | {EXTERNAL LOCATION} | u16 | | main.rs:2122:13:2122:17 | vals5 | | {EXTERNAL LOCATION} | Vec | | main.rs:2122:13:2122:17 | vals5 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2122:13:2122:17 | vals5 | T | {EXTERNAL LOCATION} | i32 | | main.rs:2122:13:2122:17 | vals5 | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2122:13:2122:17 | vals5 | T | {EXTERNAL LOCATION} | u32 | | main.rs:2122:21:2122:43 | ...::from(...) | | {EXTERNAL LOCATION} | Vec | | main.rs:2122:21:2122:43 | ...::from(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2122:21:2122:43 | ...::from(...) | T | {EXTERNAL LOCATION} | i32 | | main.rs:2122:21:2122:43 | ...::from(...) | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2122:21:2122:43 | ...::from(...) | T | {EXTERNAL LOCATION} | u32 | +| main.rs:2122:31:2122:42 | [...] | | {EXTERNAL LOCATION} | Cow | +| main.rs:2122:31:2122:42 | [...] | | {EXTERNAL LOCATION} | Box | +| main.rs:2122:31:2122:42 | [...] | | {EXTERNAL LOCATION} | ByteString | +| main.rs:2122:31:2122:42 | [...] | | {EXTERNAL LOCATION} | BinaryHeap | +| main.rs:2122:31:2122:42 | [...] | | {EXTERNAL LOCATION} | VecDeque | +| main.rs:2122:31:2122:42 | [...] | | {EXTERNAL LOCATION} | CString | +| main.rs:2122:31:2122:42 | [...] | | {EXTERNAL LOCATION} | String | +| main.rs:2122:31:2122:42 | [...] | | file://:0:0:0:0 | & | | main.rs:2122:31:2122:42 | [...] | | file://:0:0:0:0 | [] | +| main.rs:2122:31:2122:42 | [...] | &T | {EXTERNAL LOCATION} | str | +| main.rs:2122:31:2122:42 | [...] | &T | file://:0:0:0:0 | [] | +| main.rs:2122:31:2122:42 | [...] | &T | file://:0:0:0:0 | [] | +| main.rs:2122:31:2122:42 | [...] | &T.[T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2122:31:2122:42 | [...] | &T.[T;...] | {EXTERNAL LOCATION} | u8 | +| main.rs:2122:31:2122:42 | [...] | &T.[T;...] | {EXTERNAL LOCATION} | u32 | +| main.rs:2122:31:2122:42 | [...] | &T.[T] | {EXTERNAL LOCATION} | i32 | +| main.rs:2122:31:2122:42 | [...] | &T.[T] | {EXTERNAL LOCATION} | u8 | +| main.rs:2122:31:2122:42 | [...] | &T.[T] | {EXTERNAL LOCATION} | u32 | +| main.rs:2122:31:2122:42 | [...] | A | {EXTERNAL LOCATION} | Global | +| main.rs:2122:31:2122:42 | [...] | A | {EXTERNAL LOCATION} | Global | +| main.rs:2122:31:2122:42 | [...] | A | {EXTERNAL LOCATION} | Global | +| main.rs:2122:31:2122:42 | [...] | B | file://:0:0:0:0 | [] | +| main.rs:2122:31:2122:42 | [...] | B.[T] | {EXTERNAL LOCATION} | i32 | +| main.rs:2122:31:2122:42 | [...] | B.[T] | {EXTERNAL LOCATION} | u8 | +| main.rs:2122:31:2122:42 | [...] | B.[T] | {EXTERNAL LOCATION} | u32 | +| main.rs:2122:31:2122:42 | [...] | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2122:31:2122:42 | [...] | T | {EXTERNAL LOCATION} | i32 | +| main.rs:2122:31:2122:42 | [...] | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2122:31:2122:42 | [...] | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2122:31:2122:42 | [...] | T | {EXTERNAL LOCATION} | u32 | +| main.rs:2122:31:2122:42 | [...] | T | {EXTERNAL LOCATION} | u32 | +| main.rs:2122:31:2122:42 | [...] | T | file://:0:0:0:0 | [] | +| main.rs:2122:31:2122:42 | [...] | T.[T] | {EXTERNAL LOCATION} | i32 | +| main.rs:2122:31:2122:42 | [...] | T.[T] | {EXTERNAL LOCATION} | u8 | +| main.rs:2122:31:2122:42 | [...] | T.[T] | {EXTERNAL LOCATION} | u32 | | main.rs:2122:31:2122:42 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | +| main.rs:2122:31:2122:42 | [...] | [T;...] | {EXTERNAL LOCATION} | u8 | | main.rs:2122:31:2122:42 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | | main.rs:2122:32:2122:35 | 1u32 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2122:32:2122:35 | 1u32 | | {EXTERNAL LOCATION} | u8 | | main.rs:2122:32:2122:35 | 1u32 | | {EXTERNAL LOCATION} | u32 | | main.rs:2122:38:2122:38 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2122:38:2122:38 | 2 | | {EXTERNAL LOCATION} | u8 | | main.rs:2122:38:2122:38 | 2 | | {EXTERNAL LOCATION} | u32 | | main.rs:2122:41:2122:41 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2122:41:2122:41 | 3 | | {EXTERNAL LOCATION} | u8 | | main.rs:2122:41:2122:41 | 3 | | {EXTERNAL LOCATION} | u32 | +| main.rs:2123:13:2123:13 | u | | {EXTERNAL LOCATION} | i32 | | main.rs:2123:13:2123:13 | u | | {EXTERNAL LOCATION} | u8 | +| main.rs:2123:13:2123:13 | u | | {EXTERNAL LOCATION} | u32 | | main.rs:2123:18:2123:22 | vals5 | | {EXTERNAL LOCATION} | Vec | | main.rs:2123:18:2123:22 | vals5 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2123:18:2123:22 | vals5 | T | {EXTERNAL LOCATION} | i32 | | main.rs:2123:18:2123:22 | vals5 | T | {EXTERNAL LOCATION} | u8 | +| main.rs:2123:18:2123:22 | vals5 | T | {EXTERNAL LOCATION} | u32 | | main.rs:2125:13:2125:17 | vals6 | | {EXTERNAL LOCATION} | Vec | | main.rs:2125:13:2125:17 | vals6 | A | {EXTERNAL LOCATION} | Global | | main.rs:2125:13:2125:17 | vals6 | T | file://:0:0:0:0 | & | @@ -3280,49 +3597,110 @@ inferType | main.rs:2126:18:2126:22 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | | main.rs:2128:13:2128:21 | mut vals7 | | {EXTERNAL LOCATION} | Vec | | main.rs:2128:13:2128:21 | mut vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2128:13:2128:21 | mut vals7 | T | {EXTERNAL LOCATION} | u8 | | main.rs:2128:25:2128:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | | main.rs:2128:25:2128:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2128:25:2128:34 | ...::new(...) | T | {EXTERNAL LOCATION} | u8 | | main.rs:2129:9:2129:13 | vals7 | | {EXTERNAL LOCATION} | Vec | | main.rs:2129:9:2129:13 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2129:9:2129:13 | vals7 | T | {EXTERNAL LOCATION} | u8 | | main.rs:2129:20:2129:22 | 1u8 | | {EXTERNAL LOCATION} | u8 | +| main.rs:2130:13:2130:13 | u | | {EXTERNAL LOCATION} | u8 | | main.rs:2130:18:2130:22 | vals7 | | {EXTERNAL LOCATION} | Vec | | main.rs:2130:18:2130:22 | vals7 | A | {EXTERNAL LOCATION} | Global | +| main.rs:2130:18:2130:22 | vals7 | T | {EXTERNAL LOCATION} | u8 | | main.rs:2132:33:2132:33 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2132:36:2132:36 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:2132:45:2132:45 | 3 | | {EXTERNAL LOCATION} | i32 | | main.rs:2132:48:2132:48 | 4 | | {EXTERNAL LOCATION} | i32 | | main.rs:2139:13:2139:20 | mut map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2139:13:2139:20 | mut map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2139:13:2139:20 | mut map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2139:13:2139:20 | mut map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2139:13:2139:20 | mut map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2139:13:2139:20 | mut map1 | V.T | {EXTERNAL LOCATION} | str | | main.rs:2139:24:2139:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2139:24:2139:55 | ...::new(...) | K | {EXTERNAL LOCATION} | i32 | | main.rs:2139:24:2139:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2139:24:2139:55 | ...::new(...) | V | {EXTERNAL LOCATION} | Box | +| main.rs:2139:24:2139:55 | ...::new(...) | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2139:24:2139:55 | ...::new(...) | V.T | {EXTERNAL LOCATION} | str | | main.rs:2140:9:2140:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2140:9:2140:12 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2140:9:2140:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2140:9:2140:12 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2140:9:2140:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2140:9:2140:12 | map1 | V.T | {EXTERNAL LOCATION} | str | | main.rs:2140:9:2140:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2140:9:2140:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | +| main.rs:2140:9:2140:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2140:9:2140:39 | map1.insert(...) | T.T | {EXTERNAL LOCATION} | str | | main.rs:2140:21:2140:21 | 1 | | {EXTERNAL LOCATION} | i32 | | main.rs:2140:24:2140:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | main.rs:2140:24:2140:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2140:24:2140:38 | ...::new(...) | T | {EXTERNAL LOCATION} | str | | main.rs:2140:33:2140:37 | "one" | | {EXTERNAL LOCATION} | str | | main.rs:2141:9:2141:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2141:9:2141:12 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2141:9:2141:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2141:9:2141:12 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2141:9:2141:12 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2141:9:2141:12 | map1 | V.T | {EXTERNAL LOCATION} | str | | main.rs:2141:9:2141:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:2141:9:2141:39 | map1.insert(...) | T | {EXTERNAL LOCATION} | Box | +| main.rs:2141:9:2141:39 | map1.insert(...) | T.A | {EXTERNAL LOCATION} | Global | +| main.rs:2141:9:2141:39 | map1.insert(...) | T.T | {EXTERNAL LOCATION} | str | | main.rs:2141:21:2141:21 | 2 | | {EXTERNAL LOCATION} | i32 | | main.rs:2141:24:2141:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | main.rs:2141:24:2141:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2141:24:2141:38 | ...::new(...) | T | {EXTERNAL LOCATION} | str | | main.rs:2141:33:2141:37 | "two" | | {EXTERNAL LOCATION} | str | | main.rs:2142:20:2142:23 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2142:20:2142:23 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2142:20:2142:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2142:20:2142:23 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2142:20:2142:23 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2142:20:2142:23 | map1 | V.T | {EXTERNAL LOCATION} | str | | main.rs:2142:20:2142:30 | map1.keys() | | {EXTERNAL LOCATION} | Keys | +| main.rs:2142:20:2142:30 | map1.keys() | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2142:20:2142:30 | map1.keys() | V | {EXTERNAL LOCATION} | Box | +| main.rs:2142:20:2142:30 | map1.keys() | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2142:20:2142:30 | map1.keys() | V.T | {EXTERNAL LOCATION} | str | | main.rs:2143:22:2143:25 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2143:22:2143:25 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2143:22:2143:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2143:22:2143:25 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2143:22:2143:25 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2143:22:2143:25 | map1 | V.T | {EXTERNAL LOCATION} | str | | main.rs:2143:22:2143:34 | map1.values() | | {EXTERNAL LOCATION} | Values | +| main.rs:2143:22:2143:34 | map1.values() | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2143:22:2143:34 | map1.values() | V | {EXTERNAL LOCATION} | Box | +| main.rs:2143:22:2143:34 | map1.values() | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2143:22:2143:34 | map1.values() | V.T | {EXTERNAL LOCATION} | str | | main.rs:2144:29:2144:32 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2144:29:2144:32 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2144:29:2144:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2144:29:2144:32 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2144:29:2144:32 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2144:29:2144:32 | map1 | V.T | {EXTERNAL LOCATION} | str | | main.rs:2144:29:2144:39 | map1.iter() | | {EXTERNAL LOCATION} | Iter | +| main.rs:2144:29:2144:39 | map1.iter() | K | {EXTERNAL LOCATION} | i32 | +| main.rs:2144:29:2144:39 | map1.iter() | V | {EXTERNAL LOCATION} | Box | +| main.rs:2144:29:2144:39 | map1.iter() | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2144:29:2144:39 | map1.iter() | V.T | {EXTERNAL LOCATION} | str | | main.rs:2145:29:2145:33 | &map1 | | file://:0:0:0:0 | & | | main.rs:2145:29:2145:33 | &map1 | &T | {EXTERNAL LOCATION} | HashMap | +| main.rs:2145:29:2145:33 | &map1 | &T.K | {EXTERNAL LOCATION} | i32 | | main.rs:2145:29:2145:33 | &map1 | &T.S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2145:29:2145:33 | &map1 | &T.V | {EXTERNAL LOCATION} | Box | +| main.rs:2145:29:2145:33 | &map1 | &T.V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2145:29:2145:33 | &map1 | &T.V.T | {EXTERNAL LOCATION} | str | | main.rs:2145:30:2145:33 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2145:30:2145:33 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2145:30:2145:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | +| main.rs:2145:30:2145:33 | map1 | V | {EXTERNAL LOCATION} | Box | +| main.rs:2145:30:2145:33 | map1 | V.A | {EXTERNAL LOCATION} | Global | +| main.rs:2145:30:2145:33 | map1 | V.T | {EXTERNAL LOCATION} | str | | main.rs:2149:13:2149:17 | mut a | | {EXTERNAL LOCATION} | i32 | | main.rs:2149:13:2149:17 | mut a | | {EXTERNAL LOCATION} | i64 | | main.rs:2149:26:2149:26 | 0 | | {EXTERNAL LOCATION} | i32 | @@ -3331,6 +3709,7 @@ inferType | main.rs:2151:23:2151:23 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:2151:23:2151:28 | ... < ... | | {EXTERNAL LOCATION} | bool | | main.rs:2151:27:2151:28 | 10 | | {EXTERNAL LOCATION} | i32 | +| main.rs:2151:27:2151:28 | 10 | | {EXTERNAL LOCATION} | i64 | | main.rs:2153:13:2153:13 | a | | {EXTERNAL LOCATION} | i32 | | main.rs:2153:13:2153:13 | a | | {EXTERNAL LOCATION} | i64 | | main.rs:2153:13:2153:18 | ... += ... | | file://:0:0:0:0 | () | 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 cc35fcfde215..78c46276f94d 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 @@ -8,11 +8,13 @@ multipleCallTargets | sqlx.rs:61:28:61:81 | ...::from(...) | | sqlx.rs:64:26:64:46 | safe_query_1.as_str() | | sqlx.rs:65:26:65:46 | safe_query_2.as_str() | +| sqlx.rs:66:26:66:46 | safe_query_3.as_str() | | sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | | sqlx.rs:69:30:69:52 | unsafe_query_2.as_str() | | sqlx.rs:70:30:70:52 | unsafe_query_3.as_str() | | sqlx.rs:75:25:75:45 | safe_query_1.as_str() | | sqlx.rs:76:25:76:45 | safe_query_2.as_str() | +| sqlx.rs:77:25:77:45 | safe_query_3.as_str() | | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | | sqlx.rs:81:29:81:51 | unsafe_query_3.as_str() | @@ -53,6 +55,8 @@ multipleCallTargets | sqlx.rs:150:25:150:49 | prepared_query_1.as_str() | | sqlx.rs:153:29:153:51 | unsafe_query_1.as_str() | | sqlx.rs:154:29:154:53 | prepared_query_1.as_str() | +| sqlx.rs:158:13:158:81 | ...::size_hint(...) | +| sqlx.rs:160:17:160:86 | ...::size_hint(...) | | sqlx.rs:172:24:172:44 | ...::from(...) | | sqlx.rs:173:97:173:117 | ...::from(...) | | sqlx.rs:174:24:174:77 | ...::from(...) | diff --git a/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected b/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected index c4b4133907c0..b9dfd35bfb1c 100644 --- a/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected +++ b/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected @@ -1,32 +1,53 @@ #select +| sqlx.rs:66:26:66:46 | safe_query_3.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:66:26:66:46 | safe_query_3.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | | sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | This query depends on a $@. | sqlx.rs:47:22:47:35 | ...::args | user-provided value | | sqlx.rs:69:30:69:52 | unsafe_query_2.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:69:30:69:52 | unsafe_query_2.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | +| sqlx.rs:77:25:77:45 | safe_query_3.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | This query depends on a $@. | sqlx.rs:47:22:47:35 | ...::args | user-provided value | | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | edges | sqlx.rs:47:9:47:18 | arg_string | sqlx.rs:53:27:53:36 | arg_string | provenance | | | sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:47:22:47:37 | ...::args(...) [element] | provenance | Src:MaD:1 | -| sqlx.rs:47:22:47:37 | ...::args(...) [element] | sqlx.rs:47:22:47:44 | ... .nth(...) [Some] | provenance | MaD:8 | +| sqlx.rs:47:22:47:37 | ...::args(...) [element] | sqlx.rs:47:22:47:44 | ... .nth(...) [Some] | provenance | MaD:11 | | sqlx.rs:47:22:47:44 | ... .nth(...) [Some] | sqlx.rs:47:22:47:77 | ... .unwrap_or(...) | provenance | MaD:3 | | sqlx.rs:47:22:47:77 | ... .unwrap_or(...) | sqlx.rs:47:9:47:18 | arg_string | provenance | | +| sqlx.rs:48:9:48:21 | remote_string | sqlx.rs:49:25:49:52 | remote_string.parse() [Ok] | provenance | MaD:10 | | sqlx.rs:48:9:48:21 | remote_string | sqlx.rs:54:27:54:39 | remote_string | provenance | | | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:48:25:48:69 | ...::get(...) [Ok] | provenance | Src:MaD:2 | | sqlx.rs:48:25:48:69 | ...::get(...) [Ok] | sqlx.rs:48:25:48:78 | ... .unwrap() | provenance | MaD:4 | -| sqlx.rs:48:25:48:78 | ... .unwrap() | sqlx.rs:48:25:48:85 | ... .text() [Ok] | provenance | MaD:9 | +| sqlx.rs:48:25:48:78 | ... .unwrap() | sqlx.rs:48:25:48:85 | ... .text() [Ok] | provenance | MaD:12 | | sqlx.rs:48:25:48:85 | ... .text() [Ok] | sqlx.rs:48:25:48:118 | ... .unwrap_or(...) | provenance | MaD:5 | | sqlx.rs:48:25:48:118 | ... .unwrap_or(...) | sqlx.rs:48:9:48:21 | remote_string | provenance | | -| sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | provenance | MaD:7 | +| sqlx.rs:49:9:49:21 | remote_number | sqlx.rs:52:32:52:87 | MacroExpr | provenance | | +| sqlx.rs:49:25:49:52 | remote_string.parse() [Ok] | sqlx.rs:49:25:49:65 | ... .unwrap_or(...) | provenance | MaD:5 | +| sqlx.rs:49:25:49:65 | ... .unwrap_or(...) | sqlx.rs:49:9:49:21 | remote_number | provenance | | +| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:66:26:66:37 | safe_query_3 | provenance | | +| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:66:26:66:46 | safe_query_3.as_str() | provenance | MaD:8 | +| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:66:26:66:46 | safe_query_3.as_str() | provenance | MaD:6 | +| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:77:25:77:36 | safe_query_3 | provenance | | +| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | provenance | MaD:8 | +| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | provenance | MaD:6 | +| sqlx.rs:52:24:52:88 | res | sqlx.rs:52:32:52:87 | { ... } | provenance | | +| sqlx.rs:52:32:52:87 | ...::format(...) | sqlx.rs:52:24:52:88 | res | provenance | | +| sqlx.rs:52:32:52:87 | ...::must_use(...) | sqlx.rs:52:9:52:20 | safe_query_3 | provenance | | +| sqlx.rs:52:32:52:87 | MacroExpr | sqlx.rs:52:32:52:87 | ...::format(...) | provenance | MaD:9 | +| sqlx.rs:52:32:52:87 | { ... } | sqlx.rs:52:32:52:87 | ...::must_use(...) | provenance | MaD:7 | +| sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | provenance | MaD:8 | | sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | provenance | MaD:6 | -| sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | provenance | MaD:7 | +| sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | provenance | MaD:8 | | sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | provenance | MaD:6 | | sqlx.rs:53:26:53:36 | &arg_string [&ref] | sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | provenance | | | sqlx.rs:53:27:53:36 | arg_string | sqlx.rs:53:26:53:36 | &arg_string [&ref] | provenance | | -| sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:69:30:69:52 | unsafe_query_2.as_str() | provenance | MaD:7 | +| sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:69:30:69:52 | unsafe_query_2.as_str() | provenance | MaD:8 | | sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:69:30:69:52 | unsafe_query_2.as_str() | provenance | MaD:6 | -| sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | provenance | MaD:7 | +| sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | provenance | MaD:8 | | sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | provenance | MaD:6 | | sqlx.rs:54:26:54:39 | &remote_string [&ref] | sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | provenance | | | sqlx.rs:54:27:54:39 | remote_string | sqlx.rs:54:26:54:39 | &remote_string [&ref] | provenance | | +| sqlx.rs:66:26:66:37 | safe_query_3 | sqlx.rs:66:26:66:46 | safe_query_3.as_str() | provenance | MaD:8 | +| sqlx.rs:66:26:66:37 | safe_query_3 | sqlx.rs:66:26:66:46 | safe_query_3.as_str() | provenance | MaD:6 | +| sqlx.rs:77:25:77:36 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | provenance | MaD:8 | +| sqlx.rs:77:25:77:36 | safe_query_3 | sqlx.rs:77:25:77:45 | safe_query_3.as_str() | provenance | MaD:6 | models | 1 | Source: lang:std; crate::env::args; ReturnValue.Element; commandargs | | 2 | Source: repo:https://github.com/seanmonstar/reqwest:reqwest; crate::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote | @@ -34,9 +55,12 @@ models | 4 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | | 5 | Summary: ::unwrap_or; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | | 6 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 7 | Summary: lang:alloc; ::as_str; Argument[self]; ReturnValue; value | -| 8 | Summary: lang:core; crate::iter::traits::iterator::Iterator::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | -| 9 | Summary: repo:https://github.com/seanmonstar/reqwest:reqwest; ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 7 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | +| 8 | Summary: lang:alloc; ::as_str; Argument[self]; ReturnValue; value | +| 9 | Summary: lang:alloc; crate::fmt::format; Argument[0]; ReturnValue; taint | +| 10 | Summary: lang:core; ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 11 | Summary: lang:core; crate::iter::traits::iterator::Iterator::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 12 | Summary: repo:https://github.com/seanmonstar/reqwest:reqwest; ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | nodes | sqlx.rs:47:9:47:18 | arg_string | semmle.label | arg_string | | sqlx.rs:47:22:47:35 | ...::args | semmle.label | ...::args | @@ -49,14 +73,27 @@ nodes | sqlx.rs:48:25:48:78 | ... .unwrap() | semmle.label | ... .unwrap() | | sqlx.rs:48:25:48:85 | ... .text() [Ok] | semmle.label | ... .text() [Ok] | | sqlx.rs:48:25:48:118 | ... .unwrap_or(...) | semmle.label | ... .unwrap_or(...) | +| sqlx.rs:49:9:49:21 | remote_number | semmle.label | remote_number | +| sqlx.rs:49:25:49:52 | remote_string.parse() [Ok] | semmle.label | remote_string.parse() [Ok] | +| sqlx.rs:49:25:49:65 | ... .unwrap_or(...) | semmle.label | ... .unwrap_or(...) | +| sqlx.rs:52:9:52:20 | safe_query_3 | semmle.label | safe_query_3 | +| sqlx.rs:52:24:52:88 | res | semmle.label | res | +| sqlx.rs:52:32:52:87 | ...::format(...) | semmle.label | ...::format(...) | +| sqlx.rs:52:32:52:87 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| sqlx.rs:52:32:52:87 | MacroExpr | semmle.label | MacroExpr | +| sqlx.rs:52:32:52:87 | { ... } | semmle.label | { ... } | | sqlx.rs:53:9:53:22 | unsafe_query_1 [&ref] | semmle.label | unsafe_query_1 [&ref] | | sqlx.rs:53:26:53:36 | &arg_string [&ref] | semmle.label | &arg_string [&ref] | | sqlx.rs:53:27:53:36 | arg_string | semmle.label | arg_string | | sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | semmle.label | unsafe_query_2 [&ref] | | sqlx.rs:54:26:54:39 | &remote_string [&ref] | semmle.label | &remote_string [&ref] | | sqlx.rs:54:27:54:39 | remote_string | semmle.label | remote_string | +| sqlx.rs:66:26:66:37 | safe_query_3 | semmle.label | safe_query_3 | +| sqlx.rs:66:26:66:46 | safe_query_3.as_str() | semmle.label | safe_query_3.as_str() | | sqlx.rs:67:26:67:48 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | | sqlx.rs:69:30:69:52 | unsafe_query_2.as_str() | semmle.label | unsafe_query_2.as_str() | +| sqlx.rs:77:25:77:36 | safe_query_3 | semmle.label | safe_query_3 | +| sqlx.rs:77:25:77:45 | safe_query_3.as_str() | semmle.label | safe_query_3.as_str() | | sqlx.rs:78:25:78:47 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | | sqlx.rs:80:29:80:51 | unsafe_query_2.as_str() | semmle.label | unsafe_query_2.as_str() | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-089/sqlx.rs b/rust/ql/test/query-tests/security/CWE-089/sqlx.rs index 4d121e86fee7..fd1153cffd38 100644 --- a/rust/ql/test/query-tests/security/CWE-089/sqlx.rs +++ b/rust/ql/test/query-tests/security/CWE-089/sqlx.rs @@ -63,7 +63,7 @@ async fn test_sqlx_mysql(url: &str, enable_remote: bool) -> Result<(), sqlx::Err // direct execution let _ = conn.execute(safe_query_1.as_str()).await?; // $ sql-sink let _ = conn.execute(safe_query_2.as_str()).await?; // $ sql-sink - let _ = conn.execute(safe_query_3.as_str()).await?; // $ sql-sink + let _ = conn.execute(safe_query_3.as_str()).await?; // $ sql-sink $ SPURIOUS: Alert[rust/sql-injection]=remote1 let _ = conn.execute(unsafe_query_1.as_str()).await?; // $ sql-sink Alert[rust/sql-injection]=args1 if enable_remote { let _ = conn.execute(unsafe_query_2.as_str()).await?; // $ sql-sink Alert[rust/sql-injection]=remote1 @@ -74,7 +74,7 @@ async fn test_sqlx_mysql(url: &str, enable_remote: bool) -> Result<(), sqlx::Err // prepared queries let _ = sqlx::query(safe_query_1.as_str()).execute(&pool).await?; // $ sql-sink let _ = sqlx::query(safe_query_2.as_str()).execute(&pool).await?; // $ sql-sink - let _ = sqlx::query(safe_query_3.as_str()).execute(&pool).await?; // $ sql-sink + let _ = sqlx::query(safe_query_3.as_str()).execute(&pool).await?; // $ sql-sink $ SPURIOUS: Alert[rust/sql-injection]=remote1 let _ = sqlx::query(unsafe_query_1.as_str()).execute(&pool).await?; // $ sql-sink Alert[rust/sql-injection]=args1 if enable_remote { let _ = sqlx::query(unsafe_query_2.as_str()).execute(&pool).await?; // $ sql-sink Alert[rust/sql-injection]=remote1 diff --git a/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected index 564927f7ed34..c5b470fa9c3c 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected @@ -2,4 +2,9 @@ multipleCallTargets | test_logging.rs:77:20:77:36 | password.as_str() | | test_logging.rs:78:22:78:38 | password.as_str() | | test_logging.rs:88:18:88:34 | password.as_str() | +| test_logging.rs:229:30:229:71 | ... .as_str() | +| test_logging.rs:242:16:242:61 | ... .as_bytes() | | test_logging.rs:243:5:245:66 | ... .write_all(...) | +| test_logging.rs:245:20:245:65 | ... .as_bytes() | +| test_logging.rs:248:15:248:60 | ... .as_bytes() | +| test_logging.rs:251:15:251:60 | ... .as_bytes() | 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 199cde2ce743..9a75229d121d 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected @@ -48,194 +48,262 @@ | 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: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:42:12:42:35 | MacroExpr | test_logging.rs:42:5:42:36 | ...::log | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:42:12:42:35 | MacroExpr | test_logging.rs:42:5:42:36 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:10 Sink:MaD:10 | +| test_logging.rs:43:12:43:35 | MacroExpr | test_logging.rs:43:5:43:36 | ...::log | provenance | MaD:15 Sink:MaD:15 | | test_logging.rs:43:28:43:35 | password | test_logging.rs:43:12:43:35 | MacroExpr | provenance | | -| test_logging.rs:44:11:44:34 | MacroExpr | test_logging.rs:44:5:44:35 | ...::log | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:44:11:44:34 | MacroExpr | test_logging.rs:44:5:44:35 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:10 Sink:MaD:10 | +| test_logging.rs:45:12:45:35 | MacroExpr | test_logging.rs:45:5:45:36 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:10 Sink:MaD:10 | +| test_logging.rs:46:11:46:34 | MacroExpr | test_logging.rs:46:5:46:35 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:10 Sink:MaD:10 | +| test_logging.rs:47:24:47:47 | MacroExpr | test_logging.rs:47:5:47:48 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:10 Sink:MaD:10 | +| test_logging.rs:52:12:52:35 | MacroExpr | test_logging.rs:52:5:52:36 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:10 Sink:MaD:10 | +| test_logging.rs:54:12:54:48 | MacroExpr | test_logging.rs:54:5:54:49 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:10 Sink:MaD:10 | +| test_logging.rs:56:12:56:46 | MacroExpr | test_logging.rs:56:5:56:47 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:10 Sink:MaD:10 | +| test_logging.rs:57:12:57:33 | MacroExpr | test_logging.rs:57:5:57:34 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:10 Sink:MaD:10 | +| test_logging.rs:58:12:58:35 | MacroExpr | test_logging.rs:58:5:58:36 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:10 Sink:MaD:10 | +| test_logging.rs:60:30:60:53 | MacroExpr | test_logging.rs:60:5:60:54 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:11 Sink:MaD:11 Sink:MaD:11 | -| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:11 Sink:MaD:11 Sink:MaD:11 Sink:MaD:11 | -| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:11 Sink:MaD:11 Sink:MaD:11 | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:16 Sink:MaD:16 Sink:MaD:16 | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:16 Sink:MaD:16 Sink:MaD:16 Sink:MaD:16 | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:16 Sink:MaD:16 Sink:MaD:16 | | 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:10 Sink:MaD:10 | +| test_logging.rs:65:24:65:47 | MacroExpr | test_logging.rs:65:5:65:48 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:10 Sink:MaD:10 | +| test_logging.rs:67:42:67:65 | MacroExpr | test_logging.rs:67:5:67:66 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:11 Sink:MaD:11 Sink:MaD:11 | -| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:11 Sink:MaD:11 Sink:MaD:11 Sink:MaD:11 | -| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:11 Sink:MaD:11 Sink:MaD:11 | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:16 Sink:MaD:16 Sink:MaD:16 | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:16 Sink:MaD:16 Sink:MaD:16 Sink:MaD:16 | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:16 Sink:MaD:16 Sink:MaD:16 | | 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:10 Sink:MaD:10 | +| test_logging.rs:72:23:72:46 | MacroExpr | test_logging.rs:72:5:72:47 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:10 Sink:MaD:10 | +| test_logging.rs:74:41:74:64 | MacroExpr | test_logging.rs:74:5:74:65 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:11 Sink:MaD:11 Sink:MaD:11 | -| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:51 | ...::log | provenance | MaD:11 Sink:MaD:11 Sink:MaD:11 Sink:MaD:11 | -| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | test_logging.rs:75:5:75:51 | ...::log | provenance | MaD:11 Sink:MaD:11 Sink:MaD:11 | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:51 | ...::log | provenance | MaD:16 Sink:MaD:16 Sink:MaD:16 | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:51 | ...::log | provenance | MaD:16 Sink:MaD:16 Sink:MaD:16 Sink:MaD:16 | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | test_logging.rs:75:5:75:51 | ...::log | provenance | MaD:16 Sink:MaD:16 Sink:MaD:16 | | 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:10 Sink:MaD:10 | +| test_logging.rs:76:23:76:46 | MacroExpr | test_logging.rs:76:5:76:47 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:10 Sink:MaD:10 | +| test_logging.rs:82:20:82:43 | MacroExpr | test_logging.rs:82:5:82:44 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:10 Sink:MaD:10 | +| test_logging.rs:84:38:84:61 | MacroExpr | test_logging.rs:84:5:84:62 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:11 Sink:MaD:11 Sink:MaD:11 | -| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:48 | ...::log | provenance | MaD:11 Sink:MaD:11 Sink:MaD:11 Sink:MaD:11 | -| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | test_logging.rs:85:5:85:48 | ...::log | provenance | MaD:11 Sink:MaD:11 Sink:MaD:11 | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:48 | ...::log | provenance | MaD:16 Sink:MaD:16 Sink:MaD:16 | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:48 | ...::log | provenance | MaD:16 Sink:MaD:16 Sink:MaD:16 Sink:MaD:16 | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | test_logging.rs:85:5:85:48 | ...::log | provenance | MaD:16 Sink:MaD:16 Sink:MaD:16 | | 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:10 Sink:MaD:10 | +| test_logging.rs:86:20:86:43 | MacroExpr | test_logging.rs:86:5:86:44 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:10 Sink:MaD:10 | +| test_logging.rs:94:11:94:28 | MacroExpr | test_logging.rs:94:5:94:29 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:10 Sink:MaD:10 | +| test_logging.rs:97:11:97:18 | MacroExpr | test_logging.rs:97:5:97:19 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:13 | -| test_logging.rs:99:22:99:45 | { ... } | test_logging.rs:99:22:99:45 | ...::must_use(...) | provenance | MaD:12 | +| test_logging.rs:99:22:99:45 | MacroExpr | test_logging.rs:99:22:99:45 | ...::format(...) | provenance | MaD:21 | +| 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:10 Sink:MaD:10 | -| test_logging.rs:118:12:118:41 | MacroExpr | test_logging.rs:118:5:118:42 | ...::log | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:100:11:100:18 | MacroExpr | test_logging.rs:100:5:100:19 | ...::log | provenance | MaD:15 Sink:MaD:15 | +| test_logging.rs:118:12:118:41 | MacroExpr | test_logging.rs:118:5:118:42 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:10 Sink:MaD:10 | +| test_logging.rs:131:12:131:31 | MacroExpr | test_logging.rs:131:5:131:32 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:10 Sink:MaD:10 | +| test_logging.rs:141:11:141:37 | MacroExpr | test_logging.rs:141:5:141:38 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:10 Sink:MaD:10 | +| test_logging.rs:151:11:151:37 | MacroExpr | test_logging.rs:151:5:151:38 | ...::log | provenance | MaD:15 Sink:MaD:15 | | 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:6 Sink:MaD:6 | -| test_logging.rs:176:33:176:79 | &... [&ref] | test_logging.rs:176:22:176:31 | log_expect | provenance | MaD:6 Sink:MaD:6 | +| test_logging.rs:176:33:176:79 | &... | test_logging.rs:176:22:176:31 | log_expect | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:176:33:176:79 | &... [&ref] | test_logging.rs:176:22:176:31 | log_expect | provenance | MaD:11 Sink:MaD:11 | | 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:13 | -| test_logging.rs:176:42:176:78 | { ... } | test_logging.rs:176:42:176:78 | ...::must_use(...) | provenance | MaD:12 | +| test_logging.rs:176:42:176:78 | MacroExpr | test_logging.rs:176:42:176:78 | ...::format(...) | provenance | MaD:21 | +| 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:7 Sink:MaD:7 | -| test_logging.rs:180:35:180:81 | &... [&ref] | test_logging.rs:180:24:180:33 | log_expect | provenance | MaD:7 Sink:MaD:7 | +| test_logging.rs:180:35:180:81 | &... | test_logging.rs:180:24:180:33 | log_expect | provenance | MaD:12 Sink:MaD:12 | +| test_logging.rs:180:35:180:81 | &... [&ref] | test_logging.rs:180:24:180:33 | log_expect | provenance | MaD:12 Sink:MaD:12 | | 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:13 | -| test_logging.rs:180:44:180:80 | { ... } | test_logging.rs:180:44:180:80 | ...::must_use(...) | provenance | MaD:12 | +| test_logging.rs:180:44:180:80 | MacroExpr | test_logging.rs:180:44:180:80 | ...::format(...) | provenance | MaD:21 | +| 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:8 Sink:MaD:8 | +| test_logging.rs:184:13:184:23 | err_result2 [Err] | test_logging.rs:184:25:184:34 | log_expect | provenance | MaD:13 Sink:MaD:13 | | 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:9 Sink:MaD:9 | -| test_logging.rs:192:12:192:37 | MacroExpr | test_logging.rs:192:5:192:38 | ...::_print | provenance | MaD:5 Sink:MaD:5 | +| test_logging.rs:188:13:188:23 | err_result3 [Err] | test_logging.rs:188:25:188:34 | log_unwrap | provenance | MaD:14 Sink:MaD:14 | +| test_logging.rs:192:12:192:37 | MacroExpr | test_logging.rs:192:5:192:38 | ...::_print | provenance | MaD:10 Sink:MaD:10 | | 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:5 Sink:MaD:5 | +| test_logging.rs:193:14:193:37 | MacroExpr | test_logging.rs:193:5:193:38 | ...::_print | provenance | MaD:10 Sink:MaD:10 | | 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:4 Sink:MaD:4 | +| test_logging.rs:194:13:194:38 | MacroExpr | test_logging.rs:194:5:194:39 | ...::_eprint | provenance | MaD:9 Sink:MaD:9 | | 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:4 Sink:MaD:4 | +| test_logging.rs:195:15:195:38 | MacroExpr | test_logging.rs:195:5:195:39 | ...::_eprint | provenance | MaD:9 Sink:MaD:9 | | 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:20:199:43 | MacroExpr | test_logging.rs:199:13:199:44 | ...::panic_fmt | provenance | MaD:5 Sink:MaD:5 | | 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:19:202:42 | MacroExpr | test_logging.rs:202:13:202:43 | ...::panic_fmt | provenance | MaD:5 Sink:MaD:5 | | 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:28:205:51 | MacroExpr | test_logging.rs:205:13:205:52 | ...::panic_fmt | provenance | MaD:5 Sink:MaD:5 | | 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:26:208:49 | MacroExpr | test_logging.rs:208:13:208:50 | ...::panic_fmt | provenance | MaD:5 Sink:MaD:5 | | 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:28:211:51 | MacroExpr | test_logging.rs:211:13:211:52 | ...::panic_fmt | provenance | MaD:5 Sink:MaD:5 | | test_logging.rs:211:44:211:51 | password | test_logging.rs:211:28:211:51 | MacroExpr | provenance | | -| test_logging.rs:214:13:214:54 | ...::assert_failed [Some] | test_logging.rs:214:13:214:54 | ...::assert_failed | provenance | Sink:MaD:2 | -| 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 | ...::Some(...) [Some] | test_logging.rs:214:13:214:54 | ...::assert_failed [Some] | provenance | MaD:1 | +| test_logging.rs:214:13:214:54 | ...::assert_failed [Some] | test_logging.rs:214:13:214:54 | ...::assert_failed | provenance | Sink:MaD:4 | +| test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | test_logging.rs:214:13:214:54 | ...::assert_failed | provenance | MaD:4 Sink:MaD:4 | +| test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | test_logging.rs:214:13:214:54 | ...::assert_failed [Some] | provenance | 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:13:217:54 | ...::assert_failed [Some] | test_logging.rs:217:13:217:54 | ...::assert_failed | provenance | Sink:MaD:2 | -| 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 | ...::Some(...) [Some] | test_logging.rs:217:13:217:54 | ...::assert_failed [Some] | provenance | MaD:1 | +| test_logging.rs:217:13:217:54 | ...::assert_failed [Some] | test_logging.rs:217:13:217:54 | ...::assert_failed | provenance | Sink:MaD:4 | +| test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | test_logging.rs:217:13:217:54 | ...::assert_failed | provenance | MaD:4 Sink:MaD:4 | +| test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | test_logging.rs:217:13:217:54 | ...::assert_failed [Some] | provenance | 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:34:220:57 | MacroExpr | test_logging.rs:220:13:220:58 | ...::panic_fmt | provenance | MaD:5 Sink:MaD:5 | | test_logging.rs:220:50:220:57 | password | test_logging.rs:220:34:220:57 | MacroExpr | provenance | | -| test_logging.rs:223:13:223:60 | ...::assert_failed [Some] | test_logging.rs:223:13:223:60 | ...::assert_failed | provenance | Sink:MaD:2 | -| 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 | ...::Some(...) [Some] | test_logging.rs:223:13:223:60 | ...::assert_failed [Some] | provenance | MaD:1 | +| test_logging.rs:223:13:223:60 | ...::assert_failed [Some] | test_logging.rs:223:13:223:60 | ...::assert_failed | provenance | Sink:MaD:4 | +| test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | test_logging.rs:223:13:223:60 | ...::assert_failed | provenance | MaD:4 Sink:MaD:4 | +| test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | test_logging.rs:223:13:223:60 | ...::assert_failed [Some] | provenance | 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:13:226:60 | ...::assert_failed [Some] | test_logging.rs:226:13:226:60 | ...::assert_failed | provenance | Sink:MaD:2 | -| 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 | ...::Some(...) [Some] | test_logging.rs:226:13:226:60 | ...::assert_failed [Some] | provenance | MaD:1 | +| test_logging.rs:226:13:226:60 | ...::assert_failed [Some] | test_logging.rs:226:13:226:60 | ...::assert_failed | provenance | Sink:MaD:4 | +| test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | test_logging.rs:226:13:226:60 | ...::assert_failed | provenance | MaD:4 Sink:MaD:4 | +| test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | test_logging.rs:226:13:226:60 | ...::assert_failed [Some] | provenance | 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 | MacroExpr | test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | provenance | MaD:20 | +| test_logging.rs:229:30:229:62 | MacroExpr | test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | provenance | MaD:17 | +| 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:3 Sink:MaD:3 | +| 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:30:229:71 | ... .as_str() [&ref] | test_logging.rs:229:23:229:28 | expect | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | 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:62 | MacroExpr | provenance | | +| test_logging.rs:229:38:229:61 | ...::must_use(...) | test_logging.rs:229:30:229:71 | ... .as_str() | provenance | MaD:20 | +| test_logging.rs:229:38:229:61 | ...::must_use(...) | test_logging.rs:229:30:229:71 | ... .as_str() | provenance | MaD:17 | +| test_logging.rs:229:38:229:61 | MacroExpr | test_logging.rs:229:38:229:61 | ...::format(...) | provenance | MaD:21 | +| 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 | MacroExpr | test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref] | provenance | MaD:19 | +| 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:7 Sink:MaD:7 | +| test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref] | test_logging.rs:242:10:242:14 | write | provenance | MaD:7 Sink:MaD:7 | +| 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:50 | MacroExpr | provenance | | +| test_logging.rs:242:24:242:49 | ...::must_use(...) | test_logging.rs:242:16:242:61 | ... .as_bytes() | provenance | MaD:19 | +| test_logging.rs:242:24:242:49 | MacroExpr | test_logging.rs:242:24:242:49 | ...::format(...) | provenance | MaD:21 | +| 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 | MacroExpr | test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref] | provenance | MaD:19 | +| 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:8 Sink:MaD:8 | +| test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref] | test_logging.rs:245:10:245:18 | write_all | provenance | MaD:8 Sink:MaD:8 | +| 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:54 | MacroExpr | provenance | | +| test_logging.rs:245:28:245:53 | ...::must_use(...) | test_logging.rs:245:20:245:65 | ... .as_bytes() | provenance | MaD:19 | +| test_logging.rs:245:28:245:53 | MacroExpr | test_logging.rs:245:28:245:53 | ...::format(...) | provenance | MaD:21 | +| 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 | MacroExpr | test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref] | provenance | MaD:19 | +| 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:7 Sink:MaD:7 | +| test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref] | test_logging.rs:248:9:248:13 | write | provenance | MaD:7 Sink:MaD:7 | +| 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:49 | MacroExpr | provenance | | +| test_logging.rs:248:23:248:48 | ...::must_use(...) | test_logging.rs:248:15:248:60 | ... .as_bytes() | provenance | MaD:19 | +| test_logging.rs:248:23:248:48 | MacroExpr | test_logging.rs:248:23:248:48 | ...::format(...) | provenance | MaD:21 | +| 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 | MacroExpr | test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref] | provenance | MaD:19 | +| 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:6 Sink:MaD:6 | +| test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref] | test_logging.rs:251:9:251:13 | write | provenance | MaD:6 Sink:MaD:6 | +| 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:49 | MacroExpr | provenance | | +| test_logging.rs:251:23:251:48 | ...::must_use(...) | test_logging.rs:251:15:251:60 | ... .as_bytes() | provenance | MaD:19 | +| test_logging.rs:251:23:251:48 | MacroExpr | test_logging.rs:251:23:251:48 | ...::format(...) | provenance | MaD:21 | +| 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: core::panicking::assert_failed; Argument[3]; log-injection | -| 2 | Sink: lang:core; crate::panicking::assert_failed; Argument[3].Field[core::option::Option::Some(0)]; log-injection | -| 3 | Sink: lang:core; crate::panicking::panic_fmt; Argument[0]; log-injection | -| 4 | Sink: lang:std; crate::io::stdio::_eprint; Argument[0]; log-injection | -| 5 | Sink: lang:std; crate::io::stdio::_print; Argument[0]; log-injection | -| 6 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_expect; Argument[0]; log-injection | -| 7 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_expect; Argument[0]; log-injection | -| 8 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_expect; Argument[self].Field[core::result::Result::Err(0)]; log-injection | -| 9 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_unwrap; Argument[self].Field[core::result::Result::Err(0)]; log-injection | -| 10 | Sink: repo:https://github.com/rust-lang/log:log; crate::__private_api::log; Argument[1]; log-injection | -| 11 | Sink: repo:https://github.com/rust-lang/log:log; crate::__private_api::log; Argument[3]; log-injection | -| 12 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | -| 13 | Summary: lang:alloc; crate::fmt::format; Argument[0]; ReturnValue; taint | +| 1 | Sink: ::expect; Argument[0]; log-injection | +| 2 | Sink: core::panicking::assert_failed; Argument[3]; log-injection | +| 3 | Sink: lang:core; ::expect; Argument[0]; log-injection | +| 4 | Sink: lang:core; crate::panicking::assert_failed; Argument[3].Field[core::option::Option::Some(0)]; log-injection | +| 5 | Sink: lang:core; crate::panicking::panic_fmt; Argument[0]; log-injection | +| 6 | Sink: lang:std; ::write; Argument[0]; log-injection | +| 7 | Sink: lang:std; ::write; Argument[0]; log-injection | +| 8 | Sink: lang:std; ::write_all; Argument[0]; log-injection | +| 9 | Sink: lang:std; crate::io::stdio::_eprint; Argument[0]; log-injection | +| 10 | Sink: lang:std; crate::io::stdio::_print; Argument[0]; log-injection | +| 11 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_expect; Argument[0]; log-injection | +| 12 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_expect; Argument[0]; log-injection | +| 13 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_expect; Argument[self].Field[core::result::Result::Err(0)]; log-injection | +| 14 | Sink: repo:https://github.com/DesmondWillowbrook/rs-log_err:log_err; ::log_unwrap; Argument[self].Field[core::result::Result::Err(0)]; log-injection | +| 15 | Sink: repo:https://github.com/rust-lang/log:log; crate::__private_api::log; Argument[1]; log-injection | +| 16 | Sink: repo:https://github.com/rust-lang/log:log; crate::__private_api::log; Argument[3]; log-injection | +| 17 | Summary: ::as_str; Argument[self]; ReturnValue; value | +| 18 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | +| 19 | Summary: lang:alloc; ::as_bytes; Argument[self]; ReturnValue; value | +| 20 | Summary: lang:alloc; ::as_str; Argument[self]; ReturnValue; value | +| 21 | Summary: lang:alloc; crate::fmt::format; Argument[0]; ReturnValue; taint | nodes | test_logging.rs:42:5:42:36 | ...::log | semmle.label | ...::log | | test_logging.rs:42:12:42:35 | MacroExpr | semmle.label | MacroExpr | @@ -445,4 +513,55 @@ nodes | 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:23:229:28 | expect | semmle.label | expect | +| test_logging.rs:229:30:229:62 | MacroExpr | semmle.label | MacroExpr | +| 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:30:229:71 | ... .as_str() [&ref] | semmle.label | ... .as_str() [&ref] | +| test_logging.rs:229:38:229:61 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:229:38:229:61 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:229:38:229:61 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:229:38:229:61 | { ... } | semmle.label | { ... } | +| test_logging.rs:229:54:229:61 | password | semmle.label | password | +| test_logging.rs:242:10:242:14 | write | semmle.label | write | +| test_logging.rs:242:16:242:50 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:242:16:242:50 | res | semmle.label | res | +| test_logging.rs:242:16:242:61 | ... .as_bytes() | semmle.label | ... .as_bytes() | +| test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref] | semmle.label | ... .as_bytes() [&ref] | +| test_logging.rs:242:24:242:49 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:242:24:242:49 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:242:24:242:49 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:242:24:242:49 | { ... } | semmle.label | { ... } | +| test_logging.rs:242:42:242:49 | password | semmle.label | password | +| test_logging.rs:245:10:245:18 | write_all | semmle.label | write_all | +| test_logging.rs:245:20:245:54 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:245:20:245:54 | res | semmle.label | res | +| test_logging.rs:245:20:245:65 | ... .as_bytes() | semmle.label | ... .as_bytes() | +| test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref] | semmle.label | ... .as_bytes() [&ref] | +| test_logging.rs:245:28:245:53 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:245:28:245:53 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:245:28:245:53 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:245:28:245:53 | { ... } | semmle.label | { ... } | +| test_logging.rs:245:46:245:53 | password | semmle.label | password | +| test_logging.rs:248:9:248:13 | write | semmle.label | write | +| test_logging.rs:248:15:248:49 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:248:15:248:49 | res | semmle.label | res | +| test_logging.rs:248:15:248:60 | ... .as_bytes() | semmle.label | ... .as_bytes() | +| test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref] | semmle.label | ... .as_bytes() [&ref] | +| test_logging.rs:248:23:248:48 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:248:23:248:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:248:23:248:48 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:248:23:248:48 | { ... } | semmle.label | { ... } | +| test_logging.rs:248:41:248:48 | password | semmle.label | password | +| test_logging.rs:251:9:251:13 | write | semmle.label | write | +| test_logging.rs:251:15:251:49 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:251:15:251:49 | res | semmle.label | res | +| test_logging.rs:251:15:251:60 | ... .as_bytes() | semmle.label | ... .as_bytes() | +| test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref] | semmle.label | ... .as_bytes() [&ref] | +| 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 f5f94fc89f82..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 @@ -226,7 +226,7 @@ fn test_std(password: String, i: i32, opt_i: Option) { debug_assert_ne!(1, 1, "message = {}", password); // $ Alert[rust/cleartext-logging] } 11 => { - _ = opt_i.expect(format!("message = {}", password).as_str()); // $ MISSING: Alert[rust/cleartext-logging] (https://github.com/github/codeql/pull/19658) + _ = opt_i.expect(format!("message = {}", password).as_str()); // $ Alert[rust/cleartext-logging] } _ => {} } @@ -239,16 +239,16 @@ fn test_std(password: String, i: i32, opt_i: Option) { .write_fmt(format_args!("message = {}\n", password)); // $ MISSING: Alert[rust/cleartext-logging] std::io::stdout() .lock() - .write(format!("message = {}\n", password).as_bytes()); // $ MISSING: Alert[rust/cleartext-logging] (https://github.com/github/codeql/pull/19658) + .write(format!("message = {}\n", password).as_bytes()); // $ Alert[rust/cleartext-logging] std::io::stdout() .lock() - .write_all(format!("message = {}\n", password).as_bytes()); // $ MISSING: Alert[rust/cleartext-logging] (https://github.com/github/codeql/pull/19658) + .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()); // $ MISSING: Alert[rust/cleartext-logging] (https://github.com/github/codeql/pull/19658) + out.write(format!("message = {}\n", password).as_bytes()); // $ Alert[rust/cleartext-logging] let mut err = std::io::stderr().lock(); - err.write(format!("message = {}\n", password).as_bytes()); // $ MISSING: Alert[rust/cleartext-logging] (https://github.com/github/codeql/pull/19658) + err.write(format!("message = {}\n", password).as_bytes()); // $ Alert[rust/cleartext-logging] } fn main() { diff --git a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected index 4c4a795cb914..9d9a6b7f3008 100644 --- a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected +++ b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected @@ -14,7 +14,9 @@ | main.rs:54:13:54:29 | ...::alloc | main.rs:317:13:317:26 | ...::args | main.rs:54:13:54:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:59:13:59:29 | ...::alloc | main.rs:317:13:317:26 | ...::args | main.rs:59:13:59:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:61:13:61:29 | ...::alloc | main.rs:317:13:317:26 | ...::args | main.rs:61:13:61:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | +| main.rs:63:13:63:29 | ...::alloc | main.rs:317:13:317:26 | ...::args | main.rs:63:13:63:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:64:13:64:29 | ...::alloc | main.rs:317:13:317:26 | ...::args | main.rs:64:13:64:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | +| main.rs:65:13:65:29 | ...::alloc | main.rs:317:13:317:26 | ...::args | main.rs:65:13:65:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:68:13:68:29 | ...::alloc | main.rs:317:13:317:26 | ...::args | main.rs:68:13:68:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:88:13:88:29 | ...::alloc | main.rs:317:13:317:26 | ...::args | main.rs:88:13:88:29 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | | main.rs:96:17:96:33 | ...::alloc | main.rs:317:13:317:26 | ...::args | main.rs:96:17:96:33 | ...::alloc | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:317:13:317:26 | ...::args | user-provided value | @@ -69,7 +71,7 @@ edges | main.rs:20:9:20:10 | l2 | main.rs:21:31:21:32 | l2 | provenance | | | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | main.rs:20:14:20:63 | ... .unwrap() | provenance | MaD:35 | | main.rs:20:14:20:63 | ... .unwrap() | main.rs:20:9:20:10 | l2 | provenance | | -| main.rs:20:50:20:50 | v | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | provenance | MaD:44 | +| main.rs:20:50:20:50 | v | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | provenance | MaD:46 | | main.rs:21:31:21:32 | l2 | main.rs:21:13:21:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:21:31:21:32 | l2 | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | provenance | MaD:40 | | main.rs:21:31:21:32 | l2 | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | provenance | MaD:40 | @@ -77,17 +79,17 @@ edges | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | main.rs:22:31:22:53 | ... .unwrap() | provenance | MaD:35 | | main.rs:22:31:22:53 | ... .unwrap() | main.rs:22:13:22:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | main.rs:23:31:23:53 | ... .unwrap() | provenance | MaD:35 | -| main.rs:23:31:23:53 | ... .unwrap() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | MaD:46 | +| main.rs:23:31:23:53 | ... .unwrap() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | MaD:48 | | main.rs:23:31:23:68 | ... .pad_to_align() | main.rs:23:13:23:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:24:38:24:39 | l2 | main.rs:24:13:24:36 | ...::alloc_zeroed | provenance | MaD:18 Sink:MaD:18 | | main.rs:29:9:29:10 | l4 | main.rs:30:31:30:32 | l4 | provenance | | | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | main.rs:29:9:29:10 | l4 | provenance | | -| main.rs:29:60:29:60 | v | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | provenance | MaD:45 | +| main.rs:29:60:29:60 | v | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | provenance | MaD:47 | | main.rs:30:31:30:32 | l4 | main.rs:30:13:30:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:32:9:32:10 | l5 | main.rs:33:31:33:32 | l5 | provenance | | | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | main.rs:32:9:32:10 | l5 | provenance | | | main.rs:32:60:32:60 | v | main.rs:32:60:32:89 | ... * ... | provenance | MaD:37 | -| main.rs:32:60:32:89 | ... * ... | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | provenance | MaD:45 | +| main.rs:32:60:32:89 | ... * ... | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | provenance | MaD:47 | | main.rs:33:31:33:32 | l5 | main.rs:33:13:33:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:35:9:35:10 | s6 | main.rs:36:60:36:61 | s6 | provenance | | | main.rs:35:15:35:49 | ... * ... | main.rs:35:9:35:10 | s6 | provenance | | @@ -96,14 +98,14 @@ edges | main.rs:36:9:36:10 | l6 [Layout.size] | main.rs:37:31:37:32 | l6 [Layout.size] | provenance | | | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | main.rs:36:9:36:10 | l6 | provenance | | | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) [Layout.size] | main.rs:36:9:36:10 | l6 [Layout.size] | provenance | | -| main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | provenance | MaD:45 | +| main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | provenance | MaD:47 | | main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) [Layout.size] | provenance | MaD:31 | | main.rs:37:31:37:32 | l6 | main.rs:37:13:37:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | -| main.rs:37:31:37:32 | l6 | main.rs:39:60:39:68 | l6.size() | provenance | MaD:49 | +| main.rs:37:31:37:32 | l6 | main.rs:39:60:39:68 | l6.size() | provenance | MaD:51 | | main.rs:37:31:37:32 | l6 [Layout.size] | main.rs:39:60:39:68 | l6.size() | provenance | MaD:32 | | main.rs:39:9:39:10 | l7 | main.rs:40:31:40:32 | l7 | provenance | | | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | main.rs:39:9:39:10 | l7 | provenance | | -| main.rs:39:60:39:68 | l6.size() | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | provenance | MaD:45 | +| main.rs:39:60:39:68 | l6.size() | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | provenance | MaD:47 | | main.rs:40:31:40:32 | l7 | main.rs:40:13:40:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:43:44:43:51 | ...: usize | main.rs:50:41:50:41 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:51:41:51:45 | ... + ... | provenance | | @@ -114,34 +116,43 @@ edges | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | provenance | MaD:35 | | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | main.rs:50:31:50:53 | ... .0 | provenance | | | main.rs:50:31:50:53 | ... .0 | main.rs:50:13:50:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | -| main.rs:50:41:50:41 | v | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:47 | +| main.rs:50:41:50:41 | v | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:49 | | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | provenance | MaD:35 | | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | main.rs:51:31:51:57 | ... .0 | provenance | | | main.rs:51:31:51:57 | ... .0 | main.rs:51:13:51:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | -| main.rs:51:41:51:45 | ... + ... | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:47 | +| main.rs:51:41:51:45 | ... + ... | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:49 | | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | main.rs:53:31:53:58 | ... .unwrap() | provenance | MaD:35 | | main.rs:53:31:53:58 | ... .unwrap() | main.rs:53:13:53:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | -| main.rs:53:48:53:48 | v | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | provenance | MaD:48 | +| main.rs:53:48:53:48 | v | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | provenance | MaD:50 | | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | main.rs:54:31:54:63 | ... .unwrap() | provenance | MaD:35 | | main.rs:54:31:54:63 | ... .unwrap() | main.rs:54:13:54:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | -| main.rs:54:48:54:53 | ... * ... | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | provenance | MaD:48 | +| main.rs:54:48:54:53 | ... * ... | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | provenance | MaD:50 | | main.rs:58:9:58:20 | TuplePat [tuple.0] | main.rs:58:10:58:11 | k1 | provenance | | | main.rs:58:10:58:11 | k1 | main.rs:59:31:59:32 | k1 | provenance | | | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | provenance | MaD:34 | | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | main.rs:58:9:58:20 | TuplePat [tuple.0] | provenance | | -| main.rs:58:34:58:34 | v | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | provenance | MaD:47 | +| main.rs:58:34:58:34 | v | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | provenance | MaD:49 | | main.rs:59:31:59:32 | k1 | main.rs:59:13:59:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:59:31:59:32 | k1 | main.rs:60:34:60:35 | k1 | provenance | | +| main.rs:59:31:59:32 | k1 | main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | provenance | MaD:43 | | main.rs:59:31:59:32 | k1 | main.rs:64:48:64:49 | k1 | provenance | | +| main.rs:59:31:59:32 | k1 | main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | provenance | MaD:45 | | main.rs:60:9:60:20 | TuplePat [tuple.0] | main.rs:60:10:60:11 | k2 | provenance | | | main.rs:60:10:60:11 | k2 | main.rs:61:31:61:32 | k2 | provenance | | | main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | provenance | MaD:35 | | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | main.rs:60:9:60:20 | TuplePat [tuple.0] | provenance | | | main.rs:60:34:60:35 | k1 | main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | provenance | MaD:42 | | main.rs:61:31:61:32 | k2 | main.rs:61:13:61:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | +| main.rs:62:9:62:20 | TuplePat [tuple.0] | main.rs:62:10:62:11 | k3 | provenance | | +| main.rs:62:10:62:11 | k3 | main.rs:63:31:63:32 | k3 | provenance | | +| main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | provenance | MaD:35 | +| main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | main.rs:62:9:62:20 | TuplePat [tuple.0] | provenance | | +| main.rs:63:31:63:32 | k3 | main.rs:63:13:63:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | main.rs:64:31:64:59 | ... .unwrap() | provenance | MaD:35 | | main.rs:64:31:64:59 | ... .unwrap() | main.rs:64:13:64:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | -| main.rs:64:48:64:49 | k1 | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | provenance | MaD:43 | +| main.rs:64:48:64:49 | k1 | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | provenance | MaD:44 | +| main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | main.rs:65:31:65:59 | ... .unwrap() | provenance | MaD:35 | +| main.rs:65:31:65:59 | ... .unwrap() | main.rs:65:13:65:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:67:9:67:10 | l4 | main.rs:68:31:68:32 | l4 | provenance | | | main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | main.rs:67:14:67:56 | ... .unwrap() | provenance | MaD:35 | | main.rs:67:14:67:56 | ... .unwrap() | main.rs:67:9:67:10 | l4 | provenance | | @@ -151,7 +162,7 @@ edges | main.rs:87:9:87:14 | layout | main.rs:88:31:88:36 | layout | provenance | | | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | main.rs:87:18:87:67 | ... .unwrap() | provenance | MaD:35 | | main.rs:87:18:87:67 | ... .unwrap() | main.rs:87:9:87:14 | layout | provenance | | -| main.rs:87:54:87:54 | v | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | provenance | MaD:44 | +| main.rs:87:54:87:54 | v | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | provenance | MaD:46 | | main.rs:88:31:88:36 | layout | main.rs:88:13:88:29 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:91:38:91:45 | ...: usize | main.rs:92:47:92:47 | v | provenance | | | main.rs:91:38:91:45 | ...: usize | main.rs:101:51:101:51 | v | provenance | | @@ -203,7 +214,7 @@ edges | main.rs:161:13:161:15 | l13 | main.rs:162:35:162:37 | l13 | provenance | | | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | main.rs:161:19:161:68 | ... .unwrap() | provenance | MaD:35 | | main.rs:161:19:161:68 | ... .unwrap() | main.rs:161:13:161:15 | l13 | provenance | | -| main.rs:161:55:161:55 | v | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | provenance | MaD:44 | +| main.rs:161:55:161:55 | v | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | provenance | MaD:46 | | main.rs:162:35:162:37 | l13 | main.rs:162:17:162:33 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:162:35:162:37 | l13 | main.rs:169:35:169:37 | l13 | provenance | | | main.rs:169:35:169:37 | l13 | main.rs:169:17:169:33 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | @@ -256,7 +267,7 @@ edges | main.rs:230:46:230:46 | v | main.rs:230:13:230:44 | ...::try_with_capacity_in | provenance | MaD:3 Sink:MaD:3 | | main.rs:230:46:230:46 | v | main.rs:231:42:231:42 | v | provenance | | | main.rs:231:42:231:42 | v | main.rs:231:13:231:40 | ...::with_capacity_in | provenance | MaD:4 Sink:MaD:4 | -| main.rs:279:24:279:41 | ...: String | main.rs:280:21:280:47 | user_input.parse() [Ok] | provenance | MaD:50 | +| main.rs:279:24:279:41 | ...: String | main.rs:280:21:280:47 | user_input.parse() [Ok] | provenance | MaD:52 | | main.rs:280:9:280:17 | num_bytes | main.rs:282:54:282:62 | num_bytes | provenance | | | main.rs:280:21:280:47 | user_input.parse() [Ok] | main.rs:280:21:280:48 | TryExpr | provenance | | | main.rs:280:21:280:48 | TryExpr | main.rs:280:9:280:17 | num_bytes | provenance | | @@ -265,10 +276,10 @@ edges | main.rs:282:9:282:14 | layout | main.rs:284:40:284:45 | layout | provenance | | | main.rs:282:18:282:66 | ...::from_size_align(...) [Ok] | main.rs:282:18:282:75 | ... .unwrap() | provenance | MaD:35 | | main.rs:282:18:282:75 | ... .unwrap() | main.rs:282:9:282:14 | layout | provenance | | -| main.rs:282:54:282:62 | num_bytes | main.rs:282:18:282:66 | ...::from_size_align(...) [Ok] | provenance | MaD:44 | +| main.rs:282:54:282:62 | num_bytes | main.rs:282:18:282:66 | ...::from_size_align(...) [Ok] | provenance | MaD:46 | | main.rs:284:40:284:45 | layout | main.rs:284:22:284:38 | ...::alloc | provenance | MaD:17 Sink:MaD:17 | | main.rs:308:25:308:38 | ...::args | main.rs:308:25:308:40 | ...::args(...) [element] | provenance | Src:MaD:30 | -| main.rs:308:25:308:40 | ...::args(...) [element] | main.rs:308:25:308:47 | ... .nth(...) [Some] | provenance | MaD:51 | +| main.rs:308:25:308:40 | ...::args(...) [element] | main.rs:308:25:308:47 | ... .nth(...) [Some] | provenance | MaD:53 | | main.rs:308:25:308:47 | ... .nth(...) [Some] | main.rs:308:25:308:74 | ... .unwrap_or(...) | provenance | MaD:33 | | main.rs:308:25:308:74 | ... .unwrap_or(...) | main.rs:279:24:279:41 | ...: String | provenance | | | main.rs:317:9:317:9 | v | main.rs:320:34:320:34 | v | provenance | | @@ -278,9 +289,9 @@ edges | main.rs:317:9:317:9 | v | main.rs:324:25:324:25 | v | provenance | | | main.rs:317:9:317:9 | v | main.rs:325:22:325:22 | v | provenance | | | main.rs:317:13:317:26 | ...::args | main.rs:317:13:317:28 | ...::args(...) [element] | provenance | Src:MaD:30 | -| main.rs:317:13:317:28 | ...::args(...) [element] | main.rs:317:13:317:35 | ... .nth(...) [Some] | provenance | MaD:51 | +| main.rs:317:13:317:28 | ...::args(...) [element] | main.rs:317:13:317:35 | ... .nth(...) [Some] | provenance | MaD:53 | | main.rs:317:13:317:35 | ... .nth(...) [Some] | main.rs:317:13:317:65 | ... .unwrap_or(...) | provenance | MaD:33 | -| main.rs:317:13:317:65 | ... .unwrap_or(...) | main.rs:317:13:317:82 | ... .parse() [Ok] | provenance | MaD:50 | +| main.rs:317:13:317:65 | ... .unwrap_or(...) | main.rs:317:13:317:82 | ... .parse() [Ok] | provenance | MaD:52 | | main.rs:317:13:317:82 | ... .parse() [Ok] | main.rs:317:13:317:91 | ... .unwrap() | provenance | MaD:35 | | main.rs:317:13:317:91 | ... .unwrap() | main.rs:317:9:317:9 | v | provenance | | | main.rs:320:34:320:34 | v | main.rs:12:36:12:43 | ...: usize | provenance | | @@ -332,15 +343,17 @@ models | 40 | Summary: lang:core; ::align_to; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | | 41 | Summary: lang:core; ::array; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | | 42 | Summary: lang:core; ::extend; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | -| 43 | Summary: lang:core; ::extend_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 44 | Summary: lang:core; ::from_size_align; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 45 | Summary: lang:core; ::from_size_align_unchecked; Argument[0]; ReturnValue; taint | -| 46 | Summary: lang:core; ::pad_to_align; Argument[self]; ReturnValue; taint | -| 47 | Summary: lang:core; ::repeat; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | -| 48 | Summary: lang:core; ::repeat_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 49 | Summary: lang:core; ::size; Argument[self]; ReturnValue; taint | -| 50 | Summary: lang:core; ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 51 | Summary: lang:core; crate::iter::traits::iterator::Iterator::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 43 | Summary: lang:core; ::extend; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | +| 44 | Summary: lang:core; ::extend_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 45 | Summary: lang:core; ::extend_packed; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 46 | Summary: lang:core; ::from_size_align; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 47 | Summary: lang:core; ::from_size_align_unchecked; Argument[0]; ReturnValue; taint | +| 48 | Summary: lang:core; ::pad_to_align; Argument[self]; ReturnValue; taint | +| 49 | Summary: lang:core; ::repeat; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | +| 50 | Summary: lang:core; ::repeat_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 51 | Summary: lang:core; ::size; Argument[self]; ReturnValue; taint | +| 52 | Summary: lang:core; ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 53 | Summary: lang:core; crate::iter::traits::iterator::Iterator::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | nodes | main.rs:12:36:12:43 | ...: usize | semmle.label | ...: usize | | main.rs:18:13:18:31 | ...::realloc | semmle.label | ...::realloc | @@ -420,10 +433,19 @@ nodes | main.rs:60:34:60:35 | k1 | semmle.label | k1 | | main.rs:61:13:61:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:61:31:61:32 | k2 | semmle.label | k2 | +| main.rs:62:9:62:20 | TuplePat [tuple.0] | semmle.label | TuplePat [tuple.0] | +| main.rs:62:10:62:11 | k3 | semmle.label | k3 | +| main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | semmle.label | k1.extend(...) [Ok, tuple.0] | +| main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | semmle.label | ... .unwrap() [tuple.0] | +| main.rs:63:13:63:29 | ...::alloc | semmle.label | ...::alloc | +| main.rs:63:31:63:32 | k3 | semmle.label | k3 | | main.rs:64:13:64:29 | ...::alloc | semmle.label | ...::alloc | | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | semmle.label | l3.extend_packed(...) [Ok] | | main.rs:64:31:64:59 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:64:48:64:49 | k1 | semmle.label | k1 | +| main.rs:65:13:65:29 | ...::alloc | semmle.label | ...::alloc | +| main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | semmle.label | k1.extend_packed(...) [Ok] | +| main.rs:65:31:65:59 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:67:9:67:10 | l4 | semmle.label | l4 | | main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | semmle.label | ...::array::<...>(...) [Ok] | | main.rs:67:14:67:56 | ... .unwrap() | semmle.label | ... .unwrap() | diff --git a/rust/ql/test/query-tests/security/CWE-770/main.rs b/rust/ql/test/query-tests/security/CWE-770/main.rs index 0b39862ef324..1f549cb26757 100644 --- a/rust/ql/test/query-tests/security/CWE-770/main.rs +++ b/rust/ql/test/query-tests/security/CWE-770/main.rs @@ -60,9 +60,9 @@ unsafe fn test_std_alloc_new_repeat_extend(v: usize) { let (k2, _offs2) = l3.extend(k1).unwrap(); let _ = std::alloc::alloc(k2); // $ Alert[rust/uncontrolled-allocation-size]=arg1 let (k3, _offs3) = k1.extend(l3).unwrap(); - let _ = std::alloc::alloc(k3); // $ MISSING: Alert[rust/uncontrolled-allocation-size]=arg1 (https://github.com/github/codeql/pull/19658) + let _ = std::alloc::alloc(k3); // $ Alert[rust/uncontrolled-allocation-size]=arg1 let _ = std::alloc::alloc(l3.extend_packed(k1).unwrap()); // $ Alert[rust/uncontrolled-allocation-size]=arg1 - let _ = std::alloc::alloc(k1.extend_packed(l3).unwrap()); // $ MISSING: Alert[rust/uncontrolled-allocation-size]=arg1 (https://github.com/github/codeql/pull/19658) + let _ = std::alloc::alloc(k1.extend_packed(l3).unwrap()); // $ Alert[rust/uncontrolled-allocation-size]=arg1 let l4 = std::alloc::Layout::array::(v).unwrap(); let _ = std::alloc::alloc(l4); // $ Alert[rust/uncontrolled-allocation-size]=arg1