diff --git a/docs/codeql/reusables/supported-frameworks.rst b/docs/codeql/reusables/supported-frameworks.rst index 3237a768b128..6fa32547d05a 100644 --- a/docs/codeql/reusables/supported-frameworks.rst +++ b/docs/codeql/reusables/supported-frameworks.rst @@ -327,6 +327,7 @@ and the CodeQL library pack ``codeql/rust-all`` (`changelog `__, Web framework alloc, Standard library `async-std `__, Asynchronous programming library + `axum `__, Web framework `biscotti `__, Cookie management `clap `__, Utility library `cookie `__, Cookie management @@ -341,6 +342,8 @@ and the CodeQL library pack ``codeql/rust-all`` (`changelog `__, Utility library `mysql `__, Database `mysql_async `__, Database + `native-tls `__, Network communicator + `async-native-tls `__, Network communicator `once_cell `__, Utility library `poem `__, Web framework `postgres `__, Database diff --git a/rust/ql/lib/change-notes/2026-08-19-native-tls-summary-models.md b/rust/ql/lib/change-notes/2026-08-19-native-tls-summary-models.md new file mode 100644 index 000000000000..1a5ef111fedc --- /dev/null +++ b/rust/ql/lib/change-notes/2026-08-19-native-tls-summary-models.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added new flow summary models for the `native-tls`, `async-native-tls`, and `tokio-native-tls` crates. diff --git a/rust/ql/lib/codeql/rust/frameworks/futures.model.yml b/rust/ql/lib/codeql/rust/frameworks/futures.model.yml index 7b1aaab494fd..b608ae46f5f5 100644 --- a/rust/ql/lib/codeql/rust/frameworks/futures.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/futures.model.yml @@ -6,6 +6,7 @@ extensions: - ["futures_executor::local_pool::block_on", "Argument[0]", "ReturnValue", "value", "manual"] - ["::new", "Argument[0]", "ReturnValue", "taint", "manual"] - ["::read", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] + - ["::read_to_string", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] - ["::read_to_end", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] - ["::read_line", "Argument[self].Reference", "Argument[0].Reference", "taint", "manual"] - ["::read_until", "Argument[self].Reference", "Argument[1].Reference", "taint", "manual"] diff --git a/rust/ql/lib/codeql/rust/frameworks/native-tls.model.yml b/rust/ql/lib/codeql/rust/frameworks/native-tls.model.yml index 1da63eb7961a..4d142efbd62c 100644 --- a/rust/ql/lib/codeql/rust/frameworks/native-tls.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/native-tls.model.yml @@ -7,3 +7,11 @@ extensions: - ["::danger_accept_invalid_hostnames", "Argument[0]", "disable-certificate", "manual"] - ["::danger_accept_invalid_certs", "Argument[0]", "disable-certificate", "manual"] - ["::danger_accept_invalid_hostnames", "Argument[0]", "disable-certificate", "manual"] + - addsTo: + pack: codeql/rust-all + extensible: summaryModel + data: + - ["::connect", "Argument[1]", "ReturnValue.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["::connect", "Argument[1]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["async_native_tls::connect::connect", "Argument[1]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] + - ["::connect", "Argument[1]", "ReturnValue.Future.Field[core::result::Result::Ok(0)]", "taint", "manual"] diff --git a/rust/ql/test/library-tests/dataflow/sources/net/Cargo.lock b/rust/ql/test/library-tests/dataflow/sources/net/Cargo.lock index 27790b8b768d..08dceba92341 100644 --- a/rust/ql/test/library-tests/dataflow/sources/net/Cargo.lock +++ b/rust/ql/test/library-tests/dataflow/sources/net/Cargo.lock @@ -92,6 +92,18 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-native-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9343dc5acf07e79ff82d0c37899f079db3534d99f189a1837c8e549c99405bec" +dependencies = [ + "futures-util", + "native-tls", + "thiserror", + "url", +] + [[package]] name = "async-std" version = "1.13.2" @@ -1551,6 +1563,7 @@ dependencies = [ name = "test" version = "0.0.1" dependencies = [ + "async-native-tls", "async-std", "futures", "futures-rustls", @@ -1558,11 +1571,32 @@ dependencies = [ "http-body-util", "hyper", "hyper-util", + "native-tls", "reqwest", "rustls", "tokio", ] +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tinystr" version = "0.8.1" diff --git a/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.expected index 821dd11cda66..077842b5556f 100644 --- a/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.expected @@ -21,58 +21,61 @@ models | 20 | Summary: ::read_until; Argument[self].Reference; Argument[1].Reference; taint | | 21 | Summary: ::read; Argument[self].Reference; Argument[0].Reference; taint | | 22 | Summary: ::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | -| 23 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 24 | Summary: ::body; Argument[self].Reference.Field[http::response::Response::body]; ReturnValue.Reference; value | -| 25 | Summary: ::body_mut; Argument[self].Reference.Field[http::response::Response::body]; ReturnValue.Reference; value | -| 26 | Summary: ::into_body; Argument[self].Field[http::response::Response::body]; ReturnValue; value | -| 27 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 28 | Summary: ::chunk; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | -| 29 | Summary: ::text; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 30 | Summary: ::bytes; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 31 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 32 | Summary: ::text_with_charset; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 33 | Summary: ::lines; Argument[self]; ReturnValue; taint | -| 34 | Summary: ::read_line; Argument[self].Reference; Argument[0].Reference; taint | -| 35 | Summary: ::read; Argument[self].Reference; Argument[0].Reference; taint | -| 36 | Summary: ::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | -| 37 | Summary: ::read_to_string; Argument[self].Reference; Argument[0].Reference; taint | -| 38 | Summary: ::take; Argument[self]; ReturnValue; taint | -| 39 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 40 | Summary: ::try_clone; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 41 | Summary: ::read; Argument[self].Reference; Argument[0].Reference; taint | -| 42 | Summary: ::peek; Argument[self].Reference; Argument[0].Reference; taint | -| 43 | Summary: ::try_read; Argument[self].Reference; Argument[0].Reference; taint | -| 44 | Summary: ::try_read_buf; Argument[self].Reference; Argument[0].Reference; taint | +| 23 | Summary: ::read_to_string; Argument[self].Reference; Argument[0].Reference; taint | +| 24 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 25 | Summary: ::body; Argument[self].Reference.Field[http::response::Response::body]; ReturnValue.Reference; value | +| 26 | Summary: ::body_mut; Argument[self].Reference.Field[http::response::Response::body]; ReturnValue.Reference; value | +| 27 | Summary: ::into_body; Argument[self].Field[http::response::Response::body]; ReturnValue; value | +| 28 | Summary: ::connect; Argument[1]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 29 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 30 | Summary: ::chunk; Argument[self].Reference; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 31 | Summary: ::text; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 32 | Summary: ::bytes; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 33 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 34 | Summary: ::text_with_charset; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 35 | Summary: ::lines; Argument[self]; ReturnValue; taint | +| 36 | Summary: ::read_line; Argument[self].Reference; Argument[0].Reference; taint | +| 37 | Summary: ::read; Argument[self].Reference; Argument[0].Reference; taint | +| 38 | Summary: ::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | +| 39 | Summary: ::read_to_string; Argument[self].Reference; Argument[0].Reference; taint | +| 40 | Summary: ::take; Argument[self]; ReturnValue; taint | +| 41 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 42 | Summary: ::try_clone; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 43 | Summary: ::read; Argument[self].Reference; Argument[0].Reference; taint | +| 44 | Summary: ::peek; Argument[self].Reference; Argument[0].Reference; taint | +| 45 | Summary: ::try_read; Argument[self].Reference; Argument[0].Reference; taint | +| 46 | Summary: ::try_read_buf; Argument[self].Reference; Argument[0].Reference; taint | +| 47 | Summary: async_native_tls::connect::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | edges | test.rs:11:9:11:22 | remote_string1 | test.rs:12:10:12:23 | remote_string1 | provenance | | | test.rs:11:26:11:62 | ...::get(...) | test.rs:11:26:11:62 | ...::get(...) [Ok] | provenance | Src:MaD:7 | | test.rs:11:26:11:62 | ...::get(...) [Ok] | test.rs:11:26:11:63 | TryExpr | provenance | | -| test.rs:11:26:11:63 | TryExpr | test.rs:11:26:11:70 | ... .text() [Ok] | provenance | MaD:31 | +| test.rs:11:26:11:63 | TryExpr | test.rs:11:26:11:70 | ... .text() [Ok] | provenance | MaD:33 | | test.rs:11:26:11:70 | ... .text() [Ok] | test.rs:11:26:11:71 | TryExpr | provenance | | | test.rs:11:26:11:71 | TryExpr | test.rs:11:9:11:22 | remote_string1 | provenance | | | test.rs:14:9:14:22 | remote_string2 | test.rs:15:10:15:23 | remote_string2 | provenance | | | test.rs:14:26:14:62 | ...::get(...) | test.rs:14:26:14:62 | ...::get(...) [Ok] | provenance | Src:MaD:7 | | test.rs:14:26:14:62 | ...::get(...) [Ok] | test.rs:14:26:14:71 | ... .unwrap() | provenance | MaD:14 | -| test.rs:14:26:14:71 | ... .unwrap() | test.rs:14:26:14:78 | ... .text() [Ok] | provenance | MaD:31 | +| test.rs:14:26:14:71 | ... .unwrap() | test.rs:14:26:14:78 | ... .text() [Ok] | provenance | MaD:33 | | test.rs:14:26:14:78 | ... .text() [Ok] | test.rs:14:26:14:87 | ... .unwrap() | provenance | MaD:14 | | test.rs:14:26:14:87 | ... .unwrap() | test.rs:14:9:14:22 | remote_string2 | provenance | | | test.rs:17:9:17:22 | remote_string3 | test.rs:18:10:18:23 | remote_string3 | provenance | | | test.rs:17:26:17:62 | ...::get(...) | test.rs:17:26:17:62 | ...::get(...) [Ok] | provenance | Src:MaD:7 | | test.rs:17:26:17:62 | ...::get(...) [Ok] | test.rs:17:26:17:71 | ... .unwrap() | provenance | MaD:14 | -| test.rs:17:26:17:71 | ... .unwrap() | test.rs:17:26:17:98 | ... .text_with_charset(...) [Ok] | provenance | MaD:32 | +| test.rs:17:26:17:71 | ... .unwrap() | test.rs:17:26:17:98 | ... .text_with_charset(...) [Ok] | provenance | MaD:34 | | test.rs:17:26:17:98 | ... .text_with_charset(...) [Ok] | test.rs:17:26:17:107 | ... .unwrap() | provenance | MaD:14 | | test.rs:17:26:17:107 | ... .unwrap() | test.rs:17:9:17:22 | remote_string3 | provenance | | | test.rs:20:9:20:22 | remote_string4 | test.rs:21:10:21:23 | remote_string4 | provenance | | | test.rs:20:26:20:62 | ...::get(...) | test.rs:20:26:20:62 | ...::get(...) [Ok] | provenance | Src:MaD:7 | | test.rs:20:26:20:62 | ...::get(...) [Ok] | test.rs:20:26:20:71 | ... .unwrap() | provenance | MaD:14 | -| test.rs:20:26:20:71 | ... .unwrap() | test.rs:20:26:20:79 | ... .bytes() [Ok] | provenance | MaD:30 | +| test.rs:20:26:20:71 | ... .unwrap() | test.rs:20:26:20:79 | ... .bytes() [Ok] | provenance | MaD:32 | | test.rs:20:26:20:79 | ... .bytes() [Ok] | test.rs:20:26:20:88 | ... .unwrap() | provenance | MaD:14 | | test.rs:20:26:20:88 | ... .unwrap() | test.rs:20:9:20:22 | remote_string4 | provenance | | | test.rs:23:9:23:22 | remote_string5 | test.rs:24:10:24:23 | remote_string5 | provenance | | | test.rs:23:26:23:52 | ...::get(...) | test.rs:23:26:23:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:8 | | test.rs:23:26:23:52 | ...::get(...) [future, Ok] | test.rs:23:26:23:58 | await ... [Ok] | provenance | | | test.rs:23:26:23:58 | await ... [Ok] | test.rs:23:26:23:59 | TryExpr | provenance | | -| test.rs:23:26:23:59 | TryExpr | test.rs:23:26:23:66 | ... .text() [future, Ok] | provenance | MaD:29 | +| test.rs:23:26:23:59 | TryExpr | test.rs:23:26:23:66 | ... .text() [future, Ok] | provenance | MaD:31 | | test.rs:23:26:23:66 | ... .text() [future, Ok] | test.rs:23:26:23:72 | await ... [Ok] | provenance | | | test.rs:23:26:23:72 | await ... [Ok] | test.rs:23:26:23:73 | TryExpr | provenance | | | test.rs:23:26:23:73 | TryExpr | test.rs:23:9:23:22 | remote_string5 | provenance | | @@ -80,7 +83,7 @@ edges | test.rs:26:26:26:52 | ...::get(...) | test.rs:26:26:26:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:8 | | test.rs:26:26:26:52 | ...::get(...) [future, Ok] | test.rs:26:26:26:58 | await ... [Ok] | provenance | | | test.rs:26:26:26:58 | await ... [Ok] | test.rs:26:26:26:59 | TryExpr | provenance | | -| test.rs:26:26:26:59 | TryExpr | test.rs:26:26:26:67 | ... .bytes() [future, Ok] | provenance | MaD:27 | +| test.rs:26:26:26:59 | TryExpr | test.rs:26:26:26:67 | ... .bytes() [future, Ok] | provenance | MaD:29 | | test.rs:26:26:26:67 | ... .bytes() [future, Ok] | test.rs:26:26:26:73 | await ... [Ok] | provenance | | | test.rs:26:26:26:73 | await ... [Ok] | test.rs:26:26:26:74 | TryExpr | provenance | | | test.rs:26:26:26:74 | TryExpr | test.rs:26:9:26:22 | remote_string6 | provenance | | @@ -90,13 +93,13 @@ edges | test.rs:29:24:29:50 | ...::get(...) [future, Ok] | test.rs:29:24:29:56 | await ... [Ok] | provenance | | | test.rs:29:24:29:56 | await ... [Ok] | test.rs:29:24:29:57 | TryExpr | provenance | | | test.rs:29:24:29:57 | TryExpr | test.rs:29:9:29:20 | mut request1 | provenance | | -| test.rs:30:10:30:17 | request1 | test.rs:30:10:30:25 | request1.chunk() [future, Ok, Some] | provenance | MaD:28 | +| test.rs:30:10:30:17 | request1 | test.rs:30:10:30:25 | request1.chunk() [future, Ok, Some] | provenance | MaD:30 | | test.rs:30:10:30:25 | request1.chunk() [future, Ok, Some] | test.rs:30:10:30:31 | await ... [Ok, Some] | provenance | | | test.rs:30:10:30:31 | await ... [Ok, Some] | test.rs:30:10:30:32 | TryExpr [Some] | provenance | | | test.rs:30:10:30:32 | TryExpr [Some] | test.rs:30:10:30:41 | ... .unwrap() | provenance | MaD:11 | | test.rs:31:15:31:25 | Some(...) [Some] | test.rs:31:20:31:24 | chunk | provenance | | | test.rs:31:20:31:24 | chunk | test.rs:32:14:32:18 | chunk | provenance | | -| test.rs:31:29:31:36 | request1 | test.rs:31:29:31:44 | request1.chunk() [future, Ok, Some] | provenance | MaD:28 | +| test.rs:31:29:31:36 | request1 | test.rs:31:29:31:44 | request1.chunk() [future, Ok, Some] | provenance | MaD:30 | | test.rs:31:29:31:44 | request1.chunk() [future, Ok, Some] | test.rs:31:29:31:50 | await ... [Ok, Some] | provenance | | | test.rs:31:29:31:50 | await ... [Ok, Some] | test.rs:31:29:31:51 | TryExpr [Some] | provenance | | | test.rs:31:29:31:51 | TryExpr [Some] | test.rs:31:15:31:25 | Some(...) [Some] | provenance | | @@ -116,17 +119,17 @@ edges | test.rs:67:24:67:57 | await ... [Ok] | test.rs:67:24:67:58 | TryExpr | provenance | | | test.rs:67:24:67:58 | TryExpr | test.rs:67:9:67:20 | mut response | provenance | | | test.rs:68:11:68:18 | response | test.rs:68:10:68:18 | &response | provenance | | -| test.rs:76:18:76:25 | response | test.rs:76:18:76:32 | response.body() | provenance | MaD:24 | -| test.rs:77:18:77:25 | response | test.rs:77:18:77:36 | response.body_mut() | provenance | MaD:25 | +| test.rs:76:18:76:25 | response | test.rs:76:18:76:32 | response.body() | provenance | MaD:25 | +| test.rs:77:18:77:25 | response | test.rs:77:18:77:36 | response.body_mut() | provenance | MaD:26 | | test.rs:79:17:79:20 | body | test.rs:80:19:80:22 | body | provenance | | -| test.rs:79:24:79:31 | response | test.rs:79:24:79:43 | response.into_body() | provenance | MaD:26 | +| test.rs:79:24:79:31 | response | test.rs:79:24:79:43 | response.into_body() | provenance | MaD:27 | | test.rs:79:24:79:43 | response.into_body() | test.rs:79:17:79:20 | body | provenance | | | test.rs:80:19:80:22 | body | test.rs:80:18:80:22 | &body | provenance | | | test.rs:155:13:155:22 | mut stream | test.rs:162:17:162:22 | stream | provenance | | | test.rs:155:26:155:62 | ...::connect(...) | test.rs:155:26:155:62 | ...::connect(...) [Ok] | provenance | Src:MaD:4 | | test.rs:155:26:155:62 | ...::connect(...) [Ok] | test.rs:155:26:155:63 | TryExpr | provenance | | | test.rs:155:26:155:63 | TryExpr | test.rs:155:13:155:22 | mut stream | provenance | | -| test.rs:162:17:162:22 | stream | test.rs:162:29:162:39 | [post] &mut buffer [&ref] | provenance | MaD:35 | +| test.rs:162:17:162:22 | stream | test.rs:162:29:162:39 | [post] &mut buffer [&ref] | provenance | MaD:37 | | test.rs:162:29:162:39 | [post] &mut buffer [&ref] | test.rs:162:34:162:39 | [post] buffer | provenance | | | test.rs:162:34:162:39 | [post] buffer | test.rs:165:15:165:20 | buffer | provenance | | | test.rs:162:34:162:39 | [post] buffer | test.rs:166:14:166:19 | buffer | provenance | | @@ -138,20 +141,20 @@ edges | test.rs:174:26:174:105 | ...::connect_timeout(...) [Ok] | test.rs:174:26:174:106 | TryExpr | provenance | | | test.rs:174:26:174:106 | TryExpr | test.rs:174:13:174:22 | mut stream | provenance | | | test.rs:182:21:182:30 | mut reader | test.rs:185:27:185:32 | reader | provenance | | -| test.rs:182:34:182:64 | ...::new(...) | test.rs:182:34:182:74 | ... .take(...) | provenance | MaD:38 | +| test.rs:182:34:182:64 | ...::new(...) | test.rs:182:34:182:74 | ... .take(...) | provenance | MaD:40 | | test.rs:182:34:182:74 | ... .take(...) | test.rs:182:21:182:30 | mut reader | provenance | | -| test.rs:182:58:182:63 | stream | test.rs:182:34:182:64 | ...::new(...) | provenance | MaD:39 | -| test.rs:185:27:185:32 | reader | test.rs:185:44:185:52 | [post] &mut line [&ref] | provenance | MaD:34 | +| test.rs:182:58:182:63 | stream | test.rs:182:34:182:64 | ...::new(...) | provenance | MaD:41 | +| test.rs:185:27:185:32 | reader | test.rs:185:44:185:52 | [post] &mut line [&ref] | provenance | MaD:36 | | test.rs:185:44:185:52 | [post] &mut line [&ref] | test.rs:185:49:185:52 | [post] line | provenance | | | test.rs:185:49:185:52 | [post] line | test.rs:192:35:192:38 | line | provenance | | | test.rs:192:35:192:38 | line | test.rs:192:34:192:38 | &line | provenance | | | test.rs:203:21:203:26 | reader | test.rs:204:29:204:34 | reader | provenance | | -| test.rs:203:30:203:73 | ...::new(...) | test.rs:203:30:203:83 | ... .take(...) | provenance | MaD:38 | +| test.rs:203:30:203:73 | ...::new(...) | test.rs:203:30:203:83 | ... .take(...) | provenance | MaD:40 | | test.rs:203:30:203:83 | ... .take(...) | test.rs:203:21:203:26 | reader | provenance | | -| test.rs:203:54:203:59 | stream | test.rs:203:54:203:71 | stream.try_clone() [Ok] | provenance | MaD:40 | +| test.rs:203:54:203:59 | stream | test.rs:203:54:203:71 | stream.try_clone() [Ok] | provenance | MaD:42 | | test.rs:203:54:203:71 | stream.try_clone() [Ok] | test.rs:203:54:203:72 | TryExpr | provenance | | -| test.rs:203:54:203:72 | TryExpr | test.rs:203:30:203:73 | ...::new(...) | provenance | MaD:39 | -| test.rs:204:29:204:34 | reader | test.rs:204:29:204:42 | reader.lines() | provenance | MaD:33 | +| test.rs:203:54:203:72 | TryExpr | test.rs:203:30:203:73 | ...::new(...) | provenance | MaD:41 | +| test.rs:204:29:204:34 | reader | test.rs:204:29:204:42 | reader.lines() | provenance | MaD:35 | | test.rs:204:29:204:42 | reader.lines() | test.rs:205:28:205:37 | Ok(...) | provenance | | | test.rs:205:28:205:37 | Ok(...) | test.rs:207:30:207:35 | string | provenance | | | test.rs:224:9:224:24 | mut tokio_stream | test.rs:232:17:232:28 | tokio_stream | provenance | | @@ -162,11 +165,11 @@ edges | test.rs:224:28:224:66 | ...::connect(...) [future, Ok] | test.rs:224:28:224:72 | await ... [Ok] | provenance | | | test.rs:224:28:224:72 | await ... [Ok] | test.rs:224:28:224:73 | TryExpr | provenance | | | test.rs:224:28:224:73 | TryExpr | test.rs:224:9:224:24 | mut tokio_stream | provenance | | -| test.rs:232:17:232:28 | tokio_stream | test.rs:232:35:232:46 | [post] &mut buffer1 [&ref] | provenance | MaD:42 | +| test.rs:232:17:232:28 | tokio_stream | test.rs:232:35:232:46 | [post] &mut buffer1 [&ref] | provenance | MaD:44 | | test.rs:232:35:232:46 | [post] &mut buffer1 [&ref] | test.rs:232:40:232:46 | [post] buffer1 | provenance | | | test.rs:232:40:232:46 | [post] buffer1 | test.rs:239:15:239:21 | buffer1 | provenance | | | test.rs:232:40:232:46 | [post] buffer1 | test.rs:240:14:240:20 | buffer1 | provenance | | -| test.rs:236:18:236:29 | tokio_stream | test.rs:236:36:236:47 | [post] &mut buffer2 [&ref] | provenance | MaD:41 | +| test.rs:236:18:236:29 | tokio_stream | test.rs:236:36:236:47 | [post] &mut buffer2 [&ref] | provenance | MaD:43 | | test.rs:236:36:236:47 | [post] &mut buffer2 [&ref] | test.rs:236:41:236:47 | [post] buffer2 | provenance | | | test.rs:236:41:236:47 | [post] buffer2 | test.rs:243:15:243:21 | buffer2 | provenance | | | test.rs:236:41:236:47 | [post] buffer2 | test.rs:244:14:244:20 | buffer2 | provenance | | @@ -174,11 +177,11 @@ edges | test.rs:240:14:240:20 | buffer1 | test.rs:240:14:240:23 | buffer1[0] | provenance | MaD:10 | | test.rs:243:15:243:21 | buffer2 | test.rs:243:14:243:21 | &buffer2 | provenance | | | test.rs:244:14:244:20 | buffer2 | test.rs:244:14:244:23 | buffer2[0] | provenance | MaD:10 | -| test.rs:252:19:252:30 | tokio_stream | test.rs:252:41:252:51 | [post] &mut buffer [&ref] | provenance | MaD:43 | +| test.rs:252:19:252:30 | tokio_stream | test.rs:252:41:252:51 | [post] &mut buffer [&ref] | provenance | MaD:45 | | test.rs:252:41:252:51 | [post] &mut buffer [&ref] | test.rs:252:46:252:51 | [post] buffer | provenance | | | test.rs:252:46:252:51 | [post] buffer | test.rs:259:27:259:32 | buffer | provenance | | | test.rs:259:27:259:32 | buffer | test.rs:259:26:259:32 | &buffer | provenance | | -| test.rs:275:19:275:30 | tokio_stream | test.rs:275:45:275:55 | [post] &mut buffer [&ref] | provenance | MaD:44 | +| test.rs:275:19:275:30 | tokio_stream | test.rs:275:45:275:55 | [post] &mut buffer [&ref] | provenance | MaD:46 | | test.rs:275:45:275:55 | [post] &mut buffer [&ref] | test.rs:275:50:275:55 | [post] buffer | provenance | | | test.rs:275:50:275:55 | [post] buffer | test.rs:282:27:282:32 | buffer | provenance | | | test.rs:282:27:282:32 | buffer | test.rs:282:26:282:32 | &buffer | provenance | | @@ -193,181 +196,223 @@ edges | test.rs:333:22:333:27 | client | test.rs:333:22:333:36 | client.reader() | provenance | MaD:9 | | test.rs:333:22:333:36 | client.reader() | test.rs:333:9:333:18 | mut reader | provenance | | | test.rs:334:11:334:16 | reader | test.rs:334:10:334:16 | &reader | provenance | | -| test.rs:338:22:338:27 | reader | test.rs:338:34:338:44 | [post] &mut buffer [&ref] | provenance | MaD:35 | +| test.rs:338:22:338:27 | reader | test.rs:338:34:338:44 | [post] &mut buffer [&ref] | provenance | MaD:37 | | test.rs:338:34:338:44 | [post] &mut buffer [&ref] | test.rs:338:39:338:44 | [post] buffer | provenance | | | test.rs:338:39:338:44 | [post] buffer | test.rs:339:15:339:20 | buffer | provenance | | | test.rs:339:15:339:20 | buffer | test.rs:339:14:339:20 | &buffer | provenance | | -| test.rs:344:22:344:27 | reader | test.rs:344:41:344:51 | [post] &mut buffer [&ref] | provenance | MaD:36 | +| test.rs:344:22:344:27 | reader | test.rs:344:41:344:51 | [post] &mut buffer [&ref] | provenance | MaD:38 | | test.rs:344:41:344:51 | [post] &mut buffer [&ref] | test.rs:344:46:344:51 | [post] buffer | provenance | | | test.rs:344:46:344:51 | [post] buffer | test.rs:345:15:345:20 | buffer | provenance | | | test.rs:345:15:345:20 | buffer | test.rs:345:14:345:20 | &buffer | provenance | | -| test.rs:350:22:350:27 | reader | test.rs:350:44:350:54 | [post] &mut buffer [&ref] | provenance | MaD:37 | +| test.rs:350:22:350:27 | reader | test.rs:350:44:350:54 | [post] &mut buffer [&ref] | provenance | MaD:39 | | test.rs:350:44:350:54 | [post] &mut buffer [&ref] | test.rs:350:49:350:54 | [post] buffer | provenance | | | test.rs:350:49:350:54 | [post] buffer | test.rs:351:15:351:20 | buffer | provenance | | | test.rs:351:15:351:20 | buffer | test.rs:351:14:351:20 | &buffer | provenance | | -| test.rs:373:13:373:15 | tcp | test.rs:374:15:374:17 | tcp | provenance | | -| test.rs:373:13:373:15 | tcp | test.rs:380:57:380:59 | tcp | provenance | | -| test.rs:373:19:373:41 | ...::connect(...) | test.rs:373:19:373:41 | ...::connect(...) [future, Ok] | provenance | Src:MaD:1 | -| test.rs:373:19:373:41 | ...::connect(...) [future, Ok] | test.rs:373:19:373:47 | await ... [Ok] | provenance | | -| test.rs:373:19:373:47 | await ... [Ok] | test.rs:373:19:373:48 | TryExpr | provenance | | -| test.rs:373:19:373:48 | TryExpr | test.rs:373:13:373:15 | tcp | provenance | | -| test.rs:374:15:374:17 | tcp | test.rs:374:14:374:17 | &tcp | provenance | | -| test.rs:380:13:380:22 | mut reader | test.rs:381:15:381:20 | reader | provenance | | -| test.rs:380:13:380:22 | mut reader | test.rs:386:44:386:49 | reader | provenance | | -| test.rs:380:13:380:22 | mut reader | test.rs:399:68:399:73 | reader | provenance | | -| test.rs:380:13:380:22 | mut reader | test.rs:403:31:403:36 | reader | provenance | | -| test.rs:380:13:380:22 | mut reader | test.rs:408:55:408:60 | reader | provenance | | -| test.rs:380:26:380:60 | connector.connect(...) [future, Ok] | test.rs:380:26:380:66 | await ... [Ok] | provenance | | -| test.rs:380:26:380:66 | await ... [Ok] | test.rs:380:26:380:67 | TryExpr | provenance | | -| test.rs:380:26:380:67 | TryExpr | test.rs:380:13:380:22 | mut reader | provenance | | -| test.rs:380:57:380:59 | tcp | test.rs:380:26:380:60 | connector.connect(...) [future, Ok] | provenance | MaD:17 | -| test.rs:381:15:381:20 | reader | test.rs:381:14:381:20 | &reader | provenance | | -| test.rs:386:17:386:26 | mut pinned | test.rs:387:19:387:24 | pinned | provenance | | -| test.rs:386:17:386:26 | mut pinned | test.rs:389:30:389:35 | pinned | provenance | | -| test.rs:386:17:386:26 | mut pinned [Pin, &ref] | test.rs:387:19:387:24 | pinned [Pin, &ref] | provenance | | -| test.rs:386:30:386:50 | ...::new(...) | test.rs:386:17:386:26 | mut pinned | provenance | | -| test.rs:386:30:386:50 | ...::new(...) [Pin, &ref] | test.rs:386:17:386:26 | mut pinned [Pin, &ref] | provenance | | -| test.rs:386:39:386:49 | &mut reader [&ref] | test.rs:386:30:386:50 | ...::new(...) | provenance | MaD:12 | -| test.rs:386:39:386:49 | &mut reader [&ref] | test.rs:386:30:386:50 | ...::new(...) [Pin, &ref] | provenance | MaD:13 | -| test.rs:386:44:386:49 | reader | test.rs:386:39:386:49 | &mut reader [&ref] | provenance | | -| test.rs:387:19:387:24 | pinned | test.rs:387:18:387:24 | &pinned | provenance | | -| test.rs:387:19:387:24 | pinned [Pin, &ref] | test.rs:387:18:387:24 | &pinned | provenance | | -| test.rs:389:30:389:35 | pinned | test.rs:389:56:389:66 | [post] &mut buffer [&ref] | provenance | MaD:16 | -| test.rs:389:56:389:66 | [post] &mut buffer [&ref] | test.rs:389:61:389:66 | [post] buffer | provenance | | -| test.rs:389:61:389:66 | [post] buffer | test.rs:391:23:391:28 | buffer | provenance | | -| test.rs:389:61:389:66 | [post] buffer | test.rs:392:23:392:28 | buffer | provenance | | -| test.rs:389:61:389:66 | [post] buffer | test.rs:392:23:392:33 | buffer[...] | provenance | | -| test.rs:391:23:391:28 | buffer | test.rs:391:22:391:28 | &buffer | provenance | | -| test.rs:392:23:392:28 | buffer | test.rs:392:23:392:33 | buffer[...] | provenance | MaD:10 | -| test.rs:392:23:392:33 | buffer[...] | test.rs:392:22:392:33 | &... | provenance | | -| test.rs:399:63:399:73 | &mut reader [&ref] | test.rs:399:76:399:87 | [post] &mut buffer1 [&ref] | provenance | MaD:21 | -| test.rs:399:68:399:73 | reader | test.rs:399:63:399:73 | &mut reader [&ref] | provenance | | -| test.rs:399:76:399:87 | [post] &mut buffer1 [&ref] | test.rs:399:81:399:87 | [post] buffer1 | provenance | | -| test.rs:399:81:399:87 | [post] buffer1 | test.rs:400:19:400:25 | buffer1 | provenance | | -| test.rs:399:81:399:87 | [post] buffer1 | test.rs:400:19:400:40 | buffer1[...] | provenance | | -| test.rs:400:19:400:25 | buffer1 | test.rs:400:19:400:40 | buffer1[...] | provenance | MaD:10 | -| test.rs:400:19:400:40 | buffer1[...] | test.rs:400:18:400:40 | &... | provenance | | -| test.rs:403:31:403:36 | reader | test.rs:403:43:403:54 | [post] &mut buffer2 [&ref] | provenance | MaD:21 | -| test.rs:403:43:403:54 | [post] &mut buffer2 [&ref] | test.rs:403:48:403:54 | [post] buffer2 | provenance | | -| test.rs:403:48:403:54 | [post] buffer2 | test.rs:405:19:405:25 | buffer2 | provenance | | -| test.rs:403:48:403:54 | [post] buffer2 | test.rs:405:19:405:40 | buffer2[...] | provenance | | -| test.rs:405:19:405:25 | buffer2 | test.rs:405:19:405:40 | buffer2[...] | provenance | MaD:10 | -| test.rs:405:19:405:40 | buffer2[...] | test.rs:405:18:405:40 | &... | provenance | | -| test.rs:408:13:408:23 | mut reader2 | test.rs:409:15:409:21 | reader2 | provenance | | -| test.rs:408:13:408:23 | mut reader2 | test.rs:413:44:413:50 | reader2 | provenance | | -| test.rs:408:13:408:23 | mut reader2 | test.rs:423:41:423:47 | reader2 | provenance | | -| test.rs:408:13:408:23 | mut reader2 | test.rs:437:26:437:32 | reader2 | provenance | | -| test.rs:408:13:408:23 | mut reader2 | test.rs:444:44:444:50 | reader2 | provenance | | -| test.rs:408:13:408:23 | mut reader2 | test.rs:457:68:457:74 | reader2 | provenance | | -| test.rs:408:13:408:23 | mut reader2 | test.rs:461:31:461:37 | reader2 | provenance | | -| test.rs:408:13:408:23 | mut reader2 | test.rs:467:44:467:50 | reader2 | provenance | | -| test.rs:408:13:408:23 | mut reader2 | test.rs:479:26:479:32 | reader2 | provenance | | -| test.rs:408:13:408:23 | mut reader2 | test.rs:486:31:486:37 | reader2 | provenance | | -| test.rs:408:13:408:23 | mut reader2 | test.rs:493:31:493:37 | reader2 | provenance | | -| test.rs:408:13:408:23 | mut reader2 | test.rs:500:31:500:37 | reader2 | provenance | | -| test.rs:408:27:408:61 | ...::new(...) | test.rs:408:13:408:23 | mut reader2 | provenance | | -| test.rs:408:55:408:60 | reader | test.rs:408:27:408:61 | ...::new(...) | provenance | MaD:23 | -| test.rs:409:15:409:21 | reader2 | test.rs:409:14:409:21 | &reader2 | provenance | | -| test.rs:413:17:413:26 | mut pinned | test.rs:414:19:414:24 | pinned | provenance | | -| test.rs:413:17:413:26 | mut pinned | test.rs:416:26:416:31 | pinned | provenance | | -| test.rs:413:17:413:26 | mut pinned [Pin, &ref] | test.rs:414:19:414:24 | pinned [Pin, &ref] | provenance | | -| test.rs:413:30:413:51 | ...::new(...) | test.rs:413:17:413:26 | mut pinned | provenance | | -| test.rs:413:30:413:51 | ...::new(...) [Pin, &ref] | test.rs:413:17:413:26 | mut pinned [Pin, &ref] | provenance | | -| test.rs:413:39:413:50 | &mut reader2 [&ref] | test.rs:413:30:413:51 | ...::new(...) | provenance | MaD:12 | -| test.rs:413:39:413:50 | &mut reader2 [&ref] | test.rs:413:30:413:51 | ...::new(...) [Pin, &ref] | provenance | MaD:13 | -| test.rs:413:44:413:50 | reader2 | test.rs:413:39:413:50 | &mut reader2 [&ref] | provenance | | -| test.rs:414:19:414:24 | pinned | test.rs:414:18:414:24 | &pinned | provenance | | -| test.rs:414:19:414:24 | pinned [Pin, &ref] | test.rs:414:18:414:24 | &pinned | provenance | | -| test.rs:416:17:416:22 | buffer [Ready, Ok] | test.rs:417:20:417:39 | ...::Ready(...) [Ready, Ok] | provenance | | -| test.rs:416:17:416:22 | buffer [Ready, Ok] | test.rs:418:23:418:28 | buffer [Ready, Ok] | provenance | | -| test.rs:416:26:416:31 | pinned | test.rs:416:26:416:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:15 | -| test.rs:416:26:416:54 | pinned.poll_fill_buf(...) [Ready, Ok] | test.rs:416:17:416:22 | buffer [Ready, Ok] | provenance | | -| test.rs:417:20:417:39 | ...::Ready(...) [Ready, Ok] | test.rs:417:32:417:38 | Ok(...) [Ok] | provenance | | -| test.rs:417:32:417:38 | Ok(...) [Ok] | test.rs:417:35:417:37 | buf | provenance | | -| test.rs:417:35:417:37 | buf | test.rs:419:22:419:24 | buf | provenance | | -| test.rs:418:23:418:28 | buffer [Ready, Ok] | test.rs:418:22:418:28 | &buffer | provenance | | -| test.rs:423:17:423:23 | buffer2 [Ready, Ok] | test.rs:424:20:424:26 | buffer2 [Ready, Ok] | provenance | | -| test.rs:423:27:423:48 | ...::new(...) | test.rs:423:27:423:71 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:15 | -| test.rs:423:27:423:71 | ... .poll_fill_buf(...) [Ready, Ok] | test.rs:423:17:423:23 | buffer2 [Ready, Ok] | provenance | | -| test.rs:423:36:423:47 | &mut reader2 [&ref] | test.rs:423:27:423:48 | ...::new(...) | provenance | MaD:12 | -| test.rs:423:41:423:47 | reader2 | test.rs:423:36:423:47 | &mut reader2 [&ref] | provenance | | -| test.rs:424:20:424:26 | buffer2 [Ready, Ok] | test.rs:425:17:425:36 | ...::Ready(...) [Ready, Ok] | provenance | | -| test.rs:424:20:424:26 | buffer2 [Ready, Ok] | test.rs:426:27:426:33 | buffer2 [Ready, Ok] | provenance | | -| test.rs:425:17:425:36 | ...::Ready(...) [Ready, Ok] | test.rs:425:29:425:35 | Ok(...) [Ok] | provenance | | -| test.rs:425:29:425:35 | Ok(...) [Ok] | test.rs:425:32:425:34 | buf | provenance | | -| test.rs:425:32:425:34 | buf | test.rs:427:26:427:28 | buf | provenance | | -| test.rs:426:27:426:33 | buffer2 [Ready, Ok] | test.rs:426:26:426:33 | &buffer2 | provenance | | -| test.rs:437:17:437:22 | buffer | test.rs:438:18:438:23 | buffer | provenance | | -| test.rs:437:26:437:32 | reader2 | test.rs:437:26:437:43 | reader2.fill_buf() [future, Ok] | provenance | MaD:18 | -| test.rs:437:26:437:43 | reader2.fill_buf() [future, Ok] | test.rs:437:26:437:49 | await ... [Ok] | provenance | | -| test.rs:437:26:437:49 | await ... [Ok] | test.rs:437:26:437:50 | TryExpr | provenance | | -| test.rs:437:26:437:50 | TryExpr | test.rs:437:17:437:22 | buffer | provenance | | -| test.rs:444:17:444:26 | mut pinned | test.rs:445:19:445:24 | pinned | provenance | | -| test.rs:444:17:444:26 | mut pinned | test.rs:447:30:447:35 | pinned | provenance | | -| test.rs:444:17:444:26 | mut pinned [Pin, &ref] | test.rs:445:19:445:24 | pinned [Pin, &ref] | provenance | | -| test.rs:444:30:444:51 | ...::new(...) | test.rs:444:17:444:26 | mut pinned | provenance | | -| test.rs:444:30:444:51 | ...::new(...) [Pin, &ref] | test.rs:444:17:444:26 | mut pinned [Pin, &ref] | provenance | | -| test.rs:444:39:444:50 | &mut reader2 [&ref] | test.rs:444:30:444:51 | ...::new(...) | provenance | MaD:12 | -| test.rs:444:39:444:50 | &mut reader2 [&ref] | test.rs:444:30:444:51 | ...::new(...) [Pin, &ref] | provenance | MaD:13 | -| test.rs:444:44:444:50 | reader2 | test.rs:444:39:444:50 | &mut reader2 [&ref] | provenance | | -| test.rs:445:19:445:24 | pinned | test.rs:445:18:445:24 | &pinned | provenance | | -| test.rs:445:19:445:24 | pinned [Pin, &ref] | test.rs:445:18:445:24 | &pinned | provenance | | -| test.rs:447:30:447:35 | pinned | test.rs:447:56:447:66 | [post] &mut buffer [&ref] | provenance | MaD:16 | -| test.rs:447:56:447:66 | [post] &mut buffer [&ref] | test.rs:447:61:447:66 | [post] buffer | provenance | | -| test.rs:447:61:447:66 | [post] buffer | test.rs:448:19:448:24 | buffer | provenance | | -| test.rs:447:61:447:66 | [post] buffer | test.rs:450:23:450:28 | buffer | provenance | | -| test.rs:447:61:447:66 | [post] buffer | test.rs:450:23:450:33 | buffer[...] | provenance | | -| test.rs:448:19:448:24 | buffer | test.rs:448:18:448:24 | &buffer | provenance | | -| test.rs:450:23:450:28 | buffer | test.rs:450:23:450:33 | buffer[...] | provenance | MaD:10 | -| test.rs:450:23:450:33 | buffer[...] | test.rs:450:22:450:33 | &... | provenance | | -| test.rs:457:63:457:74 | &mut reader2 [&ref] | test.rs:457:77:457:88 | [post] &mut buffer1 [&ref] | provenance | MaD:21 | -| test.rs:457:68:457:74 | reader2 | test.rs:457:63:457:74 | &mut reader2 [&ref] | provenance | | -| test.rs:457:77:457:88 | [post] &mut buffer1 [&ref] | test.rs:457:82:457:88 | [post] buffer1 | provenance | | -| test.rs:457:82:457:88 | [post] buffer1 | test.rs:458:19:458:25 | buffer1 | provenance | | -| test.rs:457:82:457:88 | [post] buffer1 | test.rs:458:19:458:40 | buffer1[...] | provenance | | -| test.rs:458:19:458:25 | buffer1 | test.rs:458:19:458:40 | buffer1[...] | provenance | MaD:10 | -| test.rs:458:19:458:40 | buffer1[...] | test.rs:458:18:458:40 | &... | provenance | | -| test.rs:461:31:461:37 | reader2 | test.rs:461:44:461:55 | [post] &mut buffer2 [&ref] | provenance | MaD:21 | -| test.rs:461:44:461:55 | [post] &mut buffer2 [&ref] | test.rs:461:49:461:55 | [post] buffer2 | provenance | | -| test.rs:461:49:461:55 | [post] buffer2 | test.rs:462:19:462:25 | buffer2 | provenance | | -| test.rs:461:49:461:55 | [post] buffer2 | test.rs:462:19:462:40 | buffer2[...] | provenance | | -| test.rs:462:19:462:25 | buffer2 | test.rs:462:19:462:40 | buffer2[...] | provenance | MaD:10 | -| test.rs:462:19:462:40 | buffer2[...] | test.rs:462:18:462:40 | &... | provenance | | -| test.rs:467:17:467:26 | mut pinned | test.rs:468:19:468:24 | pinned | provenance | | -| test.rs:467:17:467:26 | mut pinned | test.rs:470:26:470:31 | pinned | provenance | | -| test.rs:467:17:467:26 | mut pinned [Pin, &ref] | test.rs:468:19:468:24 | pinned [Pin, &ref] | provenance | | -| test.rs:467:30:467:51 | ...::new(...) | test.rs:467:17:467:26 | mut pinned | provenance | | -| test.rs:467:30:467:51 | ...::new(...) [Pin, &ref] | test.rs:467:17:467:26 | mut pinned [Pin, &ref] | provenance | | -| test.rs:467:39:467:50 | &mut reader2 [&ref] | test.rs:467:30:467:51 | ...::new(...) | provenance | MaD:12 | -| test.rs:467:39:467:50 | &mut reader2 [&ref] | test.rs:467:30:467:51 | ...::new(...) [Pin, &ref] | provenance | MaD:13 | -| test.rs:467:44:467:50 | reader2 | test.rs:467:39:467:50 | &mut reader2 [&ref] | provenance | | -| test.rs:468:19:468:24 | pinned | test.rs:468:18:468:24 | &pinned | provenance | | -| test.rs:468:19:468:24 | pinned [Pin, &ref] | test.rs:468:18:468:24 | &pinned | provenance | | -| test.rs:470:17:470:22 | buffer [Ready, Ok] | test.rs:471:19:471:24 | buffer [Ready, Ok] | provenance | | -| test.rs:470:17:470:22 | buffer [Ready, Ok] | test.rs:472:20:472:39 | ...::Ready(...) [Ready, Ok] | provenance | | -| test.rs:470:26:470:31 | pinned | test.rs:470:26:470:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:15 | -| test.rs:470:26:470:54 | pinned.poll_fill_buf(...) [Ready, Ok] | test.rs:470:17:470:22 | buffer [Ready, Ok] | provenance | | -| test.rs:471:19:471:24 | buffer [Ready, Ok] | test.rs:471:18:471:24 | &buffer | provenance | | -| test.rs:472:20:472:39 | ...::Ready(...) [Ready, Ok] | test.rs:472:32:472:38 | Ok(...) [Ok] | provenance | | -| test.rs:472:32:472:38 | Ok(...) [Ok] | test.rs:472:35:472:37 | buf | provenance | | -| test.rs:472:35:472:37 | buf | test.rs:473:22:473:24 | buf | provenance | | -| test.rs:479:17:479:22 | buffer | test.rs:480:18:480:23 | buffer | provenance | | -| test.rs:479:26:479:32 | reader2 | test.rs:479:26:479:43 | reader2.fill_buf() [future, Ok] | provenance | MaD:18 | -| test.rs:479:26:479:43 | reader2.fill_buf() [future, Ok] | test.rs:479:26:479:49 | await ... [Ok] | provenance | | -| test.rs:479:26:479:49 | await ... [Ok] | test.rs:479:26:479:50 | TryExpr | provenance | | -| test.rs:479:26:479:50 | TryExpr | test.rs:479:17:479:22 | buffer | provenance | | -| test.rs:486:31:486:37 | reader2 | test.rs:486:57:486:65 | [post] &mut line [&ref] | provenance | MaD:20 | -| test.rs:486:57:486:65 | [post] &mut line [&ref] | test.rs:486:62:486:65 | [post] line | provenance | | -| test.rs:486:62:486:65 | [post] line | test.rs:487:19:487:22 | line | provenance | | -| test.rs:487:19:487:22 | line | test.rs:487:18:487:22 | &line | provenance | | -| test.rs:493:31:493:37 | reader2 | test.rs:493:49:493:57 | [post] &mut line [&ref] | provenance | MaD:19 | -| test.rs:493:49:493:57 | [post] &mut line [&ref] | test.rs:493:54:493:57 | [post] line | provenance | | -| test.rs:493:54:493:57 | [post] line | test.rs:494:19:494:22 | line | provenance | | -| test.rs:494:19:494:22 | line | test.rs:494:18:494:22 | &line | provenance | | -| test.rs:500:31:500:37 | reader2 | test.rs:500:51:500:61 | [post] &mut buffer [&ref] | provenance | MaD:22 | -| test.rs:500:51:500:61 | [post] &mut buffer [&ref] | test.rs:500:56:500:61 | [post] buffer | provenance | | -| test.rs:500:56:500:61 | [post] buffer | test.rs:501:19:501:24 | buffer | provenance | | -| test.rs:501:19:501:24 | buffer | test.rs:501:18:501:24 | &buffer | provenance | | +| test.rs:359:9:359:14 | stream | test.rs:361:59:361:64 | stream | provenance | | +| test.rs:359:18:359:54 | ...::connect(...) | test.rs:359:18:359:54 | ...::connect(...) [Ok] | provenance | Src:MaD:4 | +| test.rs:359:18:359:54 | ...::connect(...) [Ok] | test.rs:359:18:359:55 | TryExpr | provenance | | +| test.rs:359:18:359:55 | TryExpr | test.rs:359:9:359:14 | stream | provenance | | +| test.rs:361:9:361:18 | mut stream | test.rs:362:11:362:16 | stream | provenance | | +| test.rs:361:9:361:18 | mut stream | test.rs:367:22:367:27 | stream | provenance | | +| test.rs:361:9:361:18 | mut stream | test.rs:373:5:373:10 | stream | provenance | | +| test.rs:361:22:361:65 | connector.connect(...) [Ok] | test.rs:361:22:361:66 | TryExpr | provenance | | +| test.rs:361:22:361:66 | TryExpr | test.rs:361:9:361:18 | mut stream | provenance | | +| test.rs:361:59:361:64 | stream | test.rs:361:22:361:65 | connector.connect(...) [Ok] | provenance | MaD:28 | +| test.rs:362:11:362:16 | stream | test.rs:362:10:362:16 | &stream | provenance | | +| test.rs:367:22:367:27 | stream | test.rs:367:34:367:44 | [post] &mut buffer [&ref] | provenance | MaD:37 | +| test.rs:367:34:367:44 | [post] &mut buffer [&ref] | test.rs:367:39:367:44 | [post] buffer | provenance | | +| test.rs:367:39:367:44 | [post] buffer | test.rs:370:11:370:16 | buffer | provenance | | +| test.rs:367:39:367:44 | [post] buffer | test.rs:370:11:370:30 | buffer[...] | provenance | | +| test.rs:370:11:370:16 | buffer | test.rs:370:11:370:30 | buffer[...] | provenance | MaD:10 | +| test.rs:370:11:370:30 | buffer[...] | test.rs:370:10:370:30 | &... | provenance | | +| test.rs:373:5:373:10 | stream | test.rs:373:27:373:39 | [post] &mut response [&ref] | provenance | MaD:39 | +| test.rs:373:27:373:39 | [post] &mut response [&ref] | test.rs:373:32:373:39 | [post] response | provenance | | +| test.rs:373:32:373:39 | [post] response | test.rs:375:10:375:17 | response | provenance | | +| test.rs:386:9:386:15 | stream0 | test.rs:388:67:388:73 | stream0 | provenance | | +| test.rs:386:19:386:61 | ...::connect(...) | test.rs:386:19:386:61 | ...::connect(...) [future, Ok] | provenance | Src:MaD:1 | +| test.rs:386:19:386:61 | ...::connect(...) [future, Ok] | test.rs:386:19:386:67 | await ... [Ok] | provenance | | +| test.rs:386:19:386:67 | await ... [Ok] | test.rs:386:19:386:68 | TryExpr | provenance | | +| test.rs:386:19:386:68 | TryExpr | test.rs:386:9:386:15 | stream0 | provenance | | +| test.rs:388:9:388:18 | mut stream | test.rs:389:11:389:16 | stream | provenance | | +| test.rs:388:9:388:18 | mut stream | test.rs:396:22:396:27 | stream | provenance | | +| test.rs:388:9:388:18 | mut stream | test.rs:402:5:402:10 | stream | provenance | | +| test.rs:388:22:388:74 | ...::connect(...) [future, Ok] | test.rs:388:22:388:80 | await ... [Ok] | provenance | | +| test.rs:388:22:388:80 | await ... [Ok] | test.rs:388:22:388:81 | TryExpr | provenance | | +| test.rs:388:22:388:81 | TryExpr | test.rs:388:9:388:18 | mut stream | provenance | | +| test.rs:388:67:388:73 | stream0 | test.rs:388:22:388:74 | ...::connect(...) [future, Ok] | provenance | MaD:47 | +| test.rs:389:11:389:16 | stream | test.rs:389:10:389:16 | &stream | provenance | | +| test.rs:396:22:396:27 | stream | test.rs:396:34:396:44 | [post] &mut buffer [&ref] | provenance | MaD:21 | +| test.rs:396:34:396:44 | [post] &mut buffer [&ref] | test.rs:396:39:396:44 | [post] buffer | provenance | | +| test.rs:396:39:396:44 | [post] buffer | test.rs:399:11:399:16 | buffer | provenance | | +| test.rs:396:39:396:44 | [post] buffer | test.rs:399:11:399:30 | buffer[...] | provenance | | +| test.rs:399:11:399:16 | buffer | test.rs:399:11:399:30 | buffer[...] | provenance | MaD:10 | +| test.rs:399:11:399:30 | buffer[...] | test.rs:399:10:399:30 | &... | provenance | | +| test.rs:402:5:402:10 | stream | test.rs:402:27:402:39 | [post] &mut response [&ref] | provenance | MaD:23 | +| test.rs:402:27:402:39 | [post] &mut response [&ref] | test.rs:402:32:402:39 | [post] response | provenance | | +| test.rs:402:32:402:39 | [post] response | test.rs:404:10:404:17 | response | provenance | | +| test.rs:425:13:425:15 | tcp | test.rs:426:15:426:17 | tcp | provenance | | +| test.rs:425:13:425:15 | tcp | test.rs:432:57:432:59 | tcp | provenance | | +| test.rs:425:19:425:41 | ...::connect(...) | test.rs:425:19:425:41 | ...::connect(...) [future, Ok] | provenance | Src:MaD:1 | +| test.rs:425:19:425:41 | ...::connect(...) [future, Ok] | test.rs:425:19:425:47 | await ... [Ok] | provenance | | +| test.rs:425:19:425:47 | await ... [Ok] | test.rs:425:19:425:48 | TryExpr | provenance | | +| test.rs:425:19:425:48 | TryExpr | test.rs:425:13:425:15 | tcp | provenance | | +| test.rs:426:15:426:17 | tcp | test.rs:426:14:426:17 | &tcp | provenance | | +| test.rs:432:13:432:22 | mut reader | test.rs:433:15:433:20 | reader | provenance | | +| test.rs:432:13:432:22 | mut reader | test.rs:438:44:438:49 | reader | provenance | | +| test.rs:432:13:432:22 | mut reader | test.rs:451:68:451:73 | reader | provenance | | +| test.rs:432:13:432:22 | mut reader | test.rs:455:31:455:36 | reader | provenance | | +| test.rs:432:13:432:22 | mut reader | test.rs:460:55:460:60 | reader | provenance | | +| test.rs:432:26:432:60 | connector.connect(...) [future, Ok] | test.rs:432:26:432:66 | await ... [Ok] | provenance | | +| test.rs:432:26:432:66 | await ... [Ok] | test.rs:432:26:432:67 | TryExpr | provenance | | +| test.rs:432:26:432:67 | TryExpr | test.rs:432:13:432:22 | mut reader | provenance | | +| test.rs:432:57:432:59 | tcp | test.rs:432:26:432:60 | connector.connect(...) [future, Ok] | provenance | MaD:17 | +| test.rs:433:15:433:20 | reader | test.rs:433:14:433:20 | &reader | provenance | | +| test.rs:438:17:438:26 | mut pinned | test.rs:439:19:439:24 | pinned | provenance | | +| test.rs:438:17:438:26 | mut pinned | test.rs:441:30:441:35 | pinned | provenance | | +| test.rs:438:17:438:26 | mut pinned [Pin, &ref] | test.rs:439:19:439:24 | pinned [Pin, &ref] | provenance | | +| test.rs:438:30:438:50 | ...::new(...) | test.rs:438:17:438:26 | mut pinned | provenance | | +| test.rs:438:30:438:50 | ...::new(...) [Pin, &ref] | test.rs:438:17:438:26 | mut pinned [Pin, &ref] | provenance | | +| test.rs:438:39:438:49 | &mut reader [&ref] | test.rs:438:30:438:50 | ...::new(...) | provenance | MaD:12 | +| test.rs:438:39:438:49 | &mut reader [&ref] | test.rs:438:30:438:50 | ...::new(...) [Pin, &ref] | provenance | MaD:13 | +| test.rs:438:44:438:49 | reader | test.rs:438:39:438:49 | &mut reader [&ref] | provenance | | +| test.rs:439:19:439:24 | pinned | test.rs:439:18:439:24 | &pinned | provenance | | +| test.rs:439:19:439:24 | pinned [Pin, &ref] | test.rs:439:18:439:24 | &pinned | provenance | | +| test.rs:441:30:441:35 | pinned | test.rs:441:56:441:66 | [post] &mut buffer [&ref] | provenance | MaD:16 | +| test.rs:441:56:441:66 | [post] &mut buffer [&ref] | test.rs:441:61:441:66 | [post] buffer | provenance | | +| test.rs:441:61:441:66 | [post] buffer | test.rs:443:23:443:28 | buffer | provenance | | +| test.rs:441:61:441:66 | [post] buffer | test.rs:444:23:444:28 | buffer | provenance | | +| test.rs:441:61:441:66 | [post] buffer | test.rs:444:23:444:33 | buffer[...] | provenance | | +| test.rs:443:23:443:28 | buffer | test.rs:443:22:443:28 | &buffer | provenance | | +| test.rs:444:23:444:28 | buffer | test.rs:444:23:444:33 | buffer[...] | provenance | MaD:10 | +| test.rs:444:23:444:33 | buffer[...] | test.rs:444:22:444:33 | &... | provenance | | +| test.rs:451:63:451:73 | &mut reader [&ref] | test.rs:451:76:451:87 | [post] &mut buffer1 [&ref] | provenance | MaD:21 | +| test.rs:451:68:451:73 | reader | test.rs:451:63:451:73 | &mut reader [&ref] | provenance | | +| test.rs:451:76:451:87 | [post] &mut buffer1 [&ref] | test.rs:451:81:451:87 | [post] buffer1 | provenance | | +| test.rs:451:81:451:87 | [post] buffer1 | test.rs:452:19:452:25 | buffer1 | provenance | | +| test.rs:451:81:451:87 | [post] buffer1 | test.rs:452:19:452:40 | buffer1[...] | provenance | | +| test.rs:452:19:452:25 | buffer1 | test.rs:452:19:452:40 | buffer1[...] | provenance | MaD:10 | +| test.rs:452:19:452:40 | buffer1[...] | test.rs:452:18:452:40 | &... | provenance | | +| test.rs:455:31:455:36 | reader | test.rs:455:43:455:54 | [post] &mut buffer2 [&ref] | provenance | MaD:21 | +| test.rs:455:43:455:54 | [post] &mut buffer2 [&ref] | test.rs:455:48:455:54 | [post] buffer2 | provenance | | +| test.rs:455:48:455:54 | [post] buffer2 | test.rs:457:19:457:25 | buffer2 | provenance | | +| test.rs:455:48:455:54 | [post] buffer2 | test.rs:457:19:457:40 | buffer2[...] | provenance | | +| test.rs:457:19:457:25 | buffer2 | test.rs:457:19:457:40 | buffer2[...] | provenance | MaD:10 | +| test.rs:457:19:457:40 | buffer2[...] | test.rs:457:18:457:40 | &... | provenance | | +| test.rs:460:13:460:23 | mut reader2 | test.rs:461:15:461:21 | reader2 | provenance | | +| test.rs:460:13:460:23 | mut reader2 | test.rs:465:44:465:50 | reader2 | provenance | | +| test.rs:460:13:460:23 | mut reader2 | test.rs:475:41:475:47 | reader2 | provenance | | +| test.rs:460:13:460:23 | mut reader2 | test.rs:489:26:489:32 | reader2 | provenance | | +| test.rs:460:13:460:23 | mut reader2 | test.rs:496:44:496:50 | reader2 | provenance | | +| test.rs:460:13:460:23 | mut reader2 | test.rs:509:68:509:74 | reader2 | provenance | | +| test.rs:460:13:460:23 | mut reader2 | test.rs:513:31:513:37 | reader2 | provenance | | +| test.rs:460:13:460:23 | mut reader2 | test.rs:519:44:519:50 | reader2 | provenance | | +| test.rs:460:13:460:23 | mut reader2 | test.rs:531:26:531:32 | reader2 | provenance | | +| test.rs:460:13:460:23 | mut reader2 | test.rs:538:31:538:37 | reader2 | provenance | | +| test.rs:460:13:460:23 | mut reader2 | test.rs:545:31:545:37 | reader2 | provenance | | +| test.rs:460:13:460:23 | mut reader2 | test.rs:552:31:552:37 | reader2 | provenance | | +| test.rs:460:27:460:61 | ...::new(...) | test.rs:460:13:460:23 | mut reader2 | provenance | | +| test.rs:460:55:460:60 | reader | test.rs:460:27:460:61 | ...::new(...) | provenance | MaD:24 | +| test.rs:461:15:461:21 | reader2 | test.rs:461:14:461:21 | &reader2 | provenance | | +| test.rs:465:17:465:26 | mut pinned | test.rs:466:19:466:24 | pinned | provenance | | +| test.rs:465:17:465:26 | mut pinned | test.rs:468:26:468:31 | pinned | provenance | | +| test.rs:465:17:465:26 | mut pinned [Pin, &ref] | test.rs:466:19:466:24 | pinned [Pin, &ref] | provenance | | +| test.rs:465:30:465:51 | ...::new(...) | test.rs:465:17:465:26 | mut pinned | provenance | | +| test.rs:465:30:465:51 | ...::new(...) [Pin, &ref] | test.rs:465:17:465:26 | mut pinned [Pin, &ref] | provenance | | +| test.rs:465:39:465:50 | &mut reader2 [&ref] | test.rs:465:30:465:51 | ...::new(...) | provenance | MaD:12 | +| test.rs:465:39:465:50 | &mut reader2 [&ref] | test.rs:465:30:465:51 | ...::new(...) [Pin, &ref] | provenance | MaD:13 | +| test.rs:465:44:465:50 | reader2 | test.rs:465:39:465:50 | &mut reader2 [&ref] | provenance | | +| test.rs:466:19:466:24 | pinned | test.rs:466:18:466:24 | &pinned | provenance | | +| test.rs:466:19:466:24 | pinned [Pin, &ref] | test.rs:466:18:466:24 | &pinned | provenance | | +| test.rs:468:17:468:22 | buffer [Ready, Ok] | test.rs:469:20:469:39 | ...::Ready(...) [Ready, Ok] | provenance | | +| test.rs:468:17:468:22 | buffer [Ready, Ok] | test.rs:470:23:470:28 | buffer [Ready, Ok] | provenance | | +| test.rs:468:26:468:31 | pinned | test.rs:468:26:468:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:15 | +| test.rs:468:26:468:54 | pinned.poll_fill_buf(...) [Ready, Ok] | test.rs:468:17:468:22 | buffer [Ready, Ok] | provenance | | +| test.rs:469:20:469:39 | ...::Ready(...) [Ready, Ok] | test.rs:469:32:469:38 | Ok(...) [Ok] | provenance | | +| test.rs:469:32:469:38 | Ok(...) [Ok] | test.rs:469:35:469:37 | buf | provenance | | +| test.rs:469:35:469:37 | buf | test.rs:471:22:471:24 | buf | provenance | | +| test.rs:470:23:470:28 | buffer [Ready, Ok] | test.rs:470:22:470:28 | &buffer | provenance | | +| test.rs:475:17:475:23 | buffer2 [Ready, Ok] | test.rs:476:20:476:26 | buffer2 [Ready, Ok] | provenance | | +| test.rs:475:27:475:48 | ...::new(...) | test.rs:475:27:475:71 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:15 | +| test.rs:475:27:475:71 | ... .poll_fill_buf(...) [Ready, Ok] | test.rs:475:17:475:23 | buffer2 [Ready, Ok] | provenance | | +| test.rs:475:36:475:47 | &mut reader2 [&ref] | test.rs:475:27:475:48 | ...::new(...) | provenance | MaD:12 | +| test.rs:475:41:475:47 | reader2 | test.rs:475:36:475:47 | &mut reader2 [&ref] | provenance | | +| test.rs:476:20:476:26 | buffer2 [Ready, Ok] | test.rs:477:17:477:36 | ...::Ready(...) [Ready, Ok] | provenance | | +| test.rs:476:20:476:26 | buffer2 [Ready, Ok] | test.rs:478:27:478:33 | buffer2 [Ready, Ok] | provenance | | +| test.rs:477:17:477:36 | ...::Ready(...) [Ready, Ok] | test.rs:477:29:477:35 | Ok(...) [Ok] | provenance | | +| test.rs:477:29:477:35 | Ok(...) [Ok] | test.rs:477:32:477:34 | buf | provenance | | +| test.rs:477:32:477:34 | buf | test.rs:479:26:479:28 | buf | provenance | | +| test.rs:478:27:478:33 | buffer2 [Ready, Ok] | test.rs:478:26:478:33 | &buffer2 | provenance | | +| test.rs:489:17:489:22 | buffer | test.rs:490:18:490:23 | buffer | provenance | | +| test.rs:489:26:489:32 | reader2 | test.rs:489:26:489:43 | reader2.fill_buf() [future, Ok] | provenance | MaD:18 | +| test.rs:489:26:489:43 | reader2.fill_buf() [future, Ok] | test.rs:489:26:489:49 | await ... [Ok] | provenance | | +| test.rs:489:26:489:49 | await ... [Ok] | test.rs:489:26:489:50 | TryExpr | provenance | | +| test.rs:489:26:489:50 | TryExpr | test.rs:489:17:489:22 | buffer | provenance | | +| test.rs:496:17:496:26 | mut pinned | test.rs:497:19:497:24 | pinned | provenance | | +| test.rs:496:17:496:26 | mut pinned | test.rs:499:30:499:35 | pinned | provenance | | +| test.rs:496:17:496:26 | mut pinned [Pin, &ref] | test.rs:497:19:497:24 | pinned [Pin, &ref] | provenance | | +| test.rs:496:30:496:51 | ...::new(...) | test.rs:496:17:496:26 | mut pinned | provenance | | +| test.rs:496:30:496:51 | ...::new(...) [Pin, &ref] | test.rs:496:17:496:26 | mut pinned [Pin, &ref] | provenance | | +| test.rs:496:39:496:50 | &mut reader2 [&ref] | test.rs:496:30:496:51 | ...::new(...) | provenance | MaD:12 | +| test.rs:496:39:496:50 | &mut reader2 [&ref] | test.rs:496:30:496:51 | ...::new(...) [Pin, &ref] | provenance | MaD:13 | +| test.rs:496:44:496:50 | reader2 | test.rs:496:39:496:50 | &mut reader2 [&ref] | provenance | | +| test.rs:497:19:497:24 | pinned | test.rs:497:18:497:24 | &pinned | provenance | | +| test.rs:497:19:497:24 | pinned [Pin, &ref] | test.rs:497:18:497:24 | &pinned | provenance | | +| test.rs:499:30:499:35 | pinned | test.rs:499:56:499:66 | [post] &mut buffer [&ref] | provenance | MaD:16 | +| test.rs:499:56:499:66 | [post] &mut buffer [&ref] | test.rs:499:61:499:66 | [post] buffer | provenance | | +| test.rs:499:61:499:66 | [post] buffer | test.rs:500:19:500:24 | buffer | provenance | | +| test.rs:499:61:499:66 | [post] buffer | test.rs:502:23:502:28 | buffer | provenance | | +| test.rs:499:61:499:66 | [post] buffer | test.rs:502:23:502:33 | buffer[...] | provenance | | +| test.rs:500:19:500:24 | buffer | test.rs:500:18:500:24 | &buffer | provenance | | +| test.rs:502:23:502:28 | buffer | test.rs:502:23:502:33 | buffer[...] | provenance | MaD:10 | +| test.rs:502:23:502:33 | buffer[...] | test.rs:502:22:502:33 | &... | provenance | | +| test.rs:509:63:509:74 | &mut reader2 [&ref] | test.rs:509:77:509:88 | [post] &mut buffer1 [&ref] | provenance | MaD:21 | +| test.rs:509:68:509:74 | reader2 | test.rs:509:63:509:74 | &mut reader2 [&ref] | provenance | | +| test.rs:509:77:509:88 | [post] &mut buffer1 [&ref] | test.rs:509:82:509:88 | [post] buffer1 | provenance | | +| test.rs:509:82:509:88 | [post] buffer1 | test.rs:510:19:510:25 | buffer1 | provenance | | +| test.rs:509:82:509:88 | [post] buffer1 | test.rs:510:19:510:40 | buffer1[...] | provenance | | +| test.rs:510:19:510:25 | buffer1 | test.rs:510:19:510:40 | buffer1[...] | provenance | MaD:10 | +| test.rs:510:19:510:40 | buffer1[...] | test.rs:510:18:510:40 | &... | provenance | | +| test.rs:513:31:513:37 | reader2 | test.rs:513:44:513:55 | [post] &mut buffer2 [&ref] | provenance | MaD:21 | +| test.rs:513:44:513:55 | [post] &mut buffer2 [&ref] | test.rs:513:49:513:55 | [post] buffer2 | provenance | | +| test.rs:513:49:513:55 | [post] buffer2 | test.rs:514:19:514:25 | buffer2 | provenance | | +| test.rs:513:49:513:55 | [post] buffer2 | test.rs:514:19:514:40 | buffer2[...] | provenance | | +| test.rs:514:19:514:25 | buffer2 | test.rs:514:19:514:40 | buffer2[...] | provenance | MaD:10 | +| test.rs:514:19:514:40 | buffer2[...] | test.rs:514:18:514:40 | &... | provenance | | +| test.rs:519:17:519:26 | mut pinned | test.rs:520:19:520:24 | pinned | provenance | | +| test.rs:519:17:519:26 | mut pinned | test.rs:522:26:522:31 | pinned | provenance | | +| test.rs:519:17:519:26 | mut pinned [Pin, &ref] | test.rs:520:19:520:24 | pinned [Pin, &ref] | provenance | | +| test.rs:519:30:519:51 | ...::new(...) | test.rs:519:17:519:26 | mut pinned | provenance | | +| test.rs:519:30:519:51 | ...::new(...) [Pin, &ref] | test.rs:519:17:519:26 | mut pinned [Pin, &ref] | provenance | | +| test.rs:519:39:519:50 | &mut reader2 [&ref] | test.rs:519:30:519:51 | ...::new(...) | provenance | MaD:12 | +| test.rs:519:39:519:50 | &mut reader2 [&ref] | test.rs:519:30:519:51 | ...::new(...) [Pin, &ref] | provenance | MaD:13 | +| test.rs:519:44:519:50 | reader2 | test.rs:519:39:519:50 | &mut reader2 [&ref] | provenance | | +| test.rs:520:19:520:24 | pinned | test.rs:520:18:520:24 | &pinned | provenance | | +| test.rs:520:19:520:24 | pinned [Pin, &ref] | test.rs:520:18:520:24 | &pinned | provenance | | +| test.rs:522:17:522:22 | buffer [Ready, Ok] | test.rs:523:19:523:24 | buffer [Ready, Ok] | provenance | | +| test.rs:522:17:522:22 | buffer [Ready, Ok] | test.rs:524:20:524:39 | ...::Ready(...) [Ready, Ok] | provenance | | +| test.rs:522:26:522:31 | pinned | test.rs:522:26:522:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:15 | +| test.rs:522:26:522:54 | pinned.poll_fill_buf(...) [Ready, Ok] | test.rs:522:17:522:22 | buffer [Ready, Ok] | provenance | | +| test.rs:523:19:523:24 | buffer [Ready, Ok] | test.rs:523:18:523:24 | &buffer | provenance | | +| test.rs:524:20:524:39 | ...::Ready(...) [Ready, Ok] | test.rs:524:32:524:38 | Ok(...) [Ok] | provenance | | +| test.rs:524:32:524:38 | Ok(...) [Ok] | test.rs:524:35:524:37 | buf | provenance | | +| test.rs:524:35:524:37 | buf | test.rs:525:22:525:24 | buf | provenance | | +| test.rs:531:17:531:22 | buffer | test.rs:532:18:532:23 | buffer | provenance | | +| test.rs:531:26:531:32 | reader2 | test.rs:531:26:531:43 | reader2.fill_buf() [future, Ok] | provenance | MaD:18 | +| test.rs:531:26:531:43 | reader2.fill_buf() [future, Ok] | test.rs:531:26:531:49 | await ... [Ok] | provenance | | +| test.rs:531:26:531:49 | await ... [Ok] | test.rs:531:26:531:50 | TryExpr | provenance | | +| test.rs:531:26:531:50 | TryExpr | test.rs:531:17:531:22 | buffer | provenance | | +| test.rs:538:31:538:37 | reader2 | test.rs:538:57:538:65 | [post] &mut line [&ref] | provenance | MaD:20 | +| test.rs:538:57:538:65 | [post] &mut line [&ref] | test.rs:538:62:538:65 | [post] line | provenance | | +| test.rs:538:62:538:65 | [post] line | test.rs:539:19:539:22 | line | provenance | | +| test.rs:539:19:539:22 | line | test.rs:539:18:539:22 | &line | provenance | | +| test.rs:545:31:545:37 | reader2 | test.rs:545:49:545:57 | [post] &mut line [&ref] | provenance | MaD:19 | +| test.rs:545:49:545:57 | [post] &mut line [&ref] | test.rs:545:54:545:57 | [post] line | provenance | | +| test.rs:545:54:545:57 | [post] line | test.rs:546:19:546:22 | line | provenance | | +| test.rs:546:19:546:22 | line | test.rs:546:18:546:22 | &line | provenance | | +| test.rs:552:31:552:37 | reader2 | test.rs:552:51:552:61 | [post] &mut buffer [&ref] | provenance | MaD:22 | +| test.rs:552:51:552:61 | [post] &mut buffer [&ref] | test.rs:552:56:552:61 | [post] buffer | provenance | | +| test.rs:552:56:552:61 | [post] buffer | test.rs:553:19:553:24 | buffer | provenance | | +| test.rs:553:19:553:24 | buffer | test.rs:553:18:553:24 | &buffer | provenance | | nodes | test.rs:11:9:11:22 | remote_string1 | semmle.label | remote_string1 | | test.rs:11:26:11:62 | ...::get(...) | semmle.label | ...::get(...) | @@ -543,160 +588,202 @@ nodes | test.rs:350:49:350:54 | [post] buffer | semmle.label | [post] buffer | | test.rs:351:14:351:20 | &buffer | semmle.label | &buffer | | test.rs:351:15:351:20 | buffer | semmle.label | buffer | -| test.rs:373:13:373:15 | tcp | semmle.label | tcp | -| test.rs:373:19:373:41 | ...::connect(...) | semmle.label | ...::connect(...) | -| test.rs:373:19:373:41 | ...::connect(...) [future, Ok] | semmle.label | ...::connect(...) [future, Ok] | -| test.rs:373:19:373:47 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:373:19:373:48 | TryExpr | semmle.label | TryExpr | -| test.rs:374:14:374:17 | &tcp | semmle.label | &tcp | -| test.rs:374:15:374:17 | tcp | semmle.label | tcp | -| test.rs:380:13:380:22 | mut reader | semmle.label | mut reader | -| test.rs:380:26:380:60 | connector.connect(...) [future, Ok] | semmle.label | connector.connect(...) [future, Ok] | -| test.rs:380:26:380:66 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:380:26:380:67 | TryExpr | semmle.label | TryExpr | -| test.rs:380:57:380:59 | tcp | semmle.label | tcp | -| test.rs:381:14:381:20 | &reader | semmle.label | &reader | -| test.rs:381:15:381:20 | reader | semmle.label | reader | -| test.rs:386:17:386:26 | mut pinned | semmle.label | mut pinned | -| test.rs:386:17:386:26 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] | -| test.rs:386:30:386:50 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:386:30:386:50 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] | -| test.rs:386:39:386:49 | &mut reader [&ref] | semmle.label | &mut reader [&ref] | -| test.rs:386:44:386:49 | reader | semmle.label | reader | -| test.rs:387:18:387:24 | &pinned | semmle.label | &pinned | -| test.rs:387:19:387:24 | pinned | semmle.label | pinned | -| test.rs:387:19:387:24 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] | -| test.rs:389:30:389:35 | pinned | semmle.label | pinned | -| test.rs:389:56:389:66 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:389:61:389:66 | [post] buffer | semmle.label | [post] buffer | -| test.rs:391:22:391:28 | &buffer | semmle.label | &buffer | -| test.rs:391:23:391:28 | buffer | semmle.label | buffer | -| test.rs:392:22:392:33 | &... | semmle.label | &... | -| test.rs:392:23:392:28 | buffer | semmle.label | buffer | -| test.rs:392:23:392:33 | buffer[...] | semmle.label | buffer[...] | -| test.rs:399:63:399:73 | &mut reader [&ref] | semmle.label | &mut reader [&ref] | -| test.rs:399:68:399:73 | reader | semmle.label | reader | -| test.rs:399:76:399:87 | [post] &mut buffer1 [&ref] | semmle.label | [post] &mut buffer1 [&ref] | -| test.rs:399:81:399:87 | [post] buffer1 | semmle.label | [post] buffer1 | -| test.rs:400:18:400:40 | &... | semmle.label | &... | -| test.rs:400:19:400:25 | buffer1 | semmle.label | buffer1 | -| test.rs:400:19:400:40 | buffer1[...] | semmle.label | buffer1[...] | -| test.rs:403:31:403:36 | reader | semmle.label | reader | -| test.rs:403:43:403:54 | [post] &mut buffer2 [&ref] | semmle.label | [post] &mut buffer2 [&ref] | -| test.rs:403:48:403:54 | [post] buffer2 | semmle.label | [post] buffer2 | -| test.rs:405:18:405:40 | &... | semmle.label | &... | -| test.rs:405:19:405:25 | buffer2 | semmle.label | buffer2 | -| test.rs:405:19:405:40 | buffer2[...] | semmle.label | buffer2[...] | -| test.rs:408:13:408:23 | mut reader2 | semmle.label | mut reader2 | -| test.rs:408:27:408:61 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:408:55:408:60 | reader | semmle.label | reader | -| test.rs:409:14:409:21 | &reader2 | semmle.label | &reader2 | -| test.rs:409:15:409:21 | reader2 | semmle.label | reader2 | -| test.rs:413:17:413:26 | mut pinned | semmle.label | mut pinned | -| test.rs:413:17:413:26 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] | -| test.rs:413:30:413:51 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:413:30:413:51 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] | -| test.rs:413:39:413:50 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | -| test.rs:413:44:413:50 | reader2 | semmle.label | reader2 | -| test.rs:414:18:414:24 | &pinned | semmle.label | &pinned | -| test.rs:414:19:414:24 | pinned | semmle.label | pinned | -| test.rs:414:19:414:24 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] | -| test.rs:416:17:416:22 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] | -| test.rs:416:26:416:31 | pinned | semmle.label | pinned | -| test.rs:416:26:416:54 | pinned.poll_fill_buf(...) [Ready, Ok] | semmle.label | pinned.poll_fill_buf(...) [Ready, Ok] | -| test.rs:417:20:417:39 | ...::Ready(...) [Ready, Ok] | semmle.label | ...::Ready(...) [Ready, Ok] | -| test.rs:417:32:417:38 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | -| test.rs:417:35:417:37 | buf | semmle.label | buf | -| test.rs:418:22:418:28 | &buffer | semmle.label | &buffer | -| test.rs:418:23:418:28 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] | -| test.rs:419:22:419:24 | buf | semmle.label | buf | -| test.rs:423:17:423:23 | buffer2 [Ready, Ok] | semmle.label | buffer2 [Ready, Ok] | -| test.rs:423:27:423:48 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:423:27:423:71 | ... .poll_fill_buf(...) [Ready, Ok] | semmle.label | ... .poll_fill_buf(...) [Ready, Ok] | -| test.rs:423:36:423:47 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | -| test.rs:423:41:423:47 | reader2 | semmle.label | reader2 | -| test.rs:424:20:424:26 | buffer2 [Ready, Ok] | semmle.label | buffer2 [Ready, Ok] | -| test.rs:425:17:425:36 | ...::Ready(...) [Ready, Ok] | semmle.label | ...::Ready(...) [Ready, Ok] | -| test.rs:425:29:425:35 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | -| test.rs:425:32:425:34 | buf | semmle.label | buf | -| test.rs:426:26:426:33 | &buffer2 | semmle.label | &buffer2 | -| test.rs:426:27:426:33 | buffer2 [Ready, Ok] | semmle.label | buffer2 [Ready, Ok] | -| test.rs:427:26:427:28 | buf | semmle.label | buf | -| test.rs:437:17:437:22 | buffer | semmle.label | buffer | -| test.rs:437:26:437:32 | reader2 | semmle.label | reader2 | -| test.rs:437:26:437:43 | reader2.fill_buf() [future, Ok] | semmle.label | reader2.fill_buf() [future, Ok] | -| test.rs:437:26:437:49 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:437:26:437:50 | TryExpr | semmle.label | TryExpr | -| test.rs:438:18:438:23 | buffer | semmle.label | buffer | -| test.rs:444:17:444:26 | mut pinned | semmle.label | mut pinned | -| test.rs:444:17:444:26 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] | -| test.rs:444:30:444:51 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:444:30:444:51 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] | -| test.rs:444:39:444:50 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | -| test.rs:444:44:444:50 | reader2 | semmle.label | reader2 | -| test.rs:445:18:445:24 | &pinned | semmle.label | &pinned | -| test.rs:445:19:445:24 | pinned | semmle.label | pinned | -| test.rs:445:19:445:24 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] | -| test.rs:447:30:447:35 | pinned | semmle.label | pinned | -| test.rs:447:56:447:66 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:447:61:447:66 | [post] buffer | semmle.label | [post] buffer | -| test.rs:448:18:448:24 | &buffer | semmle.label | &buffer | -| test.rs:448:19:448:24 | buffer | semmle.label | buffer | -| test.rs:450:22:450:33 | &... | semmle.label | &... | -| test.rs:450:23:450:28 | buffer | semmle.label | buffer | -| test.rs:450:23:450:33 | buffer[...] | semmle.label | buffer[...] | -| test.rs:457:63:457:74 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | -| test.rs:457:68:457:74 | reader2 | semmle.label | reader2 | -| test.rs:457:77:457:88 | [post] &mut buffer1 [&ref] | semmle.label | [post] &mut buffer1 [&ref] | -| test.rs:457:82:457:88 | [post] buffer1 | semmle.label | [post] buffer1 | -| test.rs:458:18:458:40 | &... | semmle.label | &... | -| test.rs:458:19:458:25 | buffer1 | semmle.label | buffer1 | -| test.rs:458:19:458:40 | buffer1[...] | semmle.label | buffer1[...] | -| test.rs:461:31:461:37 | reader2 | semmle.label | reader2 | -| test.rs:461:44:461:55 | [post] &mut buffer2 [&ref] | semmle.label | [post] &mut buffer2 [&ref] | -| test.rs:461:49:461:55 | [post] buffer2 | semmle.label | [post] buffer2 | -| test.rs:462:18:462:40 | &... | semmle.label | &... | -| test.rs:462:19:462:25 | buffer2 | semmle.label | buffer2 | -| test.rs:462:19:462:40 | buffer2[...] | semmle.label | buffer2[...] | -| test.rs:467:17:467:26 | mut pinned | semmle.label | mut pinned | -| test.rs:467:17:467:26 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] | -| test.rs:467:30:467:51 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:467:30:467:51 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] | -| test.rs:467:39:467:50 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | -| test.rs:467:44:467:50 | reader2 | semmle.label | reader2 | -| test.rs:468:18:468:24 | &pinned | semmle.label | &pinned | -| test.rs:468:19:468:24 | pinned | semmle.label | pinned | -| test.rs:468:19:468:24 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] | -| test.rs:470:17:470:22 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] | -| test.rs:470:26:470:31 | pinned | semmle.label | pinned | -| test.rs:470:26:470:54 | pinned.poll_fill_buf(...) [Ready, Ok] | semmle.label | pinned.poll_fill_buf(...) [Ready, Ok] | -| test.rs:471:18:471:24 | &buffer | semmle.label | &buffer | -| test.rs:471:19:471:24 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] | -| test.rs:472:20:472:39 | ...::Ready(...) [Ready, Ok] | semmle.label | ...::Ready(...) [Ready, Ok] | -| test.rs:472:32:472:38 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | -| test.rs:472:35:472:37 | buf | semmle.label | buf | -| test.rs:473:22:473:24 | buf | semmle.label | buf | -| test.rs:479:17:479:22 | buffer | semmle.label | buffer | -| test.rs:479:26:479:32 | reader2 | semmle.label | reader2 | -| test.rs:479:26:479:43 | reader2.fill_buf() [future, Ok] | semmle.label | reader2.fill_buf() [future, Ok] | -| test.rs:479:26:479:49 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:479:26:479:50 | TryExpr | semmle.label | TryExpr | -| test.rs:480:18:480:23 | buffer | semmle.label | buffer | -| test.rs:486:31:486:37 | reader2 | semmle.label | reader2 | -| test.rs:486:57:486:65 | [post] &mut line [&ref] | semmle.label | [post] &mut line [&ref] | -| test.rs:486:62:486:65 | [post] line | semmle.label | [post] line | -| test.rs:487:18:487:22 | &line | semmle.label | &line | -| test.rs:487:19:487:22 | line | semmle.label | line | -| test.rs:493:31:493:37 | reader2 | semmle.label | reader2 | -| test.rs:493:49:493:57 | [post] &mut line [&ref] | semmle.label | [post] &mut line [&ref] | -| test.rs:493:54:493:57 | [post] line | semmle.label | [post] line | -| test.rs:494:18:494:22 | &line | semmle.label | &line | -| test.rs:494:19:494:22 | line | semmle.label | line | -| test.rs:500:31:500:37 | reader2 | semmle.label | reader2 | -| test.rs:500:51:500:61 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:500:56:500:61 | [post] buffer | semmle.label | [post] buffer | -| test.rs:501:18:501:24 | &buffer | semmle.label | &buffer | -| test.rs:501:19:501:24 | buffer | semmle.label | buffer | +| test.rs:359:9:359:14 | stream | semmle.label | stream | +| test.rs:359:18:359:54 | ...::connect(...) | semmle.label | ...::connect(...) | +| test.rs:359:18:359:54 | ...::connect(...) [Ok] | semmle.label | ...::connect(...) [Ok] | +| test.rs:359:18:359:55 | TryExpr | semmle.label | TryExpr | +| test.rs:361:9:361:18 | mut stream | semmle.label | mut stream | +| test.rs:361:22:361:65 | connector.connect(...) [Ok] | semmle.label | connector.connect(...) [Ok] | +| test.rs:361:22:361:66 | TryExpr | semmle.label | TryExpr | +| test.rs:361:59:361:64 | stream | semmle.label | stream | +| test.rs:362:10:362:16 | &stream | semmle.label | &stream | +| test.rs:362:11:362:16 | stream | semmle.label | stream | +| test.rs:367:22:367:27 | stream | semmle.label | stream | +| test.rs:367:34:367:44 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:367:39:367:44 | [post] buffer | semmle.label | [post] buffer | +| test.rs:370:10:370:30 | &... | semmle.label | &... | +| test.rs:370:11:370:16 | buffer | semmle.label | buffer | +| test.rs:370:11:370:30 | buffer[...] | semmle.label | buffer[...] | +| test.rs:373:5:373:10 | stream | semmle.label | stream | +| test.rs:373:27:373:39 | [post] &mut response [&ref] | semmle.label | [post] &mut response [&ref] | +| test.rs:373:32:373:39 | [post] response | semmle.label | [post] response | +| test.rs:375:10:375:17 | response | semmle.label | response | +| test.rs:386:9:386:15 | stream0 | semmle.label | stream0 | +| test.rs:386:19:386:61 | ...::connect(...) | semmle.label | ...::connect(...) | +| test.rs:386:19:386:61 | ...::connect(...) [future, Ok] | semmle.label | ...::connect(...) [future, Ok] | +| test.rs:386:19:386:67 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:386:19:386:68 | TryExpr | semmle.label | TryExpr | +| test.rs:388:9:388:18 | mut stream | semmle.label | mut stream | +| test.rs:388:22:388:74 | ...::connect(...) [future, Ok] | semmle.label | ...::connect(...) [future, Ok] | +| test.rs:388:22:388:80 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:388:22:388:81 | TryExpr | semmle.label | TryExpr | +| test.rs:388:67:388:73 | stream0 | semmle.label | stream0 | +| test.rs:389:10:389:16 | &stream | semmle.label | &stream | +| test.rs:389:11:389:16 | stream | semmle.label | stream | +| test.rs:396:22:396:27 | stream | semmle.label | stream | +| test.rs:396:34:396:44 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:396:39:396:44 | [post] buffer | semmle.label | [post] buffer | +| test.rs:399:10:399:30 | &... | semmle.label | &... | +| test.rs:399:11:399:16 | buffer | semmle.label | buffer | +| test.rs:399:11:399:30 | buffer[...] | semmle.label | buffer[...] | +| test.rs:402:5:402:10 | stream | semmle.label | stream | +| test.rs:402:27:402:39 | [post] &mut response [&ref] | semmle.label | [post] &mut response [&ref] | +| test.rs:402:32:402:39 | [post] response | semmle.label | [post] response | +| test.rs:404:10:404:17 | response | semmle.label | response | +| test.rs:425:13:425:15 | tcp | semmle.label | tcp | +| test.rs:425:19:425:41 | ...::connect(...) | semmle.label | ...::connect(...) | +| test.rs:425:19:425:41 | ...::connect(...) [future, Ok] | semmle.label | ...::connect(...) [future, Ok] | +| test.rs:425:19:425:47 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:425:19:425:48 | TryExpr | semmle.label | TryExpr | +| test.rs:426:14:426:17 | &tcp | semmle.label | &tcp | +| test.rs:426:15:426:17 | tcp | semmle.label | tcp | +| test.rs:432:13:432:22 | mut reader | semmle.label | mut reader | +| test.rs:432:26:432:60 | connector.connect(...) [future, Ok] | semmle.label | connector.connect(...) [future, Ok] | +| test.rs:432:26:432:66 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:432:26:432:67 | TryExpr | semmle.label | TryExpr | +| test.rs:432:57:432:59 | tcp | semmle.label | tcp | +| test.rs:433:14:433:20 | &reader | semmle.label | &reader | +| test.rs:433:15:433:20 | reader | semmle.label | reader | +| test.rs:438:17:438:26 | mut pinned | semmle.label | mut pinned | +| test.rs:438:17:438:26 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] | +| test.rs:438:30:438:50 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:438:30:438:50 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] | +| test.rs:438:39:438:49 | &mut reader [&ref] | semmle.label | &mut reader [&ref] | +| test.rs:438:44:438:49 | reader | semmle.label | reader | +| test.rs:439:18:439:24 | &pinned | semmle.label | &pinned | +| test.rs:439:19:439:24 | pinned | semmle.label | pinned | +| test.rs:439:19:439:24 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] | +| test.rs:441:30:441:35 | pinned | semmle.label | pinned | +| test.rs:441:56:441:66 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:441:61:441:66 | [post] buffer | semmle.label | [post] buffer | +| test.rs:443:22:443:28 | &buffer | semmle.label | &buffer | +| test.rs:443:23:443:28 | buffer | semmle.label | buffer | +| test.rs:444:22:444:33 | &... | semmle.label | &... | +| test.rs:444:23:444:28 | buffer | semmle.label | buffer | +| test.rs:444:23:444:33 | buffer[...] | semmle.label | buffer[...] | +| test.rs:451:63:451:73 | &mut reader [&ref] | semmle.label | &mut reader [&ref] | +| test.rs:451:68:451:73 | reader | semmle.label | reader | +| test.rs:451:76:451:87 | [post] &mut buffer1 [&ref] | semmle.label | [post] &mut buffer1 [&ref] | +| test.rs:451:81:451:87 | [post] buffer1 | semmle.label | [post] buffer1 | +| test.rs:452:18:452:40 | &... | semmle.label | &... | +| test.rs:452:19:452:25 | buffer1 | semmle.label | buffer1 | +| test.rs:452:19:452:40 | buffer1[...] | semmle.label | buffer1[...] | +| test.rs:455:31:455:36 | reader | semmle.label | reader | +| test.rs:455:43:455:54 | [post] &mut buffer2 [&ref] | semmle.label | [post] &mut buffer2 [&ref] | +| test.rs:455:48:455:54 | [post] buffer2 | semmle.label | [post] buffer2 | +| test.rs:457:18:457:40 | &... | semmle.label | &... | +| test.rs:457:19:457:25 | buffer2 | semmle.label | buffer2 | +| test.rs:457:19:457:40 | buffer2[...] | semmle.label | buffer2[...] | +| test.rs:460:13:460:23 | mut reader2 | semmle.label | mut reader2 | +| test.rs:460:27:460:61 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:460:55:460:60 | reader | semmle.label | reader | +| test.rs:461:14:461:21 | &reader2 | semmle.label | &reader2 | +| test.rs:461:15:461:21 | reader2 | semmle.label | reader2 | +| test.rs:465:17:465:26 | mut pinned | semmle.label | mut pinned | +| test.rs:465:17:465:26 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] | +| test.rs:465:30:465:51 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:465:30:465:51 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] | +| test.rs:465:39:465:50 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | +| test.rs:465:44:465:50 | reader2 | semmle.label | reader2 | +| test.rs:466:18:466:24 | &pinned | semmle.label | &pinned | +| test.rs:466:19:466:24 | pinned | semmle.label | pinned | +| test.rs:466:19:466:24 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] | +| test.rs:468:17:468:22 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] | +| test.rs:468:26:468:31 | pinned | semmle.label | pinned | +| test.rs:468:26:468:54 | pinned.poll_fill_buf(...) [Ready, Ok] | semmle.label | pinned.poll_fill_buf(...) [Ready, Ok] | +| test.rs:469:20:469:39 | ...::Ready(...) [Ready, Ok] | semmle.label | ...::Ready(...) [Ready, Ok] | +| test.rs:469:32:469:38 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | +| test.rs:469:35:469:37 | buf | semmle.label | buf | +| test.rs:470:22:470:28 | &buffer | semmle.label | &buffer | +| test.rs:470:23:470:28 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] | +| test.rs:471:22:471:24 | buf | semmle.label | buf | +| test.rs:475:17:475:23 | buffer2 [Ready, Ok] | semmle.label | buffer2 [Ready, Ok] | +| test.rs:475:27:475:48 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:475:27:475:71 | ... .poll_fill_buf(...) [Ready, Ok] | semmle.label | ... .poll_fill_buf(...) [Ready, Ok] | +| test.rs:475:36:475:47 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | +| test.rs:475:41:475:47 | reader2 | semmle.label | reader2 | +| test.rs:476:20:476:26 | buffer2 [Ready, Ok] | semmle.label | buffer2 [Ready, Ok] | +| test.rs:477:17:477:36 | ...::Ready(...) [Ready, Ok] | semmle.label | ...::Ready(...) [Ready, Ok] | +| test.rs:477:29:477:35 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | +| test.rs:477:32:477:34 | buf | semmle.label | buf | +| test.rs:478:26:478:33 | &buffer2 | semmle.label | &buffer2 | +| test.rs:478:27:478:33 | buffer2 [Ready, Ok] | semmle.label | buffer2 [Ready, Ok] | +| test.rs:479:26:479:28 | buf | semmle.label | buf | +| test.rs:489:17:489:22 | buffer | semmle.label | buffer | +| test.rs:489:26:489:32 | reader2 | semmle.label | reader2 | +| test.rs:489:26:489:43 | reader2.fill_buf() [future, Ok] | semmle.label | reader2.fill_buf() [future, Ok] | +| test.rs:489:26:489:49 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:489:26:489:50 | TryExpr | semmle.label | TryExpr | +| test.rs:490:18:490:23 | buffer | semmle.label | buffer | +| test.rs:496:17:496:26 | mut pinned | semmle.label | mut pinned | +| test.rs:496:17:496:26 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] | +| test.rs:496:30:496:51 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:496:30:496:51 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] | +| test.rs:496:39:496:50 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | +| test.rs:496:44:496:50 | reader2 | semmle.label | reader2 | +| test.rs:497:18:497:24 | &pinned | semmle.label | &pinned | +| test.rs:497:19:497:24 | pinned | semmle.label | pinned | +| test.rs:497:19:497:24 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] | +| test.rs:499:30:499:35 | pinned | semmle.label | pinned | +| test.rs:499:56:499:66 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:499:61:499:66 | [post] buffer | semmle.label | [post] buffer | +| test.rs:500:18:500:24 | &buffer | semmle.label | &buffer | +| test.rs:500:19:500:24 | buffer | semmle.label | buffer | +| test.rs:502:22:502:33 | &... | semmle.label | &... | +| test.rs:502:23:502:28 | buffer | semmle.label | buffer | +| test.rs:502:23:502:33 | buffer[...] | semmle.label | buffer[...] | +| test.rs:509:63:509:74 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | +| test.rs:509:68:509:74 | reader2 | semmle.label | reader2 | +| test.rs:509:77:509:88 | [post] &mut buffer1 [&ref] | semmle.label | [post] &mut buffer1 [&ref] | +| test.rs:509:82:509:88 | [post] buffer1 | semmle.label | [post] buffer1 | +| test.rs:510:18:510:40 | &... | semmle.label | &... | +| test.rs:510:19:510:25 | buffer1 | semmle.label | buffer1 | +| test.rs:510:19:510:40 | buffer1[...] | semmle.label | buffer1[...] | +| test.rs:513:31:513:37 | reader2 | semmle.label | reader2 | +| test.rs:513:44:513:55 | [post] &mut buffer2 [&ref] | semmle.label | [post] &mut buffer2 [&ref] | +| test.rs:513:49:513:55 | [post] buffer2 | semmle.label | [post] buffer2 | +| test.rs:514:18:514:40 | &... | semmle.label | &... | +| test.rs:514:19:514:25 | buffer2 | semmle.label | buffer2 | +| test.rs:514:19:514:40 | buffer2[...] | semmle.label | buffer2[...] | +| test.rs:519:17:519:26 | mut pinned | semmle.label | mut pinned | +| test.rs:519:17:519:26 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] | +| test.rs:519:30:519:51 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:519:30:519:51 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] | +| test.rs:519:39:519:50 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | +| test.rs:519:44:519:50 | reader2 | semmle.label | reader2 | +| test.rs:520:18:520:24 | &pinned | semmle.label | &pinned | +| test.rs:520:19:520:24 | pinned | semmle.label | pinned | +| test.rs:520:19:520:24 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] | +| test.rs:522:17:522:22 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] | +| test.rs:522:26:522:31 | pinned | semmle.label | pinned | +| test.rs:522:26:522:54 | pinned.poll_fill_buf(...) [Ready, Ok] | semmle.label | pinned.poll_fill_buf(...) [Ready, Ok] | +| test.rs:523:18:523:24 | &buffer | semmle.label | &buffer | +| test.rs:523:19:523:24 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] | +| test.rs:524:20:524:39 | ...::Ready(...) [Ready, Ok] | semmle.label | ...::Ready(...) [Ready, Ok] | +| test.rs:524:32:524:38 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | +| test.rs:524:35:524:37 | buf | semmle.label | buf | +| test.rs:525:22:525:24 | buf | semmle.label | buf | +| test.rs:531:17:531:22 | buffer | semmle.label | buffer | +| test.rs:531:26:531:32 | reader2 | semmle.label | reader2 | +| test.rs:531:26:531:43 | reader2.fill_buf() [future, Ok] | semmle.label | reader2.fill_buf() [future, Ok] | +| test.rs:531:26:531:49 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:531:26:531:50 | TryExpr | semmle.label | TryExpr | +| test.rs:532:18:532:23 | buffer | semmle.label | buffer | +| test.rs:538:31:538:37 | reader2 | semmle.label | reader2 | +| test.rs:538:57:538:65 | [post] &mut line [&ref] | semmle.label | [post] &mut line [&ref] | +| test.rs:538:62:538:65 | [post] line | semmle.label | [post] line | +| test.rs:539:18:539:22 | &line | semmle.label | &line | +| test.rs:539:19:539:22 | line | semmle.label | line | +| test.rs:545:31:545:37 | reader2 | semmle.label | reader2 | +| test.rs:545:49:545:57 | [post] &mut line [&ref] | semmle.label | [post] &mut line [&ref] | +| test.rs:545:54:545:57 | [post] line | semmle.label | [post] line | +| test.rs:546:18:546:22 | &line | semmle.label | &line | +| test.rs:546:19:546:22 | line | semmle.label | line | +| test.rs:552:31:552:37 | reader2 | semmle.label | reader2 | +| test.rs:552:51:552:61 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:552:56:552:61 | [post] buffer | semmle.label | [post] buffer | +| test.rs:553:18:553:24 | &buffer | semmle.label | &buffer | +| test.rs:553:19:553:24 | buffer | semmle.label | buffer | subpaths testFailures #select @@ -728,29 +815,35 @@ testFailures | test.rs:339:14:339:20 | &buffer | test.rs:332:22:332:75 | ...::new(...) | test.rs:339:14:339:20 | &buffer | $@ | test.rs:332:22:332:75 | ...::new(...) | ...::new(...) | | test.rs:345:14:345:20 | &buffer | test.rs:332:22:332:75 | ...::new(...) | test.rs:345:14:345:20 | &buffer | $@ | test.rs:332:22:332:75 | ...::new(...) | ...::new(...) | | test.rs:351:14:351:20 | &buffer | test.rs:332:22:332:75 | ...::new(...) | test.rs:351:14:351:20 | &buffer | $@ | test.rs:332:22:332:75 | ...::new(...) | ...::new(...) | -| test.rs:374:14:374:17 | &tcp | test.rs:373:19:373:41 | ...::connect(...) | test.rs:374:14:374:17 | &tcp | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:381:14:381:20 | &reader | test.rs:373:19:373:41 | ...::connect(...) | test.rs:381:14:381:20 | &reader | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:387:18:387:24 | &pinned | test.rs:373:19:373:41 | ...::connect(...) | test.rs:387:18:387:24 | &pinned | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:391:22:391:28 | &buffer | test.rs:373:19:373:41 | ...::connect(...) | test.rs:391:22:391:28 | &buffer | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:392:22:392:33 | &... | test.rs:373:19:373:41 | ...::connect(...) | test.rs:392:22:392:33 | &... | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:400:18:400:40 | &... | test.rs:373:19:373:41 | ...::connect(...) | test.rs:400:18:400:40 | &... | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:405:18:405:40 | &... | test.rs:373:19:373:41 | ...::connect(...) | test.rs:405:18:405:40 | &... | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:409:14:409:21 | &reader2 | test.rs:373:19:373:41 | ...::connect(...) | test.rs:409:14:409:21 | &reader2 | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:414:18:414:24 | &pinned | test.rs:373:19:373:41 | ...::connect(...) | test.rs:414:18:414:24 | &pinned | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:418:22:418:28 | &buffer | test.rs:373:19:373:41 | ...::connect(...) | test.rs:418:22:418:28 | &buffer | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:419:22:419:24 | buf | test.rs:373:19:373:41 | ...::connect(...) | test.rs:419:22:419:24 | buf | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:426:26:426:33 | &buffer2 | test.rs:373:19:373:41 | ...::connect(...) | test.rs:426:26:426:33 | &buffer2 | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:427:26:427:28 | buf | test.rs:373:19:373:41 | ...::connect(...) | test.rs:427:26:427:28 | buf | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:438:18:438:23 | buffer | test.rs:373:19:373:41 | ...::connect(...) | test.rs:438:18:438:23 | buffer | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:445:18:445:24 | &pinned | test.rs:373:19:373:41 | ...::connect(...) | test.rs:445:18:445:24 | &pinned | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:448:18:448:24 | &buffer | test.rs:373:19:373:41 | ...::connect(...) | test.rs:448:18:448:24 | &buffer | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:450:22:450:33 | &... | test.rs:373:19:373:41 | ...::connect(...) | test.rs:450:22:450:33 | &... | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:458:18:458:40 | &... | test.rs:373:19:373:41 | ...::connect(...) | test.rs:458:18:458:40 | &... | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:462:18:462:40 | &... | test.rs:373:19:373:41 | ...::connect(...) | test.rs:462:18:462:40 | &... | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:468:18:468:24 | &pinned | test.rs:373:19:373:41 | ...::connect(...) | test.rs:468:18:468:24 | &pinned | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:471:18:471:24 | &buffer | test.rs:373:19:373:41 | ...::connect(...) | test.rs:471:18:471:24 | &buffer | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:473:22:473:24 | buf | test.rs:373:19:373:41 | ...::connect(...) | test.rs:473:22:473:24 | buf | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:480:18:480:23 | buffer | test.rs:373:19:373:41 | ...::connect(...) | test.rs:480:18:480:23 | buffer | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:487:18:487:22 | &line | test.rs:373:19:373:41 | ...::connect(...) | test.rs:487:18:487:22 | &line | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:494:18:494:22 | &line | test.rs:373:19:373:41 | ...::connect(...) | test.rs:494:18:494:22 | &line | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | -| test.rs:501:18:501:24 | &buffer | test.rs:373:19:373:41 | ...::connect(...) | test.rs:501:18:501:24 | &buffer | $@ | test.rs:373:19:373:41 | ...::connect(...) | ...::connect(...) | +| test.rs:362:10:362:16 | &stream | test.rs:359:18:359:54 | ...::connect(...) | test.rs:362:10:362:16 | &stream | $@ | test.rs:359:18:359:54 | ...::connect(...) | ...::connect(...) | +| test.rs:370:10:370:30 | &... | test.rs:359:18:359:54 | ...::connect(...) | test.rs:370:10:370:30 | &... | $@ | test.rs:359:18:359:54 | ...::connect(...) | ...::connect(...) | +| test.rs:375:10:375:17 | response | test.rs:359:18:359:54 | ...::connect(...) | test.rs:375:10:375:17 | response | $@ | test.rs:359:18:359:54 | ...::connect(...) | ...::connect(...) | +| test.rs:389:10:389:16 | &stream | test.rs:386:19:386:61 | ...::connect(...) | test.rs:389:10:389:16 | &stream | $@ | test.rs:386:19:386:61 | ...::connect(...) | ...::connect(...) | +| test.rs:399:10:399:30 | &... | test.rs:386:19:386:61 | ...::connect(...) | test.rs:399:10:399:30 | &... | $@ | test.rs:386:19:386:61 | ...::connect(...) | ...::connect(...) | +| test.rs:404:10:404:17 | response | test.rs:386:19:386:61 | ...::connect(...) | test.rs:404:10:404:17 | response | $@ | test.rs:386:19:386:61 | ...::connect(...) | ...::connect(...) | +| test.rs:426:14:426:17 | &tcp | test.rs:425:19:425:41 | ...::connect(...) | test.rs:426:14:426:17 | &tcp | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:433:14:433:20 | &reader | test.rs:425:19:425:41 | ...::connect(...) | test.rs:433:14:433:20 | &reader | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:439:18:439:24 | &pinned | test.rs:425:19:425:41 | ...::connect(...) | test.rs:439:18:439:24 | &pinned | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:443:22:443:28 | &buffer | test.rs:425:19:425:41 | ...::connect(...) | test.rs:443:22:443:28 | &buffer | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:444:22:444:33 | &... | test.rs:425:19:425:41 | ...::connect(...) | test.rs:444:22:444:33 | &... | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:452:18:452:40 | &... | test.rs:425:19:425:41 | ...::connect(...) | test.rs:452:18:452:40 | &... | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:457:18:457:40 | &... | test.rs:425:19:425:41 | ...::connect(...) | test.rs:457:18:457:40 | &... | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:461:14:461:21 | &reader2 | test.rs:425:19:425:41 | ...::connect(...) | test.rs:461:14:461:21 | &reader2 | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:466:18:466:24 | &pinned | test.rs:425:19:425:41 | ...::connect(...) | test.rs:466:18:466:24 | &pinned | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:470:22:470:28 | &buffer | test.rs:425:19:425:41 | ...::connect(...) | test.rs:470:22:470:28 | &buffer | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:471:22:471:24 | buf | test.rs:425:19:425:41 | ...::connect(...) | test.rs:471:22:471:24 | buf | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:478:26:478:33 | &buffer2 | test.rs:425:19:425:41 | ...::connect(...) | test.rs:478:26:478:33 | &buffer2 | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:479:26:479:28 | buf | test.rs:425:19:425:41 | ...::connect(...) | test.rs:479:26:479:28 | buf | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:490:18:490:23 | buffer | test.rs:425:19:425:41 | ...::connect(...) | test.rs:490:18:490:23 | buffer | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:497:18:497:24 | &pinned | test.rs:425:19:425:41 | ...::connect(...) | test.rs:497:18:497:24 | &pinned | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:500:18:500:24 | &buffer | test.rs:425:19:425:41 | ...::connect(...) | test.rs:500:18:500:24 | &buffer | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:502:22:502:33 | &... | test.rs:425:19:425:41 | ...::connect(...) | test.rs:502:22:502:33 | &... | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:510:18:510:40 | &... | test.rs:425:19:425:41 | ...::connect(...) | test.rs:510:18:510:40 | &... | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:514:18:514:40 | &... | test.rs:425:19:425:41 | ...::connect(...) | test.rs:514:18:514:40 | &... | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:520:18:520:24 | &pinned | test.rs:425:19:425:41 | ...::connect(...) | test.rs:520:18:520:24 | &pinned | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:523:18:523:24 | &buffer | test.rs:425:19:425:41 | ...::connect(...) | test.rs:523:18:523:24 | &buffer | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:525:22:525:24 | buf | test.rs:425:19:425:41 | ...::connect(...) | test.rs:525:22:525:24 | buf | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:532:18:532:23 | buffer | test.rs:425:19:425:41 | ...::connect(...) | test.rs:532:18:532:23 | buffer | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:539:18:539:22 | &line | test.rs:425:19:425:41 | ...::connect(...) | test.rs:539:18:539:22 | &line | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:546:18:546:22 | &line | test.rs:425:19:425:41 | ...::connect(...) | test.rs:546:18:546:22 | &line | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | +| test.rs:553:18:553:24 | &buffer | test.rs:425:19:425:41 | ...::connect(...) | test.rs:553:18:553:24 | &buffer | $@ | test.rs:425:19:425:41 | ...::connect(...) | ...::connect(...) | diff --git a/rust/ql/test/library-tests/dataflow/sources/net/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/net/TaintSources.expected index bf0333168e4b..d7a32bd41063 100644 --- a/rust/ql/test/library-tests/dataflow/sources/net/TaintSources.expected +++ b/rust/ql/test/library-tests/dataflow/sources/net/TaintSources.expected @@ -13,5 +13,7 @@ | test.rs:224:28:224:66 | ...::connect(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | | test.rs:306:22:306:58 | ...::connect(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | | test.rs:332:22:332:75 | ...::new(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:373:19:373:41 | ...::connect(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:519:16:519:31 | ...::args(...) | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:359:18:359:54 | ...::connect(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:386:19:386:61 | ...::connect(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:425:19:425:41 | ...::connect(...) | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:571:16:571:31 | ...::args(...) | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | diff --git a/rust/ql/test/library-tests/dataflow/sources/net/options.yml b/rust/ql/test/library-tests/dataflow/sources/net/options.yml index 24cda1561c0f..00ae29ae611c 100644 --- a/rust/ql/test/library-tests/dataflow/sources/net/options.yml +++ b/rust/ql/test/library-tests/dataflow/sources/net/options.yml @@ -10,3 +10,5 @@ qltest_dependencies: - rustls = { version = "0.23.27" } - futures-rustls = { version = "0.26.0" } - async-std = { version = "1.13.1" } + - native-tls = { version = "0.2.14" } + - async-native-tls = { version = "0.5.0" } diff --git a/rust/ql/test/library-tests/dataflow/sources/net/test.rs b/rust/ql/test/library-tests/dataflow/sources/net/test.rs index bb6f54cb913d..3bf0fb5d7736 100644 --- a/rust/ql/test/library-tests/dataflow/sources/net/test.rs +++ b/rust/ql/test/library-tests/dataflow/sources/net/test.rs @@ -354,6 +354,58 @@ fn test_rustls() -> std::io::Result<()> { Ok(()) } +fn test_native_tls() -> Result<(), Box> { + let address = "www.example.com:443"; + let stream = std::net::TcpStream::connect(address)?; // $ Alert[rust/summary/taint-sources] + let connector = native_tls::TlsConnector::new()?; + let mut stream = connector.connect("www.example.com", stream)?; + sink(&stream); // $ hasTaintFlow=address + + stream.write_all(b"GET / HTTP/1.1\r\nHost: www.example.com\r\nConnection: close\r\n\r\n")?; + + let mut buffer = [0u8; 100]; + let bytes_read = stream.read(&mut buffer)?; + println!("bytes_read = {}", bytes_read); + println!("buffer = {:?}", &buffer[..bytes_read]); + sink(&buffer[..bytes_read]); // $ hasTaintFlow=address + + let mut response = String::new(); + stream.read_to_string(&mut response)?; + println!("rest of response = '{}'", response); + sink(response); // $ hasTaintFlow=address + + Ok(()) +} + +async fn test_async_native_tls() -> Result<(), Box> { + use futures::io::{ + AsyncReadExt as FuturesAsyncReadExt, AsyncWriteExt as FuturesAsyncWriteExt, + }; + + let address = "www.example.com:443"; + let stream0 = async_std::net::TcpStream::connect(address).await?; // $ Alert[rust/summary/taint-sources] + let connector = async_native_tls::TlsConnector::new(); + let mut stream = async_native_tls::connect("www.example.com", stream0).await?; + sink(&stream); // $ hasTaintFlow=address + + stream + .write_all(b"GET / HTTP/1.1\r\nHost: www.example.com\r\nConnection: close\r\n\r\n") + .await?; + + let mut buffer = [0u8; 100]; + let bytes_read = stream.read(&mut buffer).await?; + println!("bytes_read = {}", bytes_read); + println!("buffer = {:?}", &buffer[..bytes_read]); + sink(&buffer[..bytes_read]); // $ hasTaintFlow=address + + let mut response = String::new(); + stream.read_to_string(&mut response).await?; + println!("rest of response = '{}'", response); + sink(response); // $ hasTaintFlow=address + + Ok(()) +} + mod futures_rustls { use async_std::net::TcpStream; use async_std::sync::Arc; @@ -548,6 +600,18 @@ async fn main() -> Result<(), Box> { Err(e) => println!("error: {}", e), } + println!("test_native_tls..."); + match test_native_tls() { + Ok(_) => println!("complete"), + Err(e) => println!("error: {}", e), + } + + println!("test_async_native_tls..."); + match futures::executor::block_on(test_async_native_tls()) { + Ok(_) => println!("complete"), + Err(e) => println!("error: {}", e), + } + println!("test_rustls..."); match test_rustls() { Ok(_) => println!("complete"),