diff --git a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index 1f20950b11aa..000000000000 --- a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,14 +0,0 @@ -multipleCallTargets -| test.rs:113:62:113:77 | ...::from(...) | -| test.rs:120:58:120:73 | ...::from(...) | -| test.rs:229:22:229:72 | ... .read_to_string(...) | -| test.rs:1096:50:1096:66 | ...::from(...) | -| test.rs:1096:50:1096:66 | ...::from(...) | -| test_futures_io.rs:35:26:35:63 | pinned.poll_read(...) | -| test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) | -| test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) | -| test_futures_io.rs:93:26:93:63 | pinned.poll_read(...) | -| test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) | -multiplePathResolutions -| test.rs:897:28:897:65 | Result::<...> | -| test.rs:984:40:984:49 | Result::<...> | diff --git a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/TypeInferenceConsistency.expected b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/TypeInferenceConsistency.expected deleted file mode 100644 index 6b051f73c7aa..000000000000 --- a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/TypeInferenceConsistency.expected +++ /dev/null @@ -1,4 +0,0 @@ -nonUniqueCertainType -| web_frameworks.rs:139:30:139:39 | ...::get(...) | | -| web_frameworks.rs:140:34:140:43 | ...::get(...) | | -| web_frameworks.rs:141:30:141:39 | ...::get(...) | | diff --git a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected deleted file mode 100644 index 5371bd834f18..000000000000 --- a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected +++ /dev/null @@ -1,2165 +0,0 @@ -models -| 1 | Source: <_ as mysql::conn::queryable::Queryable>::query_first; ReturnValue.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; database | -| 2 | Source: <_ as mysql::conn::queryable::Queryable>::query_fold; Argument[2].Parameter[1]; database | -| 3 | Source: <_ as mysql::conn::queryable::Queryable>::query_map; Argument[1].Parameter[0]; database | -| 4 | Source: <_ as mysql_async::queryable::Queryable>::query_fold; Argument[2].Parameter[1]; database | -| 5 | Source: <_ as mysql_async::queryable::Queryable>::query_map; Argument[1].Parameter[0]; database | -| 6 | Source: <_ as warp::filter::Filter>::and_then; Argument[0].Parameter[0..7]; remote | -| 7 | Source: <_ as warp::filter::Filter>::map; Argument[0].Parameter[0..7]; remote | -| 8 | Source: <_ as warp::filter::Filter>::then; Argument[0].Parameter[0..7]; remote | -| 9 | Source: ::to; Argument[0].Parameter[0..7]; remote | -| 10 | Source: ::to; Argument[0].Parameter[0..7]; remote | -| 11 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 12 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 13 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | -| 14 | Source: ::send_request; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | -| 15 | Source: ::exec_iter; ReturnValue.Field[core::result::Result::Ok(0)].Element; database | -| 16 | Source: ::get; ReturnValue.Field[core::option::Option::Some(0)]; database | -| 17 | Source: ::get_opt; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; database | -| 18 | Source: ::take; ReturnValue.Field[core::option::Option::Some(0)]; database | -| 19 | Source: ::take_opt; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; database | -| 20 | Source: ::file_name; ReturnValue; file | -| 21 | Source: ::path; ReturnValue; file | -| 22 | Source: ::open; ReturnValue.Field[core::result::Result::Ok(0)]; file | -| 23 | Source: ::open; ReturnValue.Field[core::result::Result::Ok(0)]; file | -| 24 | Source: ::connect; ReturnValue.Field[core::result::Result::Ok(0)]; remote | -| 25 | Source: ::connect_timeout; ReturnValue.Field[core::result::Result::Ok(0)]; remote | -| 26 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 27 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 28 | Source: ::file_name; ReturnValue; file | -| 29 | Source: ::path; ReturnValue; file | -| 30 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | -| 31 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote | -| 32 | Source: reqwest::get; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | -| 33 | Source: std::env::args; ReturnValue.Element; commandargs | -| 34 | Source: std::env::args_os; ReturnValue.Element; commandargs | -| 35 | Source: std::env::current_dir; ReturnValue.Field[core::result::Result::Ok(0)]; commandargs | -| 36 | Source: std::env::current_exe; ReturnValue.Field[core::result::Result::Ok(0)]; commandargs | -| 37 | Source: std::env::home_dir; ReturnValue.Field[core::option::Option::Some(0)]; commandargs | -| 38 | Source: std::env::var; ReturnValue.Field[core::result::Result::Ok(0)]; environment | -| 39 | Source: std::env::var_os; ReturnValue.Field[core::option::Option::Some(0)]; environment | -| 40 | Source: std::fs::read; ReturnValue.Field[core::result::Result::Ok(0)]; file | -| 41 | Source: std::fs::read; ReturnValue; file | -| 42 | Source: std::fs::read_link; ReturnValue.Field[core::result::Result::Ok(0)]; file | -| 43 | Source: std::fs::read_to_string; ReturnValue.Field[core::result::Result::Ok(0)]; file | -| 44 | Source: std::fs::read_to_string; ReturnValue; file | -| 45 | Source: std::io::stdio::stdin; ReturnValue; stdin | -| 46 | Source: tokio::fs::read::read; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 47 | Source: tokio::fs::read_link::read_link; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 48 | Source: tokio::fs::read_to_string::read_to_string; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | -| 49 | Source: tokio::io::stdin::stdin; ReturnValue; stdin | -| 50 | Summary: <_ as async_std::io::read::ReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | -| 51 | Summary: <_ as async_std::io::read::ReadExt>::read; Argument[self]; Argument[0].Reference; taint | -| 52 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value | -| 53 | Summary: <_ as core::iter::traits::iterator::Iterator>::collect; Argument[self].Element; ReturnValue.Element; value | -| 54 | Summary: <_ as core::iter::traits::iterator::Iterator>::next; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; value | -| 55 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | -| 56 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint | -| 57 | Summary: <_ as core::ops::arith::Add>::add; Argument[0]; ReturnValue; taint | -| 58 | Summary: <_ as futures_io::if_std::AsyncBufRead>::poll_fill_buf; Argument[self].Reference; ReturnValue.Field[core::task::poll::Poll::Ready(0)].Field[core::result::Result::Ok(0)]; taint | -| 59 | Summary: <_ as futures_util::io::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 60 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self].Reference; Argument[0].Reference; taint | -| 61 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint | -| 62 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self].Reference; Argument[1].Reference; taint | -| 63 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint | -| 64 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | -| 65 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | -| 66 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | -| 67 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 68 | Summary: <_ as mysql::conn::queryable::Queryable>::query_fold; Argument[2].ReturnValue; ReturnValue.Field[core::result::Result::Ok(0)]; value | -| 69 | Summary: <_ as mysql_async::queryable::Queryable>::query_fold; Argument[2].ReturnValue; ReturnValue.Future.Field[core::result::Result::Ok(0)]; value | -| 70 | Summary: <_ as std::io::BufRead>::fill_buf; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 71 | Summary: <_ as std::io::BufRead>::lines; Argument[self]; ReturnValue; taint | -| 72 | Summary: <_ as std::io::BufRead>::read_line; Argument[self]; Argument[0].Reference; taint | -| 73 | Summary: <_ as std::io::BufRead>::read_until; Argument[self]; Argument[1].Reference; taint | -| 74 | Summary: <_ as std::io::BufRead>::split; Argument[self]; ReturnValue; taint | -| 75 | Summary: <_ as std::io::Read>::bytes; Argument[self]; ReturnValue; taint | -| 76 | Summary: <_ as std::io::Read>::chain; Argument[0]; ReturnValue; taint | -| 77 | Summary: <_ as std::io::Read>::chain; Argument[self]; ReturnValue; taint | -| 78 | Summary: <_ as std::io::Read>::read; Argument[self]; Argument[0].Reference; taint | -| 79 | Summary: <_ as std::io::Read>::read_exact; Argument[self]; Argument[0].Reference; taint | -| 80 | Summary: <_ as std::io::Read>::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 81 | Summary: <_ as std::io::Read>::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 82 | Summary: <_ as std::io::Read>::take; Argument[self]; ReturnValue; taint | -| 83 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 84 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::lines; Argument[self]; ReturnValue; taint | -| 85 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint | -| 86 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint | -| 87 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::split; Argument[self]; ReturnValue; taint | -| 88 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | -| 89 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_buf; Argument[self]; Argument[0].Reference; taint | -| 90 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_exact; Argument[self]; Argument[0].Reference; taint | -| 91 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f32; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 92 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 93 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64_le; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 94 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | -| 95 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string; Argument[self]; Argument[0].Reference; taint | -| 96 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 97 | Summary: ::into_inner; Argument[self]; ReturnValue.Field[0]; taint | -| 98 | Summary: ::into_inner; Argument[self]; ReturnValue.Field[1]; taint | -| 99 | Summary: ::into_inner; Argument[self]; ReturnValue.Field[2]; taint | -| 100 | Summary: ::into_inner; Argument[self]; ReturnValue.Field[3]; taint | -| 101 | Summary: ::into_inner; Argument[self]; ReturnValue; taint | -| 102 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | -| 103 | Summary: ::as_str; Argument[self]; ReturnValue; value | -| 104 | Summary: ::add; Argument[0]; ReturnValue; taint | -| 105 | Summary: ::expect; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 106 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 107 | Summary: ::new; Argument[0].Reference; ReturnValue; value | -| 108 | Summary: ::new; Argument[0]; ReturnValue; value | -| 109 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 110 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 111 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 112 | Summary: ::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 113 | Summary: ::poll_read; Argument[self].Reference; Argument[1].Reference; taint | -| 114 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 115 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 116 | Summary: ::chunk; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | -| 117 | Summary: ::text; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | -| 118 | Summary: ::bytes; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 119 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 120 | Summary: ::text_with_charset; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 121 | Summary: ::read; Argument[self]; Argument[0]; taint | -| 122 | Summary: ::read_to_end; Argument[self]; Argument[0]; taint | -| 123 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | -| 124 | Summary: ::buffer; Argument[self]; ReturnValue; taint | -| 125 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 126 | Summary: ::read; Argument[self]; Argument[0]; taint | -| 127 | Summary: ::read_exact; Argument[self]; Argument[0]; taint | -| 128 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | -| 129 | Summary: ::lock; Argument[self]; ReturnValue; taint | -| 130 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | -| 131 | Summary: ::as_path; Argument[self]; ReturnValue; value | -| 132 | Summary: ::buffer; Argument[self]; ReturnValue; taint | -| 133 | Summary: ::new; Argument[0]; ReturnValue; taint | -| 134 | Summary: ::next_line; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | -| 135 | Summary: ::next_segment; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | -| 136 | Summary: ::peek; Argument[self]; Argument[0].Reference; taint | -| 137 | Summary: ::try_read; Argument[self]; Argument[0].Reference; taint | -| 138 | Summary: ::try_read_buf; Argument[self]; Argument[0].Reference; taint | -edges -| test.rs:8:10:8:22 | ...::var | test.rs:8:10:8:30 | ...::var(...) | provenance | Src:MaD:38 | -| test.rs:9:10:9:25 | ...::var_os | test.rs:9:10:9:33 | ...::var_os(...) | provenance | Src:MaD:39 | -| test.rs:11:9:11:12 | var1 | test.rs:14:10:14:13 | var1 | provenance | | -| test.rs:11:16:11:28 | ...::var | test.rs:11:16:11:36 | ...::var(...) [Ok] | provenance | Src:MaD:38 | -| test.rs:11:16:11:36 | ...::var(...) [Ok] | test.rs:11:16:11:59 | ... .expect(...) | provenance | MaD:109 | -| test.rs:11:16:11:59 | ... .expect(...) | test.rs:11:9:11:12 | var1 | provenance | | -| test.rs:12:9:12:12 | var2 | test.rs:15:10:15:13 | var2 | provenance | | -| test.rs:12:16:12:31 | ...::var_os | test.rs:12:16:12:39 | ...::var_os(...) [Some] | provenance | Src:MaD:39 | -| test.rs:12:16:12:39 | ...::var_os(...) [Some] | test.rs:12:16:12:48 | ... .unwrap() | provenance | MaD:106 | -| test.rs:12:16:12:48 | ... .unwrap() | test.rs:12:9:12:12 | var2 | provenance | | -| test.rs:29:9:29:12 | args [element] | test.rs:30:20:30:23 | args [element] | provenance | | -| test.rs:29:9:29:12 | args [element] | test.rs:31:17:31:20 | args [element] | provenance | | -| test.rs:29:29:29:42 | ...::args | test.rs:29:29:29:44 | ...::args(...) [element] | provenance | Src:MaD:33 | -| test.rs:29:29:29:44 | ...::args(...) [element] | test.rs:29:29:29:54 | ... .collect() [element] | provenance | MaD:53 | -| test.rs:29:29:29:54 | ... .collect() [element] | test.rs:29:9:29:12 | args [element] | provenance | | -| test.rs:30:9:30:15 | my_path [&ref] | test.rs:36:10:36:16 | my_path | provenance | | -| test.rs:30:19:30:26 | &... [&ref] | test.rs:30:9:30:15 | my_path [&ref] | provenance | | -| test.rs:30:20:30:23 | args [element] | test.rs:30:20:30:26 | args[0] | provenance | | -| test.rs:30:20:30:26 | args[0] | test.rs:30:19:30:26 | &... [&ref] | provenance | | -| test.rs:31:9:31:12 | arg1 [&ref] | test.rs:37:10:37:13 | arg1 | provenance | | -| test.rs:31:16:31:23 | &... [&ref] | test.rs:31:9:31:12 | arg1 [&ref] | provenance | | -| test.rs:31:17:31:20 | args [element] | test.rs:31:17:31:23 | args[1] | provenance | | -| test.rs:31:17:31:23 | args[1] | test.rs:31:16:31:23 | &... [&ref] | provenance | | -| test.rs:32:9:32:12 | arg2 | test.rs:38:10:38:13 | arg2 | provenance | | -| test.rs:32:16:32:29 | ...::args | test.rs:32:16:32:31 | ...::args(...) [element] | provenance | Src:MaD:33 | -| test.rs:32:16:32:31 | ...::args(...) [element] | test.rs:32:16:32:38 | ... .nth(...) [Some] | provenance | MaD:55 | -| test.rs:32:16:32:38 | ... .nth(...) [Some] | test.rs:32:16:32:47 | ... .unwrap() | provenance | MaD:106 | -| test.rs:32:16:32:47 | ... .unwrap() | test.rs:32:9:32:12 | arg2 | provenance | | -| test.rs:33:9:33:12 | arg3 | test.rs:39:10:39:13 | arg3 | provenance | | -| test.rs:33:16:33:32 | ...::args_os | test.rs:33:16:33:34 | ...::args_os(...) [element] | provenance | Src:MaD:34 | -| test.rs:33:16:33:34 | ...::args_os(...) [element] | test.rs:33:16:33:41 | ... .nth(...) [Some] | provenance | MaD:55 | -| test.rs:33:16:33:41 | ... .nth(...) [Some] | test.rs:33:16:33:50 | ... .unwrap() | provenance | MaD:106 | -| test.rs:33:16:33:50 | ... .unwrap() | test.rs:33:9:33:12 | arg3 | provenance | | -| test.rs:34:9:34:12 | arg4 | test.rs:40:10:40:13 | arg4 | provenance | | -| test.rs:34:16:34:29 | ...::args | test.rs:34:16:34:31 | ...::args(...) [element] | provenance | Src:MaD:33 | -| test.rs:34:16:34:31 | ...::args(...) [element] | test.rs:34:16:34:38 | ... .nth(...) [Some] | provenance | MaD:55 | -| test.rs:34:16:34:38 | ... .nth(...) [Some] | test.rs:34:16:34:47 | ... .unwrap() | provenance | MaD:106 | -| test.rs:34:16:34:47 | ... .unwrap() | test.rs:34:16:34:64 | ... .parse() [Ok] | provenance | MaD:111 | -| test.rs:34:16:34:64 | ... .parse() [Ok] | test.rs:34:16:34:73 | ... .unwrap() | provenance | MaD:110 | -| test.rs:34:16:34:73 | ... .unwrap() | test.rs:34:9:34:12 | arg4 | provenance | | -| test.rs:42:9:42:11 | arg | test.rs:43:14:43:16 | arg | provenance | | -| test.rs:42:16:42:29 | ...::args | test.rs:42:16:42:31 | ...::args(...) [element] | provenance | Src:MaD:33 | -| test.rs:42:16:42:31 | ...::args(...) [element] | test.rs:42:9:42:11 | arg | provenance | | -| test.rs:46:9:46:11 | arg | test.rs:47:14:47:16 | arg | provenance | | -| test.rs:46:16:46:32 | ...::args_os | test.rs:46:16:46:34 | ...::args_os(...) [element] | provenance | Src:MaD:34 | -| test.rs:46:16:46:34 | ...::args_os(...) [element] | test.rs:46:9:46:11 | arg | provenance | | -| test.rs:52:9:52:11 | dir | test.rs:56:10:56:12 | dir | provenance | | -| test.rs:52:15:52:35 | ...::current_dir | test.rs:52:15:52:37 | ...::current_dir(...) [Ok] | provenance | Src:MaD:35 | -| test.rs:52:15:52:37 | ...::current_dir(...) [Ok] | test.rs:52:15:52:54 | ... .expect(...) | provenance | MaD:109 | -| test.rs:52:15:52:54 | ... .expect(...) | test.rs:52:9:52:11 | dir | provenance | | -| test.rs:53:9:53:11 | exe | test.rs:57:10:57:12 | exe | provenance | | -| test.rs:53:15:53:35 | ...::current_exe | test.rs:53:15:53:37 | ...::current_exe(...) [Ok] | provenance | Src:MaD:36 | -| test.rs:53:15:53:37 | ...::current_exe(...) [Ok] | test.rs:53:15:53:54 | ... .expect(...) | provenance | MaD:109 | -| test.rs:53:15:53:54 | ... .expect(...) | test.rs:53:9:53:11 | exe | provenance | | -| test.rs:54:9:54:12 | home | test.rs:58:10:58:13 | home | provenance | | -| test.rs:54:16:54:33 | ...::home_dir | test.rs:54:16:54:35 | ...::home_dir(...) [Some] | provenance | Src:MaD:37 | -| test.rs:54:16:54:35 | ...::home_dir(...) [Some] | test.rs:54:16:54:52 | ... .expect(...) | provenance | MaD:105 | -| test.rs:54:16:54:52 | ... .expect(...) | test.rs:54:9:54:12 | home | provenance | | -| test.rs:62:9:62:22 | remote_string1 | test.rs:63:10:63:23 | remote_string1 | provenance | | -| test.rs:62:26:62:47 | ...::get | test.rs:62:26:62:62 | ...::get(...) [Ok] | provenance | Src:MaD:31 | -| test.rs:62:26:62:62 | ...::get(...) [Ok] | test.rs:62:26:62:63 | TryExpr | provenance | | -| test.rs:62:26:62:63 | TryExpr | test.rs:62:26:62:70 | ... .text() [Ok] | provenance | MaD:119 | -| test.rs:62:26:62:70 | ... .text() [Ok] | test.rs:62:26:62:71 | TryExpr | provenance | | -| test.rs:62:26:62:71 | TryExpr | test.rs:62:9:62:22 | remote_string1 | provenance | | -| test.rs:65:9:65:22 | remote_string2 | test.rs:66:10:66:23 | remote_string2 | provenance | | -| test.rs:65:26:65:47 | ...::get | test.rs:65:26:65:62 | ...::get(...) [Ok] | provenance | Src:MaD:31 | -| test.rs:65:26:65:62 | ...::get(...) [Ok] | test.rs:65:26:65:71 | ... .unwrap() | provenance | MaD:110 | -| test.rs:65:26:65:71 | ... .unwrap() | test.rs:65:26:65:78 | ... .text() [Ok] | provenance | MaD:119 | -| test.rs:65:26:65:78 | ... .text() [Ok] | test.rs:65:26:65:87 | ... .unwrap() | provenance | MaD:110 | -| test.rs:65:26:65:87 | ... .unwrap() | test.rs:65:9:65:22 | remote_string2 | provenance | | -| test.rs:68:9:68:22 | remote_string3 | test.rs:69:10:69:23 | remote_string3 | provenance | | -| test.rs:68:26:68:47 | ...::get | test.rs:68:26:68:62 | ...::get(...) [Ok] | provenance | Src:MaD:31 | -| test.rs:68:26:68:62 | ...::get(...) [Ok] | test.rs:68:26:68:71 | ... .unwrap() | provenance | MaD:110 | -| test.rs:68:26:68:71 | ... .unwrap() | test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | provenance | MaD:120 | -| test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | test.rs:68:26:68:107 | ... .unwrap() | provenance | MaD:110 | -| test.rs:68:26:68:107 | ... .unwrap() | test.rs:68:9:68:22 | remote_string3 | provenance | | -| test.rs:71:9:71:22 | remote_string4 | test.rs:72:10:72:23 | remote_string4 | provenance | | -| test.rs:71:26:71:47 | ...::get | test.rs:71:26:71:62 | ...::get(...) [Ok] | provenance | Src:MaD:31 | -| test.rs:71:26:71:62 | ...::get(...) [Ok] | test.rs:71:26:71:71 | ... .unwrap() | provenance | MaD:110 | -| test.rs:71:26:71:71 | ... .unwrap() | test.rs:71:26:71:79 | ... .bytes() [Ok] | provenance | MaD:118 | -| test.rs:71:26:71:79 | ... .bytes() [Ok] | test.rs:71:26:71:88 | ... .unwrap() | provenance | MaD:110 | -| test.rs:71:26:71:88 | ... .unwrap() | test.rs:71:9:71:22 | remote_string4 | provenance | | -| test.rs:74:9:74:22 | remote_string5 | test.rs:75:10:75:23 | remote_string5 | provenance | | -| test.rs:74:26:74:37 | ...::get | test.rs:74:26:74:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:32 | -| test.rs:74:26:74:52 | ...::get(...) [future, Ok] | test.rs:74:26:74:58 | await ... [Ok] | provenance | | -| test.rs:74:26:74:58 | await ... [Ok] | test.rs:74:26:74:59 | TryExpr | provenance | | -| test.rs:74:26:74:59 | TryExpr | test.rs:74:26:74:66 | ... .text() [future, Ok] | provenance | MaD:117 | -| test.rs:74:26:74:66 | ... .text() [future, Ok] | test.rs:74:26:74:72 | await ... [Ok] | provenance | | -| test.rs:74:26:74:72 | await ... [Ok] | test.rs:74:26:74:73 | TryExpr | provenance | | -| test.rs:74:26:74:73 | TryExpr | test.rs:74:9:74:22 | remote_string5 | provenance | | -| test.rs:77:9:77:22 | remote_string6 | test.rs:78:10:78:23 | remote_string6 | provenance | | -| test.rs:77:26:77:37 | ...::get | test.rs:77:26:77:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:32 | -| test.rs:77:26:77:52 | ...::get(...) [future, Ok] | test.rs:77:26:77:58 | await ... [Ok] | provenance | | -| test.rs:77:26:77:58 | await ... [Ok] | test.rs:77:26:77:59 | TryExpr | provenance | | -| test.rs:77:26:77:59 | TryExpr | test.rs:77:26:77:67 | ... .bytes() [future, Ok] | provenance | MaD:115 | -| test.rs:77:26:77:67 | ... .bytes() [future, Ok] | test.rs:77:26:77:73 | await ... [Ok] | provenance | | -| test.rs:77:26:77:73 | await ... [Ok] | test.rs:77:26:77:74 | TryExpr | provenance | | -| test.rs:77:26:77:74 | TryExpr | test.rs:77:9:77:22 | remote_string6 | provenance | | -| test.rs:80:9:80:20 | mut request1 | test.rs:81:10:81:25 | request1.chunk() [future, Ok, Some] | provenance | MaD:116 | -| test.rs:80:9:80:20 | mut request1 | test.rs:82:29:82:44 | request1.chunk() [future, Ok, Some] | provenance | MaD:116 | -| test.rs:80:24:80:35 | ...::get | test.rs:80:24:80:50 | ...::get(...) [future, Ok] | provenance | Src:MaD:32 | -| test.rs:80:24:80:50 | ...::get(...) [future, Ok] | test.rs:80:24:80:56 | await ... [Ok] | provenance | | -| test.rs:80:24:80:56 | await ... [Ok] | test.rs:80:24:80:57 | TryExpr | provenance | | -| test.rs:80:24:80:57 | TryExpr | test.rs:80:9:80:20 | mut request1 | provenance | | -| test.rs:81:10:81:25 | request1.chunk() [future, Ok, Some] | test.rs:81:10:81:31 | await ... [Ok, Some] | provenance | | -| test.rs:81:10:81:31 | await ... [Ok, Some] | test.rs:81:10:81:32 | TryExpr [Some] | provenance | | -| test.rs:81:10:81:32 | TryExpr [Some] | test.rs:81:10:81:41 | ... .unwrap() | provenance | MaD:106 | -| test.rs:82:15:82:25 | Some(...) [Some] | test.rs:82:20:82:24 | chunk | provenance | | -| test.rs:82:20:82:24 | chunk | test.rs:83:14:83:18 | chunk | provenance | | -| test.rs:82:29:82:44 | request1.chunk() [future, Ok, Some] | test.rs:82:29:82:50 | await ... [Ok, Some] | provenance | | -| test.rs:82:29:82:50 | await ... [Ok, Some] | test.rs:82:29:82:51 | TryExpr [Some] | provenance | | -| test.rs:82:29:82:51 | TryExpr [Some] | test.rs:82:15:82:25 | Some(...) [Some] | provenance | | -| test.rs:114:13:114:20 | response | test.rs:115:15:115:22 | response | provenance | | -| test.rs:114:13:114:20 | response | test.rs:116:14:116:21 | response | provenance | | -| test.rs:114:24:114:51 | sender.send_request(...) [future, Ok] | test.rs:114:24:114:57 | await ... [Ok] | provenance | | -| test.rs:114:24:114:57 | await ... [Ok] | test.rs:114:24:114:58 | TryExpr | provenance | | -| test.rs:114:24:114:58 | TryExpr | test.rs:114:13:114:20 | response | provenance | | -| test.rs:114:31:114:42 | send_request | test.rs:114:24:114:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:14 | -| test.rs:115:15:115:22 | response | test.rs:115:14:115:22 | &response | provenance | | -| test.rs:121:9:121:20 | mut response | test.rs:122:11:122:18 | response | provenance | | -| test.rs:121:24:121:51 | sender.send_request(...) [future, Ok] | test.rs:121:24:121:57 | await ... [Ok] | provenance | | -| test.rs:121:24:121:57 | await ... [Ok] | test.rs:121:24:121:58 | TryExpr | provenance | | -| test.rs:121:24:121:58 | TryExpr | test.rs:121:9:121:20 | mut response | provenance | | -| test.rs:121:31:121:42 | send_request | test.rs:121:24:121:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:14 | -| test.rs:122:11:122:18 | response | test.rs:122:10:122:18 | &response | provenance | | -| test.rs:211:22:211:35 | ...::stdin | test.rs:211:22:211:37 | ...::stdin(...) | provenance | Src:MaD:45 MaD:45 | -| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer | provenance | MaD:126 | -| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | provenance | MaD:78 | -| test.rs:211:44:211:54 | [post] &mut buffer | test.rs:212:15:212:20 | buffer | provenance | | -| test.rs:211:44:211:54 | [post] &mut buffer [&ref] | test.rs:211:49:211:54 | [post] buffer | provenance | | -| test.rs:211:49:211:54 | [post] buffer | test.rs:212:15:212:20 | buffer | provenance | | -| test.rs:212:15:212:20 | buffer | test.rs:212:14:212:20 | &buffer | provenance | | -| test.rs:217:22:217:35 | ...::stdin | test.rs:217:22:217:37 | ...::stdin(...) | provenance | Src:MaD:45 MaD:45 | -| test.rs:217:22:217:37 | ...::stdin(...) | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | provenance | MaD:80 | -| test.rs:217:51:217:61 | [post] &mut buffer [&ref] | test.rs:217:56:217:61 | [post] buffer | provenance | | -| test.rs:217:56:217:61 | [post] buffer | test.rs:218:15:218:20 | buffer | provenance | | -| test.rs:218:15:218:20 | buffer | test.rs:218:14:218:20 | &buffer | provenance | | -| test.rs:223:22:223:35 | ...::stdin | test.rs:223:22:223:37 | ...::stdin(...) | provenance | Src:MaD:45 MaD:45 | -| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer | provenance | MaD:128 | -| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | provenance | MaD:81 | -| test.rs:223:54:223:64 | [post] &mut buffer | test.rs:224:15:224:20 | buffer | provenance | | -| test.rs:223:54:223:64 | [post] &mut buffer [&ref] | test.rs:223:59:223:64 | [post] buffer | provenance | | -| test.rs:223:59:223:64 | [post] buffer | test.rs:224:15:224:20 | buffer | provenance | | -| test.rs:224:15:224:20 | buffer | test.rs:224:14:224:20 | &buffer | provenance | | -| test.rs:229:22:229:35 | ...::stdin | test.rs:229:22:229:37 | ...::stdin(...) | provenance | Src:MaD:45 MaD:45 | -| test.rs:229:22:229:37 | ...::stdin(...) | test.rs:229:22:229:44 | ... .lock() | provenance | MaD:129 | -| test.rs:229:22:229:44 | ... .lock() | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | provenance | MaD:81 | -| test.rs:229:61:229:71 | [post] &mut buffer [&ref] | test.rs:229:66:229:71 | [post] buffer | provenance | | -| test.rs:229:66:229:71 | [post] buffer | test.rs:230:15:230:20 | buffer | provenance | | -| test.rs:230:15:230:20 | buffer | test.rs:230:14:230:20 | &buffer | provenance | | -| test.rs:235:9:235:22 | ...::stdin | test.rs:235:9:235:24 | ...::stdin(...) | provenance | Src:MaD:45 MaD:45 | -| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer | provenance | MaD:127 | -| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | provenance | MaD:79 | -| test.rs:235:37:235:47 | [post] &mut buffer | test.rs:236:15:236:20 | buffer | provenance | | -| test.rs:235:37:235:47 | [post] &mut buffer [&ref] | test.rs:235:42:235:47 | [post] buffer | provenance | | -| test.rs:235:42:235:47 | [post] buffer | test.rs:236:15:236:20 | buffer | provenance | | -| test.rs:236:15:236:20 | buffer | test.rs:236:14:236:20 | &buffer | provenance | | -| test.rs:239:17:239:30 | ...::stdin | test.rs:239:17:239:32 | ...::stdin(...) | provenance | Src:MaD:45 MaD:45 | -| test.rs:239:17:239:32 | ...::stdin(...) | test.rs:239:17:239:40 | ... .bytes() | provenance | MaD:75 | -| test.rs:239:17:239:40 | ... .bytes() | test.rs:240:14:240:17 | byte | provenance | | -| test.rs:246:13:246:22 | mut reader | test.rs:247:20:247:36 | reader.fill_buf() [Ok] | provenance | MaD:70 | -| test.rs:246:26:246:66 | ...::new(...) | test.rs:246:13:246:22 | mut reader | provenance | | -| test.rs:246:50:246:63 | ...::stdin | test.rs:246:50:246:65 | ...::stdin(...) | provenance | Src:MaD:45 MaD:45 | -| test.rs:246:50:246:65 | ...::stdin(...) | test.rs:246:26:246:66 | ...::new(...) | provenance | MaD:125 | -| test.rs:247:13:247:16 | data | test.rs:248:15:248:18 | data | provenance | | -| test.rs:247:20:247:36 | reader.fill_buf() [Ok] | test.rs:247:20:247:37 | TryExpr | provenance | | -| test.rs:247:20:247:37 | TryExpr | test.rs:247:13:247:16 | data | provenance | | -| test.rs:248:15:248:18 | data | test.rs:248:14:248:18 | &data | provenance | | -| test.rs:252:13:252:18 | reader | test.rs:253:20:253:34 | reader.buffer() | provenance | MaD:124 | -| test.rs:252:22:252:62 | ...::new(...) | test.rs:252:13:252:18 | reader | provenance | | -| test.rs:252:46:252:59 | ...::stdin | test.rs:252:46:252:61 | ...::stdin(...) | provenance | Src:MaD:45 MaD:45 | -| test.rs:252:46:252:61 | ...::stdin(...) | test.rs:252:22:252:62 | ...::new(...) | provenance | MaD:125 | -| test.rs:253:13:253:16 | data | test.rs:254:15:254:18 | data | provenance | | -| test.rs:253:20:253:34 | reader.buffer() | test.rs:253:13:253:16 | data | provenance | | -| test.rs:254:15:254:18 | data | test.rs:254:14:254:18 | &data | provenance | | -| test.rs:259:13:259:22 | mut reader | test.rs:260:26:260:36 | [post] &mut buffer [&ref] | provenance | MaD:72 | -| test.rs:259:26:259:66 | ...::new(...) | test.rs:259:13:259:22 | mut reader | provenance | | -| test.rs:259:50:259:63 | ...::stdin | test.rs:259:50:259:65 | ...::stdin(...) | provenance | Src:MaD:45 MaD:45 | -| test.rs:259:50:259:65 | ...::stdin(...) | test.rs:259:26:259:66 | ...::new(...) | provenance | MaD:125 | -| test.rs:260:26:260:36 | [post] &mut buffer [&ref] | test.rs:260:31:260:36 | [post] buffer | provenance | | -| test.rs:260:31:260:36 | [post] buffer | test.rs:261:15:261:20 | buffer | provenance | | -| test.rs:261:15:261:20 | buffer | test.rs:261:14:261:20 | &buffer | provenance | | -| test.rs:266:13:266:22 | mut reader | test.rs:267:33:267:43 | [post] &mut buffer [&ref] | provenance | MaD:73 | -| test.rs:266:26:266:66 | ...::new(...) | test.rs:266:13:266:22 | mut reader | provenance | | -| test.rs:266:50:266:63 | ...::stdin | test.rs:266:50:266:65 | ...::stdin(...) | provenance | Src:MaD:45 MaD:45 | -| test.rs:266:50:266:65 | ...::stdin(...) | test.rs:266:26:266:66 | ...::new(...) | provenance | MaD:125 | -| test.rs:267:33:267:43 | [post] &mut buffer [&ref] | test.rs:267:38:267:43 | [post] buffer | provenance | | -| test.rs:267:38:267:43 | [post] buffer | test.rs:268:15:268:20 | buffer | provenance | | -| test.rs:267:38:267:43 | [post] buffer | test.rs:269:14:269:22 | buffer[0] | provenance | | -| test.rs:268:15:268:20 | buffer | test.rs:268:14:268:20 | &buffer | provenance | | -| test.rs:273:13:273:28 | mut reader_split | test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | provenance | MaD:54 | -| test.rs:273:13:273:28 | mut reader_split | test.rs:275:33:275:51 | reader_split.next() [Some, Ok] | provenance | MaD:54 | -| test.rs:273:32:273:72 | ...::new(...) | test.rs:273:32:273:84 | ... .split(...) | provenance | MaD:74 | -| test.rs:273:32:273:84 | ... .split(...) | test.rs:273:13:273:28 | mut reader_split | provenance | | -| test.rs:273:56:273:69 | ...::stdin | test.rs:273:56:273:71 | ...::stdin(...) | provenance | Src:MaD:45 MaD:45 | -| test.rs:273:56:273:71 | ...::stdin(...) | test.rs:273:32:273:72 | ...::new(...) | provenance | MaD:125 | -| test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | test.rs:274:14:274:41 | ... .unwrap() [Ok] | provenance | MaD:106 | -| test.rs:274:14:274:41 | ... .unwrap() [Ok] | test.rs:274:14:274:50 | ... .unwrap() | provenance | MaD:110 | -| test.rs:275:19:275:29 | Some(...) [Some, Ok] | test.rs:275:24:275:28 | chunk [Ok] | provenance | | -| test.rs:275:24:275:28 | chunk [Ok] | test.rs:276:18:276:31 | chunk.unwrap() | provenance | MaD:110 | -| test.rs:275:33:275:51 | reader_split.next() [Some, Ok] | test.rs:275:19:275:29 | Some(...) [Some, Ok] | provenance | | -| test.rs:281:13:281:18 | reader | test.rs:282:21:282:34 | reader.lines() | provenance | MaD:71 | -| test.rs:281:22:281:62 | ...::new(...) | test.rs:281:13:281:18 | reader | provenance | | -| test.rs:281:46:281:59 | ...::stdin | test.rs:281:46:281:61 | ...::stdin(...) | provenance | Src:MaD:45 MaD:45 | -| test.rs:281:46:281:61 | ...::stdin(...) | test.rs:281:22:281:62 | ...::new(...) | provenance | MaD:125 | -| test.rs:282:21:282:34 | reader.lines() | test.rs:283:18:283:21 | line | provenance | | -| test.rs:309:13:309:21 | mut stdin | test.rs:311:33:311:43 | [post] &mut buffer [&ref] | provenance | MaD:88 | -| test.rs:309:25:309:40 | ...::stdin | test.rs:309:25:309:42 | ...::stdin(...) | provenance | Src:MaD:49 MaD:49 | -| test.rs:309:25:309:42 | ...::stdin(...) | test.rs:309:13:309:21 | mut stdin | provenance | | -| test.rs:311:33:311:43 | [post] &mut buffer [&ref] | test.rs:311:38:311:43 | [post] buffer | provenance | | -| test.rs:311:38:311:43 | [post] buffer | test.rs:312:15:312:20 | buffer | provenance | | -| test.rs:312:15:312:20 | buffer | test.rs:312:14:312:20 | &buffer | provenance | | -| test.rs:316:13:316:21 | mut stdin | test.rs:318:40:318:50 | [post] &mut buffer [&ref] | provenance | MaD:94 | -| test.rs:316:25:316:40 | ...::stdin | test.rs:316:25:316:42 | ...::stdin(...) | provenance | Src:MaD:49 MaD:49 | -| test.rs:316:25:316:42 | ...::stdin(...) | test.rs:316:13:316:21 | mut stdin | provenance | | -| test.rs:318:40:318:50 | [post] &mut buffer [&ref] | test.rs:318:45:318:50 | [post] buffer | provenance | | -| test.rs:318:45:318:50 | [post] buffer | test.rs:319:15:319:20 | buffer | provenance | | -| test.rs:319:15:319:20 | buffer | test.rs:319:14:319:20 | &buffer | provenance | | -| test.rs:323:13:323:21 | mut stdin | test.rs:325:43:325:53 | [post] &mut buffer [&ref] | provenance | MaD:95 | -| test.rs:323:25:323:40 | ...::stdin | test.rs:323:25:323:42 | ...::stdin(...) | provenance | Src:MaD:49 MaD:49 | -| test.rs:323:25:323:42 | ...::stdin(...) | test.rs:323:13:323:21 | mut stdin | provenance | | -| test.rs:325:43:325:53 | [post] &mut buffer [&ref] | test.rs:325:48:325:53 | [post] buffer | provenance | | -| test.rs:325:48:325:53 | [post] buffer | test.rs:326:15:326:20 | buffer | provenance | | -| test.rs:326:15:326:20 | buffer | test.rs:326:14:326:20 | &buffer | provenance | | -| test.rs:330:13:330:21 | mut stdin | test.rs:332:26:332:36 | [post] &mut buffer [&ref] | provenance | MaD:90 | -| test.rs:330:25:330:40 | ...::stdin | test.rs:330:25:330:42 | ...::stdin(...) | provenance | Src:MaD:49 MaD:49 | -| test.rs:330:25:330:42 | ...::stdin(...) | test.rs:330:13:330:21 | mut stdin | provenance | | -| test.rs:332:26:332:36 | [post] &mut buffer [&ref] | test.rs:332:31:332:36 | [post] buffer | provenance | | -| test.rs:332:31:332:36 | [post] buffer | test.rs:333:15:333:20 | buffer | provenance | | -| test.rs:333:15:333:20 | buffer | test.rs:333:14:333:20 | &buffer | provenance | | -| test.rs:337:13:337:21 | mut stdin | test.rs:338:18:338:32 | stdin.read_u8() [future, Ok] | provenance | MaD:96 | -| test.rs:337:13:337:21 | mut stdin | test.rs:339:18:339:33 | stdin.read_i16() [future, Ok] | provenance | MaD:92 | -| test.rs:337:13:337:21 | mut stdin | test.rs:340:18:340:33 | stdin.read_f32() [future, Ok] | provenance | MaD:91 | -| test.rs:337:13:337:21 | mut stdin | test.rs:341:18:341:36 | stdin.read_i64_le() [future, Ok] | provenance | MaD:93 | -| test.rs:337:25:337:40 | ...::stdin | test.rs:337:25:337:42 | ...::stdin(...) | provenance | Src:MaD:49 MaD:49 | -| test.rs:337:25:337:42 | ...::stdin(...) | test.rs:337:13:337:21 | mut stdin | provenance | | -| test.rs:338:13:338:14 | v1 | test.rs:342:14:342:15 | v1 | provenance | | -| test.rs:338:18:338:32 | stdin.read_u8() [future, Ok] | test.rs:338:18:338:38 | await ... [Ok] | provenance | | -| test.rs:338:18:338:38 | await ... [Ok] | test.rs:338:18:338:39 | TryExpr | provenance | | -| test.rs:338:18:338:39 | TryExpr | test.rs:338:13:338:14 | v1 | provenance | | -| test.rs:339:13:339:14 | v2 | test.rs:343:14:343:15 | v2 | provenance | | -| test.rs:339:18:339:33 | stdin.read_i16() [future, Ok] | test.rs:339:18:339:39 | await ... [Ok] | provenance | | -| test.rs:339:18:339:39 | await ... [Ok] | test.rs:339:18:339:40 | TryExpr | provenance | | -| test.rs:339:18:339:40 | TryExpr | test.rs:339:13:339:14 | v2 | provenance | | -| test.rs:340:13:340:14 | v3 | test.rs:344:14:344:15 | v3 | provenance | | -| test.rs:340:18:340:33 | stdin.read_f32() [future, Ok] | test.rs:340:18:340:39 | await ... [Ok] | provenance | | -| test.rs:340:18:340:39 | await ... [Ok] | test.rs:340:18:340:40 | TryExpr | provenance | | -| test.rs:340:18:340:40 | TryExpr | test.rs:340:13:340:14 | v3 | provenance | | -| test.rs:341:13:341:14 | v4 | test.rs:345:14:345:15 | v4 | provenance | | -| test.rs:341:18:341:36 | stdin.read_i64_le() [future, Ok] | test.rs:341:18:341:42 | await ... [Ok] | provenance | | -| test.rs:341:18:341:42 | await ... [Ok] | test.rs:341:18:341:43 | TryExpr | provenance | | -| test.rs:341:18:341:43 | TryExpr | test.rs:341:13:341:14 | v4 | provenance | | -| test.rs:349:13:349:21 | mut stdin | test.rs:351:24:351:34 | [post] &mut buffer [&ref] | provenance | MaD:89 | -| test.rs:349:25:349:40 | ...::stdin | test.rs:349:25:349:42 | ...::stdin(...) | provenance | Src:MaD:49 MaD:49 | -| test.rs:349:25:349:42 | ...::stdin(...) | test.rs:349:13:349:21 | mut stdin | provenance | | -| test.rs:351:24:351:34 | [post] &mut buffer [&ref] | test.rs:351:29:351:34 | [post] buffer | provenance | | -| test.rs:351:29:351:34 | [post] buffer | test.rs:352:15:352:20 | buffer | provenance | | -| test.rs:352:15:352:20 | buffer | test.rs:352:14:352:20 | &buffer | provenance | | -| test.rs:358:13:358:22 | mut reader | test.rs:359:20:359:36 | reader.fill_buf() [future, Ok] | provenance | MaD:83 | -| test.rs:358:26:358:70 | ...::new(...) | test.rs:358:13:358:22 | mut reader | provenance | | -| test.rs:358:52:358:67 | ...::stdin | test.rs:358:52:358:69 | ...::stdin(...) | provenance | Src:MaD:49 MaD:49 | -| test.rs:358:52:358:69 | ...::stdin(...) | test.rs:358:26:358:70 | ...::new(...) | provenance | MaD:133 | -| test.rs:359:13:359:16 | data | test.rs:360:15:360:18 | data | provenance | | -| test.rs:359:20:359:36 | reader.fill_buf() [future, Ok] | test.rs:359:20:359:42 | await ... [Ok] | provenance | | -| test.rs:359:20:359:42 | await ... [Ok] | test.rs:359:20:359:43 | TryExpr | provenance | | -| test.rs:359:20:359:43 | TryExpr | test.rs:359:13:359:16 | data | provenance | | -| test.rs:360:15:360:18 | data | test.rs:360:14:360:18 | &data | provenance | | -| test.rs:364:13:364:18 | reader | test.rs:365:20:365:34 | reader.buffer() | provenance | MaD:132 | -| test.rs:364:22:364:66 | ...::new(...) | test.rs:364:13:364:18 | reader | provenance | | -| test.rs:364:48:364:63 | ...::stdin | test.rs:364:48:364:65 | ...::stdin(...) | provenance | Src:MaD:49 MaD:49 | -| test.rs:364:48:364:65 | ...::stdin(...) | test.rs:364:22:364:66 | ...::new(...) | provenance | MaD:133 | -| test.rs:365:13:365:16 | data | test.rs:366:15:366:18 | data | provenance | | -| test.rs:365:20:365:34 | reader.buffer() | test.rs:365:13:365:16 | data | provenance | | -| test.rs:366:15:366:18 | data | test.rs:366:14:366:18 | &data | provenance | | -| test.rs:371:13:371:22 | mut reader | test.rs:372:26:372:36 | [post] &mut buffer [&ref] | provenance | MaD:85 | -| test.rs:371:26:371:70 | ...::new(...) | test.rs:371:13:371:22 | mut reader | provenance | | -| test.rs:371:52:371:67 | ...::stdin | test.rs:371:52:371:69 | ...::stdin(...) | provenance | Src:MaD:49 MaD:49 | -| test.rs:371:52:371:69 | ...::stdin(...) | test.rs:371:26:371:70 | ...::new(...) | provenance | MaD:133 | -| test.rs:372:26:372:36 | [post] &mut buffer [&ref] | test.rs:372:31:372:36 | [post] buffer | provenance | | -| test.rs:372:31:372:36 | [post] buffer | test.rs:373:15:373:20 | buffer | provenance | | -| test.rs:373:15:373:20 | buffer | test.rs:373:14:373:20 | &buffer | provenance | | -| test.rs:378:13:378:22 | mut reader | test.rs:379:33:379:43 | [post] &mut buffer [&ref] | provenance | MaD:86 | -| test.rs:378:26:378:70 | ...::new(...) | test.rs:378:13:378:22 | mut reader | provenance | | -| test.rs:378:52:378:67 | ...::stdin | test.rs:378:52:378:69 | ...::stdin(...) | provenance | Src:MaD:49 MaD:49 | -| test.rs:378:52:378:69 | ...::stdin(...) | test.rs:378:26:378:70 | ...::new(...) | provenance | MaD:133 | -| test.rs:379:33:379:43 | [post] &mut buffer [&ref] | test.rs:379:38:379:43 | [post] buffer | provenance | | -| test.rs:379:38:379:43 | [post] buffer | test.rs:380:15:380:20 | buffer | provenance | | -| test.rs:379:38:379:43 | [post] buffer | test.rs:381:14:381:22 | buffer[0] | provenance | | -| test.rs:380:15:380:20 | buffer | test.rs:380:14:380:20 | &buffer | provenance | | -| test.rs:385:13:385:28 | mut reader_split | test.rs:386:14:386:40 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:135 | -| test.rs:385:13:385:28 | mut reader_split | test.rs:387:33:387:59 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:135 | -| test.rs:385:32:385:76 | ...::new(...) | test.rs:385:32:385:88 | ... .split(...) | provenance | MaD:87 | -| test.rs:385:32:385:88 | ... .split(...) | test.rs:385:13:385:28 | mut reader_split | provenance | | -| test.rs:385:58:385:73 | ...::stdin | test.rs:385:58:385:75 | ...::stdin(...) | provenance | Src:MaD:49 MaD:49 | -| test.rs:385:58:385:75 | ...::stdin(...) | test.rs:385:32:385:76 | ...::new(...) | provenance | MaD:133 | -| test.rs:386:14:386:40 | reader_split.next_segment() [future, Ok, Some] | test.rs:386:14:386:46 | await ... [Ok, Some] | provenance | | -| test.rs:386:14:386:46 | await ... [Ok, Some] | test.rs:386:14:386:47 | TryExpr [Some] | provenance | | -| test.rs:386:14:386:47 | TryExpr [Some] | test.rs:386:14:386:56 | ... .unwrap() | provenance | MaD:106 | -| test.rs:387:19:387:29 | Some(...) [Some] | test.rs:387:24:387:28 | chunk | provenance | | -| test.rs:387:24:387:28 | chunk | test.rs:388:18:388:22 | chunk | provenance | | -| test.rs:387:33:387:59 | reader_split.next_segment() [future, Ok, Some] | test.rs:387:33:387:65 | await ... [Ok, Some] | provenance | | -| test.rs:387:33:387:65 | await ... [Ok, Some] | test.rs:387:33:387:66 | TryExpr [Some] | provenance | | -| test.rs:387:33:387:66 | TryExpr [Some] | test.rs:387:19:387:29 | Some(...) [Some] | provenance | | -| test.rs:393:13:393:18 | reader | test.rs:394:25:394:38 | reader.lines() | provenance | MaD:84 | -| test.rs:393:22:393:66 | ...::new(...) | test.rs:393:13:393:18 | reader | provenance | | -| test.rs:393:48:393:63 | ...::stdin | test.rs:393:48:393:65 | ...::stdin(...) | provenance | Src:MaD:49 MaD:49 | -| test.rs:393:48:393:65 | ...::stdin(...) | test.rs:393:22:393:66 | ...::new(...) | provenance | MaD:133 | -| test.rs:394:13:394:21 | mut lines | test.rs:395:14:395:30 | lines.next_line() [future, Ok, Some] | provenance | MaD:134 | -| test.rs:394:13:394:21 | mut lines | test.rs:396:32:396:48 | lines.next_line() [future, Ok, Some] | provenance | MaD:134 | -| test.rs:394:25:394:38 | reader.lines() | test.rs:394:13:394:21 | mut lines | provenance | | -| test.rs:395:14:395:30 | lines.next_line() [future, Ok, Some] | test.rs:395:14:395:36 | await ... [Ok, Some] | provenance | | -| test.rs:395:14:395:36 | await ... [Ok, Some] | test.rs:395:14:395:37 | TryExpr [Some] | provenance | | -| test.rs:395:14:395:37 | TryExpr [Some] | test.rs:395:14:395:46 | ... .unwrap() | provenance | MaD:106 | -| test.rs:396:19:396:28 | Some(...) [Some] | test.rs:396:24:396:27 | line | provenance | | -| test.rs:396:24:396:27 | line | test.rs:397:18:397:21 | line | provenance | | -| test.rs:396:32:396:48 | lines.next_line() [future, Ok, Some] | test.rs:396:32:396:54 | await ... [Ok, Some] | provenance | | -| test.rs:396:32:396:54 | await ... [Ok, Some] | test.rs:396:32:396:55 | TryExpr [Some] | provenance | | -| test.rs:396:32:396:55 | TryExpr [Some] | test.rs:396:19:396:28 | Some(...) [Some] | provenance | | -| test.rs:408:13:408:18 | buffer | test.rs:409:14:409:19 | buffer | provenance | | -| test.rs:408:31:408:43 | ...::read | test.rs:408:31:408:43 | ...::read [Ok] | provenance | Src:MaD:40 | -| test.rs:408:31:408:43 | ...::read | test.rs:408:31:408:55 | ...::read(...) [Ok] | provenance | Src:MaD:40 | -| test.rs:408:31:408:43 | ...::read [Ok] | test.rs:408:31:408:55 | ...::read(...) [Ok] | provenance | MaD:41 | -| test.rs:408:31:408:55 | ...::read(...) [Ok] | test.rs:408:31:408:56 | TryExpr | provenance | | -| test.rs:408:31:408:56 | TryExpr | test.rs:408:13:408:18 | buffer | provenance | | -| test.rs:413:13:413:18 | buffer | test.rs:414:14:414:19 | buffer | provenance | | -| test.rs:413:31:413:38 | ...::read | test.rs:413:31:413:38 | ...::read [Ok] | provenance | Src:MaD:40 | -| test.rs:413:31:413:38 | ...::read | test.rs:413:31:413:50 | ...::read(...) [Ok] | provenance | Src:MaD:40 | -| test.rs:413:31:413:38 | ...::read [Ok] | test.rs:413:31:413:50 | ...::read(...) [Ok] | provenance | MaD:41 | -| test.rs:413:31:413:50 | ...::read(...) [Ok] | test.rs:413:31:413:51 | TryExpr | provenance | | -| test.rs:413:31:413:51 | TryExpr | test.rs:413:13:413:18 | buffer | provenance | | -| test.rs:418:13:418:18 | buffer | test.rs:419:14:419:19 | buffer | provenance | | -| test.rs:418:22:418:39 | ...::read_to_string | test.rs:418:22:418:39 | ...::read_to_string [Ok] | provenance | Src:MaD:43 | -| test.rs:418:22:418:39 | ...::read_to_string | test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | provenance | Src:MaD:43 | -| test.rs:418:22:418:39 | ...::read_to_string [Ok] | test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | provenance | MaD:44 | -| test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | test.rs:418:22:418:52 | TryExpr | provenance | | -| test.rs:418:22:418:52 | TryExpr | test.rs:418:13:418:18 | buffer | provenance | | -| test.rs:425:13:425:16 | path | test.rs:426:14:426:17 | path | provenance | | -| test.rs:425:13:425:16 | path | test.rs:426:14:426:25 | path.clone() | provenance | MaD:52 | -| test.rs:425:13:425:16 | path | test.rs:427:14:427:17 | path | provenance | | -| test.rs:425:13:425:16 | path | test.rs:427:14:427:25 | path.clone() | provenance | MaD:52 | -| test.rs:425:13:425:16 | path | test.rs:437:14:437:17 | path | provenance | | -| test.rs:425:20:425:27 | e.path() | test.rs:425:13:425:16 | path | provenance | | -| test.rs:425:22:425:25 | path | test.rs:425:20:425:27 | e.path() | provenance | Src:MaD:21 MaD:21 | -| test.rs:426:14:426:17 | path | test.rs:426:14:426:25 | path.clone() | provenance | MaD:52 | -| test.rs:427:14:427:17 | path | test.rs:427:14:427:25 | path.clone() | provenance | MaD:52 | -| test.rs:427:14:427:25 | path.clone() | test.rs:427:14:427:35 | ... .as_path() | provenance | MaD:131 | -| test.rs:439:13:439:21 | file_name | test.rs:440:14:440:22 | file_name | provenance | | -| test.rs:439:13:439:21 | file_name | test.rs:440:14:440:30 | file_name.clone() | provenance | MaD:52 | -| test.rs:439:13:439:21 | file_name | test.rs:445:14:445:22 | file_name | provenance | | -| test.rs:439:25:439:37 | e.file_name() | test.rs:439:13:439:21 | file_name | provenance | | -| test.rs:439:27:439:35 | file_name | test.rs:439:25:439:37 | e.file_name() | provenance | Src:MaD:20 MaD:20 | -| test.rs:440:14:440:22 | file_name | test.rs:440:14:440:30 | file_name.clone() | provenance | MaD:52 | -| test.rs:461:13:461:18 | target | test.rs:462:14:462:19 | target | provenance | | -| test.rs:461:22:461:34 | ...::read_link | test.rs:461:22:461:49 | ...::read_link(...) [Ok] | provenance | Src:MaD:42 | -| test.rs:461:22:461:49 | ...::read_link(...) [Ok] | test.rs:461:22:461:50 | TryExpr | provenance | | -| test.rs:461:22:461:50 | TryExpr | test.rs:461:13:461:18 | target | provenance | | -| test.rs:470:13:470:18 | buffer | test.rs:471:14:471:19 | buffer | provenance | | -| test.rs:470:31:470:45 | ...::read | test.rs:470:31:470:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:46 | -| test.rs:470:31:470:57 | ...::read(...) [future, Ok] | test.rs:470:31:470:63 | await ... [Ok] | provenance | | -| test.rs:470:31:470:63 | await ... [Ok] | test.rs:470:31:470:64 | TryExpr | provenance | | -| test.rs:470:31:470:64 | TryExpr | test.rs:470:13:470:18 | buffer | provenance | | -| test.rs:475:13:475:18 | buffer | test.rs:476:14:476:19 | buffer | provenance | | -| test.rs:475:31:475:45 | ...::read | test.rs:475:31:475:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:46 | -| test.rs:475:31:475:57 | ...::read(...) [future, Ok] | test.rs:475:31:475:63 | await ... [Ok] | provenance | | -| test.rs:475:31:475:63 | await ... [Ok] | test.rs:475:31:475:64 | TryExpr | provenance | | -| test.rs:475:31:475:64 | TryExpr | test.rs:475:13:475:18 | buffer | provenance | | -| test.rs:480:13:480:18 | buffer | test.rs:481:14:481:19 | buffer | provenance | | -| test.rs:480:22:480:46 | ...::read_to_string | test.rs:480:22:480:58 | ...::read_to_string(...) [future, Ok] | provenance | Src:MaD:48 | -| test.rs:480:22:480:58 | ...::read_to_string(...) [future, Ok] | test.rs:480:22:480:64 | await ... [Ok] | provenance | | -| test.rs:480:22:480:64 | await ... [Ok] | test.rs:480:22:480:65 | TryExpr | provenance | | -| test.rs:480:22:480:65 | TryExpr | test.rs:480:13:480:18 | buffer | provenance | | -| test.rs:486:13:486:16 | path | test.rs:488:14:488:17 | path | provenance | | -| test.rs:486:20:486:31 | entry.path() | test.rs:486:13:486:16 | path | provenance | | -| test.rs:486:26:486:29 | path | test.rs:486:20:486:31 | entry.path() | provenance | Src:MaD:29 MaD:29 | -| test.rs:486:26:486:29 | path | test.rs:486:20:486:31 | entry.path() | provenance | Src:MaD:29 MaD:29 | -| test.rs:487:13:487:21 | file_name | test.rs:489:14:489:22 | file_name | provenance | | -| test.rs:487:25:487:41 | entry.file_name() | test.rs:487:13:487:21 | file_name | provenance | | -| test.rs:487:31:487:39 | file_name | test.rs:487:25:487:41 | entry.file_name() | provenance | Src:MaD:28 MaD:28 | -| test.rs:487:31:487:39 | file_name | test.rs:487:25:487:41 | entry.file_name() | provenance | Src:MaD:28 MaD:28 | -| test.rs:493:13:493:18 | target | test.rs:494:14:494:19 | target | provenance | | -| test.rs:493:22:493:41 | ...::read_link | test.rs:493:22:493:56 | ...::read_link(...) [future, Ok] | provenance | Src:MaD:47 | -| test.rs:493:22:493:56 | ...::read_link(...) [future, Ok] | test.rs:493:22:493:62 | await ... [Ok] | provenance | | -| test.rs:493:22:493:62 | await ... [Ok] | test.rs:493:22:493:63 | TryExpr | provenance | | -| test.rs:493:22:493:63 | TryExpr | test.rs:493:13:493:18 | target | provenance | | -| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer | provenance | MaD:121 | -| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer [&ref] | provenance | MaD:78 | -| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer | provenance | MaD:122 | -| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer [&ref] | provenance | MaD:80 | -| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer | provenance | MaD:123 | -| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer [&ref] | provenance | MaD:81 | -| test.rs:503:9:503:16 | mut file | test.rs:525:25:525:35 | [post] &mut buffer [&ref] | provenance | MaD:79 | -| test.rs:503:9:503:16 | mut file | test.rs:529:17:529:28 | file.bytes() | provenance | MaD:75 | -| test.rs:503:20:503:38 | ...::open | test.rs:503:20:503:50 | ...::open(...) [Ok] | provenance | Src:MaD:22 | -| test.rs:503:20:503:50 | ...::open(...) [Ok] | test.rs:503:20:503:51 | TryExpr | provenance | | -| test.rs:503:20:503:51 | TryExpr | test.rs:503:9:503:16 | mut file | provenance | | -| test.rs:507:32:507:42 | [post] &mut buffer | test.rs:508:15:508:20 | buffer | provenance | | -| test.rs:507:32:507:42 | [post] &mut buffer [&ref] | test.rs:507:37:507:42 | [post] buffer | provenance | | -| test.rs:507:37:507:42 | [post] buffer | test.rs:508:15:508:20 | buffer | provenance | | -| test.rs:508:15:508:20 | buffer | test.rs:508:14:508:20 | &buffer | provenance | | -| test.rs:513:39:513:49 | [post] &mut buffer | test.rs:514:15:514:20 | buffer | provenance | | -| test.rs:513:39:513:49 | [post] &mut buffer [&ref] | test.rs:513:44:513:49 | [post] buffer | provenance | | -| test.rs:513:44:513:49 | [post] buffer | test.rs:514:15:514:20 | buffer | provenance | | -| test.rs:514:15:514:20 | buffer | test.rs:514:14:514:20 | &buffer | provenance | | -| test.rs:519:42:519:52 | [post] &mut buffer | test.rs:520:15:520:20 | buffer | provenance | | -| test.rs:519:42:519:52 | [post] &mut buffer [&ref] | test.rs:519:47:519:52 | [post] buffer | provenance | | -| test.rs:519:47:519:52 | [post] buffer | test.rs:520:15:520:20 | buffer | provenance | | -| test.rs:520:15:520:20 | buffer | test.rs:520:14:520:20 | &buffer | provenance | | -| test.rs:525:25:525:35 | [post] &mut buffer [&ref] | test.rs:525:30:525:35 | [post] buffer | provenance | | -| test.rs:525:30:525:35 | [post] buffer | test.rs:526:15:526:20 | buffer | provenance | | -| test.rs:526:15:526:20 | buffer | test.rs:526:14:526:20 | &buffer | provenance | | -| test.rs:529:17:529:28 | file.bytes() | test.rs:530:14:530:17 | byte | provenance | | -| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer | provenance | MaD:121 | -| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | provenance | MaD:78 | -| test.rs:536:22:536:63 | ... .open(...) [Ok] | test.rs:536:22:536:72 | ... .unwrap() | provenance | MaD:110 | -| test.rs:536:22:536:72 | ... .unwrap() | test.rs:536:13:536:18 | mut f1 | provenance | | -| test.rs:536:50:536:53 | open | test.rs:536:22:536:63 | ... .open(...) [Ok] | provenance | Src:MaD:23 | -| test.rs:538:30:538:40 | [post] &mut buffer | test.rs:539:15:539:20 | buffer | provenance | | -| test.rs:538:30:538:40 | [post] &mut buffer [&ref] | test.rs:538:35:538:40 | [post] buffer | provenance | | -| test.rs:538:35:538:40 | [post] buffer | test.rs:539:15:539:20 | buffer | provenance | | -| test.rs:539:15:539:20 | buffer | test.rs:539:14:539:20 | &buffer | provenance | | -| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer | provenance | MaD:121 | -| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | provenance | MaD:78 | -| test.rs:543:22:543:80 | ... .open(...) [Ok] | test.rs:543:22:543:89 | ... .unwrap() | provenance | MaD:110 | -| test.rs:543:22:543:89 | ... .unwrap() | test.rs:543:13:543:18 | mut f2 | provenance | | -| test.rs:543:67:543:70 | open | test.rs:543:22:543:80 | ... .open(...) [Ok] | provenance | Src:MaD:23 | -| test.rs:545:30:545:40 | [post] &mut buffer | test.rs:546:15:546:20 | buffer | provenance | | -| test.rs:545:30:545:40 | [post] &mut buffer [&ref] | test.rs:545:35:545:40 | [post] buffer | provenance | | -| test.rs:545:35:545:40 | [post] buffer | test.rs:546:15:546:20 | buffer | provenance | | -| test.rs:546:15:546:20 | buffer | test.rs:546:14:546:20 | &buffer | provenance | | -| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer | provenance | MaD:121 | -| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | provenance | MaD:78 | -| test.rs:550:22:550:114 | ... .open(...) [Ok] | test.rs:550:22:550:123 | ... .unwrap() | provenance | MaD:110 | -| test.rs:550:22:550:123 | ... .unwrap() | test.rs:550:13:550:18 | mut f3 | provenance | | -| test.rs:550:101:550:104 | open | test.rs:550:22:550:114 | ... .open(...) [Ok] | provenance | Src:MaD:23 | -| test.rs:552:30:552:40 | [post] &mut buffer | test.rs:553:15:553:20 | buffer | provenance | | -| test.rs:552:30:552:40 | [post] &mut buffer [&ref] | test.rs:552:35:552:40 | [post] buffer | provenance | | -| test.rs:552:35:552:40 | [post] buffer | test.rs:553:15:553:20 | buffer | provenance | | -| test.rs:553:15:553:20 | buffer | test.rs:553:14:553:20 | &buffer | provenance | | -| test.rs:560:13:560:17 | file1 | test.rs:562:26:562:43 | file1.chain(...) | provenance | MaD:77 | -| test.rs:560:21:560:39 | ...::open | test.rs:560:21:560:51 | ...::open(...) [Ok] | provenance | Src:MaD:22 | -| test.rs:560:21:560:51 | ...::open(...) [Ok] | test.rs:560:21:560:52 | TryExpr | provenance | | -| test.rs:560:21:560:52 | TryExpr | test.rs:560:13:560:17 | file1 | provenance | | -| test.rs:561:13:561:17 | file2 | test.rs:562:38:562:42 | file2 | provenance | | -| test.rs:561:21:561:39 | ...::open | test.rs:561:21:561:59 | ...::open(...) [Ok] | provenance | Src:MaD:22 | -| test.rs:561:21:561:59 | ...::open(...) [Ok] | test.rs:561:21:561:60 | TryExpr | provenance | | -| test.rs:561:21:561:60 | TryExpr | test.rs:561:13:561:17 | file2 | provenance | | -| test.rs:562:13:562:22 | mut reader | test.rs:563:31:563:41 | [post] &mut buffer [&ref] | provenance | MaD:81 | -| test.rs:562:26:562:43 | file1.chain(...) | test.rs:562:13:562:22 | mut reader | provenance | | -| test.rs:562:38:562:42 | file2 | test.rs:562:26:562:43 | file1.chain(...) | provenance | MaD:76 | -| test.rs:563:31:563:41 | [post] &mut buffer [&ref] | test.rs:563:36:563:41 | [post] buffer | provenance | | -| test.rs:563:36:563:41 | [post] buffer | test.rs:564:15:564:20 | buffer | provenance | | -| test.rs:564:15:564:20 | buffer | test.rs:564:14:564:20 | &buffer | provenance | | -| test.rs:569:13:569:17 | file1 | test.rs:570:26:570:40 | file1.take(...) | provenance | MaD:82 | -| test.rs:569:21:569:39 | ...::open | test.rs:569:21:569:51 | ...::open(...) [Ok] | provenance | Src:MaD:22 | -| test.rs:569:21:569:51 | ...::open(...) [Ok] | test.rs:569:21:569:52 | TryExpr | provenance | | -| test.rs:569:21:569:52 | TryExpr | test.rs:569:13:569:17 | file1 | provenance | | -| test.rs:570:13:570:22 | mut reader | test.rs:571:31:571:41 | [post] &mut buffer [&ref] | provenance | MaD:81 | -| test.rs:570:26:570:40 | file1.take(...) | test.rs:570:13:570:22 | mut reader | provenance | | -| test.rs:571:31:571:41 | [post] &mut buffer [&ref] | test.rs:571:36:571:41 | [post] buffer | provenance | | -| test.rs:571:36:571:41 | [post] buffer | test.rs:572:15:572:20 | buffer | provenance | | -| test.rs:572:15:572:20 | buffer | test.rs:572:14:572:20 | &buffer | provenance | | -| test.rs:581:9:581:16 | mut file | test.rs:585:32:585:42 | [post] &mut buffer [&ref] | provenance | MaD:88 | -| test.rs:581:9:581:16 | mut file | test.rs:591:39:591:49 | [post] &mut buffer [&ref] | provenance | MaD:94 | -| test.rs:581:9:581:16 | mut file | test.rs:597:42:597:52 | [post] &mut buffer [&ref] | provenance | MaD:95 | -| test.rs:581:9:581:16 | mut file | test.rs:603:25:603:35 | [post] &mut buffer [&ref] | provenance | MaD:90 | -| test.rs:581:9:581:16 | mut file | test.rs:608:18:608:31 | file.read_u8() [future, Ok] | provenance | MaD:96 | -| test.rs:581:9:581:16 | mut file | test.rs:609:18:609:32 | file.read_i16() [future, Ok] | provenance | MaD:92 | -| test.rs:581:9:581:16 | mut file | test.rs:610:18:610:32 | file.read_f32() [future, Ok] | provenance | MaD:91 | -| test.rs:581:9:581:16 | mut file | test.rs:611:18:611:35 | file.read_i64_le() [future, Ok] | provenance | MaD:93 | -| test.rs:581:9:581:16 | mut file | test.rs:620:23:620:33 | [post] &mut buffer [&ref] | provenance | MaD:89 | -| test.rs:581:20:581:40 | ...::open | test.rs:581:20:581:52 | ...::open(...) [future, Ok] | provenance | Src:MaD:26 | -| test.rs:581:20:581:52 | ...::open(...) [future, Ok] | test.rs:581:20:581:58 | await ... [Ok] | provenance | | -| test.rs:581:20:581:58 | await ... [Ok] | test.rs:581:20:581:59 | TryExpr | provenance | | -| test.rs:581:20:581:59 | TryExpr | test.rs:581:9:581:16 | mut file | provenance | | -| test.rs:585:32:585:42 | [post] &mut buffer [&ref] | test.rs:585:37:585:42 | [post] buffer | provenance | | -| test.rs:585:37:585:42 | [post] buffer | test.rs:586:15:586:20 | buffer | provenance | | -| test.rs:586:15:586:20 | buffer | test.rs:586:14:586:20 | &buffer | provenance | | -| test.rs:591:39:591:49 | [post] &mut buffer [&ref] | test.rs:591:44:591:49 | [post] buffer | provenance | | -| test.rs:591:44:591:49 | [post] buffer | test.rs:592:15:592:20 | buffer | provenance | | -| test.rs:592:15:592:20 | buffer | test.rs:592:14:592:20 | &buffer | provenance | | -| test.rs:597:42:597:52 | [post] &mut buffer [&ref] | test.rs:597:47:597:52 | [post] buffer | provenance | | -| test.rs:597:47:597:52 | [post] buffer | test.rs:598:15:598:20 | buffer | provenance | | -| test.rs:598:15:598:20 | buffer | test.rs:598:14:598:20 | &buffer | provenance | | -| test.rs:603:25:603:35 | [post] &mut buffer [&ref] | test.rs:603:30:603:35 | [post] buffer | provenance | | -| test.rs:603:30:603:35 | [post] buffer | test.rs:604:15:604:20 | buffer | provenance | | -| test.rs:604:15:604:20 | buffer | test.rs:604:14:604:20 | &buffer | provenance | | -| test.rs:608:13:608:14 | v1 | test.rs:612:14:612:15 | v1 | provenance | | -| test.rs:608:18:608:31 | file.read_u8() [future, Ok] | test.rs:608:18:608:37 | await ... [Ok] | provenance | | -| test.rs:608:18:608:37 | await ... [Ok] | test.rs:608:18:608:38 | TryExpr | provenance | | -| test.rs:608:18:608:38 | TryExpr | test.rs:608:13:608:14 | v1 | provenance | | -| test.rs:609:13:609:14 | v2 | test.rs:613:14:613:15 | v2 | provenance | | -| test.rs:609:18:609:32 | file.read_i16() [future, Ok] | test.rs:609:18:609:38 | await ... [Ok] | provenance | | -| test.rs:609:18:609:38 | await ... [Ok] | test.rs:609:18:609:39 | TryExpr | provenance | | -| test.rs:609:18:609:39 | TryExpr | test.rs:609:13:609:14 | v2 | provenance | | -| test.rs:610:13:610:14 | v3 | test.rs:614:14:614:15 | v3 | provenance | | -| test.rs:610:18:610:32 | file.read_f32() [future, Ok] | test.rs:610:18:610:38 | await ... [Ok] | provenance | | -| test.rs:610:18:610:38 | await ... [Ok] | test.rs:610:18:610:39 | TryExpr | provenance | | -| test.rs:610:18:610:39 | TryExpr | test.rs:610:13:610:14 | v3 | provenance | | -| test.rs:611:13:611:14 | v4 | test.rs:615:14:615:15 | v4 | provenance | | -| test.rs:611:18:611:35 | file.read_i64_le() [future, Ok] | test.rs:611:18:611:41 | await ... [Ok] | provenance | | -| test.rs:611:18:611:41 | await ... [Ok] | test.rs:611:18:611:42 | TryExpr | provenance | | -| test.rs:611:18:611:42 | TryExpr | test.rs:611:13:611:14 | v4 | provenance | | -| test.rs:620:23:620:33 | [post] &mut buffer [&ref] | test.rs:620:28:620:33 | [post] buffer | provenance | | -| test.rs:620:28:620:33 | [post] buffer | test.rs:621:15:621:20 | buffer | provenance | | -| test.rs:621:15:621:20 | buffer | test.rs:621:14:621:20 | &buffer | provenance | | -| test.rs:627:13:627:18 | mut f1 | test.rs:629:30:629:40 | [post] &mut buffer [&ref] | provenance | MaD:88 | -| test.rs:627:22:627:65 | ... .open(...) [future, Ok] | test.rs:627:22:627:71 | await ... [Ok] | provenance | | -| test.rs:627:22:627:71 | await ... [Ok] | test.rs:627:22:627:72 | TryExpr | provenance | | -| test.rs:627:22:627:72 | TryExpr | test.rs:627:13:627:18 | mut f1 | provenance | | -| test.rs:627:52:627:55 | open | test.rs:627:22:627:65 | ... .open(...) [future, Ok] | provenance | Src:MaD:27 | -| test.rs:629:30:629:40 | [post] &mut buffer [&ref] | test.rs:629:35:629:40 | [post] buffer | provenance | | -| test.rs:629:35:629:40 | [post] buffer | test.rs:630:15:630:20 | buffer | provenance | | -| test.rs:630:15:630:20 | buffer | test.rs:630:14:630:20 | &buffer | provenance | | -| test.rs:660:9:660:16 | mut file | test.rs:664:22:664:25 | file | provenance | | -| test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:50 | -| test.rs:660:9:660:16 | mut file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:51 | -| test.rs:660:20:660:44 | ...::open | test.rs:660:20:660:56 | ...::open(...) [future, Ok] | provenance | Src:MaD:11 | -| test.rs:660:20:660:56 | ...::open(...) [future, Ok] | test.rs:660:20:660:62 | await ... [Ok] | provenance | | -| test.rs:660:20:660:62 | await ... [Ok] | test.rs:660:20:660:63 | TryExpr | provenance | | -| test.rs:660:20:660:63 | TryExpr | test.rs:660:9:660:16 | mut file | provenance | | -| test.rs:664:22:664:25 | file | test.rs:664:32:664:42 | [post] &mut buffer [&ref] | provenance | MaD:50 | -| test.rs:664:32:664:42 | [post] &mut buffer [&ref] | test.rs:664:37:664:42 | [post] buffer | provenance | | -| test.rs:664:37:664:42 | [post] buffer | test.rs:665:15:665:20 | buffer | provenance | | -| test.rs:665:15:665:20 | buffer | test.rs:665:14:665:20 | &buffer | provenance | | -| test.rs:671:13:671:18 | mut f1 | test.rs:673:22:673:23 | f1 | provenance | | -| test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:50 | -| test.rs:671:13:671:18 | mut f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:51 | -| test.rs:671:22:671:69 | ... .open(...) [future, Ok] | test.rs:671:22:671:75 | await ... [Ok] | provenance | | -| test.rs:671:22:671:75 | await ... [Ok] | test.rs:671:22:671:76 | TryExpr | provenance | | -| test.rs:671:22:671:76 | TryExpr | test.rs:671:13:671:18 | mut f1 | provenance | | -| test.rs:671:56:671:59 | open | test.rs:671:22:671:69 | ... .open(...) [future, Ok] | provenance | Src:MaD:12 | -| test.rs:673:22:673:23 | f1 | test.rs:673:30:673:40 | [post] &mut buffer [&ref] | provenance | MaD:50 | -| test.rs:673:30:673:40 | [post] &mut buffer [&ref] | test.rs:673:35:673:40 | [post] buffer | provenance | | -| test.rs:673:35:673:40 | [post] buffer | test.rs:674:15:674:20 | buffer | provenance | | -| test.rs:674:15:674:20 | buffer | test.rs:674:14:674:20 | &buffer | provenance | | -| test.rs:688:13:688:22 | mut stream | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | provenance | MaD:78 | -| test.rs:688:13:688:22 | mut stream | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | provenance | MaD:130 | -| test.rs:688:26:688:53 | ...::connect | test.rs:688:26:688:62 | ...::connect(...) [Ok] | provenance | Src:MaD:24 | -| test.rs:688:26:688:62 | ...::connect(...) [Ok] | test.rs:688:26:688:63 | TryExpr | provenance | | -| test.rs:688:26:688:63 | TryExpr | test.rs:688:13:688:22 | mut stream | provenance | | -| test.rs:695:29:695:39 | [post] &mut buffer [&ref] | test.rs:695:34:695:39 | [post] buffer | provenance | | -| test.rs:695:34:695:39 | [post] buffer | test.rs:698:15:698:20 | buffer | provenance | | -| test.rs:695:34:695:39 | [post] buffer | test.rs:699:14:699:22 | buffer[0] | provenance | | -| test.rs:698:15:698:20 | buffer | test.rs:698:14:698:20 | &buffer | provenance | | -| test.rs:707:13:707:22 | mut stream | test.rs:715:58:715:63 | stream | provenance | | -| test.rs:707:26:707:61 | ...::connect_timeout | test.rs:707:26:707:105 | ...::connect_timeout(...) [Ok] | provenance | Src:MaD:25 | -| test.rs:707:26:707:105 | ...::connect_timeout(...) [Ok] | test.rs:707:26:707:106 | TryExpr | provenance | | -| test.rs:707:26:707:106 | TryExpr | test.rs:707:13:707:22 | mut stream | provenance | | -| test.rs:715:21:715:30 | mut reader | test.rs:718:44:718:52 | [post] &mut line [&ref] | provenance | MaD:72 | -| test.rs:715:34:715:64 | ...::new(...) | test.rs:715:34:715:74 | ... .take(...) | provenance | MaD:82 | -| test.rs:715:34:715:74 | ... .take(...) | test.rs:715:21:715:30 | mut reader | provenance | | -| test.rs:715:58:715:63 | stream | test.rs:715:34:715:64 | ...::new(...) | provenance | MaD:125 | -| test.rs:718:44:718:52 | [post] &mut line [&ref] | test.rs:718:49:718:52 | [post] line | provenance | | -| test.rs:718:49:718:52 | [post] line | test.rs:725:35:725:38 | line | provenance | | -| test.rs:725:35:725:38 | line | test.rs:725:34:725:38 | &line | provenance | | -| test.rs:759:9:759:24 | mut tokio_stream | test.rs:767:35:767:46 | [post] &mut buffer1 [&ref] | provenance | MaD:136 | -| test.rs:759:9:759:24 | mut tokio_stream | test.rs:771:36:771:47 | [post] &mut buffer2 [&ref] | provenance | MaD:88 | -| test.rs:759:9:759:24 | mut tokio_stream | test.rs:787:41:787:51 | [post] &mut buffer [&ref] | provenance | MaD:137 | -| test.rs:759:9:759:24 | mut tokio_stream | test.rs:810:45:810:55 | [post] &mut buffer [&ref] | provenance | MaD:138 | -| test.rs:759:28:759:57 | ...::connect | test.rs:759:28:759:66 | ...::connect(...) [future, Ok] | provenance | Src:MaD:30 | -| test.rs:759:28:759:66 | ...::connect(...) [future, Ok] | test.rs:759:28:759:72 | await ... [Ok] | provenance | | -| test.rs:759:28:759:72 | await ... [Ok] | test.rs:759:28:759:73 | TryExpr | provenance | | -| test.rs:759:28:759:73 | TryExpr | test.rs:759:9:759:24 | mut tokio_stream | provenance | | -| test.rs:767:35:767:46 | [post] &mut buffer1 [&ref] | test.rs:767:40:767:46 | [post] buffer1 | provenance | | -| test.rs:767:40:767:46 | [post] buffer1 | test.rs:774:15:774:21 | buffer1 | provenance | | -| test.rs:767:40:767:46 | [post] buffer1 | test.rs:775:14:775:23 | buffer1[0] | provenance | | -| test.rs:771:36:771:47 | [post] &mut buffer2 [&ref] | test.rs:771:41:771:47 | [post] buffer2 | provenance | | -| test.rs:771:41:771:47 | [post] buffer2 | test.rs:778:15:778:21 | buffer2 | provenance | | -| test.rs:771:41:771:47 | [post] buffer2 | test.rs:779:14:779:23 | buffer2[0] | provenance | | -| test.rs:774:15:774:21 | buffer1 | test.rs:774:14:774:21 | &buffer1 | provenance | | -| test.rs:778:15:778:21 | buffer2 | test.rs:778:14:778:21 | &buffer2 | provenance | | -| test.rs:787:41:787:51 | [post] &mut buffer [&ref] | test.rs:787:46:787:51 | [post] buffer | provenance | | -| test.rs:787:46:787:51 | [post] buffer | test.rs:794:27:794:32 | buffer | provenance | | -| test.rs:794:27:794:32 | buffer | test.rs:794:26:794:32 | &buffer | provenance | | -| test.rs:810:45:810:55 | [post] &mut buffer [&ref] | test.rs:810:50:810:55 | [post] buffer | provenance | | -| test.rs:810:50:810:55 | [post] buffer | test.rs:817:27:817:32 | buffer | provenance | | -| test.rs:817:27:817:32 | buffer | test.rs:817:26:817:32 | &buffer | provenance | | -| test.rs:905:13:905:14 | v1 | test.rs:906:14:906:15 | v1 | provenance | | -| test.rs:905:24:905:33 | row.get(...) [Some] | test.rs:905:24:905:42 | ... .unwrap() | provenance | MaD:106 | -| test.rs:905:24:905:42 | ... .unwrap() | test.rs:905:13:905:14 | v1 | provenance | | -| test.rs:905:28:905:30 | get | test.rs:905:24:905:33 | row.get(...) [Some] | provenance | Src:MaD:16 | -| test.rs:908:13:908:14 | v2 | test.rs:909:14:909:15 | v2 | provenance | | -| test.rs:908:24:908:37 | row.get_opt(...) [Some, Ok] | test.rs:908:24:908:46 | ... .unwrap() [Ok] | provenance | MaD:106 | -| test.rs:908:24:908:46 | ... .unwrap() [Ok] | test.rs:908:24:908:55 | ... .unwrap() | provenance | MaD:110 | -| test.rs:908:24:908:55 | ... .unwrap() | test.rs:908:13:908:14 | v2 | provenance | | -| test.rs:908:28:908:34 | get_opt | test.rs:908:24:908:37 | row.get_opt(...) [Some, Ok] | provenance | Src:MaD:17 | -| test.rs:911:13:911:14 | v3 | test.rs:912:14:912:15 | v3 | provenance | | -| test.rs:911:24:911:34 | row.take(...) [Some] | test.rs:911:24:911:43 | ... .unwrap() | provenance | MaD:106 | -| test.rs:911:24:911:43 | ... .unwrap() | test.rs:911:13:911:14 | v3 | provenance | | -| test.rs:911:28:911:31 | take | test.rs:911:24:911:34 | row.take(...) [Some] | provenance | Src:MaD:18 | -| test.rs:914:13:914:14 | v4 | test.rs:915:14:915:15 | v4 | provenance | | -| test.rs:914:24:914:38 | row.take_opt(...) [Some, Ok] | test.rs:914:24:914:47 | ... .unwrap() [Ok] | provenance | MaD:106 | -| test.rs:914:24:914:47 | ... .unwrap() [Ok] | test.rs:914:24:914:56 | ... .unwrap() | provenance | MaD:110 | -| test.rs:914:24:914:56 | ... .unwrap() | test.rs:914:13:914:14 | v4 | provenance | | -| test.rs:914:28:914:35 | take_opt | test.rs:914:24:914:38 | row.take_opt(...) [Some, Ok] | provenance | Src:MaD:19 | -| test.rs:924:13:924:14 | v6 | test.rs:925:14:925:15 | v6 | provenance | | -| test.rs:924:23:924:63 | conn.query_first(...) [Ok, Some] | test.rs:924:23:924:64 | TryExpr [Some] | provenance | | -| test.rs:924:23:924:64 | TryExpr [Some] | test.rs:924:23:924:73 | ... .unwrap() | provenance | MaD:106 | -| test.rs:924:23:924:73 | ... .unwrap() | test.rs:924:13:924:14 | v6 | provenance | | -| test.rs:924:28:924:38 | query_first | test.rs:924:23:924:63 | conn.query_first(...) [Ok, Some] | provenance | Src:MaD:1 | -| test.rs:927:13:927:18 | mut t1 [element] | test.rs:929:20:929:21 | t1 [element] | provenance | | -| test.rs:927:22:927:71 | conn.exec_iter(...) [Ok, element] | test.rs:927:22:927:72 | TryExpr [element] | provenance | | -| test.rs:927:22:927:72 | TryExpr [element] | test.rs:927:13:927:18 | mut t1 [element] | provenance | | -| test.rs:927:27:927:35 | exec_iter | test.rs:927:22:927:71 | conn.exec_iter(...) [Ok, element] | provenance | Src:MaD:15 | -| test.rs:928:14:928:61 | ... .get(...) [Some] | test.rs:928:14:928:70 | ... .unwrap() | provenance | MaD:106 | -| test.rs:928:42:928:44 | get | test.rs:928:14:928:61 | ... .get(...) [Some] | provenance | Src:MaD:16 | -| test.rs:929:13:929:15 | row | test.rs:931:22:931:22 | v | provenance | | -| test.rs:929:20:929:21 | t1 [element] | test.rs:929:13:929:15 | row | provenance | | -| test.rs:935:22:935:30 | query_map | test.rs:937:14:937:24 | ...: i64 | provenance | Src:MaD:3 | -| test.rs:937:14:937:24 | ...: i64 | test.rs:938:22:938:27 | values | provenance | | -| test.rs:951:13:951:17 | total | test.rs:955:14:955:18 | total | provenance | | -| test.rs:951:21:954:10 | conn.query_fold(...) [Ok] | test.rs:951:21:954:11 | TryExpr | provenance | | -| test.rs:951:21:954:11 | TryExpr | test.rs:951:13:951:17 | total | provenance | | -| test.rs:951:26:951:35 | query_fold | test.rs:951:76:951:83 | ...: i64 | provenance | Src:MaD:2 | -| test.rs:951:76:951:83 | ...: i64 | test.rs:951:86:954:9 | { ... } | provenance | | -| test.rs:951:76:951:83 | ...: i64 | test.rs:952:18:952:20 | row | provenance | | -| test.rs:951:76:951:83 | ...: i64 | test.rs:953:19:953:21 | row | provenance | | -| test.rs:951:86:954:9 | { ... } | test.rs:951:21:954:10 | conn.query_fold(...) [Ok] | provenance | MaD:68 | -| test.rs:953:13:953:21 | ... + ... | test.rs:951:86:954:9 | { ... } | provenance | | -| test.rs:953:19:953:21 | row | test.rs:953:13:953:21 | ... + ... | provenance | MaD:56 | -| test.rs:953:19:953:21 | row | test.rs:953:13:953:21 | ... + ... | provenance | MaD:57 | -| test.rs:953:19:953:21 | row | test.rs:953:13:953:21 | ... + ... | provenance | MaD:104 | -| test.rs:992:13:992:14 | v1 | test.rs:993:14:993:15 | v1 | provenance | | -| test.rs:992:24:992:33 | row.get(...) [Some] | test.rs:992:24:992:42 | ... .unwrap() | provenance | MaD:106 | -| test.rs:992:24:992:42 | ... .unwrap() | test.rs:992:13:992:14 | v1 | provenance | | -| test.rs:992:28:992:30 | get | test.rs:992:24:992:33 | row.get(...) [Some] | provenance | Src:MaD:16 | -| test.rs:995:13:995:14 | v2 | test.rs:996:14:996:15 | v2 | provenance | | -| test.rs:995:24:995:37 | row.get_opt(...) [Some, Ok] | test.rs:995:24:995:46 | ... .unwrap() [Ok] | provenance | MaD:106 | -| test.rs:995:24:995:46 | ... .unwrap() [Ok] | test.rs:995:24:995:55 | ... .unwrap() | provenance | MaD:110 | -| test.rs:995:24:995:55 | ... .unwrap() | test.rs:995:13:995:14 | v2 | provenance | | -| test.rs:995:28:995:34 | get_opt | test.rs:995:24:995:37 | row.get_opt(...) [Some, Ok] | provenance | Src:MaD:17 | -| test.rs:998:13:998:14 | v3 | test.rs:999:14:999:15 | v3 | provenance | | -| test.rs:998:24:998:34 | row.take(...) [Some] | test.rs:998:24:998:43 | ... .unwrap() | provenance | MaD:106 | -| test.rs:998:24:998:43 | ... .unwrap() | test.rs:998:13:998:14 | v3 | provenance | | -| test.rs:998:28:998:31 | take | test.rs:998:24:998:34 | row.take(...) [Some] | provenance | Src:MaD:18 | -| test.rs:1001:13:1001:14 | v4 | test.rs:1002:14:1002:15 | v4 | provenance | | -| test.rs:1001:24:1001:38 | row.take_opt(...) [Some, Ok] | test.rs:1001:24:1001:47 | ... .unwrap() [Ok] | provenance | MaD:106 | -| test.rs:1001:24:1001:47 | ... .unwrap() [Ok] | test.rs:1001:24:1001:56 | ... .unwrap() | provenance | MaD:110 | -| test.rs:1001:24:1001:56 | ... .unwrap() | test.rs:1001:13:1001:14 | v4 | provenance | | -| test.rs:1001:28:1001:35 | take_opt | test.rs:1001:24:1001:38 | row.take_opt(...) [Some, Ok] | provenance | Src:MaD:19 | -| test.rs:1022:22:1022:30 | query_map | test.rs:1024:14:1024:24 | ...: i64 | provenance | Src:MaD:5 | -| test.rs:1024:14:1024:24 | ...: i64 | test.rs:1025:22:1025:27 | values | provenance | | -| test.rs:1038:13:1038:17 | total | test.rs:1042:14:1042:18 | total | provenance | | -| test.rs:1038:21:1041:10 | conn.query_fold(...) [future, Ok] | test.rs:1038:21:1041:16 | await ... [Ok] | provenance | | -| test.rs:1038:21:1041:16 | await ... [Ok] | test.rs:1038:21:1041:17 | TryExpr | provenance | | -| test.rs:1038:21:1041:17 | TryExpr | test.rs:1038:13:1038:17 | total | provenance | | -| test.rs:1038:26:1038:35 | query_fold | test.rs:1038:76:1038:83 | ...: i64 | provenance | Src:MaD:4 | -| test.rs:1038:76:1038:83 | ...: i64 | test.rs:1038:86:1041:9 | { ... } | provenance | | -| test.rs:1038:76:1038:83 | ...: i64 | test.rs:1039:18:1039:20 | row | provenance | | -| test.rs:1038:76:1038:83 | ...: i64 | test.rs:1040:19:1040:21 | row | provenance | | -| test.rs:1038:86:1041:9 | { ... } | test.rs:1038:21:1041:10 | conn.query_fold(...) [future, Ok] | provenance | MaD:69 | -| test.rs:1040:13:1040:21 | ... + ... | test.rs:1038:86:1041:9 | { ... } | provenance | | -| test.rs:1040:19:1040:21 | row | test.rs:1040:13:1040:21 | ... + ... | provenance | MaD:56 | -| test.rs:1040:19:1040:21 | row | test.rs:1040:13:1040:21 | ... + ... | provenance | MaD:57 | -| test.rs:1040:19:1040:21 | row | test.rs:1040:13:1040:21 | ... + ... | provenance | MaD:104 | -| test_futures_io.rs:19:9:19:11 | tcp | test_futures_io.rs:20:11:20:13 | tcp | provenance | | -| test_futures_io.rs:19:9:19:11 | tcp | test_futures_io.rs:26:53:26:55 | tcp | provenance | | -| test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:19:15:19:37 | ...::connect(...) [future, Ok] | provenance | Src:MaD:13 | -| test_futures_io.rs:19:15:19:37 | ...::connect(...) [future, Ok] | test_futures_io.rs:19:15:19:43 | await ... [Ok] | provenance | | -| test_futures_io.rs:19:15:19:43 | await ... [Ok] | test_futures_io.rs:19:15:19:44 | TryExpr | provenance | | -| test_futures_io.rs:19:15:19:44 | TryExpr | test_futures_io.rs:19:9:19:11 | tcp | provenance | | -| test_futures_io.rs:20:11:20:13 | tcp | test_futures_io.rs:20:10:20:13 | &tcp | provenance | | -| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:27:11:27:16 | reader | provenance | | -| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:32:40:32:45 | reader | provenance | | -| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:45:64:45:69 | reader | provenance | | -| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:27:49:32 | reader | provenance | | -| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:64 | -| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:65 | -| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:54:51:54:56 | reader | provenance | | -| test_futures_io.rs:26:22:26:56 | connector.connect(...) [future, Ok] | test_futures_io.rs:26:22:26:62 | await ... [Ok] | provenance | | -| test_futures_io.rs:26:22:26:62 | await ... [Ok] | test_futures_io.rs:26:22:26:63 | TryExpr | provenance | | -| test_futures_io.rs:26:22:26:63 | TryExpr | test_futures_io.rs:26:9:26:18 | mut reader | provenance | | -| test_futures_io.rs:26:53:26:55 | tcp | test_futures_io.rs:26:22:26:56 | connector.connect(...) [future, Ok] | provenance | MaD:112 | -| test_futures_io.rs:27:11:27:16 | reader | test_futures_io.rs:27:10:27:16 | &reader | provenance | | -| test_futures_io.rs:32:13:32:22 | mut pinned | test_futures_io.rs:33:15:33:20 | pinned | provenance | | -| test_futures_io.rs:32:13:32:22 | mut pinned | test_futures_io.rs:35:52:35:62 | [post] &mut buffer [&ref] | provenance | MaD:113 | -| test_futures_io.rs:32:13:32:22 | mut pinned [&ref] | test_futures_io.rs:33:15:33:20 | pinned [&ref] | provenance | | -| test_futures_io.rs:32:13:32:22 | mut pinned [&ref] | test_futures_io.rs:35:52:35:62 | [post] &mut buffer [&ref] | provenance | MaD:113 | -| test_futures_io.rs:32:26:32:46 | ...::new(...) | test_futures_io.rs:32:13:32:22 | mut pinned | provenance | | -| test_futures_io.rs:32:26:32:46 | ...::new(...) [&ref] | test_futures_io.rs:32:13:32:22 | mut pinned [&ref] | provenance | | -| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) | provenance | MaD:107 | -| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) [&ref] | provenance | MaD:108 | -| test_futures_io.rs:32:40:32:45 | reader | test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | provenance | | -| test_futures_io.rs:33:15:33:20 | pinned | test_futures_io.rs:33:14:33:20 | &pinned | provenance | | -| test_futures_io.rs:33:15:33:20 | pinned [&ref] | test_futures_io.rs:33:14:33:20 | &pinned | provenance | | -| test_futures_io.rs:35:52:35:62 | [post] &mut buffer [&ref] | test_futures_io.rs:35:57:35:62 | [post] buffer | provenance | | -| test_futures_io.rs:35:57:35:62 | [post] buffer | test_futures_io.rs:37:19:37:24 | buffer | provenance | | -| test_futures_io.rs:35:57:35:62 | [post] buffer | test_futures_io.rs:38:19:38:29 | buffer[...] | provenance | | -| test_futures_io.rs:37:19:37:24 | buffer | test_futures_io.rs:37:18:37:24 | &buffer | provenance | | -| test_futures_io.rs:38:19:38:29 | buffer[...] | test_futures_io.rs:38:18:38:29 | &... | provenance | | -| test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | provenance | MaD:64 | -| test_futures_io.rs:45:64:45:69 | reader | test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | provenance | | -| test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | test_futures_io.rs:45:77:45:83 | [post] buffer1 | provenance | | -| test_futures_io.rs:45:77:45:83 | [post] buffer1 | test_futures_io.rs:46:15:46:36 | buffer1[...] | provenance | | -| test_futures_io.rs:46:15:46:36 | buffer1[...] | test_futures_io.rs:46:14:46:36 | &... | provenance | | -| test_futures_io.rs:49:27:49:32 | reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:64 | -| test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | test_futures_io.rs:49:44:49:50 | [post] buffer2 | provenance | | -| test_futures_io.rs:49:44:49:50 | [post] buffer2 | test_futures_io.rs:51:15:51:36 | buffer2[...] | provenance | | -| test_futures_io.rs:51:15:51:36 | buffer2[...] | test_futures_io.rs:51:14:51:36 | &... | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:55:11:55:17 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:59:40:59:46 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:69:37:69:43 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:83:22:83:39 | reader2.fill_buf() [future, Ok] | provenance | MaD:59 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:90:40:90:46 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:103:64:103:70 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:27:107:33 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:64 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:65 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:113:40:113:46 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:125:22:125:39 | reader2.fill_buf() [future, Ok] | provenance | MaD:59 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:27:132:33 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:62 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:63 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:27:139:33 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:60 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:61 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:27:146:33 | reader2 | provenance | | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:66 | -| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:67 | -| test_futures_io.rs:54:23:54:57 | ...::new(...) | test_futures_io.rs:54:9:54:19 | mut reader2 | provenance | | -| test_futures_io.rs:54:51:54:56 | reader | test_futures_io.rs:54:23:54:57 | ...::new(...) | provenance | MaD:114 | -| test_futures_io.rs:55:11:55:17 | reader2 | test_futures_io.rs:55:10:55:17 | &reader2 | provenance | | -| test_futures_io.rs:59:13:59:22 | mut pinned | test_futures_io.rs:60:15:60:20 | pinned | provenance | | -| test_futures_io.rs:59:13:59:22 | mut pinned | test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:58 | -| test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | test_futures_io.rs:60:15:60:20 | pinned [&ref] | provenance | | -| test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:58 | -| test_futures_io.rs:59:26:59:47 | ...::new(...) | test_futures_io.rs:59:13:59:22 | mut pinned | provenance | | -| test_futures_io.rs:59:26:59:47 | ...::new(...) [&ref] | test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | provenance | | -| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) | provenance | MaD:107 | -| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) [&ref] | provenance | MaD:108 | -| test_futures_io.rs:59:40:59:46 | reader2 | test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | provenance | | -| test_futures_io.rs:60:15:60:20 | pinned | test_futures_io.rs:60:14:60:20 | &pinned | provenance | | -| test_futures_io.rs:60:15:60:20 | pinned [&ref] | test_futures_io.rs:60:14:60:20 | &pinned | provenance | | -| test_futures_io.rs:62:13:62:18 | buffer [Ready, Ok] | test_futures_io.rs:63:16:63:35 | ...::Ready(...) [Ready, Ok] | provenance | | -| test_futures_io.rs:62:13:62:18 | buffer [Ready, Ok] | test_futures_io.rs:64:19:64:24 | buffer [Ready, Ok] | provenance | | -| test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | test_futures_io.rs:62:13:62:18 | buffer [Ready, Ok] | provenance | | -| test_futures_io.rs:63:16:63:35 | ...::Ready(...) [Ready, Ok] | test_futures_io.rs:63:28:63:34 | Ok(...) [Ok] | provenance | | -| test_futures_io.rs:63:28:63:34 | Ok(...) [Ok] | test_futures_io.rs:63:31:63:33 | buf | provenance | | -| test_futures_io.rs:63:31:63:33 | buf | test_futures_io.rs:65:18:65:20 | buf | provenance | | -| test_futures_io.rs:64:19:64:24 | buffer [Ready, Ok] | test_futures_io.rs:64:18:64:24 | &buffer | provenance | | -| test_futures_io.rs:69:13:69:19 | buffer2 [Ready, Ok] | test_futures_io.rs:70:16:70:22 | buffer2 [Ready, Ok] | provenance | | -| test_futures_io.rs:69:23:69:44 | ...::new(...) | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:58 | -| test_futures_io.rs:69:23:69:44 | ...::new(...) [&ref] | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:58 | -| test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | test_futures_io.rs:69:13:69:19 | buffer2 [Ready, Ok] | provenance | | -| test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | test_futures_io.rs:69:23:69:44 | ...::new(...) | provenance | MaD:107 | -| test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | test_futures_io.rs:69:23:69:44 | ...::new(...) [&ref] | provenance | MaD:108 | -| test_futures_io.rs:69:37:69:43 | reader2 | test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | provenance | | -| test_futures_io.rs:70:16:70:22 | buffer2 [Ready, Ok] | test_futures_io.rs:71:13:71:32 | ...::Ready(...) [Ready, Ok] | provenance | | -| test_futures_io.rs:70:16:70:22 | buffer2 [Ready, Ok] | test_futures_io.rs:72:23:72:29 | buffer2 [Ready, Ok] | provenance | | -| test_futures_io.rs:71:13:71:32 | ...::Ready(...) [Ready, Ok] | test_futures_io.rs:71:25:71:31 | Ok(...) [Ok] | provenance | | -| test_futures_io.rs:71:25:71:31 | Ok(...) [Ok] | test_futures_io.rs:71:28:71:30 | buf | provenance | | -| test_futures_io.rs:71:28:71:30 | buf | test_futures_io.rs:73:22:73:24 | buf | provenance | | -| test_futures_io.rs:72:23:72:29 | buffer2 [Ready, Ok] | test_futures_io.rs:72:22:72:29 | &buffer2 | provenance | | -| test_futures_io.rs:83:13:83:18 | buffer | test_futures_io.rs:84:14:84:19 | buffer | provenance | | -| test_futures_io.rs:83:22:83:39 | reader2.fill_buf() [future, Ok] | test_futures_io.rs:83:22:83:45 | await ... [Ok] | provenance | | -| test_futures_io.rs:83:22:83:45 | await ... [Ok] | test_futures_io.rs:83:22:83:46 | TryExpr | provenance | | -| test_futures_io.rs:83:22:83:46 | TryExpr | test_futures_io.rs:83:13:83:18 | buffer | provenance | | -| test_futures_io.rs:90:13:90:22 | mut pinned | test_futures_io.rs:91:15:91:20 | pinned | provenance | | -| test_futures_io.rs:90:13:90:22 | mut pinned [&ref] | test_futures_io.rs:91:15:91:20 | pinned [&ref] | provenance | | -| test_futures_io.rs:90:26:90:47 | ...::new(...) | test_futures_io.rs:90:13:90:22 | mut pinned | provenance | | -| test_futures_io.rs:90:26:90:47 | ...::new(...) [&ref] | test_futures_io.rs:90:13:90:22 | mut pinned [&ref] | provenance | | -| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) | provenance | MaD:107 | -| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) [&ref] | provenance | MaD:108 | -| test_futures_io.rs:90:40:90:46 | reader2 | test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | provenance | | -| test_futures_io.rs:91:15:91:20 | pinned | test_futures_io.rs:91:14:91:20 | &pinned | provenance | | -| test_futures_io.rs:91:15:91:20 | pinned [&ref] | test_futures_io.rs:91:14:91:20 | &pinned | provenance | | -| test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | provenance | MaD:64 | -| test_futures_io.rs:103:64:103:70 | reader2 | test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | provenance | | -| test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | test_futures_io.rs:103:78:103:84 | [post] buffer1 | provenance | | -| test_futures_io.rs:103:78:103:84 | [post] buffer1 | test_futures_io.rs:104:15:104:36 | buffer1[...] | provenance | | -| test_futures_io.rs:104:15:104:36 | buffer1[...] | test_futures_io.rs:104:14:104:36 | &... | provenance | | -| test_futures_io.rs:107:27:107:33 | reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:64 | -| test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | test_futures_io.rs:107:45:107:51 | [post] buffer2 | provenance | | -| test_futures_io.rs:107:45:107:51 | [post] buffer2 | test_futures_io.rs:108:15:108:36 | buffer2[...] | provenance | | -| test_futures_io.rs:108:15:108:36 | buffer2[...] | test_futures_io.rs:108:14:108:36 | &... | provenance | | -| test_futures_io.rs:113:13:113:22 | mut pinned | test_futures_io.rs:114:15:114:20 | pinned | provenance | | -| test_futures_io.rs:113:13:113:22 | mut pinned | test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:58 | -| test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | test_futures_io.rs:114:15:114:20 | pinned [&ref] | provenance | | -| test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:58 | -| test_futures_io.rs:113:26:113:47 | ...::new(...) | test_futures_io.rs:113:13:113:22 | mut pinned | provenance | | -| test_futures_io.rs:113:26:113:47 | ...::new(...) [&ref] | test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | provenance | | -| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) | provenance | MaD:107 | -| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) [&ref] | provenance | MaD:108 | -| test_futures_io.rs:113:40:113:46 | reader2 | test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | provenance | | -| test_futures_io.rs:114:15:114:20 | pinned | test_futures_io.rs:114:14:114:20 | &pinned | provenance | | -| test_futures_io.rs:114:15:114:20 | pinned [&ref] | test_futures_io.rs:114:14:114:20 | &pinned | provenance | | -| test_futures_io.rs:116:13:116:18 | buffer [Ready, Ok] | test_futures_io.rs:117:15:117:20 | buffer [Ready, Ok] | provenance | | -| test_futures_io.rs:116:13:116:18 | buffer [Ready, Ok] | test_futures_io.rs:118:16:118:35 | ...::Ready(...) [Ready, Ok] | provenance | | -| test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | test_futures_io.rs:116:13:116:18 | buffer [Ready, Ok] | provenance | | -| test_futures_io.rs:117:15:117:20 | buffer [Ready, Ok] | test_futures_io.rs:117:14:117:20 | &buffer | provenance | | -| test_futures_io.rs:118:16:118:35 | ...::Ready(...) [Ready, Ok] | test_futures_io.rs:118:28:118:34 | Ok(...) [Ok] | provenance | | -| test_futures_io.rs:118:28:118:34 | Ok(...) [Ok] | test_futures_io.rs:118:31:118:33 | buf | provenance | | -| test_futures_io.rs:118:31:118:33 | buf | test_futures_io.rs:119:18:119:20 | buf | provenance | | -| test_futures_io.rs:125:13:125:18 | buffer | test_futures_io.rs:126:14:126:19 | buffer | provenance | | -| test_futures_io.rs:125:22:125:39 | reader2.fill_buf() [future, Ok] | test_futures_io.rs:125:22:125:45 | await ... [Ok] | provenance | | -| test_futures_io.rs:125:22:125:45 | await ... [Ok] | test_futures_io.rs:125:22:125:46 | TryExpr | provenance | | -| test_futures_io.rs:125:22:125:46 | TryExpr | test_futures_io.rs:125:13:125:18 | buffer | provenance | | -| test_futures_io.rs:132:27:132:33 | reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:62 | -| test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | test_futures_io.rs:132:58:132:61 | [post] line | provenance | | -| test_futures_io.rs:132:58:132:61 | [post] line | test_futures_io.rs:133:15:133:18 | line | provenance | | -| test_futures_io.rs:133:15:133:18 | line | test_futures_io.rs:133:14:133:18 | &line | provenance | | -| test_futures_io.rs:139:27:139:33 | reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:60 | -| test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | test_futures_io.rs:139:50:139:53 | [post] line | provenance | | -| test_futures_io.rs:139:50:139:53 | [post] line | test_futures_io.rs:140:15:140:18 | line | provenance | | -| test_futures_io.rs:140:15:140:18 | line | test_futures_io.rs:140:14:140:18 | &line | provenance | | -| test_futures_io.rs:146:27:146:33 | reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:66 | -| test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | test_futures_io.rs:146:52:146:57 | [post] buffer | provenance | | -| test_futures_io.rs:146:52:146:57 | [post] buffer | test_futures_io.rs:147:15:147:20 | buffer | provenance | | -| test_futures_io.rs:147:15:147:20 | buffer | test_futures_io.rs:147:14:147:20 | &buffer | provenance | | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:14 | a | provenance | | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:14 | a | provenance | | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:103 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:103 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:14 | a | provenance | | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:14 | a | provenance | | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:102 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:102 | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:15:14:15:14 | a | provenance | | -| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:15:14:15:14 | a | provenance | | -| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:103 | -| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:103 | -| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:102 | -| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:102 | -| web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | provenance | | -| web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | provenance | | -| web_frameworks.rs:98:9:98:31 | ...: ...::Path::<...> | web_frameworks.rs:100:17:100:33 | path.into_inner() | provenance | MaD:101 | -| web_frameworks.rs:98:9:98:31 | ...: ...::Path::<...> | web_frameworks.rs:100:17:100:33 | path.into_inner() [tuple.0] | provenance | MaD:97 | -| web_frameworks.rs:98:9:98:31 | ...: ...::Path::<...> | web_frameworks.rs:100:17:100:33 | path.into_inner() [tuple.1] | provenance | MaD:98 | -| web_frameworks.rs:98:9:98:31 | ...: ...::Path::<...> | web_frameworks.rs:100:17:100:33 | path.into_inner() [tuple.2] | provenance | MaD:99 | -| web_frameworks.rs:98:9:98:31 | ...: ...::Path::<...> | web_frameworks.rs:100:17:100:33 | path.into_inner() [tuple.3] | provenance | MaD:100 | -| web_frameworks.rs:100:13:100:13 | a | web_frameworks.rs:101:14:101:14 | a | provenance | | -| web_frameworks.rs:100:13:100:13 | a | web_frameworks.rs:101:14:101:23 | a.as_str() | provenance | MaD:103 | -| web_frameworks.rs:100:13:100:13 | a | web_frameworks.rs:102:14:102:14 | a | provenance | | -| web_frameworks.rs:100:13:100:13 | a | web_frameworks.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:102 | -| web_frameworks.rs:100:13:100:13 | a | web_frameworks.rs:103:14:103:14 | a | provenance | | -| web_frameworks.rs:100:13:100:13 | a [tuple.0] | web_frameworks.rs:101:14:101:14 | a [tuple.0] | provenance | | -| web_frameworks.rs:100:13:100:13 | a [tuple.0] | web_frameworks.rs:101:14:101:23 | a.as_str() | provenance | MaD:103 | -| web_frameworks.rs:100:13:100:13 | a [tuple.0] | web_frameworks.rs:102:14:102:14 | a [tuple.0] | provenance | | -| web_frameworks.rs:100:13:100:13 | a [tuple.0] | web_frameworks.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:102 | -| web_frameworks.rs:100:13:100:13 | a [tuple.0] | web_frameworks.rs:103:14:103:14 | a | provenance | | -| web_frameworks.rs:100:13:100:13 | a [tuple.1] | web_frameworks.rs:101:14:101:14 | a [tuple.1] | provenance | | -| web_frameworks.rs:100:13:100:13 | a [tuple.1] | web_frameworks.rs:101:14:101:23 | a.as_str() | provenance | MaD:103 | -| web_frameworks.rs:100:13:100:13 | a [tuple.1] | web_frameworks.rs:102:14:102:14 | a [tuple.1] | provenance | | -| web_frameworks.rs:100:13:100:13 | a [tuple.1] | web_frameworks.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:102 | -| web_frameworks.rs:100:13:100:13 | a [tuple.1] | web_frameworks.rs:103:14:103:14 | a | provenance | | -| web_frameworks.rs:100:13:100:13 | a [tuple.2] | web_frameworks.rs:101:14:101:14 | a [tuple.2] | provenance | | -| web_frameworks.rs:100:13:100:13 | a [tuple.2] | web_frameworks.rs:101:14:101:23 | a.as_str() | provenance | MaD:103 | -| web_frameworks.rs:100:13:100:13 | a [tuple.2] | web_frameworks.rs:102:14:102:14 | a [tuple.2] | provenance | | -| web_frameworks.rs:100:13:100:13 | a [tuple.2] | web_frameworks.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:102 | -| web_frameworks.rs:100:13:100:13 | a [tuple.2] | web_frameworks.rs:103:14:103:14 | a | provenance | | -| web_frameworks.rs:100:13:100:13 | a [tuple.3] | web_frameworks.rs:101:14:101:14 | a [tuple.3] | provenance | | -| web_frameworks.rs:100:13:100:13 | a [tuple.3] | web_frameworks.rs:101:14:101:23 | a.as_str() | provenance | MaD:103 | -| web_frameworks.rs:100:13:100:13 | a [tuple.3] | web_frameworks.rs:102:14:102:14 | a [tuple.3] | provenance | | -| web_frameworks.rs:100:13:100:13 | a [tuple.3] | web_frameworks.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:102 | -| web_frameworks.rs:100:13:100:13 | a [tuple.3] | web_frameworks.rs:103:14:103:14 | a | provenance | | -| web_frameworks.rs:100:17:100:33 | path.into_inner() | web_frameworks.rs:100:13:100:13 | a | provenance | | -| web_frameworks.rs:100:17:100:33 | path.into_inner() [tuple.0] | web_frameworks.rs:100:13:100:13 | a [tuple.0] | provenance | | -| web_frameworks.rs:100:17:100:33 | path.into_inner() [tuple.1] | web_frameworks.rs:100:13:100:13 | a [tuple.1] | provenance | | -| web_frameworks.rs:100:17:100:33 | path.into_inner() [tuple.2] | web_frameworks.rs:100:13:100:13 | a [tuple.2] | provenance | | -| web_frameworks.rs:100:17:100:33 | path.into_inner() [tuple.3] | web_frameworks.rs:100:13:100:13 | a [tuple.3] | provenance | | -| web_frameworks.rs:101:14:101:14 | a | web_frameworks.rs:101:14:101:23 | a.as_str() | provenance | MaD:103 | -| web_frameworks.rs:101:14:101:14 | a [tuple.0] | web_frameworks.rs:101:14:101:23 | a.as_str() | provenance | MaD:103 | -| web_frameworks.rs:101:14:101:14 | a [tuple.1] | web_frameworks.rs:101:14:101:23 | a.as_str() | provenance | MaD:103 | -| web_frameworks.rs:101:14:101:14 | a [tuple.2] | web_frameworks.rs:101:14:101:23 | a.as_str() | provenance | MaD:103 | -| web_frameworks.rs:101:14:101:14 | a [tuple.3] | web_frameworks.rs:101:14:101:23 | a.as_str() | provenance | MaD:103 | -| web_frameworks.rs:102:14:102:14 | a | web_frameworks.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:102 | -| web_frameworks.rs:102:14:102:14 | a [tuple.0] | web_frameworks.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:102 | -| web_frameworks.rs:102:14:102:14 | a [tuple.1] | web_frameworks.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:102 | -| web_frameworks.rs:102:14:102:14 | a [tuple.2] | web_frameworks.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:102 | -| web_frameworks.rs:102:14:102:14 | a [tuple.3] | web_frameworks.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:102 | -| web_frameworks.rs:109:9:109:41 | ...: ...::Path::<...> | web_frameworks.rs:111:22:111:38 | path.into_inner() [tuple.0] | provenance | MaD:97 | -| web_frameworks.rs:109:9:109:41 | ...: ...::Path::<...> | web_frameworks.rs:111:22:111:38 | path.into_inner() [tuple.1] | provenance | MaD:98 | -| web_frameworks.rs:111:13:111:18 | TuplePat [tuple.0] | web_frameworks.rs:111:14:111:14 | a | provenance | | -| web_frameworks.rs:111:13:111:18 | TuplePat [tuple.1] | web_frameworks.rs:111:17:111:17 | b | provenance | | -| web_frameworks.rs:111:14:111:14 | a | web_frameworks.rs:113:14:113:14 | a | provenance | | -| web_frameworks.rs:111:17:111:17 | b | web_frameworks.rs:114:14:114:14 | b | provenance | | -| web_frameworks.rs:111:22:111:38 | path.into_inner() [tuple.0] | web_frameworks.rs:111:13:111:18 | TuplePat [tuple.0] | provenance | | -| web_frameworks.rs:111:22:111:38 | path.into_inner() [tuple.1] | web_frameworks.rs:111:13:111:18 | TuplePat [tuple.1] | provenance | | -| web_frameworks.rs:127:5:127:20 | to | web_frameworks.rs:129:9:129:31 | ...: ...::Path::<...> | provenance | Src:MaD:9 | -| web_frameworks.rs:129:9:129:31 | ...: ...::Path::<...> | web_frameworks.rs:131:17:131:33 | path.into_inner() | provenance | MaD:101 | -| web_frameworks.rs:129:9:129:31 | ...: ...::Path::<...> | web_frameworks.rs:131:17:131:33 | path.into_inner() [tuple.0] | provenance | MaD:97 | -| web_frameworks.rs:129:9:129:31 | ...: ...::Path::<...> | web_frameworks.rs:131:17:131:33 | path.into_inner() [tuple.1] | provenance | MaD:98 | -| web_frameworks.rs:129:9:129:31 | ...: ...::Path::<...> | web_frameworks.rs:131:17:131:33 | path.into_inner() [tuple.2] | provenance | MaD:99 | -| web_frameworks.rs:129:9:129:31 | ...: ...::Path::<...> | web_frameworks.rs:131:17:131:33 | path.into_inner() [tuple.3] | provenance | MaD:100 | -| web_frameworks.rs:131:13:131:13 | a | web_frameworks.rs:132:14:132:14 | a | provenance | | -| web_frameworks.rs:131:13:131:13 | a [tuple.0] | web_frameworks.rs:132:14:132:14 | a | provenance | | -| web_frameworks.rs:131:13:131:13 | a [tuple.1] | web_frameworks.rs:132:14:132:14 | a | provenance | | -| web_frameworks.rs:131:13:131:13 | a [tuple.2] | web_frameworks.rs:132:14:132:14 | a | provenance | | -| web_frameworks.rs:131:13:131:13 | a [tuple.3] | web_frameworks.rs:132:14:132:14 | a | provenance | | -| web_frameworks.rs:131:17:131:33 | path.into_inner() | web_frameworks.rs:131:13:131:13 | a | provenance | | -| web_frameworks.rs:131:17:131:33 | path.into_inner() [tuple.0] | web_frameworks.rs:131:13:131:13 | a [tuple.0] | provenance | | -| web_frameworks.rs:131:17:131:33 | path.into_inner() [tuple.1] | web_frameworks.rs:131:13:131:13 | a [tuple.1] | provenance | | -| web_frameworks.rs:131:17:131:33 | path.into_inner() [tuple.2] | web_frameworks.rs:131:13:131:13 | a [tuple.2] | provenance | | -| web_frameworks.rs:131:17:131:33 | path.into_inner() [tuple.3] | web_frameworks.rs:131:13:131:13 | a [tuple.3] | provenance | | -| web_frameworks.rs:139:41:139:42 | to | web_frameworks.rs:98:9:98:31 | ...: ...::Path::<...> | provenance | Src:MaD:10 | -| web_frameworks.rs:140:45:140:46 | to | web_frameworks.rs:109:9:109:41 | ...: ...::Path::<...> | provenance | Src:MaD:10 | -| web_frameworks.rs:242:33:242:35 | map | web_frameworks.rs:242:38:242:46 | ...: String | provenance | Src:MaD:7 | -| web_frameworks.rs:242:33:242:35 | map | web_frameworks.rs:242:38:242:46 | ...: String | provenance | Src:MaD:7 | -| web_frameworks.rs:242:38:242:46 | ...: String | web_frameworks.rs:244:18:244:18 | a | provenance | | -| web_frameworks.rs:242:38:242:46 | ...: String | web_frameworks.rs:244:18:244:18 | a | provenance | | -| web_frameworks.rs:250:46:250:49 | then | web_frameworks.rs:251:25:251:33 | ...: String | provenance | Src:MaD:8 | -| web_frameworks.rs:250:46:250:49 | then | web_frameworks.rs:251:25:251:33 | ...: String | provenance | Src:MaD:8 | -| web_frameworks.rs:251:25:251:33 | ...: String | web_frameworks.rs:252:22:252:22 | a | provenance | | -| web_frameworks.rs:251:25:251:33 | ...: String | web_frameworks.rs:252:22:252:22 | a | provenance | | -| web_frameworks.rs:259:50:259:57 | and_then | web_frameworks.rs:260:26:260:32 | ...: u64 | provenance | Src:MaD:6 | -| web_frameworks.rs:259:50:259:57 | and_then | web_frameworks.rs:260:26:260:32 | ...: u64 | provenance | Src:MaD:6 | -| web_frameworks.rs:260:26:260:32 | ...: u64 | web_frameworks.rs:263:22:263:23 | id | provenance | | -| web_frameworks.rs:260:26:260:32 | ...: u64 | web_frameworks.rs:263:22:263:23 | id | provenance | | -| web_frameworks.rs:272:75:272:77 | map | web_frameworks.rs:273:15:273:23 | ...: String | provenance | Src:MaD:7 | -| web_frameworks.rs:272:75:272:77 | map | web_frameworks.rs:273:15:273:23 | ...: String | provenance | Src:MaD:7 | -| web_frameworks.rs:273:15:273:23 | ...: String | web_frameworks.rs:275:22:275:22 | a | provenance | | -| web_frameworks.rs:273:15:273:23 | ...: String | web_frameworks.rs:275:22:275:22 | a | provenance | | -nodes -| test.rs:8:10:8:22 | ...::var | semmle.label | ...::var | -| test.rs:8:10:8:30 | ...::var(...) | semmle.label | ...::var(...) | -| test.rs:9:10:9:25 | ...::var_os | semmle.label | ...::var_os | -| test.rs:9:10:9:33 | ...::var_os(...) | semmle.label | ...::var_os(...) | -| test.rs:11:9:11:12 | var1 | semmle.label | var1 | -| test.rs:11:16:11:28 | ...::var | semmle.label | ...::var | -| test.rs:11:16:11:36 | ...::var(...) [Ok] | semmle.label | ...::var(...) [Ok] | -| test.rs:11:16:11:59 | ... .expect(...) | semmle.label | ... .expect(...) | -| test.rs:12:9:12:12 | var2 | semmle.label | var2 | -| test.rs:12:16:12:31 | ...::var_os | semmle.label | ...::var_os | -| test.rs:12:16:12:39 | ...::var_os(...) [Some] | semmle.label | ...::var_os(...) [Some] | -| test.rs:12:16:12:48 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:14:10:14:13 | var1 | semmle.label | var1 | -| test.rs:15:10:15:13 | var2 | semmle.label | var2 | -| test.rs:29:9:29:12 | args [element] | semmle.label | args [element] | -| test.rs:29:29:29:42 | ...::args | semmle.label | ...::args | -| test.rs:29:29:29:44 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | -| test.rs:29:29:29:54 | ... .collect() [element] | semmle.label | ... .collect() [element] | -| test.rs:30:9:30:15 | my_path [&ref] | semmle.label | my_path [&ref] | -| test.rs:30:19:30:26 | &... [&ref] | semmle.label | &... [&ref] | -| test.rs:30:20:30:23 | args [element] | semmle.label | args [element] | -| test.rs:30:20:30:26 | args[0] | semmle.label | args[0] | -| test.rs:31:9:31:12 | arg1 [&ref] | semmle.label | arg1 [&ref] | -| test.rs:31:16:31:23 | &... [&ref] | semmle.label | &... [&ref] | -| test.rs:31:17:31:20 | args [element] | semmle.label | args [element] | -| test.rs:31:17:31:23 | args[1] | semmle.label | args[1] | -| test.rs:32:9:32:12 | arg2 | semmle.label | arg2 | -| test.rs:32:16:32:29 | ...::args | semmle.label | ...::args | -| test.rs:32:16:32:31 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | -| test.rs:32:16:32:38 | ... .nth(...) [Some] | semmle.label | ... .nth(...) [Some] | -| test.rs:32:16:32:47 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:33:9:33:12 | arg3 | semmle.label | arg3 | -| test.rs:33:16:33:32 | ...::args_os | semmle.label | ...::args_os | -| test.rs:33:16:33:34 | ...::args_os(...) [element] | semmle.label | ...::args_os(...) [element] | -| test.rs:33:16:33:41 | ... .nth(...) [Some] | semmle.label | ... .nth(...) [Some] | -| test.rs:33:16:33:50 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:34:9:34:12 | arg4 | semmle.label | arg4 | -| test.rs:34:16:34:29 | ...::args | semmle.label | ...::args | -| test.rs:34:16:34:31 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | -| test.rs:34:16:34:38 | ... .nth(...) [Some] | semmle.label | ... .nth(...) [Some] | -| test.rs:34:16:34:47 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:34:16:34:64 | ... .parse() [Ok] | semmle.label | ... .parse() [Ok] | -| test.rs:34:16:34:73 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:36:10:36:16 | my_path | semmle.label | my_path | -| test.rs:37:10:37:13 | arg1 | semmle.label | arg1 | -| test.rs:38:10:38:13 | arg2 | semmle.label | arg2 | -| test.rs:39:10:39:13 | arg3 | semmle.label | arg3 | -| test.rs:40:10:40:13 | arg4 | semmle.label | arg4 | -| test.rs:42:9:42:11 | arg | semmle.label | arg | -| test.rs:42:16:42:29 | ...::args | semmle.label | ...::args | -| test.rs:42:16:42:31 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | -| test.rs:43:14:43:16 | arg | semmle.label | arg | -| test.rs:46:9:46:11 | arg | semmle.label | arg | -| test.rs:46:16:46:32 | ...::args_os | semmle.label | ...::args_os | -| test.rs:46:16:46:34 | ...::args_os(...) [element] | semmle.label | ...::args_os(...) [element] | -| test.rs:47:14:47:16 | arg | semmle.label | arg | -| test.rs:52:9:52:11 | dir | semmle.label | dir | -| test.rs:52:15:52:35 | ...::current_dir | semmle.label | ...::current_dir | -| test.rs:52:15:52:37 | ...::current_dir(...) [Ok] | semmle.label | ...::current_dir(...) [Ok] | -| test.rs:52:15:52:54 | ... .expect(...) | semmle.label | ... .expect(...) | -| test.rs:53:9:53:11 | exe | semmle.label | exe | -| test.rs:53:15:53:35 | ...::current_exe | semmle.label | ...::current_exe | -| test.rs:53:15:53:37 | ...::current_exe(...) [Ok] | semmle.label | ...::current_exe(...) [Ok] | -| test.rs:53:15:53:54 | ... .expect(...) | semmle.label | ... .expect(...) | -| test.rs:54:9:54:12 | home | semmle.label | home | -| test.rs:54:16:54:33 | ...::home_dir | semmle.label | ...::home_dir | -| test.rs:54:16:54:35 | ...::home_dir(...) [Some] | semmle.label | ...::home_dir(...) [Some] | -| test.rs:54:16:54:52 | ... .expect(...) | semmle.label | ... .expect(...) | -| test.rs:56:10:56:12 | dir | semmle.label | dir | -| test.rs:57:10:57:12 | exe | semmle.label | exe | -| test.rs:58:10:58:13 | home | semmle.label | home | -| test.rs:62:9:62:22 | remote_string1 | semmle.label | remote_string1 | -| test.rs:62:26:62:47 | ...::get | semmle.label | ...::get | -| test.rs:62:26:62:62 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | -| test.rs:62:26:62:63 | TryExpr | semmle.label | TryExpr | -| test.rs:62:26:62:70 | ... .text() [Ok] | semmle.label | ... .text() [Ok] | -| test.rs:62:26:62:71 | TryExpr | semmle.label | TryExpr | -| test.rs:63:10:63:23 | remote_string1 | semmle.label | remote_string1 | -| test.rs:65:9:65:22 | remote_string2 | semmle.label | remote_string2 | -| test.rs:65:26:65:47 | ...::get | semmle.label | ...::get | -| test.rs:65:26:65:62 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | -| test.rs:65:26:65:71 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:65:26:65:78 | ... .text() [Ok] | semmle.label | ... .text() [Ok] | -| test.rs:65:26:65:87 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:66:10:66:23 | remote_string2 | semmle.label | remote_string2 | -| test.rs:68:9:68:22 | remote_string3 | semmle.label | remote_string3 | -| test.rs:68:26:68:47 | ...::get | semmle.label | ...::get | -| test.rs:68:26:68:62 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | -| test.rs:68:26:68:71 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | semmle.label | ... .text_with_charset(...) [Ok] | -| test.rs:68:26:68:107 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:69:10:69:23 | remote_string3 | semmle.label | remote_string3 | -| test.rs:71:9:71:22 | remote_string4 | semmle.label | remote_string4 | -| test.rs:71:26:71:47 | ...::get | semmle.label | ...::get | -| test.rs:71:26:71:62 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | -| test.rs:71:26:71:71 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:71:26:71:79 | ... .bytes() [Ok] | semmle.label | ... .bytes() [Ok] | -| test.rs:71:26:71:88 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:72:10:72:23 | remote_string4 | semmle.label | remote_string4 | -| test.rs:74:9:74:22 | remote_string5 | semmle.label | remote_string5 | -| test.rs:74:26:74:37 | ...::get | semmle.label | ...::get | -| test.rs:74:26:74:52 | ...::get(...) [future, Ok] | semmle.label | ...::get(...) [future, Ok] | -| test.rs:74:26:74:58 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:74:26:74:59 | TryExpr | semmle.label | TryExpr | -| test.rs:74:26:74:66 | ... .text() [future, Ok] | semmle.label | ... .text() [future, Ok] | -| test.rs:74:26:74:72 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:74:26:74:73 | TryExpr | semmle.label | TryExpr | -| test.rs:75:10:75:23 | remote_string5 | semmle.label | remote_string5 | -| test.rs:77:9:77:22 | remote_string6 | semmle.label | remote_string6 | -| test.rs:77:26:77:37 | ...::get | semmle.label | ...::get | -| test.rs:77:26:77:52 | ...::get(...) [future, Ok] | semmle.label | ...::get(...) [future, Ok] | -| test.rs:77:26:77:58 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:77:26:77:59 | TryExpr | semmle.label | TryExpr | -| test.rs:77:26:77:67 | ... .bytes() [future, Ok] | semmle.label | ... .bytes() [future, Ok] | -| test.rs:77:26:77:73 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:77:26:77:74 | TryExpr | semmle.label | TryExpr | -| test.rs:78:10:78:23 | remote_string6 | semmle.label | remote_string6 | -| test.rs:80:9:80:20 | mut request1 | semmle.label | mut request1 | -| test.rs:80:24:80:35 | ...::get | semmle.label | ...::get | -| test.rs:80:24:80:50 | ...::get(...) [future, Ok] | semmle.label | ...::get(...) [future, Ok] | -| test.rs:80:24:80:56 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:80:24:80:57 | TryExpr | semmle.label | TryExpr | -| test.rs:81:10:81:25 | request1.chunk() [future, Ok, Some] | semmle.label | request1.chunk() [future, Ok, Some] | -| test.rs:81:10:81:31 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | -| test.rs:81:10:81:32 | TryExpr [Some] | semmle.label | TryExpr [Some] | -| test.rs:81:10:81:41 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:82:15:82:25 | Some(...) [Some] | semmle.label | Some(...) [Some] | -| test.rs:82:20:82:24 | chunk | semmle.label | chunk | -| test.rs:82:29:82:44 | request1.chunk() [future, Ok, Some] | semmle.label | request1.chunk() [future, Ok, Some] | -| test.rs:82:29:82:50 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | -| test.rs:82:29:82:51 | TryExpr [Some] | semmle.label | TryExpr [Some] | -| test.rs:83:14:83:18 | chunk | semmle.label | chunk | -| test.rs:114:13:114:20 | response | semmle.label | response | -| test.rs:114:24:114:51 | sender.send_request(...) [future, Ok] | semmle.label | sender.send_request(...) [future, Ok] | -| test.rs:114:24:114:57 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:114:24:114:58 | TryExpr | semmle.label | TryExpr | -| test.rs:114:31:114:42 | send_request | semmle.label | send_request | -| test.rs:115:14:115:22 | &response | semmle.label | &response | -| test.rs:115:15:115:22 | response | semmle.label | response | -| test.rs:116:14:116:21 | response | semmle.label | response | -| test.rs:121:9:121:20 | mut response | semmle.label | mut response | -| test.rs:121:24:121:51 | sender.send_request(...) [future, Ok] | semmle.label | sender.send_request(...) [future, Ok] | -| test.rs:121:24:121:57 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:121:24:121:58 | TryExpr | semmle.label | TryExpr | -| test.rs:121:31:121:42 | send_request | semmle.label | send_request | -| test.rs:122:10:122:18 | &response | semmle.label | &response | -| test.rs:122:11:122:18 | response | semmle.label | response | -| test.rs:211:22:211:35 | ...::stdin | semmle.label | ...::stdin | -| test.rs:211:22:211:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:211:44:211:54 | [post] &mut buffer | semmle.label | [post] &mut buffer | -| test.rs:211:44:211:54 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:211:49:211:54 | [post] buffer | semmle.label | [post] buffer | -| test.rs:212:14:212:20 | &buffer | semmle.label | &buffer | -| test.rs:212:15:212:20 | buffer | semmle.label | buffer | -| test.rs:217:22:217:35 | ...::stdin | semmle.label | ...::stdin | -| test.rs:217:22:217:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:217:51:217:61 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:217:56:217:61 | [post] buffer | semmle.label | [post] buffer | -| test.rs:218:14:218:20 | &buffer | semmle.label | &buffer | -| test.rs:218:15:218:20 | buffer | semmle.label | buffer | -| test.rs:223:22:223:35 | ...::stdin | semmle.label | ...::stdin | -| test.rs:223:22:223:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:223:54:223:64 | [post] &mut buffer | semmle.label | [post] &mut buffer | -| test.rs:223:54:223:64 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:223:59:223:64 | [post] buffer | semmle.label | [post] buffer | -| test.rs:224:14:224:20 | &buffer | semmle.label | &buffer | -| test.rs:224:15:224:20 | buffer | semmle.label | buffer | -| test.rs:229:22:229:35 | ...::stdin | semmle.label | ...::stdin | -| test.rs:229:22:229:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:229:22:229:44 | ... .lock() | semmle.label | ... .lock() | -| test.rs:229:61:229:71 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:229:66:229:71 | [post] buffer | semmle.label | [post] buffer | -| test.rs:230:14:230:20 | &buffer | semmle.label | &buffer | -| test.rs:230:15:230:20 | buffer | semmle.label | buffer | -| test.rs:235:9:235:22 | ...::stdin | semmle.label | ...::stdin | -| test.rs:235:9:235:24 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:235:37:235:47 | [post] &mut buffer | semmle.label | [post] &mut buffer | -| test.rs:235:37:235:47 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:235:42:235:47 | [post] buffer | semmle.label | [post] buffer | -| test.rs:236:14:236:20 | &buffer | semmle.label | &buffer | -| test.rs:236:15:236:20 | buffer | semmle.label | buffer | -| test.rs:239:17:239:30 | ...::stdin | semmle.label | ...::stdin | -| test.rs:239:17:239:32 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:239:17:239:40 | ... .bytes() | semmle.label | ... .bytes() | -| test.rs:240:14:240:17 | byte | semmle.label | byte | -| test.rs:246:13:246:22 | mut reader | semmle.label | mut reader | -| test.rs:246:26:246:66 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:246:50:246:63 | ...::stdin | semmle.label | ...::stdin | -| test.rs:246:50:246:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:247:13:247:16 | data | semmle.label | data | -| test.rs:247:20:247:36 | reader.fill_buf() [Ok] | semmle.label | reader.fill_buf() [Ok] | -| test.rs:247:20:247:37 | TryExpr | semmle.label | TryExpr | -| test.rs:248:14:248:18 | &data | semmle.label | &data | -| test.rs:248:15:248:18 | data | semmle.label | data | -| test.rs:252:13:252:18 | reader | semmle.label | reader | -| test.rs:252:22:252:62 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:252:46:252:59 | ...::stdin | semmle.label | ...::stdin | -| test.rs:252:46:252:61 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:253:13:253:16 | data | semmle.label | data | -| test.rs:253:20:253:34 | reader.buffer() | semmle.label | reader.buffer() | -| test.rs:254:14:254:18 | &data | semmle.label | &data | -| test.rs:254:15:254:18 | data | semmle.label | data | -| test.rs:259:13:259:22 | mut reader | semmle.label | mut reader | -| test.rs:259:26:259:66 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:259:50:259:63 | ...::stdin | semmle.label | ...::stdin | -| test.rs:259:50:259:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:260:26:260:36 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:260:31:260:36 | [post] buffer | semmle.label | [post] buffer | -| test.rs:261:14:261:20 | &buffer | semmle.label | &buffer | -| test.rs:261:15:261:20 | buffer | semmle.label | buffer | -| test.rs:266:13:266:22 | mut reader | semmle.label | mut reader | -| test.rs:266:26:266:66 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:266:50:266:63 | ...::stdin | semmle.label | ...::stdin | -| test.rs:266:50:266:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:267:33:267:43 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:267:38:267:43 | [post] buffer | semmle.label | [post] buffer | -| test.rs:268:14:268:20 | &buffer | semmle.label | &buffer | -| test.rs:268:15:268:20 | buffer | semmle.label | buffer | -| test.rs:269:14:269:22 | buffer[0] | semmle.label | buffer[0] | -| test.rs:273:13:273:28 | mut reader_split | semmle.label | mut reader_split | -| test.rs:273:32:273:72 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:273:32:273:84 | ... .split(...) | semmle.label | ... .split(...) | -| test.rs:273:56:273:69 | ...::stdin | semmle.label | ...::stdin | -| test.rs:273:56:273:71 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | semmle.label | reader_split.next() [Some, Ok] | -| test.rs:274:14:274:41 | ... .unwrap() [Ok] | semmle.label | ... .unwrap() [Ok] | -| test.rs:274:14:274:50 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:275:19:275:29 | Some(...) [Some, Ok] | semmle.label | Some(...) [Some, Ok] | -| test.rs:275:24:275:28 | chunk [Ok] | semmle.label | chunk [Ok] | -| test.rs:275:33:275:51 | reader_split.next() [Some, Ok] | semmle.label | reader_split.next() [Some, Ok] | -| test.rs:276:18:276:31 | chunk.unwrap() | semmle.label | chunk.unwrap() | -| test.rs:281:13:281:18 | reader | semmle.label | reader | -| test.rs:281:22:281:62 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:281:46:281:59 | ...::stdin | semmle.label | ...::stdin | -| test.rs:281:46:281:61 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:282:21:282:34 | reader.lines() | semmle.label | reader.lines() | -| test.rs:283:18:283:21 | line | semmle.label | line | -| test.rs:309:13:309:21 | mut stdin | semmle.label | mut stdin | -| test.rs:309:25:309:40 | ...::stdin | semmle.label | ...::stdin | -| test.rs:309:25:309:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:311:33:311:43 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:311:38:311:43 | [post] buffer | semmle.label | [post] buffer | -| test.rs:312:14:312:20 | &buffer | semmle.label | &buffer | -| test.rs:312:15:312:20 | buffer | semmle.label | buffer | -| test.rs:316:13:316:21 | mut stdin | semmle.label | mut stdin | -| test.rs:316:25:316:40 | ...::stdin | semmle.label | ...::stdin | -| test.rs:316:25:316:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:318:40:318:50 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:318:45:318:50 | [post] buffer | semmle.label | [post] buffer | -| test.rs:319:14:319:20 | &buffer | semmle.label | &buffer | -| test.rs:319:15:319:20 | buffer | semmle.label | buffer | -| test.rs:323:13:323:21 | mut stdin | semmle.label | mut stdin | -| test.rs:323:25:323:40 | ...::stdin | semmle.label | ...::stdin | -| test.rs:323:25:323:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:325:43:325:53 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:325:48:325:53 | [post] buffer | semmle.label | [post] buffer | -| test.rs:326:14:326:20 | &buffer | semmle.label | &buffer | -| test.rs:326:15:326:20 | buffer | semmle.label | buffer | -| test.rs:330:13:330:21 | mut stdin | semmle.label | mut stdin | -| test.rs:330:25:330:40 | ...::stdin | semmle.label | ...::stdin | -| test.rs:330:25:330:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:332:26:332:36 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:332:31:332:36 | [post] buffer | semmle.label | [post] buffer | -| test.rs:333:14:333:20 | &buffer | semmle.label | &buffer | -| test.rs:333:15:333:20 | buffer | semmle.label | buffer | -| test.rs:337:13:337:21 | mut stdin | semmle.label | mut stdin | -| test.rs:337:25:337:40 | ...::stdin | semmle.label | ...::stdin | -| test.rs:337:25:337:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:338:13:338:14 | v1 | semmle.label | v1 | -| test.rs:338:18:338:32 | stdin.read_u8() [future, Ok] | semmle.label | stdin.read_u8() [future, Ok] | -| test.rs:338:18:338:38 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:338:18:338:39 | TryExpr | semmle.label | TryExpr | -| test.rs:339:13:339:14 | v2 | semmle.label | v2 | -| test.rs:339:18:339:33 | stdin.read_i16() [future, Ok] | semmle.label | stdin.read_i16() [future, Ok] | -| test.rs:339:18:339:39 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:339:18:339:40 | TryExpr | semmle.label | TryExpr | -| test.rs:340:13:340:14 | v3 | semmle.label | v3 | -| test.rs:340:18:340:33 | stdin.read_f32() [future, Ok] | semmle.label | stdin.read_f32() [future, Ok] | -| test.rs:340:18:340:39 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:340:18:340:40 | TryExpr | semmle.label | TryExpr | -| test.rs:341:13:341:14 | v4 | semmle.label | v4 | -| test.rs:341:18:341:36 | stdin.read_i64_le() [future, Ok] | semmle.label | stdin.read_i64_le() [future, Ok] | -| test.rs:341:18:341:42 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:341:18:341:43 | TryExpr | semmle.label | TryExpr | -| test.rs:342:14:342:15 | v1 | semmle.label | v1 | -| test.rs:343:14:343:15 | v2 | semmle.label | v2 | -| test.rs:344:14:344:15 | v3 | semmle.label | v3 | -| test.rs:345:14:345:15 | v4 | semmle.label | v4 | -| test.rs:349:13:349:21 | mut stdin | semmle.label | mut stdin | -| test.rs:349:25:349:40 | ...::stdin | semmle.label | ...::stdin | -| test.rs:349:25:349:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:351:24:351:34 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:351:29:351:34 | [post] buffer | semmle.label | [post] buffer | -| test.rs:352:14:352:20 | &buffer | semmle.label | &buffer | -| test.rs:352:15:352:20 | buffer | semmle.label | buffer | -| test.rs:358:13:358:22 | mut reader | semmle.label | mut reader | -| test.rs:358:26:358:70 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:358:52:358:67 | ...::stdin | semmle.label | ...::stdin | -| test.rs:358:52:358:69 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:359:13:359:16 | data | semmle.label | data | -| test.rs:359:20:359:36 | reader.fill_buf() [future, Ok] | semmle.label | reader.fill_buf() [future, Ok] | -| test.rs:359:20:359:42 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:359:20:359:43 | TryExpr | semmle.label | TryExpr | -| test.rs:360:14:360:18 | &data | semmle.label | &data | -| test.rs:360:15:360:18 | data | semmle.label | data | -| test.rs:364:13:364:18 | reader | semmle.label | reader | -| test.rs:364:22:364:66 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:364:48:364:63 | ...::stdin | semmle.label | ...::stdin | -| test.rs:364:48:364:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:365:13:365:16 | data | semmle.label | data | -| test.rs:365:20:365:34 | reader.buffer() | semmle.label | reader.buffer() | -| test.rs:366:14:366:18 | &data | semmle.label | &data | -| test.rs:366:15:366:18 | data | semmle.label | data | -| test.rs:371:13:371:22 | mut reader | semmle.label | mut reader | -| test.rs:371:26:371:70 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:371:52:371:67 | ...::stdin | semmle.label | ...::stdin | -| test.rs:371:52:371:69 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:372:26:372:36 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:372:31:372:36 | [post] buffer | semmle.label | [post] buffer | -| test.rs:373:14:373:20 | &buffer | semmle.label | &buffer | -| test.rs:373:15:373:20 | buffer | semmle.label | buffer | -| test.rs:378:13:378:22 | mut reader | semmle.label | mut reader | -| test.rs:378:26:378:70 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:378:52:378:67 | ...::stdin | semmle.label | ...::stdin | -| test.rs:378:52:378:69 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:379:33:379:43 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:379:38:379:43 | [post] buffer | semmle.label | [post] buffer | -| test.rs:380:14:380:20 | &buffer | semmle.label | &buffer | -| test.rs:380:15:380:20 | buffer | semmle.label | buffer | -| test.rs:381:14:381:22 | buffer[0] | semmle.label | buffer[0] | -| test.rs:385:13:385:28 | mut reader_split | semmle.label | mut reader_split | -| test.rs:385:32:385:76 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:385:32:385:88 | ... .split(...) | semmle.label | ... .split(...) | -| test.rs:385:58:385:73 | ...::stdin | semmle.label | ...::stdin | -| test.rs:385:58:385:75 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:386:14:386:40 | reader_split.next_segment() [future, Ok, Some] | semmle.label | reader_split.next_segment() [future, Ok, Some] | -| test.rs:386:14:386:46 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | -| test.rs:386:14:386:47 | TryExpr [Some] | semmle.label | TryExpr [Some] | -| test.rs:386:14:386:56 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:387:19:387:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | -| test.rs:387:24:387:28 | chunk | semmle.label | chunk | -| test.rs:387:33:387:59 | reader_split.next_segment() [future, Ok, Some] | semmle.label | reader_split.next_segment() [future, Ok, Some] | -| test.rs:387:33:387:65 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | -| test.rs:387:33:387:66 | TryExpr [Some] | semmle.label | TryExpr [Some] | -| test.rs:388:18:388:22 | chunk | semmle.label | chunk | -| test.rs:393:13:393:18 | reader | semmle.label | reader | -| test.rs:393:22:393:66 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:393:48:393:63 | ...::stdin | semmle.label | ...::stdin | -| test.rs:393:48:393:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | -| test.rs:394:13:394:21 | mut lines | semmle.label | mut lines | -| test.rs:394:25:394:38 | reader.lines() | semmle.label | reader.lines() | -| test.rs:395:14:395:30 | lines.next_line() [future, Ok, Some] | semmle.label | lines.next_line() [future, Ok, Some] | -| test.rs:395:14:395:36 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | -| test.rs:395:14:395:37 | TryExpr [Some] | semmle.label | TryExpr [Some] | -| test.rs:395:14:395:46 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:396:19:396:28 | Some(...) [Some] | semmle.label | Some(...) [Some] | -| test.rs:396:24:396:27 | line | semmle.label | line | -| test.rs:396:32:396:48 | lines.next_line() [future, Ok, Some] | semmle.label | lines.next_line() [future, Ok, Some] | -| test.rs:396:32:396:54 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | -| test.rs:396:32:396:55 | TryExpr [Some] | semmle.label | TryExpr [Some] | -| test.rs:397:18:397:21 | line | semmle.label | line | -| test.rs:408:13:408:18 | buffer | semmle.label | buffer | -| test.rs:408:31:408:43 | ...::read | semmle.label | ...::read | -| test.rs:408:31:408:43 | ...::read [Ok] | semmle.label | ...::read [Ok] | -| test.rs:408:31:408:55 | ...::read(...) [Ok] | semmle.label | ...::read(...) [Ok] | -| test.rs:408:31:408:56 | TryExpr | semmle.label | TryExpr | -| test.rs:409:14:409:19 | buffer | semmle.label | buffer | -| test.rs:413:13:413:18 | buffer | semmle.label | buffer | -| test.rs:413:31:413:38 | ...::read | semmle.label | ...::read | -| test.rs:413:31:413:38 | ...::read [Ok] | semmle.label | ...::read [Ok] | -| test.rs:413:31:413:50 | ...::read(...) [Ok] | semmle.label | ...::read(...) [Ok] | -| test.rs:413:31:413:51 | TryExpr | semmle.label | TryExpr | -| test.rs:414:14:414:19 | buffer | semmle.label | buffer | -| test.rs:418:13:418:18 | buffer | semmle.label | buffer | -| test.rs:418:22:418:39 | ...::read_to_string | semmle.label | ...::read_to_string | -| test.rs:418:22:418:39 | ...::read_to_string [Ok] | semmle.label | ...::read_to_string [Ok] | -| test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | semmle.label | ...::read_to_string(...) [Ok] | -| test.rs:418:22:418:52 | TryExpr | semmle.label | TryExpr | -| test.rs:419:14:419:19 | buffer | semmle.label | buffer | -| test.rs:425:13:425:16 | path | semmle.label | path | -| test.rs:425:20:425:27 | e.path() | semmle.label | e.path() | -| test.rs:425:22:425:25 | path | semmle.label | path | -| test.rs:426:14:426:17 | path | semmle.label | path | -| test.rs:426:14:426:25 | path.clone() | semmle.label | path.clone() | -| test.rs:427:14:427:17 | path | semmle.label | path | -| test.rs:427:14:427:25 | path.clone() | semmle.label | path.clone() | -| test.rs:427:14:427:35 | ... .as_path() | semmle.label | ... .as_path() | -| test.rs:437:14:437:17 | path | semmle.label | path | -| test.rs:439:13:439:21 | file_name | semmle.label | file_name | -| test.rs:439:25:439:37 | e.file_name() | semmle.label | e.file_name() | -| test.rs:439:27:439:35 | file_name | semmle.label | file_name | -| test.rs:440:14:440:22 | file_name | semmle.label | file_name | -| test.rs:440:14:440:30 | file_name.clone() | semmle.label | file_name.clone() | -| test.rs:445:14:445:22 | file_name | semmle.label | file_name | -| test.rs:461:13:461:18 | target | semmle.label | target | -| test.rs:461:22:461:34 | ...::read_link | semmle.label | ...::read_link | -| test.rs:461:22:461:49 | ...::read_link(...) [Ok] | semmle.label | ...::read_link(...) [Ok] | -| test.rs:461:22:461:50 | TryExpr | semmle.label | TryExpr | -| test.rs:462:14:462:19 | target | semmle.label | target | -| test.rs:470:13:470:18 | buffer | semmle.label | buffer | -| test.rs:470:31:470:45 | ...::read | semmle.label | ...::read | -| test.rs:470:31:470:57 | ...::read(...) [future, Ok] | semmle.label | ...::read(...) [future, Ok] | -| test.rs:470:31:470:63 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:470:31:470:64 | TryExpr | semmle.label | TryExpr | -| test.rs:471:14:471:19 | buffer | semmle.label | buffer | -| test.rs:475:13:475:18 | buffer | semmle.label | buffer | -| test.rs:475:31:475:45 | ...::read | semmle.label | ...::read | -| test.rs:475:31:475:57 | ...::read(...) [future, Ok] | semmle.label | ...::read(...) [future, Ok] | -| test.rs:475:31:475:63 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:475:31:475:64 | TryExpr | semmle.label | TryExpr | -| test.rs:476:14:476:19 | buffer | semmle.label | buffer | -| test.rs:480:13:480:18 | buffer | semmle.label | buffer | -| test.rs:480:22:480:46 | ...::read_to_string | semmle.label | ...::read_to_string | -| test.rs:480:22:480:58 | ...::read_to_string(...) [future, Ok] | semmle.label | ...::read_to_string(...) [future, Ok] | -| test.rs:480:22:480:64 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:480:22:480:65 | TryExpr | semmle.label | TryExpr | -| test.rs:481:14:481:19 | buffer | semmle.label | buffer | -| test.rs:486:13:486:16 | path | semmle.label | path | -| test.rs:486:20:486:31 | entry.path() | semmle.label | entry.path() | -| test.rs:486:26:486:29 | path | semmle.label | path | -| test.rs:486:26:486:29 | path | semmle.label | path | -| test.rs:487:13:487:21 | file_name | semmle.label | file_name | -| test.rs:487:25:487:41 | entry.file_name() | semmle.label | entry.file_name() | -| test.rs:487:31:487:39 | file_name | semmle.label | file_name | -| test.rs:487:31:487:39 | file_name | semmle.label | file_name | -| test.rs:488:14:488:17 | path | semmle.label | path | -| test.rs:489:14:489:22 | file_name | semmle.label | file_name | -| test.rs:493:13:493:18 | target | semmle.label | target | -| test.rs:493:22:493:41 | ...::read_link | semmle.label | ...::read_link | -| test.rs:493:22:493:56 | ...::read_link(...) [future, Ok] | semmle.label | ...::read_link(...) [future, Ok] | -| test.rs:493:22:493:62 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:493:22:493:63 | TryExpr | semmle.label | TryExpr | -| test.rs:494:14:494:19 | target | semmle.label | target | -| test.rs:503:9:503:16 | mut file | semmle.label | mut file | -| test.rs:503:20:503:38 | ...::open | semmle.label | ...::open | -| test.rs:503:20:503:50 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] | -| test.rs:503:20:503:51 | TryExpr | semmle.label | TryExpr | -| test.rs:507:32:507:42 | [post] &mut buffer | semmle.label | [post] &mut buffer | -| test.rs:507:32:507:42 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:507:37:507:42 | [post] buffer | semmle.label | [post] buffer | -| test.rs:508:14:508:20 | &buffer | semmle.label | &buffer | -| test.rs:508:15:508:20 | buffer | semmle.label | buffer | -| test.rs:513:39:513:49 | [post] &mut buffer | semmle.label | [post] &mut buffer | -| test.rs:513:39:513:49 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:513:44:513:49 | [post] buffer | semmle.label | [post] buffer | -| test.rs:514:14:514:20 | &buffer | semmle.label | &buffer | -| test.rs:514:15:514:20 | buffer | semmle.label | buffer | -| test.rs:519:42:519:52 | [post] &mut buffer | semmle.label | [post] &mut buffer | -| test.rs:519:42:519:52 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:519:47:519:52 | [post] buffer | semmle.label | [post] buffer | -| test.rs:520:14:520:20 | &buffer | semmle.label | &buffer | -| test.rs:520:15:520:20 | buffer | semmle.label | buffer | -| test.rs:525:25:525:35 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:525:30:525:35 | [post] buffer | semmle.label | [post] buffer | -| test.rs:526:14:526:20 | &buffer | semmle.label | &buffer | -| test.rs:526:15:526:20 | buffer | semmle.label | buffer | -| test.rs:529:17:529:28 | file.bytes() | semmle.label | file.bytes() | -| test.rs:530:14:530:17 | byte | semmle.label | byte | -| test.rs:536:13:536:18 | mut f1 | semmle.label | mut f1 | -| test.rs:536:22:536:63 | ... .open(...) [Ok] | semmle.label | ... .open(...) [Ok] | -| test.rs:536:22:536:72 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:536:50:536:53 | open | semmle.label | open | -| test.rs:538:30:538:40 | [post] &mut buffer | semmle.label | [post] &mut buffer | -| test.rs:538:30:538:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:538:35:538:40 | [post] buffer | semmle.label | [post] buffer | -| test.rs:539:14:539:20 | &buffer | semmle.label | &buffer | -| test.rs:539:15:539:20 | buffer | semmle.label | buffer | -| test.rs:543:13:543:18 | mut f2 | semmle.label | mut f2 | -| test.rs:543:22:543:80 | ... .open(...) [Ok] | semmle.label | ... .open(...) [Ok] | -| test.rs:543:22:543:89 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:543:67:543:70 | open | semmle.label | open | -| test.rs:545:30:545:40 | [post] &mut buffer | semmle.label | [post] &mut buffer | -| test.rs:545:30:545:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:545:35:545:40 | [post] buffer | semmle.label | [post] buffer | -| test.rs:546:14:546:20 | &buffer | semmle.label | &buffer | -| test.rs:546:15:546:20 | buffer | semmle.label | buffer | -| test.rs:550:13:550:18 | mut f3 | semmle.label | mut f3 | -| test.rs:550:22:550:114 | ... .open(...) [Ok] | semmle.label | ... .open(...) [Ok] | -| test.rs:550:22:550:123 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:550:101:550:104 | open | semmle.label | open | -| test.rs:552:30:552:40 | [post] &mut buffer | semmle.label | [post] &mut buffer | -| test.rs:552:30:552:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:552:35:552:40 | [post] buffer | semmle.label | [post] buffer | -| test.rs:553:14:553:20 | &buffer | semmle.label | &buffer | -| test.rs:553:15:553:20 | buffer | semmle.label | buffer | -| test.rs:560:13:560:17 | file1 | semmle.label | file1 | -| test.rs:560:21:560:39 | ...::open | semmle.label | ...::open | -| test.rs:560:21:560:51 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] | -| test.rs:560:21:560:52 | TryExpr | semmle.label | TryExpr | -| test.rs:561:13:561:17 | file2 | semmle.label | file2 | -| test.rs:561:21:561:39 | ...::open | semmle.label | ...::open | -| test.rs:561:21:561:59 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] | -| test.rs:561:21:561:60 | TryExpr | semmle.label | TryExpr | -| test.rs:562:13:562:22 | mut reader | semmle.label | mut reader | -| test.rs:562:26:562:43 | file1.chain(...) | semmle.label | file1.chain(...) | -| test.rs:562:38:562:42 | file2 | semmle.label | file2 | -| test.rs:563:31:563:41 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:563:36:563:41 | [post] buffer | semmle.label | [post] buffer | -| test.rs:564:14:564:20 | &buffer | semmle.label | &buffer | -| test.rs:564:15:564:20 | buffer | semmle.label | buffer | -| test.rs:569:13:569:17 | file1 | semmle.label | file1 | -| test.rs:569:21:569:39 | ...::open | semmle.label | ...::open | -| test.rs:569:21:569:51 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] | -| test.rs:569:21:569:52 | TryExpr | semmle.label | TryExpr | -| test.rs:570:13:570:22 | mut reader | semmle.label | mut reader | -| test.rs:570:26:570:40 | file1.take(...) | semmle.label | file1.take(...) | -| test.rs:571:31:571:41 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:571:36:571:41 | [post] buffer | semmle.label | [post] buffer | -| test.rs:572:14:572:20 | &buffer | semmle.label | &buffer | -| test.rs:572:15:572:20 | buffer | semmle.label | buffer | -| test.rs:581:9:581:16 | mut file | semmle.label | mut file | -| test.rs:581:20:581:40 | ...::open | semmle.label | ...::open | -| test.rs:581:20:581:52 | ...::open(...) [future, Ok] | semmle.label | ...::open(...) [future, Ok] | -| test.rs:581:20:581:58 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:581:20:581:59 | TryExpr | semmle.label | TryExpr | -| test.rs:585:32:585:42 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:585:37:585:42 | [post] buffer | semmle.label | [post] buffer | -| test.rs:586:14:586:20 | &buffer | semmle.label | &buffer | -| test.rs:586:15:586:20 | buffer | semmle.label | buffer | -| test.rs:591:39:591:49 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:591:44:591:49 | [post] buffer | semmle.label | [post] buffer | -| test.rs:592:14:592:20 | &buffer | semmle.label | &buffer | -| test.rs:592:15:592:20 | buffer | semmle.label | buffer | -| test.rs:597:42:597:52 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:597:47:597:52 | [post] buffer | semmle.label | [post] buffer | -| test.rs:598:14:598:20 | &buffer | semmle.label | &buffer | -| test.rs:598:15:598:20 | buffer | semmle.label | buffer | -| test.rs:603:25:603:35 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:603:30:603:35 | [post] buffer | semmle.label | [post] buffer | -| test.rs:604:14:604:20 | &buffer | semmle.label | &buffer | -| test.rs:604:15:604:20 | buffer | semmle.label | buffer | -| test.rs:608:13:608:14 | v1 | semmle.label | v1 | -| test.rs:608:18:608:31 | file.read_u8() [future, Ok] | semmle.label | file.read_u8() [future, Ok] | -| test.rs:608:18:608:37 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:608:18:608:38 | TryExpr | semmle.label | TryExpr | -| test.rs:609:13:609:14 | v2 | semmle.label | v2 | -| test.rs:609:18:609:32 | file.read_i16() [future, Ok] | semmle.label | file.read_i16() [future, Ok] | -| test.rs:609:18:609:38 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:609:18:609:39 | TryExpr | semmle.label | TryExpr | -| test.rs:610:13:610:14 | v3 | semmle.label | v3 | -| test.rs:610:18:610:32 | file.read_f32() [future, Ok] | semmle.label | file.read_f32() [future, Ok] | -| test.rs:610:18:610:38 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:610:18:610:39 | TryExpr | semmle.label | TryExpr | -| test.rs:611:13:611:14 | v4 | semmle.label | v4 | -| test.rs:611:18:611:35 | file.read_i64_le() [future, Ok] | semmle.label | file.read_i64_le() [future, Ok] | -| test.rs:611:18:611:41 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:611:18:611:42 | TryExpr | semmle.label | TryExpr | -| test.rs:612:14:612:15 | v1 | semmle.label | v1 | -| test.rs:613:14:613:15 | v2 | semmle.label | v2 | -| test.rs:614:14:614:15 | v3 | semmle.label | v3 | -| test.rs:615:14:615:15 | v4 | semmle.label | v4 | -| test.rs:620:23:620:33 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:620:28:620:33 | [post] buffer | semmle.label | [post] buffer | -| test.rs:621:14:621:20 | &buffer | semmle.label | &buffer | -| test.rs:621:15:621:20 | buffer | semmle.label | buffer | -| test.rs:627:13:627:18 | mut f1 | semmle.label | mut f1 | -| test.rs:627:22:627:65 | ... .open(...) [future, Ok] | semmle.label | ... .open(...) [future, Ok] | -| test.rs:627:22:627:71 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:627:22:627:72 | TryExpr | semmle.label | TryExpr | -| test.rs:627:52:627:55 | open | semmle.label | open | -| test.rs:629:30:629:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:629:35:629:40 | [post] buffer | semmle.label | [post] buffer | -| test.rs:630:14:630:20 | &buffer | semmle.label | &buffer | -| test.rs:630:15:630:20 | buffer | semmle.label | buffer | -| test.rs:660:9:660:16 | mut file | semmle.label | mut file | -| test.rs:660:20:660:44 | ...::open | semmle.label | ...::open | -| test.rs:660:20:660:56 | ...::open(...) [future, Ok] | semmle.label | ...::open(...) [future, Ok] | -| test.rs:660:20:660:62 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:660:20:660:63 | TryExpr | semmle.label | TryExpr | -| test.rs:664:22:664:25 | file | semmle.label | file | -| test.rs:664:32:664:42 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:664:37:664:42 | [post] buffer | semmle.label | [post] buffer | -| test.rs:665:14:665:20 | &buffer | semmle.label | &buffer | -| test.rs:665:15:665:20 | buffer | semmle.label | buffer | -| test.rs:671:13:671:18 | mut f1 | semmle.label | mut f1 | -| test.rs:671:22:671:69 | ... .open(...) [future, Ok] | semmle.label | ... .open(...) [future, Ok] | -| test.rs:671:22:671:75 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:671:22:671:76 | TryExpr | semmle.label | TryExpr | -| test.rs:671:56:671:59 | open | semmle.label | open | -| test.rs:673:22:673:23 | f1 | semmle.label | f1 | -| test.rs:673:30:673:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:673:35:673:40 | [post] buffer | semmle.label | [post] buffer | -| test.rs:674:14:674:20 | &buffer | semmle.label | &buffer | -| test.rs:674:15:674:20 | buffer | semmle.label | buffer | -| test.rs:688:13:688:22 | mut stream | semmle.label | mut stream | -| test.rs:688:26:688:53 | ...::connect | semmle.label | ...::connect | -| test.rs:688:26:688:62 | ...::connect(...) [Ok] | semmle.label | ...::connect(...) [Ok] | -| test.rs:688:26:688:63 | TryExpr | semmle.label | TryExpr | -| test.rs:695:29:695:39 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:695:34:695:39 | [post] buffer | semmle.label | [post] buffer | -| test.rs:698:14:698:20 | &buffer | semmle.label | &buffer | -| test.rs:698:15:698:20 | buffer | semmle.label | buffer | -| test.rs:699:14:699:22 | buffer[0] | semmle.label | buffer[0] | -| test.rs:707:13:707:22 | mut stream | semmle.label | mut stream | -| test.rs:707:26:707:61 | ...::connect_timeout | semmle.label | ...::connect_timeout | -| test.rs:707:26:707:105 | ...::connect_timeout(...) [Ok] | semmle.label | ...::connect_timeout(...) [Ok] | -| test.rs:707:26:707:106 | TryExpr | semmle.label | TryExpr | -| test.rs:715:21:715:30 | mut reader | semmle.label | mut reader | -| test.rs:715:34:715:64 | ...::new(...) | semmle.label | ...::new(...) | -| test.rs:715:34:715:74 | ... .take(...) | semmle.label | ... .take(...) | -| test.rs:715:58:715:63 | stream | semmle.label | stream | -| test.rs:718:44:718:52 | [post] &mut line [&ref] | semmle.label | [post] &mut line [&ref] | -| test.rs:718:49:718:52 | [post] line | semmle.label | [post] line | -| test.rs:725:34:725:38 | &line | semmle.label | &line | -| test.rs:725:35:725:38 | line | semmle.label | line | -| test.rs:759:9:759:24 | mut tokio_stream | semmle.label | mut tokio_stream | -| test.rs:759:28:759:57 | ...::connect | semmle.label | ...::connect | -| test.rs:759:28:759:66 | ...::connect(...) [future, Ok] | semmle.label | ...::connect(...) [future, Ok] | -| test.rs:759:28:759:72 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:759:28:759:73 | TryExpr | semmle.label | TryExpr | -| test.rs:767:35:767:46 | [post] &mut buffer1 [&ref] | semmle.label | [post] &mut buffer1 [&ref] | -| test.rs:767:40:767:46 | [post] buffer1 | semmle.label | [post] buffer1 | -| test.rs:771:36:771:47 | [post] &mut buffer2 [&ref] | semmle.label | [post] &mut buffer2 [&ref] | -| test.rs:771:41:771:47 | [post] buffer2 | semmle.label | [post] buffer2 | -| test.rs:774:14:774:21 | &buffer1 | semmle.label | &buffer1 | -| test.rs:774:15:774:21 | buffer1 | semmle.label | buffer1 | -| test.rs:775:14:775:23 | buffer1[0] | semmle.label | buffer1[0] | -| test.rs:778:14:778:21 | &buffer2 | semmle.label | &buffer2 | -| test.rs:778:15:778:21 | buffer2 | semmle.label | buffer2 | -| test.rs:779:14:779:23 | buffer2[0] | semmle.label | buffer2[0] | -| test.rs:787:41:787:51 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:787:46:787:51 | [post] buffer | semmle.label | [post] buffer | -| test.rs:794:26:794:32 | &buffer | semmle.label | &buffer | -| test.rs:794:27:794:32 | buffer | semmle.label | buffer | -| test.rs:810:45:810:55 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test.rs:810:50:810:55 | [post] buffer | semmle.label | [post] buffer | -| test.rs:817:26:817:32 | &buffer | semmle.label | &buffer | -| test.rs:817:27:817:32 | buffer | semmle.label | buffer | -| test.rs:905:13:905:14 | v1 | semmle.label | v1 | -| test.rs:905:24:905:33 | row.get(...) [Some] | semmle.label | row.get(...) [Some] | -| test.rs:905:24:905:42 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:905:28:905:30 | get | semmle.label | get | -| test.rs:906:14:906:15 | v1 | semmle.label | v1 | -| test.rs:908:13:908:14 | v2 | semmle.label | v2 | -| test.rs:908:24:908:37 | row.get_opt(...) [Some, Ok] | semmle.label | row.get_opt(...) [Some, Ok] | -| test.rs:908:24:908:46 | ... .unwrap() [Ok] | semmle.label | ... .unwrap() [Ok] | -| test.rs:908:24:908:55 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:908:28:908:34 | get_opt | semmle.label | get_opt | -| test.rs:909:14:909:15 | v2 | semmle.label | v2 | -| test.rs:911:13:911:14 | v3 | semmle.label | v3 | -| test.rs:911:24:911:34 | row.take(...) [Some] | semmle.label | row.take(...) [Some] | -| test.rs:911:24:911:43 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:911:28:911:31 | take | semmle.label | take | -| test.rs:912:14:912:15 | v3 | semmle.label | v3 | -| test.rs:914:13:914:14 | v4 | semmle.label | v4 | -| test.rs:914:24:914:38 | row.take_opt(...) [Some, Ok] | semmle.label | row.take_opt(...) [Some, Ok] | -| test.rs:914:24:914:47 | ... .unwrap() [Ok] | semmle.label | ... .unwrap() [Ok] | -| test.rs:914:24:914:56 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:914:28:914:35 | take_opt | semmle.label | take_opt | -| test.rs:915:14:915:15 | v4 | semmle.label | v4 | -| test.rs:924:13:924:14 | v6 | semmle.label | v6 | -| test.rs:924:23:924:63 | conn.query_first(...) [Ok, Some] | semmle.label | conn.query_first(...) [Ok, Some] | -| test.rs:924:23:924:64 | TryExpr [Some] | semmle.label | TryExpr [Some] | -| test.rs:924:23:924:73 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:924:28:924:38 | query_first | semmle.label | query_first | -| test.rs:925:14:925:15 | v6 | semmle.label | v6 | -| test.rs:927:13:927:18 | mut t1 [element] | semmle.label | mut t1 [element] | -| test.rs:927:22:927:71 | conn.exec_iter(...) [Ok, element] | semmle.label | conn.exec_iter(...) [Ok, element] | -| test.rs:927:22:927:72 | TryExpr [element] | semmle.label | TryExpr [element] | -| test.rs:927:27:927:35 | exec_iter | semmle.label | exec_iter | -| test.rs:928:14:928:61 | ... .get(...) [Some] | semmle.label | ... .get(...) [Some] | -| test.rs:928:14:928:70 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:928:42:928:44 | get | semmle.label | get | -| test.rs:929:13:929:15 | row | semmle.label | row | -| test.rs:929:20:929:21 | t1 [element] | semmle.label | t1 [element] | -| test.rs:931:22:931:22 | v | semmle.label | v | -| test.rs:935:22:935:30 | query_map | semmle.label | query_map | -| test.rs:937:14:937:24 | ...: i64 | semmle.label | ...: i64 | -| test.rs:938:22:938:27 | values | semmle.label | values | -| test.rs:951:13:951:17 | total | semmle.label | total | -| test.rs:951:21:954:10 | conn.query_fold(...) [Ok] | semmle.label | conn.query_fold(...) [Ok] | -| test.rs:951:21:954:11 | TryExpr | semmle.label | TryExpr | -| test.rs:951:26:951:35 | query_fold | semmle.label | query_fold | -| test.rs:951:76:951:83 | ...: i64 | semmle.label | ...: i64 | -| test.rs:951:86:954:9 | { ... } | semmle.label | { ... } | -| test.rs:952:18:952:20 | row | semmle.label | row | -| test.rs:953:13:953:21 | ... + ... | semmle.label | ... + ... | -| test.rs:953:19:953:21 | row | semmle.label | row | -| test.rs:955:14:955:18 | total | semmle.label | total | -| test.rs:992:13:992:14 | v1 | semmle.label | v1 | -| test.rs:992:24:992:33 | row.get(...) [Some] | semmle.label | row.get(...) [Some] | -| test.rs:992:24:992:42 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:992:28:992:30 | get | semmle.label | get | -| test.rs:993:14:993:15 | v1 | semmle.label | v1 | -| test.rs:995:13:995:14 | v2 | semmle.label | v2 | -| test.rs:995:24:995:37 | row.get_opt(...) [Some, Ok] | semmle.label | row.get_opt(...) [Some, Ok] | -| test.rs:995:24:995:46 | ... .unwrap() [Ok] | semmle.label | ... .unwrap() [Ok] | -| test.rs:995:24:995:55 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:995:28:995:34 | get_opt | semmle.label | get_opt | -| test.rs:996:14:996:15 | v2 | semmle.label | v2 | -| test.rs:998:13:998:14 | v3 | semmle.label | v3 | -| test.rs:998:24:998:34 | row.take(...) [Some] | semmle.label | row.take(...) [Some] | -| test.rs:998:24:998:43 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:998:28:998:31 | take | semmle.label | take | -| test.rs:999:14:999:15 | v3 | semmle.label | v3 | -| test.rs:1001:13:1001:14 | v4 | semmle.label | v4 | -| test.rs:1001:24:1001:38 | row.take_opt(...) [Some, Ok] | semmle.label | row.take_opt(...) [Some, Ok] | -| test.rs:1001:24:1001:47 | ... .unwrap() [Ok] | semmle.label | ... .unwrap() [Ok] | -| test.rs:1001:24:1001:56 | ... .unwrap() | semmle.label | ... .unwrap() | -| test.rs:1001:28:1001:35 | take_opt | semmle.label | take_opt | -| test.rs:1002:14:1002:15 | v4 | semmle.label | v4 | -| test.rs:1022:22:1022:30 | query_map | semmle.label | query_map | -| test.rs:1024:14:1024:24 | ...: i64 | semmle.label | ...: i64 | -| test.rs:1025:22:1025:27 | values | semmle.label | values | -| test.rs:1038:13:1038:17 | total | semmle.label | total | -| test.rs:1038:21:1041:10 | conn.query_fold(...) [future, Ok] | semmle.label | conn.query_fold(...) [future, Ok] | -| test.rs:1038:21:1041:16 | await ... [Ok] | semmle.label | await ... [Ok] | -| test.rs:1038:21:1041:17 | TryExpr | semmle.label | TryExpr | -| test.rs:1038:26:1038:35 | query_fold | semmle.label | query_fold | -| test.rs:1038:76:1038:83 | ...: i64 | semmle.label | ...: i64 | -| test.rs:1038:86:1041:9 | { ... } | semmle.label | { ... } | -| test.rs:1039:18:1039:20 | row | semmle.label | row | -| test.rs:1040:13:1040:21 | ... + ... | semmle.label | ... + ... | -| test.rs:1040:19:1040:21 | row | semmle.label | row | -| test.rs:1042:14:1042:18 | total | semmle.label | total | -| test_futures_io.rs:19:9:19:11 | tcp | semmle.label | tcp | -| test_futures_io.rs:19:15:19:32 | ...::connect | semmle.label | ...::connect | -| test_futures_io.rs:19:15:19:37 | ...::connect(...) [future, Ok] | semmle.label | ...::connect(...) [future, Ok] | -| test_futures_io.rs:19:15:19:43 | await ... [Ok] | semmle.label | await ... [Ok] | -| test_futures_io.rs:19:15:19:44 | TryExpr | semmle.label | TryExpr | -| test_futures_io.rs:20:10:20:13 | &tcp | semmle.label | &tcp | -| test_futures_io.rs:20:11:20:13 | tcp | semmle.label | tcp | -| test_futures_io.rs:26:9:26:18 | mut reader | semmle.label | mut reader | -| test_futures_io.rs:26:22:26:56 | connector.connect(...) [future, Ok] | semmle.label | connector.connect(...) [future, Ok] | -| test_futures_io.rs:26:22:26:62 | await ... [Ok] | semmle.label | await ... [Ok] | -| test_futures_io.rs:26:22:26:63 | TryExpr | semmle.label | TryExpr | -| test_futures_io.rs:26:53:26:55 | tcp | semmle.label | tcp | -| test_futures_io.rs:27:10:27:16 | &reader | semmle.label | &reader | -| test_futures_io.rs:27:11:27:16 | reader | semmle.label | reader | -| test_futures_io.rs:32:13:32:22 | mut pinned | semmle.label | mut pinned | -| test_futures_io.rs:32:13:32:22 | mut pinned [&ref] | semmle.label | mut pinned [&ref] | -| test_futures_io.rs:32:26:32:46 | ...::new(...) | semmle.label | ...::new(...) | -| test_futures_io.rs:32:26:32:46 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | -| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | semmle.label | &mut reader [&ref] | -| test_futures_io.rs:32:40:32:45 | reader | semmle.label | reader | -| test_futures_io.rs:33:14:33:20 | &pinned | semmle.label | &pinned | -| test_futures_io.rs:33:15:33:20 | pinned | semmle.label | pinned | -| test_futures_io.rs:33:15:33:20 | pinned [&ref] | semmle.label | pinned [&ref] | -| test_futures_io.rs:35:52:35:62 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test_futures_io.rs:35:57:35:62 | [post] buffer | semmle.label | [post] buffer | -| test_futures_io.rs:37:18:37:24 | &buffer | semmle.label | &buffer | -| test_futures_io.rs:37:19:37:24 | buffer | semmle.label | buffer | -| test_futures_io.rs:38:18:38:29 | &... | semmle.label | &... | -| test_futures_io.rs:38:19:38:29 | buffer[...] | semmle.label | buffer[...] | -| test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | semmle.label | &mut reader [&ref] | -| test_futures_io.rs:45:64:45:69 | reader | semmle.label | reader | -| test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | semmle.label | [post] &mut buffer1 [&ref] | -| test_futures_io.rs:45:77:45:83 | [post] buffer1 | semmle.label | [post] buffer1 | -| test_futures_io.rs:46:14:46:36 | &... | semmle.label | &... | -| test_futures_io.rs:46:15:46:36 | buffer1[...] | semmle.label | buffer1[...] | -| test_futures_io.rs:49:27:49:32 | reader | semmle.label | reader | -| test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | semmle.label | [post] &mut buffer2 [&ref] | -| test_futures_io.rs:49:44:49:50 | [post] buffer2 | semmle.label | [post] buffer2 | -| test_futures_io.rs:51:14:51:36 | &... | semmle.label | &... | -| test_futures_io.rs:51:15:51:36 | buffer2[...] | semmle.label | buffer2[...] | -| test_futures_io.rs:54:9:54:19 | mut reader2 | semmle.label | mut reader2 | -| test_futures_io.rs:54:23:54:57 | ...::new(...) | semmle.label | ...::new(...) | -| test_futures_io.rs:54:51:54:56 | reader | semmle.label | reader | -| test_futures_io.rs:55:10:55:17 | &reader2 | semmle.label | &reader2 | -| test_futures_io.rs:55:11:55:17 | reader2 | semmle.label | reader2 | -| test_futures_io.rs:59:13:59:22 | mut pinned | semmle.label | mut pinned | -| test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | semmle.label | mut pinned [&ref] | -| test_futures_io.rs:59:26:59:47 | ...::new(...) | semmle.label | ...::new(...) | -| test_futures_io.rs:59:26:59:47 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | -| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | -| test_futures_io.rs:59:40:59:46 | reader2 | semmle.label | reader2 | -| test_futures_io.rs:60:14:60:20 | &pinned | semmle.label | &pinned | -| test_futures_io.rs:60:15:60:20 | pinned | semmle.label | pinned | -| test_futures_io.rs:60:15:60:20 | pinned [&ref] | semmle.label | pinned [&ref] | -| test_futures_io.rs:62:13:62:18 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] | -| test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | semmle.label | pinned.poll_fill_buf(...) [Ready, Ok] | -| test_futures_io.rs:63:16:63:35 | ...::Ready(...) [Ready, Ok] | semmle.label | ...::Ready(...) [Ready, Ok] | -| test_futures_io.rs:63:28:63:34 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | -| test_futures_io.rs:63:31:63:33 | buf | semmle.label | buf | -| test_futures_io.rs:64:18:64:24 | &buffer | semmle.label | &buffer | -| test_futures_io.rs:64:19:64:24 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] | -| test_futures_io.rs:65:18:65:20 | buf | semmle.label | buf | -| test_futures_io.rs:69:13:69:19 | buffer2 [Ready, Ok] | semmle.label | buffer2 [Ready, Ok] | -| test_futures_io.rs:69:23:69:44 | ...::new(...) | semmle.label | ...::new(...) | -| test_futures_io.rs:69:23:69:44 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | -| test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | semmle.label | ... .poll_fill_buf(...) [Ready, Ok] | -| test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | -| test_futures_io.rs:69:37:69:43 | reader2 | semmle.label | reader2 | -| test_futures_io.rs:70:16:70:22 | buffer2 [Ready, Ok] | semmle.label | buffer2 [Ready, Ok] | -| test_futures_io.rs:71:13:71:32 | ...::Ready(...) [Ready, Ok] | semmle.label | ...::Ready(...) [Ready, Ok] | -| test_futures_io.rs:71:25:71:31 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | -| test_futures_io.rs:71:28:71:30 | buf | semmle.label | buf | -| test_futures_io.rs:72:22:72:29 | &buffer2 | semmle.label | &buffer2 | -| test_futures_io.rs:72:23:72:29 | buffer2 [Ready, Ok] | semmle.label | buffer2 [Ready, Ok] | -| test_futures_io.rs:73:22:73:24 | buf | semmle.label | buf | -| test_futures_io.rs:83:13:83:18 | buffer | semmle.label | buffer | -| test_futures_io.rs:83:22:83:39 | reader2.fill_buf() [future, Ok] | semmle.label | reader2.fill_buf() [future, Ok] | -| test_futures_io.rs:83:22:83:45 | await ... [Ok] | semmle.label | await ... [Ok] | -| test_futures_io.rs:83:22:83:46 | TryExpr | semmle.label | TryExpr | -| test_futures_io.rs:84:14:84:19 | buffer | semmle.label | buffer | -| test_futures_io.rs:90:13:90:22 | mut pinned | semmle.label | mut pinned | -| test_futures_io.rs:90:13:90:22 | mut pinned [&ref] | semmle.label | mut pinned [&ref] | -| test_futures_io.rs:90:26:90:47 | ...::new(...) | semmle.label | ...::new(...) | -| test_futures_io.rs:90:26:90:47 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | -| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | -| test_futures_io.rs:90:40:90:46 | reader2 | semmle.label | reader2 | -| test_futures_io.rs:91:14:91:20 | &pinned | semmle.label | &pinned | -| test_futures_io.rs:91:15:91:20 | pinned | semmle.label | pinned | -| test_futures_io.rs:91:15:91:20 | pinned [&ref] | semmle.label | pinned [&ref] | -| test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | -| test_futures_io.rs:103:64:103:70 | reader2 | semmle.label | reader2 | -| test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | semmle.label | [post] &mut buffer1 [&ref] | -| test_futures_io.rs:103:78:103:84 | [post] buffer1 | semmle.label | [post] buffer1 | -| test_futures_io.rs:104:14:104:36 | &... | semmle.label | &... | -| test_futures_io.rs:104:15:104:36 | buffer1[...] | semmle.label | buffer1[...] | -| test_futures_io.rs:107:27:107:33 | reader2 | semmle.label | reader2 | -| test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | semmle.label | [post] &mut buffer2 [&ref] | -| test_futures_io.rs:107:45:107:51 | [post] buffer2 | semmle.label | [post] buffer2 | -| test_futures_io.rs:108:14:108:36 | &... | semmle.label | &... | -| test_futures_io.rs:108:15:108:36 | buffer2[...] | semmle.label | buffer2[...] | -| test_futures_io.rs:113:13:113:22 | mut pinned | semmle.label | mut pinned | -| test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | semmle.label | mut pinned [&ref] | -| test_futures_io.rs:113:26:113:47 | ...::new(...) | semmle.label | ...::new(...) | -| test_futures_io.rs:113:26:113:47 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | -| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | -| test_futures_io.rs:113:40:113:46 | reader2 | semmle.label | reader2 | -| test_futures_io.rs:114:14:114:20 | &pinned | semmle.label | &pinned | -| test_futures_io.rs:114:15:114:20 | pinned | semmle.label | pinned | -| test_futures_io.rs:114:15:114:20 | pinned [&ref] | semmle.label | pinned [&ref] | -| test_futures_io.rs:116:13:116:18 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] | -| test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | semmle.label | pinned.poll_fill_buf(...) [Ready, Ok] | -| test_futures_io.rs:117:14:117:20 | &buffer | semmle.label | &buffer | -| test_futures_io.rs:117:15:117:20 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] | -| test_futures_io.rs:118:16:118:35 | ...::Ready(...) [Ready, Ok] | semmle.label | ...::Ready(...) [Ready, Ok] | -| test_futures_io.rs:118:28:118:34 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | -| test_futures_io.rs:118:31:118:33 | buf | semmle.label | buf | -| test_futures_io.rs:119:18:119:20 | buf | semmle.label | buf | -| test_futures_io.rs:125:13:125:18 | buffer | semmle.label | buffer | -| test_futures_io.rs:125:22:125:39 | reader2.fill_buf() [future, Ok] | semmle.label | reader2.fill_buf() [future, Ok] | -| test_futures_io.rs:125:22:125:45 | await ... [Ok] | semmle.label | await ... [Ok] | -| test_futures_io.rs:125:22:125:46 | TryExpr | semmle.label | TryExpr | -| test_futures_io.rs:126:14:126:19 | buffer | semmle.label | buffer | -| test_futures_io.rs:132:27:132:33 | reader2 | semmle.label | reader2 | -| test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | semmle.label | [post] &mut line [&ref] | -| test_futures_io.rs:132:58:132:61 | [post] line | semmle.label | [post] line | -| test_futures_io.rs:133:14:133:18 | &line | semmle.label | &line | -| test_futures_io.rs:133:15:133:18 | line | semmle.label | line | -| test_futures_io.rs:139:27:139:33 | reader2 | semmle.label | reader2 | -| test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | semmle.label | [post] &mut line [&ref] | -| test_futures_io.rs:139:50:139:53 | [post] line | semmle.label | [post] line | -| test_futures_io.rs:140:14:140:18 | &line | semmle.label | &line | -| test_futures_io.rs:140:15:140:18 | line | semmle.label | line | -| test_futures_io.rs:146:27:146:33 | reader2 | semmle.label | reader2 | -| test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | -| test_futures_io.rs:146:52:146:57 | [post] buffer | semmle.label | [post] buffer | -| test_futures_io.rs:147:14:147:20 | &buffer | semmle.label | &buffer | -| test_futures_io.rs:147:15:147:20 | buffer | semmle.label | buffer | -| web_frameworks.rs:11:31:11:31 | a | semmle.label | a | -| web_frameworks.rs:11:31:11:31 | a | semmle.label | a | -| web_frameworks.rs:13:14:13:14 | a | semmle.label | a | -| web_frameworks.rs:13:14:13:14 | a | semmle.label | a | -| web_frameworks.rs:13:14:13:23 | a.as_str() | semmle.label | a.as_str() | -| web_frameworks.rs:13:14:13:23 | a.as_str() | semmle.label | a.as_str() | -| web_frameworks.rs:14:14:14:14 | a | semmle.label | a | -| web_frameworks.rs:14:14:14:14 | a | semmle.label | a | -| web_frameworks.rs:14:14:14:25 | a.as_bytes() | semmle.label | a.as_bytes() | -| web_frameworks.rs:14:14:14:25 | a.as_bytes() | semmle.label | a.as_bytes() | -| web_frameworks.rs:15:14:15:14 | a | semmle.label | a | -| web_frameworks.rs:15:14:15:14 | a | semmle.label | a | -| web_frameworks.rs:68:15:68:15 | a | semmle.label | a | -| web_frameworks.rs:68:15:68:15 | a | semmle.label | a | -| web_frameworks.rs:70:14:70:14 | a | semmle.label | a | -| web_frameworks.rs:70:14:70:14 | a | semmle.label | a | -| web_frameworks.rs:98:9:98:31 | ...: ...::Path::<...> | semmle.label | ...: ...::Path::<...> | -| web_frameworks.rs:100:13:100:13 | a | semmle.label | a | -| web_frameworks.rs:100:13:100:13 | a [tuple.0] | semmle.label | a [tuple.0] | -| web_frameworks.rs:100:13:100:13 | a [tuple.1] | semmle.label | a [tuple.1] | -| web_frameworks.rs:100:13:100:13 | a [tuple.2] | semmle.label | a [tuple.2] | -| web_frameworks.rs:100:13:100:13 | a [tuple.3] | semmle.label | a [tuple.3] | -| web_frameworks.rs:100:17:100:33 | path.into_inner() | semmle.label | path.into_inner() | -| web_frameworks.rs:100:17:100:33 | path.into_inner() [tuple.0] | semmle.label | path.into_inner() [tuple.0] | -| web_frameworks.rs:100:17:100:33 | path.into_inner() [tuple.1] | semmle.label | path.into_inner() [tuple.1] | -| web_frameworks.rs:100:17:100:33 | path.into_inner() [tuple.2] | semmle.label | path.into_inner() [tuple.2] | -| web_frameworks.rs:100:17:100:33 | path.into_inner() [tuple.3] | semmle.label | path.into_inner() [tuple.3] | -| web_frameworks.rs:101:14:101:14 | a | semmle.label | a | -| web_frameworks.rs:101:14:101:14 | a [tuple.0] | semmle.label | a [tuple.0] | -| web_frameworks.rs:101:14:101:14 | a [tuple.1] | semmle.label | a [tuple.1] | -| web_frameworks.rs:101:14:101:14 | a [tuple.2] | semmle.label | a [tuple.2] | -| web_frameworks.rs:101:14:101:14 | a [tuple.3] | semmle.label | a [tuple.3] | -| web_frameworks.rs:101:14:101:23 | a.as_str() | semmle.label | a.as_str() | -| web_frameworks.rs:102:14:102:14 | a | semmle.label | a | -| web_frameworks.rs:102:14:102:14 | a [tuple.0] | semmle.label | a [tuple.0] | -| web_frameworks.rs:102:14:102:14 | a [tuple.1] | semmle.label | a [tuple.1] | -| web_frameworks.rs:102:14:102:14 | a [tuple.2] | semmle.label | a [tuple.2] | -| web_frameworks.rs:102:14:102:14 | a [tuple.3] | semmle.label | a [tuple.3] | -| web_frameworks.rs:102:14:102:25 | a.as_bytes() | semmle.label | a.as_bytes() | -| web_frameworks.rs:103:14:103:14 | a | semmle.label | a | -| web_frameworks.rs:109:9:109:41 | ...: ...::Path::<...> | semmle.label | ...: ...::Path::<...> | -| web_frameworks.rs:111:13:111:18 | TuplePat [tuple.0] | semmle.label | TuplePat [tuple.0] | -| web_frameworks.rs:111:13:111:18 | TuplePat [tuple.1] | semmle.label | TuplePat [tuple.1] | -| web_frameworks.rs:111:14:111:14 | a | semmle.label | a | -| web_frameworks.rs:111:17:111:17 | b | semmle.label | b | -| web_frameworks.rs:111:22:111:38 | path.into_inner() [tuple.0] | semmle.label | path.into_inner() [tuple.0] | -| web_frameworks.rs:111:22:111:38 | path.into_inner() [tuple.1] | semmle.label | path.into_inner() [tuple.1] | -| web_frameworks.rs:113:14:113:14 | a | semmle.label | a | -| web_frameworks.rs:114:14:114:14 | b | semmle.label | b | -| web_frameworks.rs:127:5:127:20 | to | semmle.label | to | -| web_frameworks.rs:129:9:129:31 | ...: ...::Path::<...> | semmle.label | ...: ...::Path::<...> | -| web_frameworks.rs:131:13:131:13 | a | semmle.label | a | -| web_frameworks.rs:131:13:131:13 | a [tuple.0] | semmle.label | a [tuple.0] | -| web_frameworks.rs:131:13:131:13 | a [tuple.1] | semmle.label | a [tuple.1] | -| web_frameworks.rs:131:13:131:13 | a [tuple.2] | semmle.label | a [tuple.2] | -| web_frameworks.rs:131:13:131:13 | a [tuple.3] | semmle.label | a [tuple.3] | -| web_frameworks.rs:131:17:131:33 | path.into_inner() | semmle.label | path.into_inner() | -| web_frameworks.rs:131:17:131:33 | path.into_inner() [tuple.0] | semmle.label | path.into_inner() [tuple.0] | -| web_frameworks.rs:131:17:131:33 | path.into_inner() [tuple.1] | semmle.label | path.into_inner() [tuple.1] | -| web_frameworks.rs:131:17:131:33 | path.into_inner() [tuple.2] | semmle.label | path.into_inner() [tuple.2] | -| web_frameworks.rs:131:17:131:33 | path.into_inner() [tuple.3] | semmle.label | path.into_inner() [tuple.3] | -| web_frameworks.rs:132:14:132:14 | a | semmle.label | a | -| web_frameworks.rs:139:41:139:42 | to | semmle.label | to | -| web_frameworks.rs:140:45:140:46 | to | semmle.label | to | -| web_frameworks.rs:242:33:242:35 | map | semmle.label | map | -| web_frameworks.rs:242:33:242:35 | map | semmle.label | map | -| web_frameworks.rs:242:38:242:46 | ...: String | semmle.label | ...: String | -| web_frameworks.rs:242:38:242:46 | ...: String | semmle.label | ...: String | -| web_frameworks.rs:244:18:244:18 | a | semmle.label | a | -| web_frameworks.rs:244:18:244:18 | a | semmle.label | a | -| web_frameworks.rs:250:46:250:49 | then | semmle.label | then | -| web_frameworks.rs:250:46:250:49 | then | semmle.label | then | -| web_frameworks.rs:251:25:251:33 | ...: String | semmle.label | ...: String | -| web_frameworks.rs:251:25:251:33 | ...: String | semmle.label | ...: String | -| web_frameworks.rs:252:22:252:22 | a | semmle.label | a | -| web_frameworks.rs:252:22:252:22 | a | semmle.label | a | -| web_frameworks.rs:259:50:259:57 | and_then | semmle.label | and_then | -| web_frameworks.rs:259:50:259:57 | and_then | semmle.label | and_then | -| web_frameworks.rs:260:26:260:32 | ...: u64 | semmle.label | ...: u64 | -| web_frameworks.rs:260:26:260:32 | ...: u64 | semmle.label | ...: u64 | -| web_frameworks.rs:263:22:263:23 | id | semmle.label | id | -| web_frameworks.rs:263:22:263:23 | id | semmle.label | id | -| web_frameworks.rs:272:75:272:77 | map | semmle.label | map | -| web_frameworks.rs:272:75:272:77 | map | semmle.label | map | -| web_frameworks.rs:273:15:273:23 | ...: String | semmle.label | ...: String | -| web_frameworks.rs:273:15:273:23 | ...: String | semmle.label | ...: String | -| web_frameworks.rs:275:22:275:22 | a | semmle.label | a | -| web_frameworks.rs:275:22:275:22 | a | semmle.label | a | -subpaths -testFailures -#select -| test.rs:8:10:8:30 | ...::var(...) | test.rs:8:10:8:22 | ...::var | test.rs:8:10:8:30 | ...::var(...) | $@ | test.rs:8:10:8:22 | ...::var | ...::var | -| test.rs:9:10:9:33 | ...::var_os(...) | test.rs:9:10:9:25 | ...::var_os | test.rs:9:10:9:33 | ...::var_os(...) | $@ | test.rs:9:10:9:25 | ...::var_os | ...::var_os | -| test.rs:14:10:14:13 | var1 | test.rs:11:16:11:28 | ...::var | test.rs:14:10:14:13 | var1 | $@ | test.rs:11:16:11:28 | ...::var | ...::var | -| test.rs:15:10:15:13 | var2 | test.rs:12:16:12:31 | ...::var_os | test.rs:15:10:15:13 | var2 | $@ | test.rs:12:16:12:31 | ...::var_os | ...::var_os | -| test.rs:36:10:36:16 | my_path | test.rs:29:29:29:42 | ...::args | test.rs:36:10:36:16 | my_path | $@ | test.rs:29:29:29:42 | ...::args | ...::args | -| test.rs:37:10:37:13 | arg1 | test.rs:29:29:29:42 | ...::args | test.rs:37:10:37:13 | arg1 | $@ | test.rs:29:29:29:42 | ...::args | ...::args | -| test.rs:38:10:38:13 | arg2 | test.rs:32:16:32:29 | ...::args | test.rs:38:10:38:13 | arg2 | $@ | test.rs:32:16:32:29 | ...::args | ...::args | -| test.rs:39:10:39:13 | arg3 | test.rs:33:16:33:32 | ...::args_os | test.rs:39:10:39:13 | arg3 | $@ | test.rs:33:16:33:32 | ...::args_os | ...::args_os | -| test.rs:40:10:40:13 | arg4 | test.rs:34:16:34:29 | ...::args | test.rs:40:10:40:13 | arg4 | $@ | test.rs:34:16:34:29 | ...::args | ...::args | -| test.rs:43:14:43:16 | arg | test.rs:42:16:42:29 | ...::args | test.rs:43:14:43:16 | arg | $@ | test.rs:42:16:42:29 | ...::args | ...::args | -| test.rs:47:14:47:16 | arg | test.rs:46:16:46:32 | ...::args_os | test.rs:47:14:47:16 | arg | $@ | test.rs:46:16:46:32 | ...::args_os | ...::args_os | -| test.rs:56:10:56:12 | dir | test.rs:52:15:52:35 | ...::current_dir | test.rs:56:10:56:12 | dir | $@ | test.rs:52:15:52:35 | ...::current_dir | ...::current_dir | -| test.rs:57:10:57:12 | exe | test.rs:53:15:53:35 | ...::current_exe | test.rs:57:10:57:12 | exe | $@ | test.rs:53:15:53:35 | ...::current_exe | ...::current_exe | -| test.rs:58:10:58:13 | home | test.rs:54:16:54:33 | ...::home_dir | test.rs:58:10:58:13 | home | $@ | test.rs:54:16:54:33 | ...::home_dir | ...::home_dir | -| test.rs:63:10:63:23 | remote_string1 | test.rs:62:26:62:47 | ...::get | test.rs:63:10:63:23 | remote_string1 | $@ | test.rs:62:26:62:47 | ...::get | ...::get | -| test.rs:66:10:66:23 | remote_string2 | test.rs:65:26:65:47 | ...::get | test.rs:66:10:66:23 | remote_string2 | $@ | test.rs:65:26:65:47 | ...::get | ...::get | -| test.rs:69:10:69:23 | remote_string3 | test.rs:68:26:68:47 | ...::get | test.rs:69:10:69:23 | remote_string3 | $@ | test.rs:68:26:68:47 | ...::get | ...::get | -| test.rs:72:10:72:23 | remote_string4 | test.rs:71:26:71:47 | ...::get | test.rs:72:10:72:23 | remote_string4 | $@ | test.rs:71:26:71:47 | ...::get | ...::get | -| test.rs:75:10:75:23 | remote_string5 | test.rs:74:26:74:37 | ...::get | test.rs:75:10:75:23 | remote_string5 | $@ | test.rs:74:26:74:37 | ...::get | ...::get | -| test.rs:78:10:78:23 | remote_string6 | test.rs:77:26:77:37 | ...::get | test.rs:78:10:78:23 | remote_string6 | $@ | test.rs:77:26:77:37 | ...::get | ...::get | -| test.rs:81:10:81:41 | ... .unwrap() | test.rs:80:24:80:35 | ...::get | test.rs:81:10:81:41 | ... .unwrap() | $@ | test.rs:80:24:80:35 | ...::get | ...::get | -| test.rs:83:14:83:18 | chunk | test.rs:80:24:80:35 | ...::get | test.rs:83:14:83:18 | chunk | $@ | test.rs:80:24:80:35 | ...::get | ...::get | -| test.rs:115:14:115:22 | &response | test.rs:114:31:114:42 | send_request | test.rs:115:14:115:22 | &response | $@ | test.rs:114:31:114:42 | send_request | send_request | -| test.rs:116:14:116:21 | response | test.rs:114:31:114:42 | send_request | test.rs:116:14:116:21 | response | $@ | test.rs:114:31:114:42 | send_request | send_request | -| test.rs:122:10:122:18 | &response | test.rs:121:31:121:42 | send_request | test.rs:122:10:122:18 | &response | $@ | test.rs:121:31:121:42 | send_request | send_request | -| test.rs:212:14:212:20 | &buffer | test.rs:211:22:211:35 | ...::stdin | test.rs:212:14:212:20 | &buffer | $@ | test.rs:211:22:211:35 | ...::stdin | ...::stdin | -| test.rs:218:14:218:20 | &buffer | test.rs:217:22:217:35 | ...::stdin | test.rs:218:14:218:20 | &buffer | $@ | test.rs:217:22:217:35 | ...::stdin | ...::stdin | -| test.rs:224:14:224:20 | &buffer | test.rs:223:22:223:35 | ...::stdin | test.rs:224:14:224:20 | &buffer | $@ | test.rs:223:22:223:35 | ...::stdin | ...::stdin | -| test.rs:230:14:230:20 | &buffer | test.rs:229:22:229:35 | ...::stdin | test.rs:230:14:230:20 | &buffer | $@ | test.rs:229:22:229:35 | ...::stdin | ...::stdin | -| test.rs:236:14:236:20 | &buffer | test.rs:235:9:235:22 | ...::stdin | test.rs:236:14:236:20 | &buffer | $@ | test.rs:235:9:235:22 | ...::stdin | ...::stdin | -| test.rs:240:14:240:17 | byte | test.rs:239:17:239:30 | ...::stdin | test.rs:240:14:240:17 | byte | $@ | test.rs:239:17:239:30 | ...::stdin | ...::stdin | -| test.rs:248:14:248:18 | &data | test.rs:246:50:246:63 | ...::stdin | test.rs:248:14:248:18 | &data | $@ | test.rs:246:50:246:63 | ...::stdin | ...::stdin | -| test.rs:254:14:254:18 | &data | test.rs:252:46:252:59 | ...::stdin | test.rs:254:14:254:18 | &data | $@ | test.rs:252:46:252:59 | ...::stdin | ...::stdin | -| test.rs:261:14:261:20 | &buffer | test.rs:259:50:259:63 | ...::stdin | test.rs:261:14:261:20 | &buffer | $@ | test.rs:259:50:259:63 | ...::stdin | ...::stdin | -| test.rs:268:14:268:20 | &buffer | test.rs:266:50:266:63 | ...::stdin | test.rs:268:14:268:20 | &buffer | $@ | test.rs:266:50:266:63 | ...::stdin | ...::stdin | -| test.rs:269:14:269:22 | buffer[0] | test.rs:266:50:266:63 | ...::stdin | test.rs:269:14:269:22 | buffer[0] | $@ | test.rs:266:50:266:63 | ...::stdin | ...::stdin | -| test.rs:274:14:274:50 | ... .unwrap() | test.rs:273:56:273:69 | ...::stdin | test.rs:274:14:274:50 | ... .unwrap() | $@ | test.rs:273:56:273:69 | ...::stdin | ...::stdin | -| test.rs:276:18:276:31 | chunk.unwrap() | test.rs:273:56:273:69 | ...::stdin | test.rs:276:18:276:31 | chunk.unwrap() | $@ | test.rs:273:56:273:69 | ...::stdin | ...::stdin | -| test.rs:283:18:283:21 | line | test.rs:281:46:281:59 | ...::stdin | test.rs:283:18:283:21 | line | $@ | test.rs:281:46:281:59 | ...::stdin | ...::stdin | -| test.rs:312:14:312:20 | &buffer | test.rs:309:25:309:40 | ...::stdin | test.rs:312:14:312:20 | &buffer | $@ | test.rs:309:25:309:40 | ...::stdin | ...::stdin | -| test.rs:319:14:319:20 | &buffer | test.rs:316:25:316:40 | ...::stdin | test.rs:319:14:319:20 | &buffer | $@ | test.rs:316:25:316:40 | ...::stdin | ...::stdin | -| test.rs:326:14:326:20 | &buffer | test.rs:323:25:323:40 | ...::stdin | test.rs:326:14:326:20 | &buffer | $@ | test.rs:323:25:323:40 | ...::stdin | ...::stdin | -| test.rs:333:14:333:20 | &buffer | test.rs:330:25:330:40 | ...::stdin | test.rs:333:14:333:20 | &buffer | $@ | test.rs:330:25:330:40 | ...::stdin | ...::stdin | -| test.rs:342:14:342:15 | v1 | test.rs:337:25:337:40 | ...::stdin | test.rs:342:14:342:15 | v1 | $@ | test.rs:337:25:337:40 | ...::stdin | ...::stdin | -| test.rs:343:14:343:15 | v2 | test.rs:337:25:337:40 | ...::stdin | test.rs:343:14:343:15 | v2 | $@ | test.rs:337:25:337:40 | ...::stdin | ...::stdin | -| test.rs:344:14:344:15 | v3 | test.rs:337:25:337:40 | ...::stdin | test.rs:344:14:344:15 | v3 | $@ | test.rs:337:25:337:40 | ...::stdin | ...::stdin | -| test.rs:345:14:345:15 | v4 | test.rs:337:25:337:40 | ...::stdin | test.rs:345:14:345:15 | v4 | $@ | test.rs:337:25:337:40 | ...::stdin | ...::stdin | -| test.rs:352:14:352:20 | &buffer | test.rs:349:25:349:40 | ...::stdin | test.rs:352:14:352:20 | &buffer | $@ | test.rs:349:25:349:40 | ...::stdin | ...::stdin | -| test.rs:360:14:360:18 | &data | test.rs:358:52:358:67 | ...::stdin | test.rs:360:14:360:18 | &data | $@ | test.rs:358:52:358:67 | ...::stdin | ...::stdin | -| test.rs:366:14:366:18 | &data | test.rs:364:48:364:63 | ...::stdin | test.rs:366:14:366:18 | &data | $@ | test.rs:364:48:364:63 | ...::stdin | ...::stdin | -| test.rs:373:14:373:20 | &buffer | test.rs:371:52:371:67 | ...::stdin | test.rs:373:14:373:20 | &buffer | $@ | test.rs:371:52:371:67 | ...::stdin | ...::stdin | -| test.rs:380:14:380:20 | &buffer | test.rs:378:52:378:67 | ...::stdin | test.rs:380:14:380:20 | &buffer | $@ | test.rs:378:52:378:67 | ...::stdin | ...::stdin | -| test.rs:381:14:381:22 | buffer[0] | test.rs:378:52:378:67 | ...::stdin | test.rs:381:14:381:22 | buffer[0] | $@ | test.rs:378:52:378:67 | ...::stdin | ...::stdin | -| test.rs:386:14:386:56 | ... .unwrap() | test.rs:385:58:385:73 | ...::stdin | test.rs:386:14:386:56 | ... .unwrap() | $@ | test.rs:385:58:385:73 | ...::stdin | ...::stdin | -| test.rs:388:18:388:22 | chunk | test.rs:385:58:385:73 | ...::stdin | test.rs:388:18:388:22 | chunk | $@ | test.rs:385:58:385:73 | ...::stdin | ...::stdin | -| test.rs:395:14:395:46 | ... .unwrap() | test.rs:393:48:393:63 | ...::stdin | test.rs:395:14:395:46 | ... .unwrap() | $@ | test.rs:393:48:393:63 | ...::stdin | ...::stdin | -| test.rs:397:18:397:21 | line | test.rs:393:48:393:63 | ...::stdin | test.rs:397:18:397:21 | line | $@ | test.rs:393:48:393:63 | ...::stdin | ...::stdin | -| test.rs:409:14:409:19 | buffer | test.rs:408:31:408:43 | ...::read | test.rs:409:14:409:19 | buffer | $@ | test.rs:408:31:408:43 | ...::read | ...::read | -| test.rs:414:14:414:19 | buffer | test.rs:413:31:413:38 | ...::read | test.rs:414:14:414:19 | buffer | $@ | test.rs:413:31:413:38 | ...::read | ...::read | -| test.rs:419:14:419:19 | buffer | test.rs:418:22:418:39 | ...::read_to_string | test.rs:419:14:419:19 | buffer | $@ | test.rs:418:22:418:39 | ...::read_to_string | ...::read_to_string | -| test.rs:426:14:426:25 | path.clone() | test.rs:425:22:425:25 | path | test.rs:426:14:426:25 | path.clone() | $@ | test.rs:425:22:425:25 | path | path | -| test.rs:427:14:427:35 | ... .as_path() | test.rs:425:22:425:25 | path | test.rs:427:14:427:35 | ... .as_path() | $@ | test.rs:425:22:425:25 | path | path | -| test.rs:437:14:437:17 | path | test.rs:425:22:425:25 | path | test.rs:437:14:437:17 | path | $@ | test.rs:425:22:425:25 | path | path | -| test.rs:440:14:440:30 | file_name.clone() | test.rs:439:27:439:35 | file_name | test.rs:440:14:440:30 | file_name.clone() | $@ | test.rs:439:27:439:35 | file_name | file_name | -| test.rs:445:14:445:22 | file_name | test.rs:439:27:439:35 | file_name | test.rs:445:14:445:22 | file_name | $@ | test.rs:439:27:439:35 | file_name | file_name | -| test.rs:462:14:462:19 | target | test.rs:461:22:461:34 | ...::read_link | test.rs:462:14:462:19 | target | $@ | test.rs:461:22:461:34 | ...::read_link | ...::read_link | -| test.rs:471:14:471:19 | buffer | test.rs:470:31:470:45 | ...::read | test.rs:471:14:471:19 | buffer | $@ | test.rs:470:31:470:45 | ...::read | ...::read | -| test.rs:476:14:476:19 | buffer | test.rs:475:31:475:45 | ...::read | test.rs:476:14:476:19 | buffer | $@ | test.rs:475:31:475:45 | ...::read | ...::read | -| test.rs:481:14:481:19 | buffer | test.rs:480:22:480:46 | ...::read_to_string | test.rs:481:14:481:19 | buffer | $@ | test.rs:480:22:480:46 | ...::read_to_string | ...::read_to_string | -| test.rs:488:14:488:17 | path | test.rs:486:26:486:29 | path | test.rs:488:14:488:17 | path | $@ | test.rs:486:26:486:29 | path | path | -| test.rs:488:14:488:17 | path | test.rs:486:26:486:29 | path | test.rs:488:14:488:17 | path | $@ | test.rs:486:26:486:29 | path | path | -| test.rs:489:14:489:22 | file_name | test.rs:487:31:487:39 | file_name | test.rs:489:14:489:22 | file_name | $@ | test.rs:487:31:487:39 | file_name | file_name | -| test.rs:489:14:489:22 | file_name | test.rs:487:31:487:39 | file_name | test.rs:489:14:489:22 | file_name | $@ | test.rs:487:31:487:39 | file_name | file_name | -| test.rs:494:14:494:19 | target | test.rs:493:22:493:41 | ...::read_link | test.rs:494:14:494:19 | target | $@ | test.rs:493:22:493:41 | ...::read_link | ...::read_link | -| test.rs:508:14:508:20 | &buffer | test.rs:503:20:503:38 | ...::open | test.rs:508:14:508:20 | &buffer | $@ | test.rs:503:20:503:38 | ...::open | ...::open | -| test.rs:514:14:514:20 | &buffer | test.rs:503:20:503:38 | ...::open | test.rs:514:14:514:20 | &buffer | $@ | test.rs:503:20:503:38 | ...::open | ...::open | -| test.rs:520:14:520:20 | &buffer | test.rs:503:20:503:38 | ...::open | test.rs:520:14:520:20 | &buffer | $@ | test.rs:503:20:503:38 | ...::open | ...::open | -| test.rs:526:14:526:20 | &buffer | test.rs:503:20:503:38 | ...::open | test.rs:526:14:526:20 | &buffer | $@ | test.rs:503:20:503:38 | ...::open | ...::open | -| test.rs:530:14:530:17 | byte | test.rs:503:20:503:38 | ...::open | test.rs:530:14:530:17 | byte | $@ | test.rs:503:20:503:38 | ...::open | ...::open | -| test.rs:539:14:539:20 | &buffer | test.rs:536:50:536:53 | open | test.rs:539:14:539:20 | &buffer | $@ | test.rs:536:50:536:53 | open | open | -| test.rs:546:14:546:20 | &buffer | test.rs:543:67:543:70 | open | test.rs:546:14:546:20 | &buffer | $@ | test.rs:543:67:543:70 | open | open | -| test.rs:553:14:553:20 | &buffer | test.rs:550:101:550:104 | open | test.rs:553:14:553:20 | &buffer | $@ | test.rs:550:101:550:104 | open | open | -| test.rs:564:14:564:20 | &buffer | test.rs:560:21:560:39 | ...::open | test.rs:564:14:564:20 | &buffer | $@ | test.rs:560:21:560:39 | ...::open | ...::open | -| test.rs:564:14:564:20 | &buffer | test.rs:561:21:561:39 | ...::open | test.rs:564:14:564:20 | &buffer | $@ | test.rs:561:21:561:39 | ...::open | ...::open | -| test.rs:572:14:572:20 | &buffer | test.rs:569:21:569:39 | ...::open | test.rs:572:14:572:20 | &buffer | $@ | test.rs:569:21:569:39 | ...::open | ...::open | -| test.rs:586:14:586:20 | &buffer | test.rs:581:20:581:40 | ...::open | test.rs:586:14:586:20 | &buffer | $@ | test.rs:581:20:581:40 | ...::open | ...::open | -| test.rs:592:14:592:20 | &buffer | test.rs:581:20:581:40 | ...::open | test.rs:592:14:592:20 | &buffer | $@ | test.rs:581:20:581:40 | ...::open | ...::open | -| test.rs:598:14:598:20 | &buffer | test.rs:581:20:581:40 | ...::open | test.rs:598:14:598:20 | &buffer | $@ | test.rs:581:20:581:40 | ...::open | ...::open | -| test.rs:604:14:604:20 | &buffer | test.rs:581:20:581:40 | ...::open | test.rs:604:14:604:20 | &buffer | $@ | test.rs:581:20:581:40 | ...::open | ...::open | -| test.rs:612:14:612:15 | v1 | test.rs:581:20:581:40 | ...::open | test.rs:612:14:612:15 | v1 | $@ | test.rs:581:20:581:40 | ...::open | ...::open | -| test.rs:613:14:613:15 | v2 | test.rs:581:20:581:40 | ...::open | test.rs:613:14:613:15 | v2 | $@ | test.rs:581:20:581:40 | ...::open | ...::open | -| test.rs:614:14:614:15 | v3 | test.rs:581:20:581:40 | ...::open | test.rs:614:14:614:15 | v3 | $@ | test.rs:581:20:581:40 | ...::open | ...::open | -| test.rs:615:14:615:15 | v4 | test.rs:581:20:581:40 | ...::open | test.rs:615:14:615:15 | v4 | $@ | test.rs:581:20:581:40 | ...::open | ...::open | -| test.rs:621:14:621:20 | &buffer | test.rs:581:20:581:40 | ...::open | test.rs:621:14:621:20 | &buffer | $@ | test.rs:581:20:581:40 | ...::open | ...::open | -| test.rs:630:14:630:20 | &buffer | test.rs:627:52:627:55 | open | test.rs:630:14:630:20 | &buffer | $@ | test.rs:627:52:627:55 | open | open | -| test.rs:665:14:665:20 | &buffer | test.rs:660:20:660:44 | ...::open | test.rs:665:14:665:20 | &buffer | $@ | test.rs:660:20:660:44 | ...::open | ...::open | -| test.rs:674:14:674:20 | &buffer | test.rs:671:56:671:59 | open | test.rs:674:14:674:20 | &buffer | $@ | test.rs:671:56:671:59 | open | open | -| test.rs:698:14:698:20 | &buffer | test.rs:688:26:688:53 | ...::connect | test.rs:698:14:698:20 | &buffer | $@ | test.rs:688:26:688:53 | ...::connect | ...::connect | -| test.rs:699:14:699:22 | buffer[0] | test.rs:688:26:688:53 | ...::connect | test.rs:699:14:699:22 | buffer[0] | $@ | test.rs:688:26:688:53 | ...::connect | ...::connect | -| test.rs:725:34:725:38 | &line | test.rs:707:26:707:61 | ...::connect_timeout | test.rs:725:34:725:38 | &line | $@ | test.rs:707:26:707:61 | ...::connect_timeout | ...::connect_timeout | -| test.rs:774:14:774:21 | &buffer1 | test.rs:759:28:759:57 | ...::connect | test.rs:774:14:774:21 | &buffer1 | $@ | test.rs:759:28:759:57 | ...::connect | ...::connect | -| test.rs:775:14:775:23 | buffer1[0] | test.rs:759:28:759:57 | ...::connect | test.rs:775:14:775:23 | buffer1[0] | $@ | test.rs:759:28:759:57 | ...::connect | ...::connect | -| test.rs:778:14:778:21 | &buffer2 | test.rs:759:28:759:57 | ...::connect | test.rs:778:14:778:21 | &buffer2 | $@ | test.rs:759:28:759:57 | ...::connect | ...::connect | -| test.rs:779:14:779:23 | buffer2[0] | test.rs:759:28:759:57 | ...::connect | test.rs:779:14:779:23 | buffer2[0] | $@ | test.rs:759:28:759:57 | ...::connect | ...::connect | -| test.rs:794:26:794:32 | &buffer | test.rs:759:28:759:57 | ...::connect | test.rs:794:26:794:32 | &buffer | $@ | test.rs:759:28:759:57 | ...::connect | ...::connect | -| test.rs:817:26:817:32 | &buffer | test.rs:759:28:759:57 | ...::connect | test.rs:817:26:817:32 | &buffer | $@ | test.rs:759:28:759:57 | ...::connect | ...::connect | -| test.rs:906:14:906:15 | v1 | test.rs:905:28:905:30 | get | test.rs:906:14:906:15 | v1 | $@ | test.rs:905:28:905:30 | get | get | -| test.rs:909:14:909:15 | v2 | test.rs:908:28:908:34 | get_opt | test.rs:909:14:909:15 | v2 | $@ | test.rs:908:28:908:34 | get_opt | get_opt | -| test.rs:912:14:912:15 | v3 | test.rs:911:28:911:31 | take | test.rs:912:14:912:15 | v3 | $@ | test.rs:911:28:911:31 | take | take | -| test.rs:915:14:915:15 | v4 | test.rs:914:28:914:35 | take_opt | test.rs:915:14:915:15 | v4 | $@ | test.rs:914:28:914:35 | take_opt | take_opt | -| test.rs:925:14:925:15 | v6 | test.rs:924:28:924:38 | query_first | test.rs:925:14:925:15 | v6 | $@ | test.rs:924:28:924:38 | query_first | query_first | -| test.rs:928:14:928:70 | ... .unwrap() | test.rs:928:42:928:44 | get | test.rs:928:14:928:70 | ... .unwrap() | $@ | test.rs:928:42:928:44 | get | get | -| test.rs:931:22:931:22 | v | test.rs:927:27:927:35 | exec_iter | test.rs:931:22:931:22 | v | $@ | test.rs:927:27:927:35 | exec_iter | exec_iter | -| test.rs:938:22:938:27 | values | test.rs:935:22:935:30 | query_map | test.rs:938:22:938:27 | values | $@ | test.rs:935:22:935:30 | query_map | query_map | -| test.rs:952:18:952:20 | row | test.rs:951:26:951:35 | query_fold | test.rs:952:18:952:20 | row | $@ | test.rs:951:26:951:35 | query_fold | query_fold | -| test.rs:955:14:955:18 | total | test.rs:951:26:951:35 | query_fold | test.rs:955:14:955:18 | total | $@ | test.rs:951:26:951:35 | query_fold | query_fold | -| test.rs:993:14:993:15 | v1 | test.rs:992:28:992:30 | get | test.rs:993:14:993:15 | v1 | $@ | test.rs:992:28:992:30 | get | get | -| test.rs:996:14:996:15 | v2 | test.rs:995:28:995:34 | get_opt | test.rs:996:14:996:15 | v2 | $@ | test.rs:995:28:995:34 | get_opt | get_opt | -| test.rs:999:14:999:15 | v3 | test.rs:998:28:998:31 | take | test.rs:999:14:999:15 | v3 | $@ | test.rs:998:28:998:31 | take | take | -| test.rs:1002:14:1002:15 | v4 | test.rs:1001:28:1001:35 | take_opt | test.rs:1002:14:1002:15 | v4 | $@ | test.rs:1001:28:1001:35 | take_opt | take_opt | -| test.rs:1025:22:1025:27 | values | test.rs:1022:22:1022:30 | query_map | test.rs:1025:22:1025:27 | values | $@ | test.rs:1022:22:1022:30 | query_map | query_map | -| test.rs:1039:18:1039:20 | row | test.rs:1038:26:1038:35 | query_fold | test.rs:1039:18:1039:20 | row | $@ | test.rs:1038:26:1038:35 | query_fold | query_fold | -| test.rs:1042:14:1042:18 | total | test.rs:1038:26:1038:35 | query_fold | test.rs:1042:14:1042:18 | total | $@ | test.rs:1038:26:1038:35 | query_fold | query_fold | -| test_futures_io.rs:20:10:20:13 | &tcp | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:20:10:20:13 | &tcp | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:27:10:27:16 | &reader | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:27:10:27:16 | &reader | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:33:14:33:20 | &pinned | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:33:14:33:20 | &pinned | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:37:18:37:24 | &buffer | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:37:18:37:24 | &buffer | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:38:18:38:29 | &... | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:38:18:38:29 | &... | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:46:14:46:36 | &... | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:46:14:46:36 | &... | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:51:14:51:36 | &... | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:51:14:51:36 | &... | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:55:10:55:17 | &reader2 | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:55:10:55:17 | &reader2 | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:60:14:60:20 | &pinned | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:60:14:60:20 | &pinned | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:64:18:64:24 | &buffer | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:64:18:64:24 | &buffer | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:65:18:65:20 | buf | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:65:18:65:20 | buf | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:72:22:72:29 | &buffer2 | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:72:22:72:29 | &buffer2 | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:73:22:73:24 | buf | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:73:22:73:24 | buf | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:84:14:84:19 | buffer | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:84:14:84:19 | buffer | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:91:14:91:20 | &pinned | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:91:14:91:20 | &pinned | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:104:14:104:36 | &... | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:104:14:104:36 | &... | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:108:14:108:36 | &... | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:108:14:108:36 | &... | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:114:14:114:20 | &pinned | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:114:14:114:20 | &pinned | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:117:14:117:20 | &buffer | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:117:14:117:20 | &buffer | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:119:18:119:20 | buf | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:119:18:119:20 | buf | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:126:14:126:19 | buffer | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:126:14:126:19 | buffer | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:133:14:133:18 | &line | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:133:14:133:18 | &line | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:140:14:140:18 | &line | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:140:14:140:18 | &line | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| test_futures_io.rs:147:14:147:20 | &buffer | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:147:14:147:20 | &buffer | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect | -| web_frameworks.rs:13:14:13:23 | a.as_str() | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | $@ | web_frameworks.rs:11:31:11:31 | a | a | -| web_frameworks.rs:13:14:13:23 | a.as_str() | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | $@ | web_frameworks.rs:11:31:11:31 | a | a | -| web_frameworks.rs:14:14:14:25 | a.as_bytes() | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | $@ | web_frameworks.rs:11:31:11:31 | a | a | -| web_frameworks.rs:14:14:14:25 | a.as_bytes() | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | $@ | web_frameworks.rs:11:31:11:31 | a | a | -| web_frameworks.rs:15:14:15:14 | a | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:15:14:15:14 | a | $@ | web_frameworks.rs:11:31:11:31 | a | a | -| web_frameworks.rs:15:14:15:14 | a | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:15:14:15:14 | a | $@ | web_frameworks.rs:11:31:11:31 | a | a | -| web_frameworks.rs:70:14:70:14 | a | web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | $@ | web_frameworks.rs:68:15:68:15 | a | a | -| web_frameworks.rs:70:14:70:14 | a | web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | $@ | web_frameworks.rs:68:15:68:15 | a | a | -| web_frameworks.rs:101:14:101:23 | a.as_str() | web_frameworks.rs:139:41:139:42 | to | web_frameworks.rs:101:14:101:23 | a.as_str() | $@ | web_frameworks.rs:139:41:139:42 | to | to | -| web_frameworks.rs:102:14:102:25 | a.as_bytes() | web_frameworks.rs:139:41:139:42 | to | web_frameworks.rs:102:14:102:25 | a.as_bytes() | $@ | web_frameworks.rs:139:41:139:42 | to | to | -| web_frameworks.rs:103:14:103:14 | a | web_frameworks.rs:139:41:139:42 | to | web_frameworks.rs:103:14:103:14 | a | $@ | web_frameworks.rs:139:41:139:42 | to | to | -| web_frameworks.rs:113:14:113:14 | a | web_frameworks.rs:140:45:140:46 | to | web_frameworks.rs:113:14:113:14 | a | $@ | web_frameworks.rs:140:45:140:46 | to | to | -| web_frameworks.rs:114:14:114:14 | b | web_frameworks.rs:140:45:140:46 | to | web_frameworks.rs:114:14:114:14 | b | $@ | web_frameworks.rs:140:45:140:46 | to | to | -| web_frameworks.rs:132:14:132:14 | a | web_frameworks.rs:127:5:127:20 | to | web_frameworks.rs:132:14:132:14 | a | $@ | web_frameworks.rs:127:5:127:20 | to | to | -| web_frameworks.rs:244:18:244:18 | a | web_frameworks.rs:242:33:242:35 | map | web_frameworks.rs:244:18:244:18 | a | $@ | web_frameworks.rs:242:33:242:35 | map | map | -| web_frameworks.rs:244:18:244:18 | a | web_frameworks.rs:242:33:242:35 | map | web_frameworks.rs:244:18:244:18 | a | $@ | web_frameworks.rs:242:33:242:35 | map | map | -| web_frameworks.rs:252:22:252:22 | a | web_frameworks.rs:250:46:250:49 | then | web_frameworks.rs:252:22:252:22 | a | $@ | web_frameworks.rs:250:46:250:49 | then | then | -| web_frameworks.rs:252:22:252:22 | a | web_frameworks.rs:250:46:250:49 | then | web_frameworks.rs:252:22:252:22 | a | $@ | web_frameworks.rs:250:46:250:49 | then | then | -| web_frameworks.rs:263:22:263:23 | id | web_frameworks.rs:259:50:259:57 | and_then | web_frameworks.rs:263:22:263:23 | id | $@ | web_frameworks.rs:259:50:259:57 | and_then | and_then | -| web_frameworks.rs:263:22:263:23 | id | web_frameworks.rs:259:50:259:57 | and_then | web_frameworks.rs:263:22:263:23 | id | $@ | web_frameworks.rs:259:50:259:57 | and_then | and_then | -| web_frameworks.rs:275:22:275:22 | a | web_frameworks.rs:272:75:272:77 | map | web_frameworks.rs:275:22:275:22 | a | $@ | web_frameworks.rs:272:75:272:77 | map | map | -| web_frameworks.rs:275:22:275:22 | a | web_frameworks.rs:272:75:272:77 | map | web_frameworks.rs:275:22:275:22 | a | $@ | web_frameworks.rs:272:75:272:77 | map | map | diff --git a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected deleted file mode 100644 index dae82040c935..000000000000 --- a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected +++ /dev/null @@ -1,223 +0,0 @@ -| test.rs:8:10:8:22 | ...::var | Flow source 'EnvironmentSource' of type environment (DEFAULT). | -| test.rs:9:10:9:25 | ...::var_os | Flow source 'EnvironmentSource' of type environment (DEFAULT). | -| test.rs:11:16:11:28 | ...::var | Flow source 'EnvironmentSource' of type environment (DEFAULT). | -| test.rs:12:16:12:31 | ...::var_os | Flow source 'EnvironmentSource' of type environment (DEFAULT). | -| test.rs:17:25:17:38 | ...::vars | Flow source 'EnvironmentSource' of type environment (DEFAULT). | -| test.rs:22:25:22:41 | ...::vars_os | Flow source 'EnvironmentSource' of type environment (DEFAULT). | -| test.rs:29:29:29:42 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | -| test.rs:32:16:32:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | -| test.rs:33:16:33:32 | ...::args_os | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | -| test.rs:34:16:34:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | -| test.rs:42:16:42:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | -| test.rs:46:16:46:32 | ...::args_os | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | -| test.rs:52:15:52:35 | ...::current_dir | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | -| test.rs:53:15:53:35 | ...::current_exe | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | -| test.rs:54:16:54:33 | ...::home_dir | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | -| test.rs:62:26:62:47 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:65:26:65:47 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:68:26:68:47 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:71:26:71:47 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:74:26:74:37 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:77:26:77:37 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:80:24:80:35 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:99:18:99:47 | ...::connect | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:114:31:114:42 | send_request | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:121:31:121:42 | send_request | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:211:22:211:35 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:217:22:217:35 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:223:22:223:35 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:229:22:229:35 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:235:9:235:22 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:239:17:239:30 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:246:50:246:63 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:252:46:252:59 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:259:50:259:63 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:266:50:266:63 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:273:56:273:69 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:281:46:281:59 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:288:46:288:59 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:294:46:294:59 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:309:25:309:40 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:316:25:316:40 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:323:25:323:40 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:330:25:330:40 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:337:25:337:40 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:349:25:349:40 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:358:52:358:67 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:364:48:364:63 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:371:52:371:67 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:378:52:378:67 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:385:58:385:73 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:393:48:393:63 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | -| test.rs:408:31:408:43 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:408:31:408:43 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:413:31:413:38 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:413:31:413:38 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:418:22:418:39 | ...::read_to_string | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:418:22:418:39 | ...::read_to_string | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:425:22:425:25 | path | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:439:27:439:35 | file_name | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:450:22:450:25 | path | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:451:27:451:35 | file_name | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:461:22:461:34 | ...::read_link | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:470:31:470:45 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:475:31:475:45 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:480:22:480:46 | ...::read_to_string | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:486:26:486:29 | path | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:486:26:486:29 | path | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:487:31:487:39 | file_name | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:487:31:487:39 | file_name | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:493:22:493:41 | ...::read_link | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:503:20:503:38 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:536:50:536:53 | open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:543:67:543:70 | open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:550:101:550:104 | open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:560:21:560:39 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:561:21:561:39 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:569:21:569:39 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:581:20:581:40 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:627:52:627:55 | open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:637:21:637:41 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:638:21:638:41 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:646:21:646:41 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:660:20:660:44 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:671:56:671:59 | open | Flow source 'FileSource' of type file (DEFAULT). | -| test.rs:688:26:688:53 | ...::connect | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:707:26:707:61 | ...::connect_timeout | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:759:28:759:57 | ...::connect | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:841:22:841:49 | ...::connect | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:867:22:867:50 | ...::new | Flow source 'RemoteSource' of type remote (DEFAULT). | -| test.rs:902:47:902:51 | query | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:905:28:905:30 | get | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:908:28:908:34 | get_opt | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:911:28:911:31 | take | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:914:28:914:35 | take_opt | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:917:26:917:31 | as_ref | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:924:28:924:38 | query_first | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:927:27:927:35 | exec_iter | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:928:42:928:44 | get | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:935:22:935:30 | query_map | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:942:22:942:30 | query_map | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:951:26:951:35 | query_fold | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:957:22:957:31 | query_fold | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:989:53:989:57 | query | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:992:28:992:30 | get | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:995:28:995:34 | get_opt | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:998:28:998:31 | take | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:1001:28:1001:35 | take_opt | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:1004:26:1004:31 | as_ref | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:1011:28:1011:38 | query_first | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:1014:27:1014:35 | exec_iter | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:1022:22:1022:30 | query_map | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:1029:22:1029:30 | query_map | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:1038:26:1038:35 | query_fold | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:1044:22:1044:31 | query_fold | Flow source 'DatabaseSource' of type database (DEFAULT). | -| test.rs:1096:16:1096:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | -| test.rs:1096:16:1096:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | -| test_futures_io.rs:19:15:19:32 | ...::connect | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:11:31:11:31 | a | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:11:31:11:31 | a | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:22:14:22:19 | TuplePat | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:22:14:22:19 | TuplePat | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:48:14:48:30 | MyStruct {...} | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:48:14:48:30 | MyStruct {...} | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:58:14:58:15 | ms | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:58:14:58:15 | ms | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:68:15:68:15 | a | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:68:15:68:15 | a | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:127:5:127:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:127:5:127:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:127:5:127:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:127:5:127:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:127:5:127:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:127:5:127:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:127:5:127:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:127:5:127:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:139:41:139:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:139:41:139:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:139:41:139:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:139:41:139:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:139:41:139:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:139:41:139:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:139:41:139:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:139:41:139:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:140:45:140:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:140:45:140:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:140:45:140:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:140:45:140:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:140:45:140:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:140:45:140:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:140:45:140:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:140:45:140:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:141:41:141:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:141:41:141:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:141:41:141:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:141:41:141:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:141:41:141:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:141:41:141:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:141:41:141:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:141:41:141:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | -| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | diff --git a/rust/ql/test/library-tests/dataflow/sources/database/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/sources/database/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..b6a4a56f9f77 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/database/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,3 @@ +multiplePathResolutions +| test.rs:10:28:10:65 | Result::<...> | +| test.rs:97:40:97:49 | Result::<...> | diff --git a/rust/ql/test/library-tests/dataflow/sources/database/Cargo.lock b/rust/ql/test/library-tests/dataflow/sources/database/Cargo.lock new file mode 100644 index 000000000000..5edf980e52e1 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/database/Cargo.lock @@ -0,0 +1,2008 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "pin-project-lite", + "slab", +] + +[[package]] +name = "async-global-executor" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" +dependencies = [ + "async-channel 2.5.0", + "async-executor", + "async-io", + "async-lock", + "blocking", + "futures-lite", + "once_cell", +] + +[[package]] +name = "async-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" +dependencies = [ + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-lock" +version = "3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" +dependencies = [ + "event-listener 5.4.1", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-std" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c8e079a4ab67ae52b7403632e4618815d6db36d2a010cfe41b02c1b1578f93b" +dependencies = [ + "async-channel 1.9.0", + "async-global-executor", + "async-io", + "async-lock", + "crossbeam-utils", + "futures-channel", + "futures-core", + "futures-io", + "futures-lite", + "gloo-timers", + "kv-log-macro", + "log", + "memchr", + "once_cell", + "pin-project-lite", + "pin-utils", + "slab", + "wasm-bindgen-futures", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blocking" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +dependencies = [ + "async-channel 2.5.0", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + +[[package]] +name = "btoi" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd6407f73a9b8b6162d8a2ef999fe6afd7cc15902ebf42c5cd296addf17e0ad" +dependencies = [ + "num-traits", +] + +[[package]] +name = "bufstream" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40e38929add23cdf8a366df9b0e088953150724bcbe5fc330b0d8eb3b328eec8" + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" + +[[package]] +name = "cc" +version = "1.2.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core", + "quote", + "syn", +] + +[[package]] +name = "derive_utils" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccfae181bab5ab6c5478b2ccb69e4c68a02f8c3ec72f6616bfec9dbc599d2ee0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener 5.4.1", + "pin-project-lite", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "find-msvc-tools" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" + +[[package]] +name = "flate2" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" +dependencies = [ + "crc32fast", + "libz-sys", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-lite" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", +] + +[[package]] +name = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "icu_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "potential_utf", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +dependencies = [ + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" +dependencies = [ + "equivalent", + "hashbrown 0.16.0", +] + +[[package]] +name = "io-enum" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d197db2f7ebf90507296df3aebaf65d69f5dce8559d8dbd82776a6cadab61bbf" +dependencies = [ + "derive_utils", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "js-sys" +version = "0.3.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "keyed_priority_queue" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee7893dab2e44ae5f9d0173f26ff4aa327c10b01b06a72b52dd9405b628640d" +dependencies = [ + "indexmap", +] + +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] + +[[package]] +name = "libc" +version = "0.2.177" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" + +[[package]] +name = "libz-sys" +version = "1.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + +[[package]] +name = "litemap" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +dependencies = [ + "value-bag", +] + +[[package]] +name = "lru" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" + +[[package]] +name = "lru" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f8cc7106155f10bdf99a6f379688f543ad6596a415375b36a59a054ceda1198" +dependencies = [ + "hashbrown 0.15.5", +] + +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "mysql" +version = "26.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce2510a735f601bab18202b07ea0a197bd1d130d3a5ce2edf4577d225f0c3ee4" +dependencies = [ + "bufstream", + "bytes", + "crossbeam-queue", + "crossbeam-utils", + "flate2", + "io-enum", + "libc", + "lru 0.12.5", + "mysql_common", + "named_pipe", + "pem", + "percent-encoding", + "socket2 0.5.10", + "twox-hash", + "url", +] + +[[package]] +name = "mysql-common-derive" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66f62cad7623a9cb6f8f64037f0c4f69c8db8e82914334a83c9788201c2c1bfa" +dependencies = [ + "darling", + "heck", + "num-bigint", + "proc-macro-crate", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn", + "termcolor", + "thiserror", +] + +[[package]] +name = "mysql_async" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "277ce2f2459b2af4cc6d0a0b7892381f80800832f57c533f03e2845f4ea331ea" +dependencies = [ + "bytes", + "crossbeam-queue", + "flate2", + "futures-core", + "futures-sink", + "futures-util", + "keyed_priority_queue", + "lru 0.14.0", + "mysql_common", + "pem", + "percent-encoding", + "rand", + "serde", + "serde_json", + "socket2 0.5.10", + "thiserror", + "tokio", + "tokio-util", + "twox-hash", + "url", +] + +[[package]] +name = "mysql_common" +version = "0.35.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbb9f371618ce723f095c61fbcdc36e8936956d2b62832f9c7648689b338e052" +dependencies = [ + "base64", + "bitflags", + "btoi", + "byteorder", + "bytes", + "crc32fast", + "flate2", + "getrandom", + "mysql-common-derive", + "num-bigint", + "num-traits", + "regex", + "saturating", + "serde", + "serde_json", + "sha1", + "sha2", + "thiserror", + "uuid", +] + +[[package]] +name = "named_pipe" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad9c443cce91fc3e12f017290db75dde490d685cdaaf508d7159d7cf41f0eb2b" +dependencies = [ + "winapi", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "pem" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" +dependencies = [ + "base64", + "serde_core", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "polling" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "potential_utf" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +dependencies = [ + "zerovec", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro-crate" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "proc-macro2" +version = "1.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags", +] + +[[package]] +name = "regex" +version = "1.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" + +[[package]] +name = "rustix" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "saturating" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ece8e78b2f38ec51c51f5d475df0a7187ba5111b2a28bdc761ee05b075d40a71" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.145" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", + "serde_core", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +dependencies = [ + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "slab" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "socket2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "socket2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "syn" +version = "2.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "test" +version = "0.0.1" +dependencies = [ + "async-std", + "futures", + "mysql", + "mysql_async", + "tokio", +] + +[[package]] +name = "thiserror" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tinystr" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tokio" +version = "1.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +dependencies = [ + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2 0.6.1", + "tokio-macros", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-util" +version = "0.7.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml_datetime" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.23.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +dependencies = [ + "indexmap", + "toml_datetime", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +dependencies = [ + "winnow", +] + +[[package]] +name = "twox-hash" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "unicode-ident" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" + +[[package]] +name = "url" +version = "2.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "uuid" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "value-bag" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "943ce29a8a743eb10d6082545d861b24f9d1b160b7d741e0f2cdf726bec909c5" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "web-sys" +version = "0.3.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "winnow" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +dependencies = [ + "memchr", +] + +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + +[[package]] +name = "yoke" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.expected new file mode 100644 index 000000000000..db1e69c43fb5 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.expected @@ -0,0 +1,205 @@ +models +| 1 | Source: <_ as mysql::conn::queryable::Queryable>::query_first; ReturnValue.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; database | +| 2 | Source: <_ as mysql::conn::queryable::Queryable>::query_fold; Argument[2].Parameter[1]; database | +| 3 | Source: <_ as mysql::conn::queryable::Queryable>::query_map; Argument[1].Parameter[0]; database | +| 4 | Source: <_ as mysql_async::queryable::Queryable>::query_fold; Argument[2].Parameter[1]; database | +| 5 | Source: <_ as mysql_async::queryable::Queryable>::query_map; Argument[1].Parameter[0]; database | +| 6 | Source: ::exec_iter; ReturnValue.Field[core::result::Result::Ok(0)].Element; database | +| 7 | Source: ::get; ReturnValue.Field[core::option::Option::Some(0)]; database | +| 8 | Source: ::get_opt; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; database | +| 9 | Source: ::take; ReturnValue.Field[core::option::Option::Some(0)]; database | +| 10 | Source: ::take_opt; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; database | +| 11 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint | +| 12 | Summary: <_ as core::ops::arith::Add>::add; Argument[0]; ReturnValue; taint | +| 13 | Summary: <_ as mysql::conn::queryable::Queryable>::query_fold; Argument[2].ReturnValue; ReturnValue.Field[core::result::Result::Ok(0)]; value | +| 14 | Summary: <_ as mysql_async::queryable::Queryable>::query_fold; Argument[2].ReturnValue; ReturnValue.Future.Field[core::result::Result::Ok(0)]; value | +| 15 | Summary: ::add; Argument[0]; ReturnValue; taint | +| 16 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 17 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +edges +| test.rs:18:13:18:14 | v1 | test.rs:19:14:19:15 | v1 | provenance | | +| test.rs:18:24:18:33 | row.get(...) [Some] | test.rs:18:24:18:42 | ... .unwrap() | provenance | MaD:16 | +| test.rs:18:24:18:42 | ... .unwrap() | test.rs:18:13:18:14 | v1 | provenance | | +| test.rs:18:28:18:30 | get | test.rs:18:24:18:33 | row.get(...) [Some] | provenance | Src:MaD:7 | +| test.rs:21:13:21:14 | v2 | test.rs:22:14:22:15 | v2 | provenance | | +| test.rs:21:24:21:37 | row.get_opt(...) [Some, Ok] | test.rs:21:24:21:46 | ... .unwrap() [Ok] | provenance | MaD:16 | +| test.rs:21:24:21:46 | ... .unwrap() [Ok] | test.rs:21:24:21:55 | ... .unwrap() | provenance | MaD:17 | +| test.rs:21:24:21:55 | ... .unwrap() | test.rs:21:13:21:14 | v2 | provenance | | +| test.rs:21:28:21:34 | get_opt | test.rs:21:24:21:37 | row.get_opt(...) [Some, Ok] | provenance | Src:MaD:8 | +| test.rs:24:13:24:14 | v3 | test.rs:25:14:25:15 | v3 | provenance | | +| test.rs:24:24:24:34 | row.take(...) [Some] | test.rs:24:24:24:43 | ... .unwrap() | provenance | MaD:16 | +| test.rs:24:24:24:43 | ... .unwrap() | test.rs:24:13:24:14 | v3 | provenance | | +| test.rs:24:28:24:31 | take | test.rs:24:24:24:34 | row.take(...) [Some] | provenance | Src:MaD:9 | +| test.rs:27:13:27:14 | v4 | test.rs:28:14:28:15 | v4 | provenance | | +| test.rs:27:24:27:38 | row.take_opt(...) [Some, Ok] | test.rs:27:24:27:47 | ... .unwrap() [Ok] | provenance | MaD:16 | +| test.rs:27:24:27:47 | ... .unwrap() [Ok] | test.rs:27:24:27:56 | ... .unwrap() | provenance | MaD:17 | +| test.rs:27:24:27:56 | ... .unwrap() | test.rs:27:13:27:14 | v4 | provenance | | +| test.rs:27:28:27:35 | take_opt | test.rs:27:24:27:38 | row.take_opt(...) [Some, Ok] | provenance | Src:MaD:10 | +| test.rs:37:13:37:14 | v6 | test.rs:38:14:38:15 | v6 | provenance | | +| test.rs:37:23:37:63 | conn.query_first(...) [Ok, Some] | test.rs:37:23:37:64 | TryExpr [Some] | provenance | | +| test.rs:37:23:37:64 | TryExpr [Some] | test.rs:37:23:37:73 | ... .unwrap() | provenance | MaD:16 | +| test.rs:37:23:37:73 | ... .unwrap() | test.rs:37:13:37:14 | v6 | provenance | | +| test.rs:37:28:37:38 | query_first | test.rs:37:23:37:63 | conn.query_first(...) [Ok, Some] | provenance | Src:MaD:1 | +| test.rs:40:13:40:18 | mut t1 [element] | test.rs:42:20:42:21 | t1 [element] | provenance | | +| test.rs:40:22:40:71 | conn.exec_iter(...) [Ok, element] | test.rs:40:22:40:72 | TryExpr [element] | provenance | | +| test.rs:40:22:40:72 | TryExpr [element] | test.rs:40:13:40:18 | mut t1 [element] | provenance | | +| test.rs:40:27:40:35 | exec_iter | test.rs:40:22:40:71 | conn.exec_iter(...) [Ok, element] | provenance | Src:MaD:6 | +| test.rs:41:14:41:61 | ... .get(...) [Some] | test.rs:41:14:41:70 | ... .unwrap() | provenance | MaD:16 | +| test.rs:41:42:41:44 | get | test.rs:41:14:41:61 | ... .get(...) [Some] | provenance | Src:MaD:7 | +| test.rs:42:13:42:15 | row | test.rs:44:22:44:22 | v | provenance | | +| test.rs:42:20:42:21 | t1 [element] | test.rs:42:13:42:15 | row | provenance | | +| test.rs:48:22:48:30 | query_map | test.rs:50:14:50:24 | ...: i64 | provenance | Src:MaD:3 | +| test.rs:50:14:50:24 | ...: i64 | test.rs:51:22:51:27 | values | provenance | | +| test.rs:64:13:64:17 | total | test.rs:68:14:68:18 | total | provenance | | +| test.rs:64:21:67:10 | conn.query_fold(...) [Ok] | test.rs:64:21:67:11 | TryExpr | provenance | | +| test.rs:64:21:67:11 | TryExpr | test.rs:64:13:64:17 | total | provenance | | +| test.rs:64:26:64:35 | query_fold | test.rs:64:76:64:83 | ...: i64 | provenance | Src:MaD:2 | +| test.rs:64:76:64:83 | ...: i64 | test.rs:64:86:67:9 | { ... } | provenance | | +| test.rs:64:76:64:83 | ...: i64 | test.rs:65:18:65:20 | row | provenance | | +| test.rs:64:76:64:83 | ...: i64 | test.rs:66:19:66:21 | row | provenance | | +| test.rs:64:86:67:9 | { ... } | test.rs:64:21:67:10 | conn.query_fold(...) [Ok] | provenance | MaD:13 | +| test.rs:66:13:66:21 | ... + ... | test.rs:64:86:67:9 | { ... } | provenance | | +| test.rs:66:19:66:21 | row | test.rs:66:13:66:21 | ... + ... | provenance | MaD:11 | +| test.rs:66:19:66:21 | row | test.rs:66:13:66:21 | ... + ... | provenance | MaD:12 | +| test.rs:66:19:66:21 | row | test.rs:66:13:66:21 | ... + ... | provenance | MaD:15 | +| test.rs:105:13:105:14 | v1 | test.rs:106:14:106:15 | v1 | provenance | | +| test.rs:105:24:105:33 | row.get(...) [Some] | test.rs:105:24:105:42 | ... .unwrap() | provenance | MaD:16 | +| test.rs:105:24:105:42 | ... .unwrap() | test.rs:105:13:105:14 | v1 | provenance | | +| test.rs:105:28:105:30 | get | test.rs:105:24:105:33 | row.get(...) [Some] | provenance | Src:MaD:7 | +| test.rs:108:13:108:14 | v2 | test.rs:109:14:109:15 | v2 | provenance | | +| test.rs:108:24:108:37 | row.get_opt(...) [Some, Ok] | test.rs:108:24:108:46 | ... .unwrap() [Ok] | provenance | MaD:16 | +| test.rs:108:24:108:46 | ... .unwrap() [Ok] | test.rs:108:24:108:55 | ... .unwrap() | provenance | MaD:17 | +| test.rs:108:24:108:55 | ... .unwrap() | test.rs:108:13:108:14 | v2 | provenance | | +| test.rs:108:28:108:34 | get_opt | test.rs:108:24:108:37 | row.get_opt(...) [Some, Ok] | provenance | Src:MaD:8 | +| test.rs:111:13:111:14 | v3 | test.rs:112:14:112:15 | v3 | provenance | | +| test.rs:111:24:111:34 | row.take(...) [Some] | test.rs:111:24:111:43 | ... .unwrap() | provenance | MaD:16 | +| test.rs:111:24:111:43 | ... .unwrap() | test.rs:111:13:111:14 | v3 | provenance | | +| test.rs:111:28:111:31 | take | test.rs:111:24:111:34 | row.take(...) [Some] | provenance | Src:MaD:9 | +| test.rs:114:13:114:14 | v4 | test.rs:115:14:115:15 | v4 | provenance | | +| test.rs:114:24:114:38 | row.take_opt(...) [Some, Ok] | test.rs:114:24:114:47 | ... .unwrap() [Ok] | provenance | MaD:16 | +| test.rs:114:24:114:47 | ... .unwrap() [Ok] | test.rs:114:24:114:56 | ... .unwrap() | provenance | MaD:17 | +| test.rs:114:24:114:56 | ... .unwrap() | test.rs:114:13:114:14 | v4 | provenance | | +| test.rs:114:28:114:35 | take_opt | test.rs:114:24:114:38 | row.take_opt(...) [Some, Ok] | provenance | Src:MaD:10 | +| test.rs:135:22:135:30 | query_map | test.rs:137:14:137:24 | ...: i64 | provenance | Src:MaD:5 | +| test.rs:137:14:137:24 | ...: i64 | test.rs:138:22:138:27 | values | provenance | | +| test.rs:151:13:151:17 | total | test.rs:155:14:155:18 | total | provenance | | +| test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok] | test.rs:151:21:154:16 | await ... [Ok] | provenance | | +| test.rs:151:21:154:16 | await ... [Ok] | test.rs:151:21:154:17 | TryExpr | provenance | | +| test.rs:151:21:154:17 | TryExpr | test.rs:151:13:151:17 | total | provenance | | +| test.rs:151:26:151:35 | query_fold | test.rs:151:76:151:83 | ...: i64 | provenance | Src:MaD:4 | +| test.rs:151:76:151:83 | ...: i64 | test.rs:151:86:154:9 | { ... } | provenance | | +| test.rs:151:76:151:83 | ...: i64 | test.rs:152:18:152:20 | row | provenance | | +| test.rs:151:76:151:83 | ...: i64 | test.rs:153:19:153:21 | row | provenance | | +| test.rs:151:86:154:9 | { ... } | test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok] | provenance | MaD:14 | +| test.rs:153:13:153:21 | ... + ... | test.rs:151:86:154:9 | { ... } | provenance | | +| test.rs:153:19:153:21 | row | test.rs:153:13:153:21 | ... + ... | provenance | MaD:11 | +| test.rs:153:19:153:21 | row | test.rs:153:13:153:21 | ... + ... | provenance | MaD:12 | +| test.rs:153:19:153:21 | row | test.rs:153:13:153:21 | ... + ... | provenance | MaD:15 | +nodes +| test.rs:18:13:18:14 | v1 | semmle.label | v1 | +| test.rs:18:24:18:33 | row.get(...) [Some] | semmle.label | row.get(...) [Some] | +| test.rs:18:24:18:42 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:18:28:18:30 | get | semmle.label | get | +| test.rs:19:14:19:15 | v1 | semmle.label | v1 | +| test.rs:21:13:21:14 | v2 | semmle.label | v2 | +| test.rs:21:24:21:37 | row.get_opt(...) [Some, Ok] | semmle.label | row.get_opt(...) [Some, Ok] | +| test.rs:21:24:21:46 | ... .unwrap() [Ok] | semmle.label | ... .unwrap() [Ok] | +| test.rs:21:24:21:55 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:21:28:21:34 | get_opt | semmle.label | get_opt | +| test.rs:22:14:22:15 | v2 | semmle.label | v2 | +| test.rs:24:13:24:14 | v3 | semmle.label | v3 | +| test.rs:24:24:24:34 | row.take(...) [Some] | semmle.label | row.take(...) [Some] | +| test.rs:24:24:24:43 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:24:28:24:31 | take | semmle.label | take | +| test.rs:25:14:25:15 | v3 | semmle.label | v3 | +| test.rs:27:13:27:14 | v4 | semmle.label | v4 | +| test.rs:27:24:27:38 | row.take_opt(...) [Some, Ok] | semmle.label | row.take_opt(...) [Some, Ok] | +| test.rs:27:24:27:47 | ... .unwrap() [Ok] | semmle.label | ... .unwrap() [Ok] | +| test.rs:27:24:27:56 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:27:28:27:35 | take_opt | semmle.label | take_opt | +| test.rs:28:14:28:15 | v4 | semmle.label | v4 | +| test.rs:37:13:37:14 | v6 | semmle.label | v6 | +| test.rs:37:23:37:63 | conn.query_first(...) [Ok, Some] | semmle.label | conn.query_first(...) [Ok, Some] | +| test.rs:37:23:37:64 | TryExpr [Some] | semmle.label | TryExpr [Some] | +| test.rs:37:23:37:73 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:37:28:37:38 | query_first | semmle.label | query_first | +| test.rs:38:14:38:15 | v6 | semmle.label | v6 | +| test.rs:40:13:40:18 | mut t1 [element] | semmle.label | mut t1 [element] | +| test.rs:40:22:40:71 | conn.exec_iter(...) [Ok, element] | semmle.label | conn.exec_iter(...) [Ok, element] | +| test.rs:40:22:40:72 | TryExpr [element] | semmle.label | TryExpr [element] | +| test.rs:40:27:40:35 | exec_iter | semmle.label | exec_iter | +| test.rs:41:14:41:61 | ... .get(...) [Some] | semmle.label | ... .get(...) [Some] | +| test.rs:41:14:41:70 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:41:42:41:44 | get | semmle.label | get | +| test.rs:42:13:42:15 | row | semmle.label | row | +| test.rs:42:20:42:21 | t1 [element] | semmle.label | t1 [element] | +| test.rs:44:22:44:22 | v | semmle.label | v | +| test.rs:48:22:48:30 | query_map | semmle.label | query_map | +| test.rs:50:14:50:24 | ...: i64 | semmle.label | ...: i64 | +| test.rs:51:22:51:27 | values | semmle.label | values | +| test.rs:64:13:64:17 | total | semmle.label | total | +| test.rs:64:21:67:10 | conn.query_fold(...) [Ok] | semmle.label | conn.query_fold(...) [Ok] | +| test.rs:64:21:67:11 | TryExpr | semmle.label | TryExpr | +| test.rs:64:26:64:35 | query_fold | semmle.label | query_fold | +| test.rs:64:76:64:83 | ...: i64 | semmle.label | ...: i64 | +| test.rs:64:86:67:9 | { ... } | semmle.label | { ... } | +| test.rs:65:18:65:20 | row | semmle.label | row | +| test.rs:66:13:66:21 | ... + ... | semmle.label | ... + ... | +| test.rs:66:19:66:21 | row | semmle.label | row | +| test.rs:68:14:68:18 | total | semmle.label | total | +| test.rs:105:13:105:14 | v1 | semmle.label | v1 | +| test.rs:105:24:105:33 | row.get(...) [Some] | semmle.label | row.get(...) [Some] | +| test.rs:105:24:105:42 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:105:28:105:30 | get | semmle.label | get | +| test.rs:106:14:106:15 | v1 | semmle.label | v1 | +| test.rs:108:13:108:14 | v2 | semmle.label | v2 | +| test.rs:108:24:108:37 | row.get_opt(...) [Some, Ok] | semmle.label | row.get_opt(...) [Some, Ok] | +| test.rs:108:24:108:46 | ... .unwrap() [Ok] | semmle.label | ... .unwrap() [Ok] | +| test.rs:108:24:108:55 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:108:28:108:34 | get_opt | semmle.label | get_opt | +| test.rs:109:14:109:15 | v2 | semmle.label | v2 | +| test.rs:111:13:111:14 | v3 | semmle.label | v3 | +| test.rs:111:24:111:34 | row.take(...) [Some] | semmle.label | row.take(...) [Some] | +| test.rs:111:24:111:43 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:111:28:111:31 | take | semmle.label | take | +| test.rs:112:14:112:15 | v3 | semmle.label | v3 | +| test.rs:114:13:114:14 | v4 | semmle.label | v4 | +| test.rs:114:24:114:38 | row.take_opt(...) [Some, Ok] | semmle.label | row.take_opt(...) [Some, Ok] | +| test.rs:114:24:114:47 | ... .unwrap() [Ok] | semmle.label | ... .unwrap() [Ok] | +| test.rs:114:24:114:56 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:114:28:114:35 | take_opt | semmle.label | take_opt | +| test.rs:115:14:115:15 | v4 | semmle.label | v4 | +| test.rs:135:22:135:30 | query_map | semmle.label | query_map | +| test.rs:137:14:137:24 | ...: i64 | semmle.label | ...: i64 | +| test.rs:138:22:138:27 | values | semmle.label | values | +| test.rs:151:13:151:17 | total | semmle.label | total | +| test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok] | semmle.label | conn.query_fold(...) [future, Ok] | +| test.rs:151:21:154:16 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:151:21:154:17 | TryExpr | semmle.label | TryExpr | +| test.rs:151:26:151:35 | query_fold | semmle.label | query_fold | +| test.rs:151:76:151:83 | ...: i64 | semmle.label | ...: i64 | +| test.rs:151:86:154:9 | { ... } | semmle.label | { ... } | +| test.rs:152:18:152:20 | row | semmle.label | row | +| test.rs:153:13:153:21 | ... + ... | semmle.label | ... + ... | +| test.rs:153:19:153:21 | row | semmle.label | row | +| test.rs:155:14:155:18 | total | semmle.label | total | +subpaths +testFailures +#select +| test.rs:19:14:19:15 | v1 | test.rs:18:28:18:30 | get | test.rs:19:14:19:15 | v1 | $@ | test.rs:18:28:18:30 | get | get | +| test.rs:22:14:22:15 | v2 | test.rs:21:28:21:34 | get_opt | test.rs:22:14:22:15 | v2 | $@ | test.rs:21:28:21:34 | get_opt | get_opt | +| test.rs:25:14:25:15 | v3 | test.rs:24:28:24:31 | take | test.rs:25:14:25:15 | v3 | $@ | test.rs:24:28:24:31 | take | take | +| test.rs:28:14:28:15 | v4 | test.rs:27:28:27:35 | take_opt | test.rs:28:14:28:15 | v4 | $@ | test.rs:27:28:27:35 | take_opt | take_opt | +| test.rs:38:14:38:15 | v6 | test.rs:37:28:37:38 | query_first | test.rs:38:14:38:15 | v6 | $@ | test.rs:37:28:37:38 | query_first | query_first | +| test.rs:41:14:41:70 | ... .unwrap() | test.rs:41:42:41:44 | get | test.rs:41:14:41:70 | ... .unwrap() | $@ | test.rs:41:42:41:44 | get | get | +| test.rs:44:22:44:22 | v | test.rs:40:27:40:35 | exec_iter | test.rs:44:22:44:22 | v | $@ | test.rs:40:27:40:35 | exec_iter | exec_iter | +| test.rs:51:22:51:27 | values | test.rs:48:22:48:30 | query_map | test.rs:51:22:51:27 | values | $@ | test.rs:48:22:48:30 | query_map | query_map | +| test.rs:65:18:65:20 | row | test.rs:64:26:64:35 | query_fold | test.rs:65:18:65:20 | row | $@ | test.rs:64:26:64:35 | query_fold | query_fold | +| test.rs:68:14:68:18 | total | test.rs:64:26:64:35 | query_fold | test.rs:68:14:68:18 | total | $@ | test.rs:64:26:64:35 | query_fold | query_fold | +| test.rs:106:14:106:15 | v1 | test.rs:105:28:105:30 | get | test.rs:106:14:106:15 | v1 | $@ | test.rs:105:28:105:30 | get | get | +| test.rs:109:14:109:15 | v2 | test.rs:108:28:108:34 | get_opt | test.rs:109:14:109:15 | v2 | $@ | test.rs:108:28:108:34 | get_opt | get_opt | +| test.rs:112:14:112:15 | v3 | test.rs:111:28:111:31 | take | test.rs:112:14:112:15 | v3 | $@ | test.rs:111:28:111:31 | take | take | +| test.rs:115:14:115:15 | v4 | test.rs:114:28:114:35 | take_opt | test.rs:115:14:115:15 | v4 | $@ | test.rs:114:28:114:35 | take_opt | take_opt | +| test.rs:138:22:138:27 | values | test.rs:135:22:135:30 | query_map | test.rs:138:22:138:27 | values | $@ | test.rs:135:22:135:30 | query_map | query_map | +| test.rs:152:18:152:20 | row | test.rs:151:26:151:35 | query_fold | test.rs:152:18:152:20 | row | $@ | test.rs:151:26:151:35 | query_fold | query_fold | +| test.rs:155:14:155:18 | total | test.rs:151:26:151:35 | query_fold | test.rs:155:14:155:18 | total | $@ | test.rs:151:26:151:35 | query_fold | query_fold | diff --git a/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.qlref b/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.qlref new file mode 100644 index 000000000000..e0f7493db396 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.qlref @@ -0,0 +1,2 @@ +query: ../env/InlineFlow.ql + diff --git a/rust/ql/test/library-tests/dataflow/sources/database/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/database/TaintSources.expected new file mode 100644 index 000000000000..9132dfaa2b0f --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/database/TaintSources.expected @@ -0,0 +1,25 @@ +| test.rs:15:47:15:51 | query | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:18:28:18:30 | get | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:21:28:21:34 | get_opt | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:24:28:24:31 | take | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:27:28:27:35 | take_opt | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:30:26:30:31 | as_ref | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:37:28:37:38 | query_first | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:40:27:40:35 | exec_iter | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:41:42:41:44 | get | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:48:22:48:30 | query_map | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:55:22:55:30 | query_map | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:64:26:64:35 | query_fold | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:70:22:70:31 | query_fold | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:102:53:102:57 | query | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:105:28:105:30 | get | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:108:28:108:34 | get_opt | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:111:28:111:31 | take | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:114:28:114:35 | take_opt | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:117:26:117:31 | as_ref | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:124:28:124:38 | query_first | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:127:27:127:35 | exec_iter | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:135:22:135:30 | query_map | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:142:22:142:30 | query_map | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:151:26:151:35 | query_fold | Flow source 'DatabaseSource' of type database (DEFAULT). | +| test.rs:157:22:157:31 | query_fold | Flow source 'DatabaseSource' of type database (DEFAULT). | diff --git a/rust/ql/test/library-tests/dataflow/sources/TaintSources.qlref b/rust/ql/test/library-tests/dataflow/sources/database/TaintSources.qlref similarity index 100% rename from rust/ql/test/library-tests/dataflow/sources/TaintSources.qlref rename to rust/ql/test/library-tests/dataflow/sources/database/TaintSources.qlref diff --git a/rust/ql/test/library-tests/dataflow/sources/database/options.yml b/rust/ql/test/library-tests/dataflow/sources/database/options.yml new file mode 100644 index 000000000000..af2d6ba23443 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/database/options.yml @@ -0,0 +1,7 @@ +qltest_cargo_check: true +qltest_dependencies: + - async-std = { version = "1.13.1" } + - futures = { version = "0.3" } + - mysql = { version = "26.0.1" } + - mysql_async = { version = "0.36.1" } + - tokio = { version = "1.43.0", features = ["full"] } diff --git a/rust/ql/test/library-tests/dataflow/sources/database/test.rs b/rust/ql/test/library-tests/dataflow/sources/database/test.rs new file mode 100644 index 000000000000..5fbaef711447 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/database/test.rs @@ -0,0 +1,222 @@ +fn sink(_: T) { } + +// --- tests --- + +mod test_mysql { + use mysql::*; + use mysql::prelude::*; + use super::sink; + + pub fn test_mysql() -> Result<(), Box> { + // connect through a MySQL connection pool + let mut pool = mysql::Pool::new("")?; + let mut conn = pool.get_conn()?; + + let mut rows : Vec = conn.query("SELECT id, name, age FROM person")?; // $ Alert[rust/summary/taint-sources] + let mut row = &mut rows[0]; + + let v1 : i64 = row.get(0).unwrap(); // $ Alert[rust/summary/taint-sources] + sink(v1); // $ hasTaintFlow=0 + + let v2 : i64 = row.get_opt(0).unwrap().unwrap(); // $ Alert[rust/summary/taint-sources] + sink(v2); // $ hasTaintFlow=0 + + let v3 : i64 = row.take(0).unwrap(); // $ Alert[rust/summary/taint-sources] + sink(v3); // $ hasTaintFlow=0 + + let v4 : i64 = row.take_opt(0).unwrap().unwrap(); // $ Alert[rust/summary/taint-sources] + sink(v4); // $ hasTaintFlow=0 + + let value5 = row.as_ref(0).unwrap(); // $ Alert[rust/summary/taint-sources] + if let mysql::Value::Int(v) = value5 { + sink(v); // $ MISSING: hasTaintFlow=0 + } else if let mysql::Value::Bytes(v) = value5 { + sink(v); // $ MISSING: hasTaintFlow=0 + } + + let v6: i64 = conn.query_first("SELECT id FROM person")?.unwrap(); // $ Alert[rust/summary/taint-sources] + sink(v6); // $ hasTaintFlow + + let mut t1 = conn.exec_iter("SELECT id FROM person", (1, 2, 3))?; // $ Alert[rust/summary/taint-sources] + sink(t1.nth(0).unwrap().unwrap().get::(1).unwrap()); // $ Alert[rust/summary/taint-sources] hasTaintFlow=1 + for row in t1 { + for v in row { + sink(v); // $ hasTaintFlow + } + } + + let _ = conn.query_map( // $ Alert[rust/summary/taint-sources] + "SELECT id FROM person", + |values: i64| -> () { + sink(values); // $ hasTaintFlow + } + )?; + + let _ = conn.query_map( // $ Alert[rust/summary/taint-sources] + "SELECT id, name, age FROM person", + |values: (i64, String, i32)| -> () { + sink(values.0); // $ MISSING: hasTaintFlow + sink(values.1); // $ MISSING: hasTaintFlow + sink(values.2); // $ MISSING: hasTaintFlow + } + )?; + + let total = conn.query_fold("SELECT id FROM person", 0, |acc: i64, row: i64| { // $ Alert[rust/summary/taint-sources] + sink(row); // $ hasTaintFlow + acc + row + })?; + sink(total); // $ hasTaintFlow + + let _ = conn.query_fold("SELECT id, name, age FROM person", 0, |acc: i64, row: (i64, String, i32)| { // $ Alert[rust/summary/taint-sources] + let id: i64 = row.0; + let name: String = row.1; + let age: i32 = row.2; + sink(id); // $ MISSING: hasTaintFlow + sink(name); // $ MISSING: hasTaintFlow + sink(age); // $ MISSING: hasTaintFlow + acc + 1 + })?; + + Ok(()) + } +} + +mod test_mysql_async { + use mysql_async::*; + use mysql_async::prelude::*; + use async_std::stream::StreamExt; + use super::sink; + + #[derive(Debug, PartialEq, Eq, Clone)] + struct Person { + id: i64, + name: String, + age: i32, + } + + pub async fn test_mysql_async() -> Result<()> { + // connect through a MySQL connection pool + let mut pool = mysql_async::Pool::new(""); + let mut conn = pool.get_conn().await?; + + let mut rows : Vec = conn.query("SELECT id, name, age FROM person").await?; // $ Alert[rust/summary/taint-sources] + let mut row = &mut rows[0]; + + let v1 : i64 = row.get(0).unwrap(); // $ Alert[rust/summary/taint-sources] + sink(v1); // $ hasTaintFlow=0 + + let v2 : i64 = row.get_opt(0).unwrap().unwrap(); // $ Alert[rust/summary/taint-sources] + sink(v2); // $ hasTaintFlow=0 + + let v3 : i64 = row.take(0).unwrap(); // $ Alert[rust/summary/taint-sources] + sink(v3); // $ hasTaintFlow=0 + + let v4 : i64 = row.take_opt(0).unwrap().unwrap(); // $ Alert[rust/summary/taint-sources] + sink(v4); // $ hasTaintFlow=0 + + let value5 = row.as_ref(0).unwrap(); // $ Alert[rust/summary/taint-sources] + if let mysql_async::Value::Int(v) = value5 { + sink(v); // $ MISSING: hasTaintFlow=0 + } else if let mysql_async::Value::Bytes(v) = value5 { + sink(v); // $ MISSING: hasTaintFlow=0 + } + + let v6: i64 = conn.query_first("SELECT id FROM person").await?.unwrap(); // $ Alert[rust/summary/taint-sources] + sink(v6); // $ MISSING: hasTaintFlow + + let mut t1 = conn.exec_iter("SELECT id FROM person", (1, 2, 3)).await?; // $ Alert[rust/summary/taint-sources] + for mut row in t1.stream::<(i64, String, i32)>().await? { + while let v = row.next().await { + let v = v.unwrap(); + sink(v); // $ MISSING: hasTaintFlow + } + } + + let _ = conn.query_map( // $ Alert[rust/summary/taint-sources] + "SELECT id FROM person", + |values: i64| -> () { + sink(values); // $ hasTaintFlow + } + ).await?; + + let _ = conn.query_map( // $ Alert[rust/summary/taint-sources] + "SELECT id, name, age FROM person", + |values: (i64, String, i32)| -> () { + sink(values.0); // $ MISSING: hasTaintFlow + sink(values.1); // $ MISSING: hasTaintFlow + sink(values.2); // $ MISSING: hasTaintFlow + } + ).await?; + + let total = conn.query_fold("SELECT id FROM person", 0, |acc: i64, row: i64| { // $ Alert[rust/summary/taint-sources] + sink(row); // $ hasTaintFlow + acc + row + }).await?; + sink(total); // $ hasTaintFlow + + let _ = conn.query_fold("SELECT id, name, age FROM person", 0, |acc: i64, row: (i64, String, i32)| { // $ Alert[rust/summary/taint-sources] + let id: i64 = row.0; + let name: String = row.1; + let age: i32 = row.2; + sink(id); // $ MISSING: hasTaintFlow + sink(name); // $ MISSING: hasTaintFlow + sink(age); // $ MISSING: hasTaintFlow + acc + 1 + }).await?; + + let ids = "SELECT id FROM person".with(()).map(&mut conn, + |person: i64| -> i64 { + sink(person); // $ MISSING: hasTaintFlow + person + } + ).await?; + sink(ids[0]); // $ MISSING: hasTaintFlow + + let ages = "SELECT id, name, age FROM person".with(()).map(&mut conn, // $ MISSING: Alert[rust/summary/taint-sources] + |person: (i64, String, i32)| -> i32 { + sink(person.0); // $ MISSING: hasTaintFlow + sink(person.1); // $ MISSING: hasTaintFlow + sink(person.2); // $ MISSING: hasTaintFlow + person.2 + } + ).await?; + sink(ages[0]); // $ MISSING: hasTaintFlow + + { + let mut stream = "SELECT id FROM person".stream::(&mut conn).await?; // $ MISSING: Alert[rust/summary/taint-sources] + while let Some(row) = stream.next().await { + let id = row?; + sink(id); // $ MISSING: hasTaintFlow + } + } + + { + let mut stream = "SELECT id, name, age FROM person".stream::<(i64, String, i32), _>(&mut conn).await?; // $ MISSING: Alert[rust/summary/taint-sources] + while let Some(row) = stream.next().await { + let (id, name, age) = row?; + sink(id); // $ MISSING: hasTaintFlow + sink(name); // $ MISSING: hasTaintFlow + sink(age); // $ MISSING: hasTaintFlow + } + } + + Ok(()) + } +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + println!("test_mysql..."); + match test_mysql::test_mysql() { + Ok(_) => println!("complete"), + Err(e) => println!("error: {}", e), + } + + println!("test_mysql_async..."); + match futures::executor::block_on(test_mysql_async::test_mysql_async()) { + Ok(_) => println!("complete"), + Err(e) => println!("error: {}", e), + } + + Ok(()) +} diff --git a/rust/ql/test/library-tests/dataflow/sources/env/Cargo.lock b/rust/ql/test/library-tests/dataflow/sources/env/Cargo.lock new file mode 100644 index 000000000000..b9856cfaf77d --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/env/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "test" +version = "0.0.1" diff --git a/rust/ql/test/library-tests/dataflow/sources/env/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/env/InlineFlow.expected new file mode 100644 index 000000000000..00821decfdfb --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/env/InlineFlow.expected @@ -0,0 +1,163 @@ +models +| 1 | Source: std::env::args; ReturnValue.Element; commandargs | +| 2 | Source: std::env::args_os; ReturnValue.Element; commandargs | +| 3 | Source: std::env::current_dir; ReturnValue.Field[core::result::Result::Ok(0)]; commandargs | +| 4 | Source: std::env::current_exe; ReturnValue.Field[core::result::Result::Ok(0)]; commandargs | +| 5 | Source: std::env::home_dir; ReturnValue.Field[core::option::Option::Some(0)]; commandargs | +| 6 | Source: std::env::var; ReturnValue.Field[core::result::Result::Ok(0)]; environment | +| 7 | Source: std::env::var_os; ReturnValue.Field[core::option::Option::Some(0)]; environment | +| 8 | Summary: <_ as core::iter::traits::iterator::Iterator>::collect; Argument[self].Element; ReturnValue.Element; value | +| 9 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 10 | Summary: ::expect; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 11 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 12 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 13 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 14 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +edges +| test.rs:6:10:6:22 | ...::var | test.rs:6:10:6:30 | ...::var(...) | provenance | Src:MaD:6 | +| test.rs:7:10:7:25 | ...::var_os | test.rs:7:10:7:33 | ...::var_os(...) | provenance | Src:MaD:7 | +| test.rs:9:9:9:12 | var1 | test.rs:12:10:12:13 | var1 | provenance | | +| test.rs:9:16:9:28 | ...::var | test.rs:9:16:9:36 | ...::var(...) [Ok] | provenance | Src:MaD:6 | +| test.rs:9:16:9:36 | ...::var(...) [Ok] | test.rs:9:16:9:59 | ... .expect(...) | provenance | MaD:12 | +| test.rs:9:16:9:59 | ... .expect(...) | test.rs:9:9:9:12 | var1 | provenance | | +| test.rs:10:9:10:12 | var2 | test.rs:13:10:13:13 | var2 | provenance | | +| test.rs:10:16:10:31 | ...::var_os | test.rs:10:16:10:39 | ...::var_os(...) [Some] | provenance | Src:MaD:7 | +| test.rs:10:16:10:39 | ...::var_os(...) [Some] | test.rs:10:16:10:48 | ... .unwrap() | provenance | MaD:11 | +| test.rs:10:16:10:48 | ... .unwrap() | test.rs:10:9:10:12 | var2 | provenance | | +| test.rs:27:9:27:12 | args [element] | test.rs:28:20:28:23 | args [element] | provenance | | +| test.rs:27:9:27:12 | args [element] | test.rs:29:17:29:20 | args [element] | provenance | | +| test.rs:27:29:27:42 | ...::args | test.rs:27:29:27:44 | ...::args(...) [element] | provenance | Src:MaD:1 | +| test.rs:27:29:27:44 | ...::args(...) [element] | test.rs:27:29:27:54 | ... .collect() [element] | provenance | MaD:8 | +| test.rs:27:29:27:54 | ... .collect() [element] | test.rs:27:9:27:12 | args [element] | provenance | | +| test.rs:28:9:28:15 | my_path [&ref] | test.rs:34:10:34:16 | my_path | provenance | | +| test.rs:28:19:28:26 | &... [&ref] | test.rs:28:9:28:15 | my_path [&ref] | provenance | | +| test.rs:28:20:28:23 | args [element] | test.rs:28:20:28:26 | args[0] | provenance | | +| test.rs:28:20:28:26 | args[0] | test.rs:28:19:28:26 | &... [&ref] | provenance | | +| test.rs:29:9:29:12 | arg1 [&ref] | test.rs:35:10:35:13 | arg1 | provenance | | +| test.rs:29:16:29:23 | &... [&ref] | test.rs:29:9:29:12 | arg1 [&ref] | provenance | | +| test.rs:29:17:29:20 | args [element] | test.rs:29:17:29:23 | args[1] | provenance | | +| test.rs:29:17:29:23 | args[1] | test.rs:29:16:29:23 | &... [&ref] | provenance | | +| test.rs:30:9:30:12 | arg2 | test.rs:36:10:36:13 | arg2 | provenance | | +| test.rs:30:16:30:29 | ...::args | test.rs:30:16:30:31 | ...::args(...) [element] | provenance | Src:MaD:1 | +| test.rs:30:16:30:31 | ...::args(...) [element] | test.rs:30:16:30:38 | ... .nth(...) [Some] | provenance | MaD:9 | +| test.rs:30:16:30:38 | ... .nth(...) [Some] | test.rs:30:16:30:47 | ... .unwrap() | provenance | MaD:11 | +| test.rs:30:16:30:47 | ... .unwrap() | test.rs:30:9:30:12 | arg2 | provenance | | +| test.rs:31:9:31:12 | arg3 | test.rs:37:10:37:13 | arg3 | provenance | | +| test.rs:31:16:31:32 | ...::args_os | test.rs:31:16:31:34 | ...::args_os(...) [element] | provenance | Src:MaD:2 | +| test.rs:31:16:31:34 | ...::args_os(...) [element] | test.rs:31:16:31:41 | ... .nth(...) [Some] | provenance | MaD:9 | +| test.rs:31:16:31:41 | ... .nth(...) [Some] | test.rs:31:16:31:50 | ... .unwrap() | provenance | MaD:11 | +| test.rs:31:16:31:50 | ... .unwrap() | test.rs:31:9:31:12 | arg3 | provenance | | +| test.rs:32:9:32:12 | arg4 | test.rs:38:10:38:13 | arg4 | provenance | | +| test.rs:32:16:32:29 | ...::args | test.rs:32:16:32:31 | ...::args(...) [element] | provenance | Src:MaD:1 | +| test.rs:32:16:32:31 | ...::args(...) [element] | test.rs:32:16:32:38 | ... .nth(...) [Some] | provenance | MaD:9 | +| test.rs:32:16:32:38 | ... .nth(...) [Some] | test.rs:32:16:32:47 | ... .unwrap() | provenance | MaD:11 | +| test.rs:32:16:32:47 | ... .unwrap() | test.rs:32:16:32:64 | ... .parse() [Ok] | provenance | MaD:14 | +| test.rs:32:16:32:64 | ... .parse() [Ok] | test.rs:32:16:32:73 | ... .unwrap() | provenance | MaD:13 | +| test.rs:32:16:32:73 | ... .unwrap() | test.rs:32:9:32:12 | arg4 | provenance | | +| test.rs:40:9:40:11 | arg | test.rs:41:14:41:16 | arg | provenance | | +| test.rs:40:16:40:29 | ...::args | test.rs:40:16:40:31 | ...::args(...) [element] | provenance | Src:MaD:1 | +| test.rs:40:16:40:31 | ...::args(...) [element] | test.rs:40:9:40:11 | arg | provenance | | +| test.rs:44:9:44:11 | arg | test.rs:45:14:45:16 | arg | provenance | | +| test.rs:44:16:44:32 | ...::args_os | test.rs:44:16:44:34 | ...::args_os(...) [element] | provenance | Src:MaD:2 | +| test.rs:44:16:44:34 | ...::args_os(...) [element] | test.rs:44:9:44:11 | arg | provenance | | +| test.rs:50:9:50:11 | dir | test.rs:54:10:54:12 | dir | provenance | | +| test.rs:50:15:50:35 | ...::current_dir | test.rs:50:15:50:37 | ...::current_dir(...) [Ok] | provenance | Src:MaD:3 | +| test.rs:50:15:50:37 | ...::current_dir(...) [Ok] | test.rs:50:15:50:54 | ... .expect(...) | provenance | MaD:12 | +| test.rs:50:15:50:54 | ... .expect(...) | test.rs:50:9:50:11 | dir | provenance | | +| test.rs:51:9:51:11 | exe | test.rs:55:10:55:12 | exe | provenance | | +| test.rs:51:15:51:35 | ...::current_exe | test.rs:51:15:51:37 | ...::current_exe(...) [Ok] | provenance | Src:MaD:4 | +| test.rs:51:15:51:37 | ...::current_exe(...) [Ok] | test.rs:51:15:51:54 | ... .expect(...) | provenance | MaD:12 | +| test.rs:51:15:51:54 | ... .expect(...) | test.rs:51:9:51:11 | exe | provenance | | +| test.rs:52:9:52:12 | home | test.rs:56:10:56:13 | home | provenance | | +| test.rs:52:16:52:33 | ...::home_dir | test.rs:52:16:52:35 | ...::home_dir(...) [Some] | provenance | Src:MaD:5 | +| test.rs:52:16:52:35 | ...::home_dir(...) [Some] | test.rs:52:16:52:52 | ... .expect(...) | provenance | MaD:10 | +| test.rs:52:16:52:52 | ... .expect(...) | test.rs:52:9:52:12 | home | provenance | | +nodes +| test.rs:6:10:6:22 | ...::var | semmle.label | ...::var | +| test.rs:6:10:6:30 | ...::var(...) | semmle.label | ...::var(...) | +| test.rs:7:10:7:25 | ...::var_os | semmle.label | ...::var_os | +| test.rs:7:10:7:33 | ...::var_os(...) | semmle.label | ...::var_os(...) | +| test.rs:9:9:9:12 | var1 | semmle.label | var1 | +| test.rs:9:16:9:28 | ...::var | semmle.label | ...::var | +| test.rs:9:16:9:36 | ...::var(...) [Ok] | semmle.label | ...::var(...) [Ok] | +| test.rs:9:16:9:59 | ... .expect(...) | semmle.label | ... .expect(...) | +| test.rs:10:9:10:12 | var2 | semmle.label | var2 | +| test.rs:10:16:10:31 | ...::var_os | semmle.label | ...::var_os | +| test.rs:10:16:10:39 | ...::var_os(...) [Some] | semmle.label | ...::var_os(...) [Some] | +| test.rs:10:16:10:48 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:12:10:12:13 | var1 | semmle.label | var1 | +| test.rs:13:10:13:13 | var2 | semmle.label | var2 | +| test.rs:27:9:27:12 | args [element] | semmle.label | args [element] | +| test.rs:27:29:27:42 | ...::args | semmle.label | ...::args | +| test.rs:27:29:27:44 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | +| test.rs:27:29:27:54 | ... .collect() [element] | semmle.label | ... .collect() [element] | +| test.rs:28:9:28:15 | my_path [&ref] | semmle.label | my_path [&ref] | +| test.rs:28:19:28:26 | &... [&ref] | semmle.label | &... [&ref] | +| test.rs:28:20:28:23 | args [element] | semmle.label | args [element] | +| test.rs:28:20:28:26 | args[0] | semmle.label | args[0] | +| test.rs:29:9:29:12 | arg1 [&ref] | semmle.label | arg1 [&ref] | +| test.rs:29:16:29:23 | &... [&ref] | semmle.label | &... [&ref] | +| test.rs:29:17:29:20 | args [element] | semmle.label | args [element] | +| test.rs:29:17:29:23 | args[1] | semmle.label | args[1] | +| test.rs:30:9:30:12 | arg2 | semmle.label | arg2 | +| test.rs:30:16:30:29 | ...::args | semmle.label | ...::args | +| test.rs:30:16:30:31 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | +| test.rs:30:16:30:38 | ... .nth(...) [Some] | semmle.label | ... .nth(...) [Some] | +| test.rs:30:16:30:47 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:31:9:31:12 | arg3 | semmle.label | arg3 | +| test.rs:31:16:31:32 | ...::args_os | semmle.label | ...::args_os | +| test.rs:31:16:31:34 | ...::args_os(...) [element] | semmle.label | ...::args_os(...) [element] | +| test.rs:31:16:31:41 | ... .nth(...) [Some] | semmle.label | ... .nth(...) [Some] | +| test.rs:31:16:31:50 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:32:9:32:12 | arg4 | semmle.label | arg4 | +| test.rs:32:16:32:29 | ...::args | semmle.label | ...::args | +| test.rs:32:16:32:31 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | +| test.rs:32:16:32:38 | ... .nth(...) [Some] | semmle.label | ... .nth(...) [Some] | +| test.rs:32:16:32:47 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:32:16:32:64 | ... .parse() [Ok] | semmle.label | ... .parse() [Ok] | +| test.rs:32:16:32:73 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:34:10:34:16 | my_path | semmle.label | my_path | +| test.rs:35:10:35:13 | arg1 | semmle.label | arg1 | +| test.rs:36:10:36:13 | arg2 | semmle.label | arg2 | +| test.rs:37:10:37:13 | arg3 | semmle.label | arg3 | +| test.rs:38:10:38:13 | arg4 | semmle.label | arg4 | +| test.rs:40:9:40:11 | arg | semmle.label | arg | +| test.rs:40:16:40:29 | ...::args | semmle.label | ...::args | +| test.rs:40:16:40:31 | ...::args(...) [element] | semmle.label | ...::args(...) [element] | +| test.rs:41:14:41:16 | arg | semmle.label | arg | +| test.rs:44:9:44:11 | arg | semmle.label | arg | +| test.rs:44:16:44:32 | ...::args_os | semmle.label | ...::args_os | +| test.rs:44:16:44:34 | ...::args_os(...) [element] | semmle.label | ...::args_os(...) [element] | +| test.rs:45:14:45:16 | arg | semmle.label | arg | +| test.rs:50:9:50:11 | dir | semmle.label | dir | +| test.rs:50:15:50:35 | ...::current_dir | semmle.label | ...::current_dir | +| test.rs:50:15:50:37 | ...::current_dir(...) [Ok] | semmle.label | ...::current_dir(...) [Ok] | +| test.rs:50:15:50:54 | ... .expect(...) | semmle.label | ... .expect(...) | +| test.rs:51:9:51:11 | exe | semmle.label | exe | +| test.rs:51:15:51:35 | ...::current_exe | semmle.label | ...::current_exe | +| test.rs:51:15:51:37 | ...::current_exe(...) [Ok] | semmle.label | ...::current_exe(...) [Ok] | +| test.rs:51:15:51:54 | ... .expect(...) | semmle.label | ... .expect(...) | +| test.rs:52:9:52:12 | home | semmle.label | home | +| test.rs:52:16:52:33 | ...::home_dir | semmle.label | ...::home_dir | +| test.rs:52:16:52:35 | ...::home_dir(...) [Some] | semmle.label | ...::home_dir(...) [Some] | +| test.rs:52:16:52:52 | ... .expect(...) | semmle.label | ... .expect(...) | +| test.rs:54:10:54:12 | dir | semmle.label | dir | +| test.rs:55:10:55:12 | exe | semmle.label | exe | +| test.rs:56:10:56:13 | home | semmle.label | home | +subpaths +testFailures +#select +| test.rs:6:10:6:30 | ...::var(...) | test.rs:6:10:6:22 | ...::var | test.rs:6:10:6:30 | ...::var(...) | $@ | test.rs:6:10:6:22 | ...::var | ...::var | +| test.rs:7:10:7:33 | ...::var_os(...) | test.rs:7:10:7:25 | ...::var_os | test.rs:7:10:7:33 | ...::var_os(...) | $@ | test.rs:7:10:7:25 | ...::var_os | ...::var_os | +| test.rs:12:10:12:13 | var1 | test.rs:9:16:9:28 | ...::var | test.rs:12:10:12:13 | var1 | $@ | test.rs:9:16:9:28 | ...::var | ...::var | +| test.rs:13:10:13:13 | var2 | test.rs:10:16:10:31 | ...::var_os | test.rs:13:10:13:13 | var2 | $@ | test.rs:10:16:10:31 | ...::var_os | ...::var_os | +| test.rs:34:10:34:16 | my_path | test.rs:27:29:27:42 | ...::args | test.rs:34:10:34:16 | my_path | $@ | test.rs:27:29:27:42 | ...::args | ...::args | +| test.rs:35:10:35:13 | arg1 | test.rs:27:29:27:42 | ...::args | test.rs:35:10:35:13 | arg1 | $@ | test.rs:27:29:27:42 | ...::args | ...::args | +| test.rs:36:10:36:13 | arg2 | test.rs:30:16:30:29 | ...::args | test.rs:36:10:36:13 | arg2 | $@ | test.rs:30:16:30:29 | ...::args | ...::args | +| test.rs:37:10:37:13 | arg3 | test.rs:31:16:31:32 | ...::args_os | test.rs:37:10:37:13 | arg3 | $@ | test.rs:31:16:31:32 | ...::args_os | ...::args_os | +| test.rs:38:10:38:13 | arg4 | test.rs:32:16:32:29 | ...::args | test.rs:38:10:38:13 | arg4 | $@ | test.rs:32:16:32:29 | ...::args | ...::args | +| test.rs:41:14:41:16 | arg | test.rs:40:16:40:29 | ...::args | test.rs:41:14:41:16 | arg | $@ | test.rs:40:16:40:29 | ...::args | ...::args | +| test.rs:45:14:45:16 | arg | test.rs:44:16:44:32 | ...::args_os | test.rs:45:14:45:16 | arg | $@ | test.rs:44:16:44:32 | ...::args_os | ...::args_os | +| test.rs:54:10:54:12 | dir | test.rs:50:15:50:35 | ...::current_dir | test.rs:54:10:54:12 | dir | $@ | test.rs:50:15:50:35 | ...::current_dir | ...::current_dir | +| test.rs:55:10:55:12 | exe | test.rs:51:15:51:35 | ...::current_exe | test.rs:55:10:55:12 | exe | $@ | test.rs:51:15:51:35 | ...::current_exe | ...::current_exe | +| test.rs:56:10:56:13 | home | test.rs:52:16:52:33 | ...::home_dir | test.rs:56:10:56:13 | home | $@ | test.rs:52:16:52:33 | ...::home_dir | ...::home_dir | diff --git a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.ql b/rust/ql/test/library-tests/dataflow/sources/env/InlineFlow.ql similarity index 100% rename from rust/ql/test/library-tests/dataflow/sources/InlineFlow.ql rename to rust/ql/test/library-tests/dataflow/sources/env/InlineFlow.ql diff --git a/rust/ql/test/library-tests/dataflow/sources/env/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/env/TaintSources.expected new file mode 100644 index 000000000000..16f43eff9147 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/env/TaintSources.expected @@ -0,0 +1,15 @@ +| test.rs:6:10:6:22 | ...::var | Flow source 'EnvironmentSource' of type environment (DEFAULT). | +| test.rs:7:10:7:25 | ...::var_os | Flow source 'EnvironmentSource' of type environment (DEFAULT). | +| test.rs:9:16:9:28 | ...::var | Flow source 'EnvironmentSource' of type environment (DEFAULT). | +| test.rs:10:16:10:31 | ...::var_os | Flow source 'EnvironmentSource' of type environment (DEFAULT). | +| test.rs:15:25:15:38 | ...::vars | Flow source 'EnvironmentSource' of type environment (DEFAULT). | +| test.rs:20:25:20:41 | ...::vars_os | Flow source 'EnvironmentSource' of type environment (DEFAULT). | +| test.rs:27:29:27:42 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:30:16:30:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:31:16:31:32 | ...::args_os | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:32:16:32:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:40:16:40:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:44:16:44:32 | ...::args_os | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:50:15:50:35 | ...::current_dir | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:51:15:51:35 | ...::current_exe | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:52:16:52:33 | ...::home_dir | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | diff --git a/rust/ql/test/library-tests/dataflow/sources/env/TaintSources.qlref b/rust/ql/test/library-tests/dataflow/sources/env/TaintSources.qlref new file mode 100644 index 000000000000..7aa95121af3e --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/env/TaintSources.qlref @@ -0,0 +1,2 @@ +query: queries/summary/TaintSources.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/rust/ql/test/library-tests/dataflow/sources/env/options.yml b/rust/ql/test/library-tests/dataflow/sources/env/options.yml new file mode 100644 index 000000000000..c7a0beabb538 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/env/options.yml @@ -0,0 +1 @@ +qltest_cargo_check: true diff --git a/rust/ql/test/library-tests/dataflow/sources/env/test.rs b/rust/ql/test/library-tests/dataflow/sources/env/test.rs new file mode 100644 index 000000000000..e02aa7c8f1b2 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/env/test.rs @@ -0,0 +1,68 @@ +fn sink(_: T) { } + +// --- tests --- + +fn test_env_vars() { + sink(std::env::var("HOME")); // $ Alert[rust/summary/taint-sources] hasTaintFlow="HOME" + sink(std::env::var_os("PATH")); // $ Alert[rust/summary/taint-sources] hasTaintFlow="PATH" + + let var1 = std::env::var("HOME").expect("HOME not set"); // $ Alert[rust/summary/taint-sources] + let var2 = std::env::var_os("PATH").unwrap(); // $ Alert[rust/summary/taint-sources] + + sink(var1); // $ hasTaintFlow="HOME" + sink(var2); // $ hasTaintFlow="PATH" + + for (key, value) in std::env::vars() { // $ Alert[rust/summary/taint-sources] + sink(key); // $ MISSING: hasTaintFlow + sink(value); // $ MISSING: hasTaintFlow + } + + for (key, value) in std::env::vars_os() { // $ Alert[rust/summary/taint-sources] + sink(key); // $ MISSING: hasTaintFlow + sink(value); // $ MISSING: hasTaintFlow + } +} + +fn test_env_args() { + let args: Vec = std::env::args().collect(); // $ Alert[rust/summary/taint-sources] + let my_path = &args[0]; + let arg1 = &args[1]; + let arg2 = std::env::args().nth(2).unwrap(); // $ Alert[rust/summary/taint-sources] + let arg3 = std::env::args_os().nth(3).unwrap(); // $ Alert[rust/summary/taint-sources] + let arg4 = std::env::args().nth(4).unwrap().parse::().unwrap(); // $ Alert[rust/summary/taint-sources] + + sink(my_path); // $ hasTaintFlow + sink(arg1); // $ hasTaintFlow + sink(arg2); // $ hasTaintFlow + sink(arg3); // $ hasTaintFlow + sink(arg4); // $ hasTaintFlow + + for arg in std::env::args() { // $ Alert[rust/summary/taint-sources] + sink(arg); // $ hasTaintFlow + } + + for arg in std::env::args_os() { // $ Alert[rust/summary/taint-sources] + sink(arg); // $ hasTaintFlow + } +} + +fn test_env_dirs() { + let dir = std::env::current_dir().expect("FAILED"); // $ Alert[rust/summary/taint-sources] + let exe = std::env::current_exe().expect("FAILED"); // $ Alert[rust/summary/taint-sources] + let home = std::env::home_dir().expect("FAILED"); // $ Alert[rust/summary/taint-sources] + + sink(dir); // $ hasTaintFlow + sink(exe); // $ hasTaintFlow + sink(home); // $ hasTaintFlow +} + +async fn main() -> () { + println!("test_env_vars..."); + test_env_vars(); + + println!("test_env_args..."); + test_env_args(); + + println!("test_env_dirs..."); + test_env_dirs(); +} diff --git a/rust/ql/test/library-tests/dataflow/sources/file/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/sources/file/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/library-tests/dataflow/sources/file/Cargo.lock b/rust/ql/test/library-tests/dataflow/sources/file/Cargo.lock new file mode 100644 index 000000000000..55ccd96372ed --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/file/Cargo.lock @@ -0,0 +1,802 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "pin-project-lite", + "slab", +] + +[[package]] +name = "async-global-executor" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" +dependencies = [ + "async-channel 2.5.0", + "async-executor", + "async-io", + "async-lock", + "blocking", + "futures-lite", + "once_cell", +] + +[[package]] +name = "async-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" +dependencies = [ + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-lock" +version = "3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" +dependencies = [ + "event-listener 5.4.1", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-std" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c8e079a4ab67ae52b7403632e4618815d6db36d2a010cfe41b02c1b1578f93b" +dependencies = [ + "async-channel 1.9.0", + "async-global-executor", + "async-io", + "async-lock", + "crossbeam-utils", + "futures-channel", + "futures-core", + "futures-io", + "futures-lite", + "gloo-timers", + "kv-log-macro", + "log", + "memchr", + "once_cell", + "pin-project-lite", + "pin-utils", + "slab", + "wasm-bindgen-futures", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "bitflags" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" + +[[package]] +name = "blocking" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +dependencies = [ + "async-channel 2.5.0", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener 5.4.1", + "pin-project-lite", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-lite" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "js-sys" +version = "0.3.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] + +[[package]] +name = "libc" +version = "0.2.177" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" + +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +dependencies = [ + "value-bag", +] + +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + +[[package]] +name = "mio" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "polling" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "proc-macro2" +version = "1.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags", +] + +[[package]] +name = "rustix" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "signal-hook-registry" +version = "1.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +dependencies = [ + "libc", +] + +[[package]] +name = "slab" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "socket2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + +[[package]] +name = "syn" +version = "2.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "test" +version = "0.0.1" +dependencies = [ + "async-std", + "bytes", + "futures", + "tokio", +] + +[[package]] +name = "tokio" +version = "1.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +dependencies = [ + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "unicode-ident" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" + +[[package]] +name = "value-bag" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "943ce29a8a743eb10d6082545d861b24f9d1b160b7d741e0f2cdf726bec909c5" + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasm-bindgen" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "web-sys" +version = "0.3.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" diff --git a/rust/ql/test/library-tests/dataflow/sources/file/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/file/InlineFlow.expected new file mode 100644 index 000000000000..90d01d250d0b --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/file/InlineFlow.expected @@ -0,0 +1,529 @@ +models +| 1 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 2 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 3 | Source: ::file_name; ReturnValue; file | +| 4 | Source: ::path; ReturnValue; file | +| 5 | Source: ::open; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 6 | Source: ::open; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 7 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 8 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 9 | Source: ::file_name; ReturnValue; file | +| 10 | Source: ::path; ReturnValue; file | +| 11 | Source: std::fs::read; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 12 | Source: std::fs::read; ReturnValue; file | +| 13 | Source: std::fs::read_link; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 14 | Source: std::fs::read_to_string; ReturnValue.Field[core::result::Result::Ok(0)]; file | +| 15 | Source: std::fs::read_to_string; ReturnValue; file | +| 16 | Source: tokio::fs::read::read; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 17 | Source: tokio::fs::read_link::read_link; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 18 | Source: tokio::fs::read_to_string::read_to_string; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file | +| 19 | Summary: <_ as async_std::io::read::ReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 20 | Summary: <_ as async_std::io::read::ReadExt>::read; Argument[self]; Argument[0].Reference; taint | +| 21 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value | +| 22 | Summary: <_ as std::io::Read>::bytes; Argument[self]; ReturnValue; taint | +| 23 | Summary: <_ as std::io::Read>::chain; Argument[0]; ReturnValue; taint | +| 24 | Summary: <_ as std::io::Read>::chain; Argument[self]; ReturnValue; taint | +| 25 | Summary: <_ as std::io::Read>::read; Argument[self]; Argument[0].Reference; taint | +| 26 | Summary: <_ as std::io::Read>::read_exact; Argument[self]; Argument[0].Reference; taint | +| 27 | Summary: <_ as std::io::Read>::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 28 | Summary: <_ as std::io::Read>::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 29 | Summary: <_ as std::io::Read>::take; Argument[self]; ReturnValue; taint | +| 30 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | +| 31 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_buf; Argument[self]; Argument[0].Reference; taint | +| 32 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_exact; Argument[self]; Argument[0].Reference; taint | +| 33 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f32; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 34 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 35 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64_le; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 36 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 37 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 38 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 39 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 40 | Summary: ::read; Argument[self]; Argument[0]; taint | +| 41 | Summary: ::read_to_end; Argument[self]; Argument[0]; taint | +| 42 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | +| 43 | Summary: ::as_path; Argument[self]; ReturnValue; value | +edges +| test.rs:12:13:12:18 | buffer | test.rs:13:14:13:19 | buffer | provenance | | +| test.rs:12:31:12:43 | ...::read | test.rs:12:31:12:43 | ...::read [Ok] | provenance | Src:MaD:11 | +| test.rs:12:31:12:43 | ...::read | test.rs:12:31:12:55 | ...::read(...) [Ok] | provenance | Src:MaD:11 | +| test.rs:12:31:12:43 | ...::read [Ok] | test.rs:12:31:12:55 | ...::read(...) [Ok] | provenance | MaD:12 | +| test.rs:12:31:12:55 | ...::read(...) [Ok] | test.rs:12:31:12:56 | TryExpr | provenance | | +| test.rs:12:31:12:56 | TryExpr | test.rs:12:13:12:18 | buffer | provenance | | +| test.rs:17:13:17:18 | buffer | test.rs:18:14:18:19 | buffer | provenance | | +| test.rs:17:31:17:38 | ...::read | test.rs:17:31:17:38 | ...::read [Ok] | provenance | Src:MaD:11 | +| test.rs:17:31:17:38 | ...::read | test.rs:17:31:17:50 | ...::read(...) [Ok] | provenance | Src:MaD:11 | +| test.rs:17:31:17:38 | ...::read [Ok] | test.rs:17:31:17:50 | ...::read(...) [Ok] | provenance | MaD:12 | +| test.rs:17:31:17:50 | ...::read(...) [Ok] | test.rs:17:31:17:51 | TryExpr | provenance | | +| test.rs:17:31:17:51 | TryExpr | test.rs:17:13:17:18 | buffer | provenance | | +| test.rs:22:13:22:18 | buffer | test.rs:23:14:23:19 | buffer | provenance | | +| test.rs:22:22:22:39 | ...::read_to_string | test.rs:22:22:22:39 | ...::read_to_string [Ok] | provenance | Src:MaD:14 | +| test.rs:22:22:22:39 | ...::read_to_string | test.rs:22:22:22:51 | ...::read_to_string(...) [Ok] | provenance | Src:MaD:14 | +| test.rs:22:22:22:39 | ...::read_to_string [Ok] | test.rs:22:22:22:51 | ...::read_to_string(...) [Ok] | provenance | MaD:15 | +| test.rs:22:22:22:51 | ...::read_to_string(...) [Ok] | test.rs:22:22:22:52 | TryExpr | provenance | | +| test.rs:22:22:22:52 | TryExpr | test.rs:22:13:22:18 | buffer | provenance | | +| test.rs:29:13:29:16 | path | test.rs:30:14:30:17 | path | provenance | | +| test.rs:29:13:29:16 | path | test.rs:30:14:30:25 | path.clone() | provenance | MaD:21 | +| test.rs:29:13:29:16 | path | test.rs:31:14:31:17 | path | provenance | | +| test.rs:29:13:29:16 | path | test.rs:31:14:31:25 | path.clone() | provenance | MaD:21 | +| test.rs:29:13:29:16 | path | test.rs:41:14:41:17 | path | provenance | | +| test.rs:29:20:29:27 | e.path() | test.rs:29:13:29:16 | path | provenance | | +| test.rs:29:22:29:25 | path | test.rs:29:20:29:27 | e.path() | provenance | Src:MaD:4 MaD:4 | +| test.rs:30:14:30:17 | path | test.rs:30:14:30:25 | path.clone() | provenance | MaD:21 | +| test.rs:31:14:31:17 | path | test.rs:31:14:31:25 | path.clone() | provenance | MaD:21 | +| test.rs:31:14:31:25 | path.clone() | test.rs:31:14:31:35 | ... .as_path() | provenance | MaD:43 | +| test.rs:43:13:43:21 | file_name | test.rs:44:14:44:22 | file_name | provenance | | +| test.rs:43:13:43:21 | file_name | test.rs:44:14:44:30 | file_name.clone() | provenance | MaD:21 | +| test.rs:43:13:43:21 | file_name | test.rs:49:14:49:22 | file_name | provenance | | +| test.rs:43:25:43:37 | e.file_name() | test.rs:43:13:43:21 | file_name | provenance | | +| test.rs:43:27:43:35 | file_name | test.rs:43:25:43:37 | e.file_name() | provenance | Src:MaD:3 MaD:3 | +| test.rs:44:14:44:22 | file_name | test.rs:44:14:44:30 | file_name.clone() | provenance | MaD:21 | +| test.rs:65:13:65:18 | target | test.rs:66:14:66:19 | target | provenance | | +| test.rs:65:22:65:34 | ...::read_link | test.rs:65:22:65:49 | ...::read_link(...) [Ok] | provenance | Src:MaD:13 | +| test.rs:65:22:65:49 | ...::read_link(...) [Ok] | test.rs:65:22:65:50 | TryExpr | provenance | | +| test.rs:65:22:65:50 | TryExpr | test.rs:65:13:65:18 | target | provenance | | +| test.rs:74:13:74:18 | buffer | test.rs:75:14:75:19 | buffer | provenance | | +| test.rs:74:31:74:45 | ...::read | test.rs:74:31:74:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:16 | +| test.rs:74:31:74:57 | ...::read(...) [future, Ok] | test.rs:74:31:74:63 | await ... [Ok] | provenance | | +| test.rs:74:31:74:63 | await ... [Ok] | test.rs:74:31:74:64 | TryExpr | provenance | | +| test.rs:74:31:74:64 | TryExpr | test.rs:74:13:74:18 | buffer | provenance | | +| test.rs:79:13:79:18 | buffer | test.rs:80:14:80:19 | buffer | provenance | | +| test.rs:79:31:79:45 | ...::read | test.rs:79:31:79:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:16 | +| test.rs:79:31:79:57 | ...::read(...) [future, Ok] | test.rs:79:31:79:63 | await ... [Ok] | provenance | | +| test.rs:79:31:79:63 | await ... [Ok] | test.rs:79:31:79:64 | TryExpr | provenance | | +| test.rs:79:31:79:64 | TryExpr | test.rs:79:13:79:18 | buffer | provenance | | +| test.rs:84:13:84:18 | buffer | test.rs:85:14:85:19 | buffer | provenance | | +| test.rs:84:22:84:46 | ...::read_to_string | test.rs:84:22:84:58 | ...::read_to_string(...) [future, Ok] | provenance | Src:MaD:18 | +| test.rs:84:22:84:58 | ...::read_to_string(...) [future, Ok] | test.rs:84:22:84:64 | await ... [Ok] | provenance | | +| test.rs:84:22:84:64 | await ... [Ok] | test.rs:84:22:84:65 | TryExpr | provenance | | +| test.rs:84:22:84:65 | TryExpr | test.rs:84:13:84:18 | buffer | provenance | | +| test.rs:90:13:90:16 | path | test.rs:92:14:92:17 | path | provenance | | +| test.rs:90:20:90:31 | entry.path() | test.rs:90:13:90:16 | path | provenance | | +| test.rs:90:26:90:29 | path | test.rs:90:20:90:31 | entry.path() | provenance | Src:MaD:10 MaD:10 | +| test.rs:90:26:90:29 | path | test.rs:90:20:90:31 | entry.path() | provenance | Src:MaD:10 MaD:10 | +| test.rs:91:13:91:21 | file_name | test.rs:93:14:93:22 | file_name | provenance | | +| test.rs:91:25:91:41 | entry.file_name() | test.rs:91:13:91:21 | file_name | provenance | | +| test.rs:91:31:91:39 | file_name | test.rs:91:25:91:41 | entry.file_name() | provenance | Src:MaD:9 MaD:9 | +| test.rs:91:31:91:39 | file_name | test.rs:91:25:91:41 | entry.file_name() | provenance | Src:MaD:9 MaD:9 | +| test.rs:97:13:97:18 | target | test.rs:98:14:98:19 | target | provenance | | +| test.rs:97:22:97:41 | ...::read_link | test.rs:97:22:97:56 | ...::read_link(...) [future, Ok] | provenance | Src:MaD:17 | +| test.rs:97:22:97:56 | ...::read_link(...) [future, Ok] | test.rs:97:22:97:62 | await ... [Ok] | provenance | | +| test.rs:97:22:97:62 | await ... [Ok] | test.rs:97:22:97:63 | TryExpr | provenance | | +| test.rs:97:22:97:63 | TryExpr | test.rs:97:13:97:18 | target | provenance | | +| test.rs:107:9:107:16 | mut file | test.rs:111:32:111:42 | [post] &mut buffer | provenance | MaD:40 | +| test.rs:107:9:107:16 | mut file | test.rs:111:32:111:42 | [post] &mut buffer [&ref] | provenance | MaD:25 | +| test.rs:107:9:107:16 | mut file | test.rs:117:39:117:49 | [post] &mut buffer | provenance | MaD:41 | +| test.rs:107:9:107:16 | mut file | test.rs:117:39:117:49 | [post] &mut buffer [&ref] | provenance | MaD:27 | +| test.rs:107:9:107:16 | mut file | test.rs:123:42:123:52 | [post] &mut buffer | provenance | MaD:42 | +| test.rs:107:9:107:16 | mut file | test.rs:123:42:123:52 | [post] &mut buffer [&ref] | provenance | MaD:28 | +| test.rs:107:9:107:16 | mut file | test.rs:129:25:129:35 | [post] &mut buffer [&ref] | provenance | MaD:26 | +| test.rs:107:9:107:16 | mut file | test.rs:133:17:133:28 | file.bytes() | provenance | MaD:22 | +| test.rs:107:20:107:38 | ...::open | test.rs:107:20:107:50 | ...::open(...) [Ok] | provenance | Src:MaD:5 | +| test.rs:107:20:107:50 | ...::open(...) [Ok] | test.rs:107:20:107:51 | TryExpr | provenance | | +| test.rs:107:20:107:51 | TryExpr | test.rs:107:9:107:16 | mut file | provenance | | +| test.rs:111:32:111:42 | [post] &mut buffer | test.rs:112:15:112:20 | buffer | provenance | | +| test.rs:111:32:111:42 | [post] &mut buffer [&ref] | test.rs:111:37:111:42 | [post] buffer | provenance | | +| test.rs:111:37:111:42 | [post] buffer | test.rs:112:15:112:20 | buffer | provenance | | +| test.rs:112:15:112:20 | buffer | test.rs:112:14:112:20 | &buffer | provenance | | +| test.rs:117:39:117:49 | [post] &mut buffer | test.rs:118:15:118:20 | buffer | provenance | | +| test.rs:117:39:117:49 | [post] &mut buffer [&ref] | test.rs:117:44:117:49 | [post] buffer | provenance | | +| test.rs:117:44:117:49 | [post] buffer | test.rs:118:15:118:20 | buffer | provenance | | +| test.rs:118:15:118:20 | buffer | test.rs:118:14:118:20 | &buffer | provenance | | +| test.rs:123:42:123:52 | [post] &mut buffer | test.rs:124:15:124:20 | buffer | provenance | | +| test.rs:123:42:123:52 | [post] &mut buffer [&ref] | test.rs:123:47:123:52 | [post] buffer | provenance | | +| test.rs:123:47:123:52 | [post] buffer | test.rs:124:15:124:20 | buffer | provenance | | +| test.rs:124:15:124:20 | buffer | test.rs:124:14:124:20 | &buffer | provenance | | +| test.rs:129:25:129:35 | [post] &mut buffer [&ref] | test.rs:129:30:129:35 | [post] buffer | provenance | | +| test.rs:129:30:129:35 | [post] buffer | test.rs:130:15:130:20 | buffer | provenance | | +| test.rs:130:15:130:20 | buffer | test.rs:130:14:130:20 | &buffer | provenance | | +| test.rs:133:17:133:28 | file.bytes() | test.rs:134:14:134:17 | byte | provenance | | +| test.rs:140:13:140:18 | mut f1 | test.rs:142:30:142:40 | [post] &mut buffer | provenance | MaD:40 | +| test.rs:140:13:140:18 | mut f1 | test.rs:142:30:142:40 | [post] &mut buffer [&ref] | provenance | MaD:25 | +| test.rs:140:22:140:63 | ... .open(...) [Ok] | test.rs:140:22:140:72 | ... .unwrap() | provenance | MaD:39 | +| test.rs:140:22:140:72 | ... .unwrap() | test.rs:140:13:140:18 | mut f1 | provenance | | +| test.rs:140:50:140:53 | open | test.rs:140:22:140:63 | ... .open(...) [Ok] | provenance | Src:MaD:6 | +| test.rs:142:30:142:40 | [post] &mut buffer | test.rs:143:15:143:20 | buffer | provenance | | +| test.rs:142:30:142:40 | [post] &mut buffer [&ref] | test.rs:142:35:142:40 | [post] buffer | provenance | | +| test.rs:142:35:142:40 | [post] buffer | test.rs:143:15:143:20 | buffer | provenance | | +| test.rs:143:15:143:20 | buffer | test.rs:143:14:143:20 | &buffer | provenance | | +| test.rs:147:13:147:18 | mut f2 | test.rs:149:30:149:40 | [post] &mut buffer | provenance | MaD:40 | +| test.rs:147:13:147:18 | mut f2 | test.rs:149:30:149:40 | [post] &mut buffer [&ref] | provenance | MaD:25 | +| test.rs:147:22:147:80 | ... .open(...) [Ok] | test.rs:147:22:147:89 | ... .unwrap() | provenance | MaD:39 | +| test.rs:147:22:147:89 | ... .unwrap() | test.rs:147:13:147:18 | mut f2 | provenance | | +| test.rs:147:67:147:70 | open | test.rs:147:22:147:80 | ... .open(...) [Ok] | provenance | Src:MaD:6 | +| test.rs:149:30:149:40 | [post] &mut buffer | test.rs:150:15:150:20 | buffer | provenance | | +| test.rs:149:30:149:40 | [post] &mut buffer [&ref] | test.rs:149:35:149:40 | [post] buffer | provenance | | +| test.rs:149:35:149:40 | [post] buffer | test.rs:150:15:150:20 | buffer | provenance | | +| test.rs:150:15:150:20 | buffer | test.rs:150:14:150:20 | &buffer | provenance | | +| test.rs:154:13:154:18 | mut f3 | test.rs:156:30:156:40 | [post] &mut buffer | provenance | MaD:40 | +| test.rs:154:13:154:18 | mut f3 | test.rs:156:30:156:40 | [post] &mut buffer [&ref] | provenance | MaD:25 | +| test.rs:154:22:154:114 | ... .open(...) [Ok] | test.rs:154:22:154:123 | ... .unwrap() | provenance | MaD:39 | +| test.rs:154:22:154:123 | ... .unwrap() | test.rs:154:13:154:18 | mut f3 | provenance | | +| test.rs:154:101:154:104 | open | test.rs:154:22:154:114 | ... .open(...) [Ok] | provenance | Src:MaD:6 | +| test.rs:156:30:156:40 | [post] &mut buffer | test.rs:157:15:157:20 | buffer | provenance | | +| test.rs:156:30:156:40 | [post] &mut buffer [&ref] | test.rs:156:35:156:40 | [post] buffer | provenance | | +| test.rs:156:35:156:40 | [post] buffer | test.rs:157:15:157:20 | buffer | provenance | | +| test.rs:157:15:157:20 | buffer | test.rs:157:14:157:20 | &buffer | provenance | | +| test.rs:164:13:164:17 | file1 | test.rs:166:26:166:43 | file1.chain(...) | provenance | MaD:24 | +| test.rs:164:21:164:39 | ...::open | test.rs:164:21:164:51 | ...::open(...) [Ok] | provenance | Src:MaD:5 | +| test.rs:164:21:164:51 | ...::open(...) [Ok] | test.rs:164:21:164:52 | TryExpr | provenance | | +| test.rs:164:21:164:52 | TryExpr | test.rs:164:13:164:17 | file1 | provenance | | +| test.rs:165:13:165:17 | file2 | test.rs:166:38:166:42 | file2 | provenance | | +| test.rs:165:21:165:39 | ...::open | test.rs:165:21:165:59 | ...::open(...) [Ok] | provenance | Src:MaD:5 | +| test.rs:165:21:165:59 | ...::open(...) [Ok] | test.rs:165:21:165:60 | TryExpr | provenance | | +| test.rs:165:21:165:60 | TryExpr | test.rs:165:13:165:17 | file2 | provenance | | +| test.rs:166:13:166:22 | mut reader | test.rs:167:31:167:41 | [post] &mut buffer [&ref] | provenance | MaD:28 | +| test.rs:166:26:166:43 | file1.chain(...) | test.rs:166:13:166:22 | mut reader | provenance | | +| test.rs:166:38:166:42 | file2 | test.rs:166:26:166:43 | file1.chain(...) | provenance | MaD:23 | +| test.rs:167:31:167:41 | [post] &mut buffer [&ref] | test.rs:167:36:167:41 | [post] buffer | provenance | | +| test.rs:167:36:167:41 | [post] buffer | test.rs:168:15:168:20 | buffer | provenance | | +| test.rs:168:15:168:20 | buffer | test.rs:168:14:168:20 | &buffer | provenance | | +| test.rs:173:13:173:17 | file1 | test.rs:174:26:174:40 | file1.take(...) | provenance | MaD:29 | +| test.rs:173:21:173:39 | ...::open | test.rs:173:21:173:51 | ...::open(...) [Ok] | provenance | Src:MaD:5 | +| test.rs:173:21:173:51 | ...::open(...) [Ok] | test.rs:173:21:173:52 | TryExpr | provenance | | +| test.rs:173:21:173:52 | TryExpr | test.rs:173:13:173:17 | file1 | provenance | | +| test.rs:174:13:174:22 | mut reader | test.rs:175:31:175:41 | [post] &mut buffer [&ref] | provenance | MaD:28 | +| test.rs:174:26:174:40 | file1.take(...) | test.rs:174:13:174:22 | mut reader | provenance | | +| test.rs:175:31:175:41 | [post] &mut buffer [&ref] | test.rs:175:36:175:41 | [post] buffer | provenance | | +| test.rs:175:36:175:41 | [post] buffer | test.rs:176:15:176:20 | buffer | provenance | | +| test.rs:176:15:176:20 | buffer | test.rs:176:14:176:20 | &buffer | provenance | | +| test.rs:185:9:185:16 | mut file | test.rs:189:32:189:42 | [post] &mut buffer [&ref] | provenance | MaD:30 | +| test.rs:185:9:185:16 | mut file | test.rs:195:39:195:49 | [post] &mut buffer [&ref] | provenance | MaD:36 | +| test.rs:185:9:185:16 | mut file | test.rs:201:42:201:52 | [post] &mut buffer [&ref] | provenance | MaD:37 | +| test.rs:185:9:185:16 | mut file | test.rs:207:25:207:35 | [post] &mut buffer [&ref] | provenance | MaD:32 | +| test.rs:185:9:185:16 | mut file | test.rs:212:18:212:31 | file.read_u8() [future, Ok] | provenance | MaD:38 | +| test.rs:185:9:185:16 | mut file | test.rs:213:18:213:32 | file.read_i16() [future, Ok] | provenance | MaD:34 | +| test.rs:185:9:185:16 | mut file | test.rs:214:18:214:32 | file.read_f32() [future, Ok] | provenance | MaD:33 | +| test.rs:185:9:185:16 | mut file | test.rs:215:18:215:35 | file.read_i64_le() [future, Ok] | provenance | MaD:35 | +| test.rs:185:9:185:16 | mut file | test.rs:224:23:224:33 | [post] &mut buffer [&ref] | provenance | MaD:31 | +| test.rs:185:20:185:40 | ...::open | test.rs:185:20:185:52 | ...::open(...) [future, Ok] | provenance | Src:MaD:7 | +| test.rs:185:20:185:52 | ...::open(...) [future, Ok] | test.rs:185:20:185:58 | await ... [Ok] | provenance | | +| test.rs:185:20:185:58 | await ... [Ok] | test.rs:185:20:185:59 | TryExpr | provenance | | +| test.rs:185:20:185:59 | TryExpr | test.rs:185:9:185:16 | mut file | provenance | | +| test.rs:189:32:189:42 | [post] &mut buffer [&ref] | test.rs:189:37:189:42 | [post] buffer | provenance | | +| test.rs:189:37:189:42 | [post] buffer | test.rs:190:15:190:20 | buffer | provenance | | +| test.rs:190:15:190:20 | buffer | test.rs:190:14:190:20 | &buffer | provenance | | +| test.rs:195:39:195:49 | [post] &mut buffer [&ref] | test.rs:195:44:195:49 | [post] buffer | provenance | | +| test.rs:195:44:195:49 | [post] buffer | test.rs:196:15:196:20 | buffer | provenance | | +| test.rs:196:15:196:20 | buffer | test.rs:196:14:196:20 | &buffer | provenance | | +| test.rs:201:42:201:52 | [post] &mut buffer [&ref] | test.rs:201:47:201:52 | [post] buffer | provenance | | +| test.rs:201:47:201:52 | [post] buffer | test.rs:202:15:202:20 | buffer | provenance | | +| test.rs:202:15:202:20 | buffer | test.rs:202:14:202:20 | &buffer | provenance | | +| test.rs:207:25:207:35 | [post] &mut buffer [&ref] | test.rs:207:30:207:35 | [post] buffer | provenance | | +| test.rs:207:30:207:35 | [post] buffer | test.rs:208:15:208:20 | buffer | provenance | | +| test.rs:208:15:208:20 | buffer | test.rs:208:14:208:20 | &buffer | provenance | | +| test.rs:212:13:212:14 | v1 | test.rs:216:14:216:15 | v1 | provenance | | +| test.rs:212:18:212:31 | file.read_u8() [future, Ok] | test.rs:212:18:212:37 | await ... [Ok] | provenance | | +| test.rs:212:18:212:37 | await ... [Ok] | test.rs:212:18:212:38 | TryExpr | provenance | | +| test.rs:212:18:212:38 | TryExpr | test.rs:212:13:212:14 | v1 | provenance | | +| test.rs:213:13:213:14 | v2 | test.rs:217:14:217:15 | v2 | provenance | | +| test.rs:213:18:213:32 | file.read_i16() [future, Ok] | test.rs:213:18:213:38 | await ... [Ok] | provenance | | +| test.rs:213:18:213:38 | await ... [Ok] | test.rs:213:18:213:39 | TryExpr | provenance | | +| test.rs:213:18:213:39 | TryExpr | test.rs:213:13:213:14 | v2 | provenance | | +| test.rs:214:13:214:14 | v3 | test.rs:218:14:218:15 | v3 | provenance | | +| test.rs:214:18:214:32 | file.read_f32() [future, Ok] | test.rs:214:18:214:38 | await ... [Ok] | provenance | | +| test.rs:214:18:214:38 | await ... [Ok] | test.rs:214:18:214:39 | TryExpr | provenance | | +| test.rs:214:18:214:39 | TryExpr | test.rs:214:13:214:14 | v3 | provenance | | +| test.rs:215:13:215:14 | v4 | test.rs:219:14:219:15 | v4 | provenance | | +| test.rs:215:18:215:35 | file.read_i64_le() [future, Ok] | test.rs:215:18:215:41 | await ... [Ok] | provenance | | +| test.rs:215:18:215:41 | await ... [Ok] | test.rs:215:18:215:42 | TryExpr | provenance | | +| test.rs:215:18:215:42 | TryExpr | test.rs:215:13:215:14 | v4 | provenance | | +| test.rs:224:23:224:33 | [post] &mut buffer [&ref] | test.rs:224:28:224:33 | [post] buffer | provenance | | +| test.rs:224:28:224:33 | [post] buffer | test.rs:225:15:225:20 | buffer | provenance | | +| test.rs:225:15:225:20 | buffer | test.rs:225:14:225:20 | &buffer | provenance | | +| test.rs:231:13:231:18 | mut f1 | test.rs:233:30:233:40 | [post] &mut buffer [&ref] | provenance | MaD:30 | +| test.rs:231:22:231:65 | ... .open(...) [future, Ok] | test.rs:231:22:231:71 | await ... [Ok] | provenance | | +| test.rs:231:22:231:71 | await ... [Ok] | test.rs:231:22:231:72 | TryExpr | provenance | | +| test.rs:231:22:231:72 | TryExpr | test.rs:231:13:231:18 | mut f1 | provenance | | +| test.rs:231:52:231:55 | open | test.rs:231:22:231:65 | ... .open(...) [future, Ok] | provenance | Src:MaD:8 | +| test.rs:233:30:233:40 | [post] &mut buffer [&ref] | test.rs:233:35:233:40 | [post] buffer | provenance | | +| test.rs:233:35:233:40 | [post] buffer | test.rs:234:15:234:20 | buffer | provenance | | +| test.rs:234:15:234:20 | buffer | test.rs:234:14:234:20 | &buffer | provenance | | +| test.rs:262:9:262:16 | mut file | test.rs:266:22:266:25 | file | provenance | | +| test.rs:262:9:262:16 | mut file | test.rs:266:32:266:42 | [post] &mut buffer [&ref] | provenance | MaD:19 | +| test.rs:262:9:262:16 | mut file | test.rs:266:32:266:42 | [post] &mut buffer [&ref] | provenance | MaD:20 | +| test.rs:262:20:262:44 | ...::open | test.rs:262:20:262:56 | ...::open(...) [future, Ok] | provenance | Src:MaD:1 | +| test.rs:262:20:262:56 | ...::open(...) [future, Ok] | test.rs:262:20:262:62 | await ... [Ok] | provenance | | +| test.rs:262:20:262:62 | await ... [Ok] | test.rs:262:20:262:63 | TryExpr | provenance | | +| test.rs:262:20:262:63 | TryExpr | test.rs:262:9:262:16 | mut file | provenance | | +| test.rs:266:22:266:25 | file | test.rs:266:32:266:42 | [post] &mut buffer [&ref] | provenance | MaD:19 | +| test.rs:266:32:266:42 | [post] &mut buffer [&ref] | test.rs:266:37:266:42 | [post] buffer | provenance | | +| test.rs:266:37:266:42 | [post] buffer | test.rs:267:15:267:20 | buffer | provenance | | +| test.rs:267:15:267:20 | buffer | test.rs:267:14:267:20 | &buffer | provenance | | +| test.rs:273:13:273:18 | mut f1 | test.rs:275:22:275:23 | f1 | provenance | | +| test.rs:273:13:273:18 | mut f1 | test.rs:275:30:275:40 | [post] &mut buffer [&ref] | provenance | MaD:19 | +| test.rs:273:13:273:18 | mut f1 | test.rs:275:30:275:40 | [post] &mut buffer [&ref] | provenance | MaD:20 | +| test.rs:273:22:273:69 | ... .open(...) [future, Ok] | test.rs:273:22:273:75 | await ... [Ok] | provenance | | +| test.rs:273:22:273:75 | await ... [Ok] | test.rs:273:22:273:76 | TryExpr | provenance | | +| test.rs:273:22:273:76 | TryExpr | test.rs:273:13:273:18 | mut f1 | provenance | | +| test.rs:273:56:273:59 | open | test.rs:273:22:273:69 | ... .open(...) [future, Ok] | provenance | Src:MaD:2 | +| test.rs:275:22:275:23 | f1 | test.rs:275:30:275:40 | [post] &mut buffer [&ref] | provenance | MaD:19 | +| test.rs:275:30:275:40 | [post] &mut buffer [&ref] | test.rs:275:35:275:40 | [post] buffer | provenance | | +| test.rs:275:35:275:40 | [post] buffer | test.rs:276:15:276:20 | buffer | provenance | | +| test.rs:276:15:276:20 | buffer | test.rs:276:14:276:20 | &buffer | provenance | | +nodes +| test.rs:12:13:12:18 | buffer | semmle.label | buffer | +| test.rs:12:31:12:43 | ...::read | semmle.label | ...::read | +| test.rs:12:31:12:43 | ...::read [Ok] | semmle.label | ...::read [Ok] | +| test.rs:12:31:12:55 | ...::read(...) [Ok] | semmle.label | ...::read(...) [Ok] | +| test.rs:12:31:12:56 | TryExpr | semmle.label | TryExpr | +| test.rs:13:14:13:19 | buffer | semmle.label | buffer | +| test.rs:17:13:17:18 | buffer | semmle.label | buffer | +| test.rs:17:31:17:38 | ...::read | semmle.label | ...::read | +| test.rs:17:31:17:38 | ...::read [Ok] | semmle.label | ...::read [Ok] | +| test.rs:17:31:17:50 | ...::read(...) [Ok] | semmle.label | ...::read(...) [Ok] | +| test.rs:17:31:17:51 | TryExpr | semmle.label | TryExpr | +| test.rs:18:14:18:19 | buffer | semmle.label | buffer | +| test.rs:22:13:22:18 | buffer | semmle.label | buffer | +| test.rs:22:22:22:39 | ...::read_to_string | semmle.label | ...::read_to_string | +| test.rs:22:22:22:39 | ...::read_to_string [Ok] | semmle.label | ...::read_to_string [Ok] | +| test.rs:22:22:22:51 | ...::read_to_string(...) [Ok] | semmle.label | ...::read_to_string(...) [Ok] | +| test.rs:22:22:22:52 | TryExpr | semmle.label | TryExpr | +| test.rs:23:14:23:19 | buffer | semmle.label | buffer | +| test.rs:29:13:29:16 | path | semmle.label | path | +| test.rs:29:20:29:27 | e.path() | semmle.label | e.path() | +| test.rs:29:22:29:25 | path | semmle.label | path | +| test.rs:30:14:30:17 | path | semmle.label | path | +| test.rs:30:14:30:25 | path.clone() | semmle.label | path.clone() | +| test.rs:31:14:31:17 | path | semmle.label | path | +| test.rs:31:14:31:25 | path.clone() | semmle.label | path.clone() | +| test.rs:31:14:31:35 | ... .as_path() | semmle.label | ... .as_path() | +| test.rs:41:14:41:17 | path | semmle.label | path | +| test.rs:43:13:43:21 | file_name | semmle.label | file_name | +| test.rs:43:25:43:37 | e.file_name() | semmle.label | e.file_name() | +| test.rs:43:27:43:35 | file_name | semmle.label | file_name | +| test.rs:44:14:44:22 | file_name | semmle.label | file_name | +| test.rs:44:14:44:30 | file_name.clone() | semmle.label | file_name.clone() | +| test.rs:49:14:49:22 | file_name | semmle.label | file_name | +| test.rs:65:13:65:18 | target | semmle.label | target | +| test.rs:65:22:65:34 | ...::read_link | semmle.label | ...::read_link | +| test.rs:65:22:65:49 | ...::read_link(...) [Ok] | semmle.label | ...::read_link(...) [Ok] | +| test.rs:65:22:65:50 | TryExpr | semmle.label | TryExpr | +| test.rs:66:14:66:19 | target | semmle.label | target | +| test.rs:74:13:74:18 | buffer | semmle.label | buffer | +| test.rs:74:31:74:45 | ...::read | semmle.label | ...::read | +| test.rs:74:31:74:57 | ...::read(...) [future, Ok] | semmle.label | ...::read(...) [future, Ok] | +| test.rs:74:31:74:63 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:74:31:74:64 | TryExpr | semmle.label | TryExpr | +| test.rs:75:14:75:19 | buffer | semmle.label | buffer | +| test.rs:79:13:79:18 | buffer | semmle.label | buffer | +| test.rs:79:31:79:45 | ...::read | semmle.label | ...::read | +| test.rs:79:31:79:57 | ...::read(...) [future, Ok] | semmle.label | ...::read(...) [future, Ok] | +| test.rs:79:31:79:63 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:79:31:79:64 | TryExpr | semmle.label | TryExpr | +| test.rs:80:14:80:19 | buffer | semmle.label | buffer | +| test.rs:84:13:84:18 | buffer | semmle.label | buffer | +| test.rs:84:22:84:46 | ...::read_to_string | semmle.label | ...::read_to_string | +| test.rs:84:22:84:58 | ...::read_to_string(...) [future, Ok] | semmle.label | ...::read_to_string(...) [future, Ok] | +| test.rs:84:22:84:64 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:84:22:84:65 | TryExpr | semmle.label | TryExpr | +| test.rs:85:14:85:19 | buffer | semmle.label | buffer | +| test.rs:90:13:90:16 | path | semmle.label | path | +| test.rs:90:20:90:31 | entry.path() | semmle.label | entry.path() | +| test.rs:90:26:90:29 | path | semmle.label | path | +| test.rs:90:26:90:29 | path | semmle.label | path | +| test.rs:91:13:91:21 | file_name | semmle.label | file_name | +| test.rs:91:25:91:41 | entry.file_name() | semmle.label | entry.file_name() | +| test.rs:91:31:91:39 | file_name | semmle.label | file_name | +| test.rs:91:31:91:39 | file_name | semmle.label | file_name | +| test.rs:92:14:92:17 | path | semmle.label | path | +| test.rs:93:14:93:22 | file_name | semmle.label | file_name | +| test.rs:97:13:97:18 | target | semmle.label | target | +| test.rs:97:22:97:41 | ...::read_link | semmle.label | ...::read_link | +| test.rs:97:22:97:56 | ...::read_link(...) [future, Ok] | semmle.label | ...::read_link(...) [future, Ok] | +| test.rs:97:22:97:62 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:97:22:97:63 | TryExpr | semmle.label | TryExpr | +| test.rs:98:14:98:19 | target | semmle.label | target | +| test.rs:107:9:107:16 | mut file | semmle.label | mut file | +| test.rs:107:20:107:38 | ...::open | semmle.label | ...::open | +| test.rs:107:20:107:50 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] | +| test.rs:107:20:107:51 | TryExpr | semmle.label | TryExpr | +| test.rs:111:32:111:42 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:111:32:111:42 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:111:37:111:42 | [post] buffer | semmle.label | [post] buffer | +| test.rs:112:14:112:20 | &buffer | semmle.label | &buffer | +| test.rs:112:15:112:20 | buffer | semmle.label | buffer | +| test.rs:117:39:117:49 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:117:39:117:49 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:117:44:117:49 | [post] buffer | semmle.label | [post] buffer | +| test.rs:118:14:118:20 | &buffer | semmle.label | &buffer | +| test.rs:118:15:118:20 | buffer | semmle.label | buffer | +| test.rs:123:42:123:52 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:123:42:123:52 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:123:47:123:52 | [post] buffer | semmle.label | [post] buffer | +| test.rs:124:14:124:20 | &buffer | semmle.label | &buffer | +| test.rs:124:15:124:20 | buffer | semmle.label | buffer | +| test.rs:129:25:129:35 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:129:30:129:35 | [post] buffer | semmle.label | [post] buffer | +| test.rs:130:14:130:20 | &buffer | semmle.label | &buffer | +| test.rs:130:15:130:20 | buffer | semmle.label | buffer | +| test.rs:133:17:133:28 | file.bytes() | semmle.label | file.bytes() | +| test.rs:134:14:134:17 | byte | semmle.label | byte | +| test.rs:140:13:140:18 | mut f1 | semmle.label | mut f1 | +| test.rs:140:22:140:63 | ... .open(...) [Ok] | semmle.label | ... .open(...) [Ok] | +| test.rs:140:22:140:72 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:140:50:140:53 | open | semmle.label | open | +| test.rs:142:30:142:40 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:142:30:142:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:142:35:142:40 | [post] buffer | semmle.label | [post] buffer | +| test.rs:143:14:143:20 | &buffer | semmle.label | &buffer | +| test.rs:143:15:143:20 | buffer | semmle.label | buffer | +| test.rs:147:13:147:18 | mut f2 | semmle.label | mut f2 | +| test.rs:147:22:147:80 | ... .open(...) [Ok] | semmle.label | ... .open(...) [Ok] | +| test.rs:147:22:147:89 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:147:67:147:70 | open | semmle.label | open | +| test.rs:149:30:149:40 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:149:30:149:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:149:35:149:40 | [post] buffer | semmle.label | [post] buffer | +| test.rs:150:14:150:20 | &buffer | semmle.label | &buffer | +| test.rs:150:15:150:20 | buffer | semmle.label | buffer | +| test.rs:154:13:154:18 | mut f3 | semmle.label | mut f3 | +| test.rs:154:22:154:114 | ... .open(...) [Ok] | semmle.label | ... .open(...) [Ok] | +| test.rs:154:22:154:123 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:154:101:154:104 | open | semmle.label | open | +| test.rs:156:30:156:40 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:156:30:156:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:156:35:156:40 | [post] buffer | semmle.label | [post] buffer | +| test.rs:157:14:157:20 | &buffer | semmle.label | &buffer | +| test.rs:157:15:157:20 | buffer | semmle.label | buffer | +| test.rs:164:13:164:17 | file1 | semmle.label | file1 | +| test.rs:164:21:164:39 | ...::open | semmle.label | ...::open | +| test.rs:164:21:164:51 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] | +| test.rs:164:21:164:52 | TryExpr | semmle.label | TryExpr | +| test.rs:165:13:165:17 | file2 | semmle.label | file2 | +| test.rs:165:21:165:39 | ...::open | semmle.label | ...::open | +| test.rs:165:21:165:59 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] | +| test.rs:165:21:165:60 | TryExpr | semmle.label | TryExpr | +| test.rs:166:13:166:22 | mut reader | semmle.label | mut reader | +| test.rs:166:26:166:43 | file1.chain(...) | semmle.label | file1.chain(...) | +| test.rs:166:38:166:42 | file2 | semmle.label | file2 | +| test.rs:167:31:167:41 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:167:36:167:41 | [post] buffer | semmle.label | [post] buffer | +| test.rs:168:14:168:20 | &buffer | semmle.label | &buffer | +| test.rs:168:15:168:20 | buffer | semmle.label | buffer | +| test.rs:173:13:173:17 | file1 | semmle.label | file1 | +| test.rs:173:21:173:39 | ...::open | semmle.label | ...::open | +| test.rs:173:21:173:51 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] | +| test.rs:173:21:173:52 | TryExpr | semmle.label | TryExpr | +| test.rs:174:13:174:22 | mut reader | semmle.label | mut reader | +| test.rs:174:26:174:40 | file1.take(...) | semmle.label | file1.take(...) | +| test.rs:175:31:175:41 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:175:36:175:41 | [post] buffer | semmle.label | [post] buffer | +| test.rs:176:14:176:20 | &buffer | semmle.label | &buffer | +| test.rs:176:15:176:20 | buffer | semmle.label | buffer | +| test.rs:185:9:185:16 | mut file | semmle.label | mut file | +| test.rs:185:20:185:40 | ...::open | semmle.label | ...::open | +| test.rs:185:20:185:52 | ...::open(...) [future, Ok] | semmle.label | ...::open(...) [future, Ok] | +| test.rs:185:20:185:58 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:185:20:185:59 | TryExpr | semmle.label | TryExpr | +| test.rs:189:32:189:42 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:189:37:189:42 | [post] buffer | semmle.label | [post] buffer | +| test.rs:190:14:190:20 | &buffer | semmle.label | &buffer | +| test.rs:190:15:190:20 | buffer | semmle.label | buffer | +| test.rs:195:39:195:49 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:195:44:195:49 | [post] buffer | semmle.label | [post] buffer | +| test.rs:196:14:196:20 | &buffer | semmle.label | &buffer | +| test.rs:196:15:196:20 | buffer | semmle.label | buffer | +| test.rs:201:42:201:52 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:201:47:201:52 | [post] buffer | semmle.label | [post] buffer | +| test.rs:202:14:202:20 | &buffer | semmle.label | &buffer | +| test.rs:202:15:202:20 | buffer | semmle.label | buffer | +| test.rs:207:25:207:35 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:207:30:207:35 | [post] buffer | semmle.label | [post] buffer | +| test.rs:208:14:208:20 | &buffer | semmle.label | &buffer | +| test.rs:208:15:208:20 | buffer | semmle.label | buffer | +| test.rs:212:13:212:14 | v1 | semmle.label | v1 | +| test.rs:212:18:212:31 | file.read_u8() [future, Ok] | semmle.label | file.read_u8() [future, Ok] | +| test.rs:212:18:212:37 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:212:18:212:38 | TryExpr | semmle.label | TryExpr | +| test.rs:213:13:213:14 | v2 | semmle.label | v2 | +| test.rs:213:18:213:32 | file.read_i16() [future, Ok] | semmle.label | file.read_i16() [future, Ok] | +| test.rs:213:18:213:38 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:213:18:213:39 | TryExpr | semmle.label | TryExpr | +| test.rs:214:13:214:14 | v3 | semmle.label | v3 | +| test.rs:214:18:214:32 | file.read_f32() [future, Ok] | semmle.label | file.read_f32() [future, Ok] | +| test.rs:214:18:214:38 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:214:18:214:39 | TryExpr | semmle.label | TryExpr | +| test.rs:215:13:215:14 | v4 | semmle.label | v4 | +| test.rs:215:18:215:35 | file.read_i64_le() [future, Ok] | semmle.label | file.read_i64_le() [future, Ok] | +| test.rs:215:18:215:41 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:215:18:215:42 | TryExpr | semmle.label | TryExpr | +| test.rs:216:14:216:15 | v1 | semmle.label | v1 | +| test.rs:217:14:217:15 | v2 | semmle.label | v2 | +| test.rs:218:14:218:15 | v3 | semmle.label | v3 | +| test.rs:219:14:219:15 | v4 | semmle.label | v4 | +| test.rs:224:23:224:33 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:224:28:224:33 | [post] buffer | semmle.label | [post] buffer | +| test.rs:225:14:225:20 | &buffer | semmle.label | &buffer | +| test.rs:225:15:225:20 | buffer | semmle.label | buffer | +| test.rs:231:13:231:18 | mut f1 | semmle.label | mut f1 | +| test.rs:231:22:231:65 | ... .open(...) [future, Ok] | semmle.label | ... .open(...) [future, Ok] | +| test.rs:231:22:231:71 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:231:22:231:72 | TryExpr | semmle.label | TryExpr | +| test.rs:231:52:231:55 | open | semmle.label | open | +| test.rs:233:30:233:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:233:35:233:40 | [post] buffer | semmle.label | [post] buffer | +| test.rs:234:14:234:20 | &buffer | semmle.label | &buffer | +| test.rs:234:15:234:20 | buffer | semmle.label | buffer | +| test.rs:262:9:262:16 | mut file | semmle.label | mut file | +| test.rs:262:20:262:44 | ...::open | semmle.label | ...::open | +| test.rs:262:20:262:56 | ...::open(...) [future, Ok] | semmle.label | ...::open(...) [future, Ok] | +| test.rs:262:20:262:62 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:262:20:262:63 | TryExpr | semmle.label | TryExpr | +| test.rs:266:22:266:25 | file | semmle.label | file | +| test.rs:266:32:266:42 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:266:37:266:42 | [post] buffer | semmle.label | [post] buffer | +| test.rs:267:14:267:20 | &buffer | semmle.label | &buffer | +| test.rs:267:15:267:20 | buffer | semmle.label | buffer | +| test.rs:273:13:273:18 | mut f1 | semmle.label | mut f1 | +| test.rs:273:22:273:69 | ... .open(...) [future, Ok] | semmle.label | ... .open(...) [future, Ok] | +| test.rs:273:22:273:75 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:273:22:273:76 | TryExpr | semmle.label | TryExpr | +| test.rs:273:56:273:59 | open | semmle.label | open | +| test.rs:275:22:275:23 | f1 | semmle.label | f1 | +| test.rs:275:30:275:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:275:35:275:40 | [post] buffer | semmle.label | [post] buffer | +| test.rs:276:14:276:20 | &buffer | semmle.label | &buffer | +| test.rs:276:15:276:20 | buffer | semmle.label | buffer | +subpaths +testFailures +#select +| test.rs:13:14:13:19 | buffer | test.rs:12:31:12:43 | ...::read | test.rs:13:14:13:19 | buffer | $@ | test.rs:12:31:12:43 | ...::read | ...::read | +| test.rs:18:14:18:19 | buffer | test.rs:17:31:17:38 | ...::read | test.rs:18:14:18:19 | buffer | $@ | test.rs:17:31:17:38 | ...::read | ...::read | +| test.rs:23:14:23:19 | buffer | test.rs:22:22:22:39 | ...::read_to_string | test.rs:23:14:23:19 | buffer | $@ | test.rs:22:22:22:39 | ...::read_to_string | ...::read_to_string | +| test.rs:30:14:30:25 | path.clone() | test.rs:29:22:29:25 | path | test.rs:30:14:30:25 | path.clone() | $@ | test.rs:29:22:29:25 | path | path | +| test.rs:31:14:31:35 | ... .as_path() | test.rs:29:22:29:25 | path | test.rs:31:14:31:35 | ... .as_path() | $@ | test.rs:29:22:29:25 | path | path | +| test.rs:41:14:41:17 | path | test.rs:29:22:29:25 | path | test.rs:41:14:41:17 | path | $@ | test.rs:29:22:29:25 | path | path | +| test.rs:44:14:44:30 | file_name.clone() | test.rs:43:27:43:35 | file_name | test.rs:44:14:44:30 | file_name.clone() | $@ | test.rs:43:27:43:35 | file_name | file_name | +| test.rs:49:14:49:22 | file_name | test.rs:43:27:43:35 | file_name | test.rs:49:14:49:22 | file_name | $@ | test.rs:43:27:43:35 | file_name | file_name | +| test.rs:66:14:66:19 | target | test.rs:65:22:65:34 | ...::read_link | test.rs:66:14:66:19 | target | $@ | test.rs:65:22:65:34 | ...::read_link | ...::read_link | +| test.rs:75:14:75:19 | buffer | test.rs:74:31:74:45 | ...::read | test.rs:75:14:75:19 | buffer | $@ | test.rs:74:31:74:45 | ...::read | ...::read | +| test.rs:80:14:80:19 | buffer | test.rs:79:31:79:45 | ...::read | test.rs:80:14:80:19 | buffer | $@ | test.rs:79:31:79:45 | ...::read | ...::read | +| test.rs:85:14:85:19 | buffer | test.rs:84:22:84:46 | ...::read_to_string | test.rs:85:14:85:19 | buffer | $@ | test.rs:84:22:84:46 | ...::read_to_string | ...::read_to_string | +| test.rs:92:14:92:17 | path | test.rs:90:26:90:29 | path | test.rs:92:14:92:17 | path | $@ | test.rs:90:26:90:29 | path | path | +| test.rs:92:14:92:17 | path | test.rs:90:26:90:29 | path | test.rs:92:14:92:17 | path | $@ | test.rs:90:26:90:29 | path | path | +| test.rs:93:14:93:22 | file_name | test.rs:91:31:91:39 | file_name | test.rs:93:14:93:22 | file_name | $@ | test.rs:91:31:91:39 | file_name | file_name | +| test.rs:93:14:93:22 | file_name | test.rs:91:31:91:39 | file_name | test.rs:93:14:93:22 | file_name | $@ | test.rs:91:31:91:39 | file_name | file_name | +| test.rs:98:14:98:19 | target | test.rs:97:22:97:41 | ...::read_link | test.rs:98:14:98:19 | target | $@ | test.rs:97:22:97:41 | ...::read_link | ...::read_link | +| test.rs:112:14:112:20 | &buffer | test.rs:107:20:107:38 | ...::open | test.rs:112:14:112:20 | &buffer | $@ | test.rs:107:20:107:38 | ...::open | ...::open | +| test.rs:118:14:118:20 | &buffer | test.rs:107:20:107:38 | ...::open | test.rs:118:14:118:20 | &buffer | $@ | test.rs:107:20:107:38 | ...::open | ...::open | +| test.rs:124:14:124:20 | &buffer | test.rs:107:20:107:38 | ...::open | test.rs:124:14:124:20 | &buffer | $@ | test.rs:107:20:107:38 | ...::open | ...::open | +| test.rs:130:14:130:20 | &buffer | test.rs:107:20:107:38 | ...::open | test.rs:130:14:130:20 | &buffer | $@ | test.rs:107:20:107:38 | ...::open | ...::open | +| test.rs:134:14:134:17 | byte | test.rs:107:20:107:38 | ...::open | test.rs:134:14:134:17 | byte | $@ | test.rs:107:20:107:38 | ...::open | ...::open | +| test.rs:143:14:143:20 | &buffer | test.rs:140:50:140:53 | open | test.rs:143:14:143:20 | &buffer | $@ | test.rs:140:50:140:53 | open | open | +| test.rs:150:14:150:20 | &buffer | test.rs:147:67:147:70 | open | test.rs:150:14:150:20 | &buffer | $@ | test.rs:147:67:147:70 | open | open | +| test.rs:157:14:157:20 | &buffer | test.rs:154:101:154:104 | open | test.rs:157:14:157:20 | &buffer | $@ | test.rs:154:101:154:104 | open | open | +| test.rs:168:14:168:20 | &buffer | test.rs:164:21:164:39 | ...::open | test.rs:168:14:168:20 | &buffer | $@ | test.rs:164:21:164:39 | ...::open | ...::open | +| test.rs:168:14:168:20 | &buffer | test.rs:165:21:165:39 | ...::open | test.rs:168:14:168:20 | &buffer | $@ | test.rs:165:21:165:39 | ...::open | ...::open | +| test.rs:176:14:176:20 | &buffer | test.rs:173:21:173:39 | ...::open | test.rs:176:14:176:20 | &buffer | $@ | test.rs:173:21:173:39 | ...::open | ...::open | +| test.rs:190:14:190:20 | &buffer | test.rs:185:20:185:40 | ...::open | test.rs:190:14:190:20 | &buffer | $@ | test.rs:185:20:185:40 | ...::open | ...::open | +| test.rs:196:14:196:20 | &buffer | test.rs:185:20:185:40 | ...::open | test.rs:196:14:196:20 | &buffer | $@ | test.rs:185:20:185:40 | ...::open | ...::open | +| test.rs:202:14:202:20 | &buffer | test.rs:185:20:185:40 | ...::open | test.rs:202:14:202:20 | &buffer | $@ | test.rs:185:20:185:40 | ...::open | ...::open | +| test.rs:208:14:208:20 | &buffer | test.rs:185:20:185:40 | ...::open | test.rs:208:14:208:20 | &buffer | $@ | test.rs:185:20:185:40 | ...::open | ...::open | +| test.rs:216:14:216:15 | v1 | test.rs:185:20:185:40 | ...::open | test.rs:216:14:216:15 | v1 | $@ | test.rs:185:20:185:40 | ...::open | ...::open | +| test.rs:217:14:217:15 | v2 | test.rs:185:20:185:40 | ...::open | test.rs:217:14:217:15 | v2 | $@ | test.rs:185:20:185:40 | ...::open | ...::open | +| test.rs:218:14:218:15 | v3 | test.rs:185:20:185:40 | ...::open | test.rs:218:14:218:15 | v3 | $@ | test.rs:185:20:185:40 | ...::open | ...::open | +| test.rs:219:14:219:15 | v4 | test.rs:185:20:185:40 | ...::open | test.rs:219:14:219:15 | v4 | $@ | test.rs:185:20:185:40 | ...::open | ...::open | +| test.rs:225:14:225:20 | &buffer | test.rs:185:20:185:40 | ...::open | test.rs:225:14:225:20 | &buffer | $@ | test.rs:185:20:185:40 | ...::open | ...::open | +| test.rs:234:14:234:20 | &buffer | test.rs:231:52:231:55 | open | test.rs:234:14:234:20 | &buffer | $@ | test.rs:231:52:231:55 | open | open | +| test.rs:267:14:267:20 | &buffer | test.rs:262:20:262:44 | ...::open | test.rs:267:14:267:20 | &buffer | $@ | test.rs:262:20:262:44 | ...::open | ...::open | +| test.rs:276:14:276:20 | &buffer | test.rs:273:56:273:59 | open | test.rs:276:14:276:20 | &buffer | $@ | test.rs:273:56:273:59 | open | open | diff --git a/rust/ql/test/library-tests/dataflow/sources/file/InlineFlow.qlref b/rust/ql/test/library-tests/dataflow/sources/file/InlineFlow.qlref new file mode 100644 index 000000000000..e0f7493db396 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/file/InlineFlow.qlref @@ -0,0 +1,2 @@ +query: ../env/InlineFlow.ql + diff --git a/rust/ql/test/library-tests/dataflow/sources/file/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/file/TaintSources.expected new file mode 100644 index 000000000000..d73106fb1cfd --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/file/TaintSources.expected @@ -0,0 +1,33 @@ +| test.rs:12:31:12:43 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:12:31:12:43 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:17:31:17:38 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:17:31:17:38 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:22:22:22:39 | ...::read_to_string | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:22:22:22:39 | ...::read_to_string | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:29:22:29:25 | path | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:43:27:43:35 | file_name | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:54:22:54:25 | path | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:55:27:55:35 | file_name | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:65:22:65:34 | ...::read_link | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:74:31:74:45 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:79:31:79:45 | ...::read | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:84:22:84:46 | ...::read_to_string | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:90:26:90:29 | path | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:90:26:90:29 | path | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:91:31:91:39 | file_name | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:91:31:91:39 | file_name | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:97:22:97:41 | ...::read_link | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:107:20:107:38 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:140:50:140:53 | open | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:147:67:147:70 | open | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:154:101:154:104 | open | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:164:21:164:39 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:165:21:165:39 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:173:21:173:39 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:185:20:185:40 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:231:52:231:55 | open | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:241:21:241:41 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:242:21:242:41 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:250:21:250:41 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:262:20:262:44 | ...::open | Flow source 'FileSource' of type file (DEFAULT). | +| test.rs:273:56:273:59 | open | Flow source 'FileSource' of type file (DEFAULT). | diff --git a/rust/ql/test/library-tests/dataflow/sources/file/TaintSources.qlref b/rust/ql/test/library-tests/dataflow/sources/file/TaintSources.qlref new file mode 100644 index 000000000000..7aa95121af3e --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/file/TaintSources.qlref @@ -0,0 +1,2 @@ +query: queries/summary/TaintSources.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/rust/ql/test/library-tests/dataflow/sources/file/options.yml b/rust/ql/test/library-tests/dataflow/sources/file/options.yml new file mode 100644 index 000000000000..673d322a0a13 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/file/options.yml @@ -0,0 +1,6 @@ +qltest_cargo_check: true +qltest_dependencies: + - async-std = { version = "1.13.1" } + - bytes = { version = "1.10.1" } + - futures = { version = "0.3" } + - tokio = { version = "1.43.0", features = ["full"] } diff --git a/rust/ql/test/library-tests/dataflow/sources/file/test.rs b/rust/ql/test/library-tests/dataflow/sources/file/test.rs new file mode 100644 index 000000000000..35a7d2cc1b80 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/file/test.rs @@ -0,0 +1,315 @@ +fn sink(_: T) { } + +// --- tests --- + +use std::fs; +use std::io::Read; +use tokio::io::AsyncReadExt; +use async_std::io::ReadExt; + +fn test_fs() -> Result<(), Box> { + { + let buffer: Vec = std::fs::read("file.bin")?; // $ Alert[rust/summary/taint-sources] + sink(buffer); // $ hasTaintFlow="file.bin" + } + + { + let buffer: Vec = fs::read("file.bin")?; // $ Alert[rust/summary/taint-sources] + sink(buffer); // $ hasTaintFlow="file.bin" + } + + { + let buffer = fs::read_to_string("file.txt")?; // $ Alert[rust/summary/taint-sources] + sink(buffer); // $ hasTaintFlow="file.txt" + } + + for entry in fs::read_dir("directory")? { + let e = entry?; + + let path = e.path(); // $ Alert[rust/summary/taint-sources] + sink(path.clone()); // $ hasTaintFlow + sink(path.clone().as_path()); // $ hasTaintFlow + sink(path.clone().into_os_string()); // $ MISSING: hasTaintFlow + sink(std::path::PathBuf::from(path.clone().into_boxed_path())); // $ MISSING: hasTaintFlow + sink(path.clone().as_os_str()); // $ MISSING: hasTaintFlow + sink(path.clone().as_mut_os_str()); // $ MISSING: hasTaintFlow + sink(path.to_str()); // $ MISSING: hasTaintFlow + sink(path.to_path_buf()); // $ MISSING: hasTaintFlow + sink(path.file_name().unwrap()); // $ MISSING: hasTaintFlow + sink(path.extension().unwrap()); // $ MISSING: hasTaintFlow + sink(path.canonicalize().unwrap()); // $ MISSING: hasTaintFlow + sink(path); // $ hasTaintFlow + + let file_name = e.file_name(); // $ Alert[rust/summary/taint-sources] + sink(file_name.clone()); // $ hasTaintFlow + sink(file_name.clone().into_string().unwrap()); // $ MISSING: hasTaintFlow + sink(file_name.to_str().unwrap()); // $ MISSING: hasTaintFlow + sink(file_name.to_string_lossy().to_mut()); // $ MISSING: hasTaintFlow + sink(file_name.clone().as_encoded_bytes()); // $ MISSING: hasTaintFlow + sink(file_name); // $ hasTaintFlow + } + for entry in std::path::Path::new("directory").read_dir()? { + let e = entry?; + + let path = e.path(); // $ Alert[rust/summary/taint-sources] + let file_name = e.file_name(); // $ Alert[rust/summary/taint-sources] + } + for entry in std::path::PathBuf::from("directory").read_dir()? { + let e = entry?; + + let path = e.path(); // $ MISSING: Alert[rust/summary/taint-sources] + let file_name = e.file_name(); // $ MISSING: Alert[rust/summary/taint-sources] + } + + { + let target = fs::read_link("symlink.txt")?; // $ Alert[rust/summary/taint-sources] + sink(target); // $ hasTaintFlow="symlink.txt" + } + + Ok(()) +} + +async fn test_tokio_fs() -> Result<(), Box> { + { + let buffer: Vec = tokio::fs::read("file.bin").await?; // $ Alert[rust/summary/taint-sources] + sink(buffer); // $ hasTaintFlow="file.bin" + } + + { + let buffer: Vec = tokio::fs::read("file.bin").await?; // $ Alert[rust/summary/taint-sources] + sink(buffer); // $ hasTaintFlow="file.bin" + } + + { + let buffer = tokio::fs::read_to_string("file.txt").await?; // $ Alert[rust/summary/taint-sources] + sink(buffer); // $ hasTaintFlow="file.txt" + } + + let mut read_dir = tokio::fs::read_dir("directory").await?; + for entry in read_dir.next_entry().await? { + let path = entry.path(); // $ Alert[rust/summary/taint-sources] + let file_name = entry.file_name(); // $ Alert[rust/summary/taint-sources] + sink(path); // $ hasTaintFlow + sink(file_name); // $ hasTaintFlow + } + + { + let target = tokio::fs::read_link("symlink.txt").await?; // $ Alert[rust/summary/taint-sources] + sink(target); // $ hasTaintFlow="symlink.txt" + } + + Ok(()) +} + +fn test_io_file() -> std::io::Result<()> { + // --- file --- + + let mut file = std::fs::File::open("file.txt")?; // $ Alert[rust/summary/taint-sources] + + { + let mut buffer = [0u8; 100]; + let _bytes = file.read(&mut buffer)?; + sink(&buffer); // $ hasTaintFlow="file.txt" + } + + { + let mut buffer = Vec::::new(); + let _bytes = file.read_to_end(&mut buffer)?; + sink(&buffer); // $ hasTaintFlow="file.txt" + } + + { + let mut buffer = String::new(); + let _bytes = file.read_to_string(&mut buffer)?; + sink(&buffer); // $ hasTaintFlow="file.txt" + } + + { + let mut buffer = [0; 100]; + file.read_exact(&mut buffer)?; + sink(&buffer); // $ hasTaintFlow="file.txt" + } + + for byte in file.bytes() { + sink(byte); // $ hasTaintFlow="file.txt" + } + + // --- OpenOptions --- + + { + let mut f1 = std::fs::OpenOptions::new().open("f1.txt").unwrap(); // $ Alert[rust/summary/taint-sources] + let mut buffer = [0u8; 1024]; + let _bytes = f1.read(&mut buffer)?; + sink(&buffer); // $ hasTaintFlow="f1.txt" + } + + { + let mut f2 = std::fs::OpenOptions::new().create_new(true).open("f2.txt").unwrap(); // $ Alert[rust/summary/taint-sources] + let mut buffer = [0u8; 1024]; + let _bytes = f2.read(&mut buffer)?; + sink(&buffer); // $ hasTaintFlow="f2.txt" + } + + { + let mut f3 = std::fs::OpenOptions::new().read(true).write(true).truncate(true).create(true).open("f3.txt").unwrap(); // $ Alert[rust/summary/taint-sources] + let mut buffer = [0u8; 1024]; + let _bytes = f3.read(&mut buffer)?; + sink(&buffer); // $ hasTaintFlow="f3.txt" + } + + // --- misc operations --- + + { + let mut buffer = String::new(); + let file1 = std::fs::File::open("file.txt")?; // $ Alert[rust/summary/taint-sources] + let file2 = std::fs::File::open("another_file.txt")?; // $ Alert[rust/summary/taint-sources] + let mut reader = file1.chain(file2); + reader.read_to_string(&mut buffer)?; + sink(&buffer); // $ hasTaintFlow="file.txt" hasTaintFlow="another_file.txt" + } + + { + let mut buffer = String::new(); + let file1 = std::fs::File::open("file.txt")?; // $ Alert[rust/summary/taint-sources] + let mut reader = file1.take(100); + reader.read_to_string(&mut buffer)?; + sink(&buffer); // $ hasTaintFlow="file.txt" + } + + Ok(()) +} + +async fn test_tokio_file() -> std::io::Result<()> { + // --- file --- + + let mut file = tokio::fs::File::open("file.txt").await?; // $ Alert[rust/summary/taint-sources] + + { + let mut buffer = [0u8; 100]; + let _bytes = file.read(&mut buffer).await?; + sink(&buffer); // $ hasTaintFlow="file.txt" + } + + { + let mut buffer = Vec::::new(); + let _bytes = file.read_to_end(&mut buffer).await?; + sink(&buffer); // $ hasTaintFlow="file.txt" + } + + { + let mut buffer = String::new(); + let _bytes = file.read_to_string(&mut buffer).await?; + sink(&buffer); // $ hasTaintFlow="file.txt" + } + + { + let mut buffer = [0; 100]; + file.read_exact(&mut buffer).await?; + sink(&buffer); // $ hasTaintFlow="file.txt" + } + + { + let v1 = file.read_u8().await?; + let v2 = file.read_i16().await?; + let v3 = file.read_f32().await?; + let v4 = file.read_i64_le().await?; + sink(v1); // $ hasTaintFlow="file.txt" + sink(v2); // $ hasTaintFlow="file.txt" + sink(v3); // $ hasTaintFlow="file.txt" + sink(v4); // $ hasTaintFlow="file.txt" + } + + { + let mut buffer = bytes::BytesMut::new(); + file.read_buf(&mut buffer).await?; + sink(&buffer); // $ hasTaintFlow="file.txt" + } + + // --- OpenOptions --- + + { + let mut f1 = tokio::fs::OpenOptions::new().open("f1.txt").await?; // $ Alert[rust/summary/taint-sources] + let mut buffer = [0u8; 1024]; + let _bytes = f1.read(&mut buffer).await?; + sink(&buffer); // $ hasTaintFlow="f1.txt" + } + + // --- misc operations --- + + { + let mut buffer = String::new(); + let file1 = tokio::fs::File::open("file.txt").await?; // $ Alert[rust/summary/taint-sources] + let file2 = tokio::fs::File::open("another_file.txt").await?; // $ Alert[rust/summary/taint-sources] + let mut reader = file1.chain(file2); + reader.read_to_string(&mut buffer).await?; + sink(&buffer); // $ MISSING: hasTaintFlow="file.txt" hasTaintFlow="another_file.txt" + } + + { + let mut buffer = String::new(); + let file1 = tokio::fs::File::open("file.txt").await?; // $ Alert[rust/summary/taint-sources] + let mut reader = file1.take(100); + reader.read_to_string(&mut buffer).await?; + sink(&buffer); // $ MISSING: hasTaintFlow="file.txt" + } + + Ok(()) +} + +async fn test_async_std_file() -> std::io::Result<()> { + // --- file --- + + let mut file = async_std::fs::File::open("file.txt").await?; // $ Alert[rust/summary/taint-sources] + + { + let mut buffer = [0u8; 100]; + let _bytes = file.read(&mut buffer).await?; + sink(&buffer); // $ hasTaintFlow="file.txt" + } + + // --- OpenOptions --- + + { + let mut f1 = async_std::fs::OpenOptions::new().open("f1.txt").await?; // $ Alert[rust/summary/taint-sources] + let mut buffer = [0u8; 1024]; + let _bytes = f1.read(&mut buffer).await?; + sink(&buffer); // $ hasTaintFlow="f1.txt" + } + + Ok(()) +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + println!("test_fs..."); + match test_fs() { + Ok(_) => println!("complete"), + Err(e) => println!("error: {}", e), + } + + println!("test_tokio_fs..."); + match futures::executor::block_on(test_tokio_fs()) { + Ok(_) => println!("complete"), + Err(e) => println!("error: {}", e), + } + + println!("test_io_file..."); + match test_io_file() { + Ok(_) => println!("complete"), + Err(e) => println!("error: {}", e), + } + + println!("test_tokio_file..."); + match futures::executor::block_on(test_tokio_file()) { + Ok(_) => println!("complete"), + Err(e) => println!("error: {}", e), + } + + println!("test_async_std_file..."); + match futures::executor::block_on(test_async_std_file()) { + Ok(_) => println!("complete"), + Err(e) => println!("error: {}", e), + } + + Ok(()) +} diff --git a/rust/ql/test/library-tests/dataflow/sources/net/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/sources/net/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..352992bf4f2d --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/net/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,10 @@ +multipleCallTargets +| test.rs:59:62:59:77 | ...::from(...) | +| test.rs:66:58:66:73 | ...::from(...) | +| test.rs:389:30:389:67 | pinned.poll_read(...) | +| test.rs:416:26:416:54 | pinned.poll_fill_buf(...) | +| test.rs:423:27:423:71 | ... .poll_fill_buf(...) | +| test.rs:447:30:447:67 | pinned.poll_read(...) | +| test.rs:470:26:470:54 | pinned.poll_fill_buf(...) | +| test.rs:519:50:519:66 | ...::from(...) | +| test.rs:519:50:519:66 | ...::from(...) | diff --git a/rust/ql/test/library-tests/dataflow/sources/Cargo.lock b/rust/ql/test/library-tests/dataflow/sources/net/Cargo.lock similarity index 50% rename from rust/ql/test/library-tests/dataflow/sources/Cargo.lock rename to rust/ql/test/library-tests/dataflow/sources/net/Cargo.lock index a95c795df102..27790b8b768d 100644 --- a/rust/ql/test/library-tests/dataflow/sources/Cargo.lock +++ b/rust/ql/test/library-tests/dataflow/sources/net/Cargo.lock @@ -2,204 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "actix-codec" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" -dependencies = [ - "bitflags", - "bytes", - "futures-core", - "futures-sink", - "memchr", - "pin-project-lite", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "actix-http" -version = "3.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44dfe5c9e0004c623edc65391dfd51daa201e7e30ebd9c9bedf873048ec32bc2" -dependencies = [ - "actix-codec", - "actix-rt", - "actix-service", - "actix-utils", - "base64", - "bitflags", - "brotli", - "bytes", - "bytestring", - "derive_more", - "encoding_rs", - "flate2", - "foldhash", - "futures-core", - "h2 0.3.26", - "http 0.2.12", - "httparse", - "httpdate", - "itoa", - "language-tags", - "local-channel", - "mime", - "percent-encoding", - "pin-project-lite", - "rand", - "sha1", - "smallvec", - "tokio", - "tokio-util", - "tracing", - "zstd", -] - -[[package]] -name = "actix-macros" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" -dependencies = [ - "quote", - "syn", -] - -[[package]] -name = "actix-router" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13d324164c51f63867b57e73ba5936ea151b8a41a1d23d1031eeb9f70d0236f8" -dependencies = [ - "bytestring", - "cfg-if", - "http 0.2.12", - "regex", - "regex-lite", - "serde", - "tracing", -] - -[[package]] -name = "actix-rt" -version = "2.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eda4e2a6e042aa4e55ac438a2ae052d3b5da0ecf83d7411e1a368946925208" -dependencies = [ - "futures-core", - "tokio", -] - -[[package]] -name = "actix-server" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a65064ea4a457eaf07f2fba30b4c695bf43b721790e9530d26cb6f9019ff7502" -dependencies = [ - "actix-rt", - "actix-service", - "actix-utils", - "futures-core", - "futures-util", - "mio", - "socket2", - "tokio", - "tracing", -] - -[[package]] -name = "actix-service" -version = "2.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e46f36bf0e5af44bdc4bdb36fbbd421aa98c79a9bce724e1edeb3894e10dc7f" -dependencies = [ - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "actix-utils" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8" -dependencies = [ - "local-waker", - "pin-project-lite", -] - -[[package]] -name = "actix-web" -version = "4.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a597b77b5c6d6a1e1097fddde329a83665e25c5437c696a3a9a4aa514a614dea" -dependencies = [ - "actix-codec", - "actix-http", - "actix-macros", - "actix-router", - "actix-rt", - "actix-server", - "actix-service", - "actix-utils", - "actix-web-codegen", - "bytes", - "bytestring", - "cfg-if", - "cookie", - "derive_more", - "encoding_rs", - "foldhash", - "futures-core", - "futures-util", - "impl-more", - "itoa", - "language-tags", - "log", - "mime", - "once_cell", - "pin-project-lite", - "regex", - "regex-lite", - "serde", - "serde_json", - "serde_urlencoded", - "smallvec", - "socket2", - "time", - "tracing", - "url", -] - -[[package]] -name = "actix-web-codegen" -version = "4.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f591380e2e68490b5dfaf1dd1aa0ebe78d84ba7067078512b4ea6e4492d622b8" -dependencies = [ - "actix-router", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" - [[package]] name = "aho-corasick" version = "1.1.3" @@ -209,27 +11,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "alloc-no-stdlib" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" - -[[package]] -name = "alloc-stdlib" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" -dependencies = [ - "alloc-no-stdlib", -] - -[[package]] -name = "allocator-api2" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" - [[package]] name = "async-channel" version = "1.9.0" @@ -243,9 +24,9 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" dependencies = [ "concurrent-queue", "event-listener-strategy", @@ -255,9 +36,9 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" +checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" dependencies = [ "async-task", "concurrent-queue", @@ -273,7 +54,7 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" dependencies = [ - "async-channel 2.3.1", + "async-channel 2.5.0", "async-executor", "async-io", "async-lock", @@ -284,39 +65,38 @@ dependencies = [ [[package]] name = "async-io" -version = "2.4.1" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1237c0ae75a0f3765f58910ff9cdd0a12eeb39ab2f4c7de23262f337f0aacbb3" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" dependencies = [ - "async-lock", + "autocfg", "cfg-if", "concurrent-queue", "futures-io", "futures-lite", "parking", "polling", - "rustix 1.0.7", + "rustix", "slab", - "tracing", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "async-lock" -version = "3.4.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" dependencies = [ - "event-listener 5.4.0", + "event-listener 5.4.1", "event-listener-strategy", "pin-project-lite", ] [[package]] name = "async-std" -version = "1.13.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "730294c1c08c2e0f85759590518f6333f0d5a0a766a27d519c1b244c3dfd8a24" +checksum = "2c8e079a4ab67ae52b7403632e4618815d6db36d2a010cfe41b02c1b1578f93b" dependencies = [ "async-channel 1.9.0", "async-global-executor", @@ -352,15 +132,15 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "aws-lc-rs" -version = "1.13.1" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fcc8f365936c834db5514fc45aee5b1202d677e6b40e48468aaaa8183ca8c7" +checksum = "879b6c89592deb404ba4dc0ae6b58ffd1795c78991cbb5b8bc441c48a070440d" dependencies = [ "aws-lc-sys", "zeroize", @@ -368,9 +148,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.29.0" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61b1d86e7705efe1be1b569bab41d4fa1e14e220b60a160f78de2db687add079" +checksum = "107a4e9d9cab9963e04e84bb8dee0e25f2a987f9a8bad5ed054abd439caa8f8c" dependencies = [ "bindgen", "cc", @@ -379,75 +159,6 @@ dependencies = [ "fs_extra", ] -[[package]] -name = "axum" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5" -dependencies = [ - "axum-core", - "bytes", - "form_urlencoded", - "futures-util", - "http 1.3.1", - "http-body", - "http-body-util", - "hyper", - "hyper-util", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "serde_json", - "serde_path_to_error", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tower", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "axum-core" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6" -dependencies = [ - "bytes", - "futures-core", - "http 1.3.1", - "http-body", - "http-body-util", - "mime", - "pin-project-lite", - "rustversion", - "sync_wrapper", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "backtrace" -version = "0.3.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets 0.52.6", -] - [[package]] name = "base64" version = "0.22.1" @@ -456,16 +167,14 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bindgen" -version = "0.69.5" +version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" +checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ "bitflags", "cexpr", "clang-sys", "itertools", - "lazy_static", - "lazycell", "log", "prettyplease", "proc-macro2", @@ -474,84 +183,32 @@ dependencies = [ "rustc-hash", "shlex", "syn", - "which", ] [[package]] name = "bitflags" -version = "2.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" - -[[package]] -name = "block-buffer" -version = "0.10.4" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "blocking" -version = "1.6.1" +version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" dependencies = [ - "async-channel 2.3.1", + "async-channel 2.5.0", "async-task", "futures-io", "futures-lite", "piper", ] -[[package]] -name = "brotli" -version = "8.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", - "brotli-decompressor", -] - -[[package]] -name = "brotli-decompressor" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" -dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -] - -[[package]] -name = "btoi" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd6407f73a9b8b6162d8a2ef999fe6afd7cc15902ebf42c5cd296addf17e0ad" -dependencies = [ - "num-traits", -] - -[[package]] -name = "bufstream" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40e38929add23cdf8a366df9b0e088953150724bcbe5fc330b0d8eb3b328eec8" - [[package]] name = "bumpalo" -version = "3.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee" - -[[package]] -name = "byteorder" -version = "1.5.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bytes" @@ -559,21 +216,13 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" -[[package]] -name = "bytestring" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e465647ae23b2823b0753f50decb2d5a86d2bb2cac04788fafd1f80e45378e5f" -dependencies = [ - "bytes", -] - [[package]] name = "cc" -version = "1.2.27" +version = "1.2.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc" +checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" dependencies = [ + "find-msvc-tools", "jobserver", "libc", "shlex", @@ -590,15 +239,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" - -[[package]] -name = "cfg_aliases" -version = "0.2.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "clang-sys" @@ -629,17 +272,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "cookie" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" -dependencies = [ - "percent-encoding", - "time", - "version_check", -] - [[package]] name = "core-foundation" version = "0.9.4" @@ -657,139 +289,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] -name = "cpufeatures" -version = "0.2.17" +name = "crossbeam-utils" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] -name = "crc32fast" -version = "1.4.2" +name = "displaydoc" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-queue" -version = "0.3.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "darling" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" -dependencies = [ - "darling_core", - "quote", - "syn", -] - -[[package]] -name = "deranged" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" -dependencies = [ - "powerfmt", -] - -[[package]] -name = "derive_more" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" -dependencies = [ - "derive_more-impl", -] - -[[package]] -name = "derive_more-impl" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "unicode-xid", -] - -[[package]] -name = "derive_utils" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccfae181bab5ab6c5478b2ccb69e4c68a02f8c3ec72f6616bfec9dbc599d2ee0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", @@ -825,12 +334,12 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.12" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -841,9 +350,9 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "event-listener" -version = "5.4.0" +version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" dependencies = [ "concurrent-queue", "parking", @@ -856,7 +365,7 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ - "event-listener 5.4.0", + "event-listener 5.4.1", "pin-project-lite", ] @@ -867,15 +376,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] -name = "flate2" -version = "1.1.2" +name = "find-msvc-tools" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" -dependencies = [ - "crc32fast", - "libz-sys", - "miniz_oxide", -] +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" [[package]] name = "fnv" @@ -883,12 +387,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "foreign-types" version = "0.3.2" @@ -906,9 +404,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] @@ -969,9 +467,9 @@ checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" dependencies = [ "fastrand", "futures-core", @@ -1032,16 +530,6 @@ dependencies = [ "slab", ] -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - [[package]] name = "getrandom" version = "0.2.16" @@ -1050,32 +538,26 @@ checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasip2", ] -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - [[package]] name = "glob" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "gloo-timers" @@ -1091,35 +573,16 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.26" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "h2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9421a676d1b147b16b82c9225157dc629087ef8ec4d5e2960f9437a90dac0a5" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" dependencies = [ "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "http 1.3.1", + "http", "indexmap", "slab", "tokio", @@ -1129,44 +592,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", -] - -[[package]] -name = "headers" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" -dependencies = [ - "base64", - "bytes", - "headers-core", - "http 1.3.1", - "httpdate", - "mime", - "sha1", -] - -[[package]] -name = "headers-core" -version = "0.3.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" -dependencies = [ - "http 1.3.1", -] - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" [[package]] name = "hermit-abi" @@ -1174,26 +602,6 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" -[[package]] -name = "home" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - [[package]] name = "http" version = "1.3.1" @@ -1212,7 +620,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.3.1", + "http", ] [[package]] @@ -1223,7 +631,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http 1.3.1", + "http", "http-body", "pin-project-lite", ] @@ -1242,20 +650,22 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" dependencies = [ + "atomic-waker", "bytes", "futures-channel", - "futures-util", - "h2 0.4.10", - "http 1.3.1", + "futures-core", + "h2", + "http", "http-body", "httparse", "httpdate", "itoa", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", @@ -1267,7 +677,7 @@ version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "http 1.3.1", + "http", "hyper", "hyper-util", "rustls", @@ -1295,16 +705,16 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.14" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc2fdfdbff08affe55bb779f33b053aa1fe5dd5b54c257343c17edfa55711bdb" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" dependencies = [ "base64", "bytes", "futures-channel", "futures-core", "futures-util", - "http 1.3.1", + "http", "http-body", "hyper", "ipnet", @@ -1405,17 +815,11 @@ dependencies = [ "zerovec", ] -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -1432,31 +836,16 @@ dependencies = [ "icu_properties", ] -[[package]] -name = "impl-more" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a5a9a0ff0086c7a148acb942baaabeadf9504d10400b5a05645853729b9cd2" - [[package]] name = "indexmap" -version = "2.9.0" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" dependencies = [ "equivalent", "hashbrown", ] -[[package]] -name = "io-enum" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d197db2f7ebf90507296df3aebaf65d69f5dce8559d8dbd82776a6cadab61bbf" -dependencies = [ - "derive_utils", -] - [[package]] name = "ipnet" version = "2.11.0" @@ -1475,9 +864,9 @@ dependencies = [ [[package]] name = "itertools" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ "either", ] @@ -1490,33 +879,24 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jobserver" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "libc", ] [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" dependencies = [ "once_cell", "wasm-bindgen", ] -[[package]] -name = "keyed_priority_queue" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee7893dab2e44ae5f9d0173f26ff4aa327c10b01b06a72b52dd9405b628640d" -dependencies = [ - "indexmap", -] - [[package]] name = "kv-log-macro" version = "1.0.7" @@ -1526,62 +906,27 @@ dependencies = [ "log", ] -[[package]] -name = "language-tags" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - [[package]] name = "libc" -version = "0.2.173" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8cfeafaffdbc32176b64fb251369d52ea9f0a8fbc6f8759edffef7b525d64bb" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libloading" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-targets 0.53.2", -] - -[[package]] -name = "libz-sys" -version = "1.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" -dependencies = [ - "cc", - "pkg-config", - "vcpkg", + "windows-link 0.2.1", ] [[package]] name = "linux-raw-sys" -version = "0.4.15" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - -[[package]] -name = "linux-raw-sys" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" @@ -1589,68 +934,29 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" -[[package]] -name = "local-channel" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8" -dependencies = [ - "futures-core", - "futures-sink", - "local-waker", -] - -[[package]] -name = "local-waker" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487" - [[package]] name = "lock_api" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" dependencies = [ "value-bag", ] -[[package]] -name = "lru" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" - -[[package]] -name = "lru" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f8cc7106155f10bdf99a6f379688f543ad6596a415375b36a59a054ceda1198" -dependencies = [ - "hashbrown", -] - -[[package]] -name = "matchit" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" - [[package]] name = "memchr" -version = "2.7.5" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "mime" @@ -1658,146 +964,21 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "mime_guess" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" -dependencies = [ - "mime", - "unicase", -] - [[package]] name = "minimal-lexical" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" -[[package]] -name = "miniz_oxide" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" -dependencies = [ - "adler2", -] - [[package]] name = "mio" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" -dependencies = [ - "libc", - "log", - "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", -] - -[[package]] -name = "mysql" -version = "26.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce2510a735f601bab18202b07ea0a197bd1d130d3a5ce2edf4577d225f0c3ee4" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" dependencies = [ - "bufstream", - "bytes", - "crossbeam-queue", - "crossbeam-utils", - "flate2", - "io-enum", "libc", - "lru 0.12.5", - "mysql_common", - "named_pipe", - "pem", - "percent-encoding", - "socket2", - "twox-hash", - "url", -] - -[[package]] -name = "mysql-common-derive" -version = "0.32.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66f62cad7623a9cb6f8f64037f0c4f69c8db8e82914334a83c9788201c2c1bfa" -dependencies = [ - "darling", - "heck", - "num-bigint", - "proc-macro-crate", - "proc-macro-error2", - "proc-macro2", - "quote", - "syn", - "termcolor", - "thiserror", -] - -[[package]] -name = "mysql_async" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "277ce2f2459b2af4cc6d0a0b7892381f80800832f57c533f03e2845f4ea331ea" -dependencies = [ - "bytes", - "crossbeam-queue", - "flate2", - "futures-core", - "futures-sink", - "futures-util", - "keyed_priority_queue", - "lru 0.14.0", - "mysql_common", - "pem", - "percent-encoding", - "rand", - "serde", - "serde_json", - "socket2", - "thiserror", - "tokio", - "tokio-util", - "twox-hash", - "url", -] - -[[package]] -name = "mysql_common" -version = "0.35.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbb9f371618ce723f095c61fbcdc36e8936956d2b62832f9c7648689b338e052" -dependencies = [ - "base64", - "bitflags", - "btoi", - "byteorder", - "bytes", - "crc32fast", - "flate2", - "getrandom 0.3.3", - "mysql-common-derive", - "num-bigint", - "num-traits", - "regex", - "saturating", - "serde", - "serde_json", - "sha1", - "sha2", - "thiserror", - "uuid", -] - -[[package]] -name = "named_pipe" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad9c443cce91fc3e12f017290db75dde490d685cdaaf508d7159d7cf41f0eb2b" -dependencies = [ - "winapi", + "wasi", + "windows-sys 0.61.2", ] [[package]] @@ -1817,18 +998,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "nix" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" -dependencies = [ - "bitflags", - "cfg-if", - "cfg_aliases", - "libc", -] - [[package]] name = "nom" version = "7.1.3" @@ -1839,49 +1008,6 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", -] - -[[package]] -name = "object" -version = "0.36.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" -dependencies = [ - "memchr", -] - [[package]] name = "once_cell" version = "1.21.3" @@ -1890,9 +1016,9 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "openssl" -version = "0.10.73" +version = "0.10.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" +checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" dependencies = [ "bitflags", "cfg-if", @@ -1922,9 +1048,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.109" +version = "0.9.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" dependencies = [ "cc", "libc", @@ -1940,9 +1066,9 @@ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", @@ -1950,52 +1076,22 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.6", -] - -[[package]] -name = "pem" -version = "3.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" -dependencies = [ - "base64", - "serde_core", + "windows-link 0.2.1", ] [[package]] name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "pin-project" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.10" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pin-project-lite" @@ -2026,198 +1122,77 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" -[[package]] -name = "poem" -version = "3.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ea63e9302279b1ca262d15342760f8d08f04fb974d4997e8baed7d034b94121" -dependencies = [ - "bytes", - "futures-util", - "headers", - "http 1.3.1", - "http-body-util", - "hyper", - "hyper-util", - "mime", - "nix", - "parking_lot", - "percent-encoding", - "pin-project-lite", - "poem-derive", - "regex", - "rfc7239", - "serde", - "serde_json", - "serde_urlencoded", - "smallvec", - "sync_wrapper", - "thiserror", - "tokio", - "tokio-util", - "tracing", - "wildmatch", -] - -[[package]] -name = "poem-derive" -version = "3.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824e7fe35343b7fe354e5d4ac444ddbe674676ebba4b4e48565835661033d338" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "polling" -version = "3.8.0" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b53a684391ad002dd6a596ceb6c74fd004fdce75f4be2e3f615068abbea5fd50" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" dependencies = [ "cfg-if", "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 1.0.7", - "tracing", - "windows-sys 0.59.0", + "rustix", + "windows-sys 0.61.2", ] [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" dependencies = [ "zerovec", ] -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - [[package]] name = "prettyplease" -version = "0.2.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6837b9e10d61f45f987d50808f83d1ee3d206c66acf650c3e4ae2e1f6ddedf55" -dependencies = [ - "proc-macro2", - "syn", -] - -[[package]] -name = "proc-macro-crate" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" -dependencies = [ - "toml_edit", -] - -[[package]] -name = "proc-macro-error-attr2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" -dependencies = [ - "proc-macro2", - "quote", -] - -[[package]] -name = "proc-macro-error2" -version = "2.0.1" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ - "proc-macro-error-attr2", "proc-macro2", - "quote", "syn", ] [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] [[package]] name = "r-efi" -version = "5.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" - -[[package]] -name = "rand" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" -dependencies = [ - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" -dependencies = [ - "getrandom 0.3.3", -] +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "redox_syscall" -version = "0.5.13" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ "bitflags", ] [[package]] name = "regex" -version = "1.11.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", @@ -2227,32 +1202,26 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", "regex-syntax", ] -[[package]] -name = "regex-lite" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" - [[package]] name = "regex-syntax" -version = "0.8.5" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "reqwest" -version = "0.12.20" +version = "0.12.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabf4c97d9130e2bf606614eb937e86edac8292eaa6f422f995d7e8de1eb1813" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" dependencies = [ "base64", "bytes", @@ -2260,8 +1229,8 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.4.10", - "http 1.3.1", + "h2", + "http", "http-body", "http-body-util", "hyper", @@ -2290,15 +1259,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "rfc7239" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a82f1d1e38e9a85bb58ffcfadf22ed6f2c94e8cd8581ec2b0f80a2a6858350f" -dependencies = [ - "uncased", -] - [[package]] name = "ring" version = "0.17.14" @@ -2313,49 +1273,30 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "rustc-demangle" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" - [[package]] name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustix" -version = "0.38.44" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys 0.59.0", -] +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustix" -version = "1.0.7" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ "bitflags", "errno", "libc", - "linux-raw-sys 0.9.4", - "windows-sys 0.59.0", + "linux-raw-sys", + "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.27" +version = "0.23.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "730944ca083c1c233a75c09f199e973ca499344a2b7ba9e755c457e86fb4a321" +checksum = "751e04a496ca00bb97a5e043158d23d66b5aabf2e1d5aa2a0aaebb1aafe6f82c" dependencies = [ "aws-lc-rs", "log", @@ -2377,9 +1318,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.3" +version = "0.103.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" +checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" dependencies = [ "aws-lc-rs", "ring", @@ -2389,9 +1330,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" @@ -2399,27 +1340,15 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" -[[package]] -name = "saturating" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece8e78b2f38ec51c51f5d475df0a7187ba5111b2a28bdc761ee05b075d40a71" - [[package]] name = "schannel" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - [[package]] name = "scopeguard" version = "1.2.0" @@ -2441,9 +1370,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.14.0" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ "core-foundation-sys", "libc", @@ -2481,24 +1410,15 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "itoa", "memchr", "ryu", "serde", -] - -[[package]] -name = "serde_path_to_error" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" -dependencies = [ - "itoa", - "serde", + "serde_core", ] [[package]] @@ -2513,28 +1433,6 @@ dependencies = [ "serde", ] -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - [[package]] name = "shlex" version = "1.3.0" @@ -2543,18 +1441,18 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.5" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ "libc", ] [[package]] name = "slab" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "smallvec" @@ -2564,25 +1462,19 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" -version = "0.5.10" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.60.2", ] [[package]] name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "strsim" -version = "0.11.1" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "subtle" @@ -2592,9 +1484,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.103" +version = "2.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4307e30089d6fd6aff212f2da3a1f9e32f3223b1f010fb09b7c95f90f3ca1e8" +checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" dependencies = [ "proc-macro2", "quote", @@ -2644,100 +1536,31 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.20.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", - "rustix 1.0.7", - "windows-sys 0.59.0", -] - -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", + "rustix", + "windows-sys 0.61.2", ] [[package]] name = "test" version = "0.0.1" dependencies = [ - "actix-web", "async-std", - "axum", - "bytes", "futures", "futures-rustls", - "http 1.3.1", + "http", "http-body-util", "hyper", "hyper-util", - "mysql", - "mysql_async", - "poem", "reqwest", "rustls", - "serde", - "serde_json", "tokio", - "warp", -] - -[[package]] -name = "thiserror" -version = "2.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "time" -version = "0.3.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" -dependencies = [ - "deranged", - "itoa", - "num-conv", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" - -[[package]] -name = "time-macros" -version = "0.2.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" -dependencies = [ - "num-conv", - "time-core", ] [[package]] @@ -2752,11 +1575,10 @@ dependencies = [ [[package]] name = "tokio" -version = "1.45.1" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ - "backtrace", "bytes", "libc", "mio", @@ -2765,14 +1587,14 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", @@ -2791,9 +1613,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ "rustls", "tokio", @@ -2801,9 +1623,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.15" +version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" dependencies = [ "bytes", "futures-core", @@ -2812,23 +1634,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "toml_datetime" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" - -[[package]] -name = "toml_edit" -version = "0.22.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow", -] - [[package]] name = "tower" version = "0.5.2" @@ -2842,7 +1647,6 @@ dependencies = [ "tokio", "tower-layer", "tower-service", - "tracing", ] [[package]] @@ -2854,7 +1658,7 @@ dependencies = [ "bitflags", "bytes", "futures-util", - "http 1.3.1", + "http", "http-body", "iri-string", "pin-project-lite", @@ -2881,23 +1685,10 @@ version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ - "log", "pin-project-lite", - "tracing-attributes", "tracing-core", ] -[[package]] -name = "tracing-attributes" -version = "0.1.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1ffbcf9c6f6b99d386e7444eb608ba646ae452a36b39737deb9663b610f662" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "tracing-core" version = "0.1.34" @@ -2913,44 +1704,11 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" -[[package]] -name = "twox-hash" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" - -[[package]] -name = "typenum" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" - -[[package]] -name = "uncased" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" -dependencies = [ - "version_check", -] - -[[package]] -name = "unicase" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" - [[package]] name = "unicode-ident" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" - -[[package]] -name = "unicode-xid" -version = "0.2.6" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" [[package]] name = "untrusted" @@ -2960,13 +1718,14 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", "percent-encoding", + "serde", ] [[package]] @@ -2975,16 +1734,6 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" -[[package]] -name = "uuid" -version = "1.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - [[package]] name = "value-bag" version = "1.11.1" @@ -2997,12 +1746,6 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - [[package]] name = "want" version = "0.3.1" @@ -3012,35 +1755,6 @@ dependencies = [ "try-lock", ] -[[package]] -name = "warp" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d06d9202adc1f15d709c4f4a2069be5428aa912cc025d6f268ac441ab066b0" -dependencies = [ - "bytes", - "futures-util", - "headers", - "http 1.3.1", - "http-body", - "http-body-util", - "hyper", - "hyper-util", - "log", - "mime", - "mime_guess", - "percent-encoding", - "pin-project", - "scoped-tls", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-util", - "tower-service", - "tracing", -] - [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" @@ -3048,31 +1762,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" dependencies = [ "bumpalo", "log", @@ -3084,9 +1799,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.50" +version = "0.4.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" dependencies = [ "cfg-if", "js-sys", @@ -3097,9 +1812,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3107,9 +1822,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", @@ -3120,85 +1835,42 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" dependencies = [ "js-sys", "wasm-bindgen", ] [[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix 0.38.44", -] - -[[package]] -name = "wildmatch" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ce1ab1f8c62655ebe1350f589c61e505cf94d385bc6a12899442d9081e71fd" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" +name = "windows-link" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] name = "windows-link" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-registry" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3bab093bdd303a1240bb99b8aba8ea8a69ee19d34c9e2ef9594e708a4878820" +checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" dependencies = [ - "windows-link", + "windows-link 0.1.3", "windows-result", "windows-strings", ] @@ -3209,7 +1881,7 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -3218,7 +1890,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "windows-link", + "windows-link 0.1.3", ] [[package]] @@ -3232,11 +1904,20 @@ dependencies = [ [[package]] name = "windows-sys" -version = "0.59.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.52.6", + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", ] [[package]] @@ -3257,18 +1938,19 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.2" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] @@ -3279,9 +1961,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" @@ -3291,9 +1973,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" @@ -3303,9 +1985,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" @@ -3315,9 +1997,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" @@ -3327,9 +2009,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" @@ -3339,9 +2021,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" @@ -3351,9 +2033,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" @@ -3363,27 +2045,15 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] -name = "winnow" -version = "0.7.11" +name = "wit-bindgen" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" -dependencies = [ - "memchr", -] - -[[package]] -name = "wit-bindgen-rt" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags", -] +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "writeable" @@ -3415,26 +2085,6 @@ dependencies = [ "synstructure", ] -[[package]] -name = "zerocopy" -version = "0.8.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "zerofrom" version = "0.1.6" @@ -3458,9 +2108,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" [[package]] name = "zerotrie" @@ -3475,9 +2125,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ "yoke", "zerofrom", @@ -3494,31 +2144,3 @@ dependencies = [ "quote", "syn", ] - -[[package]] -name = "zstd" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "7.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" -dependencies = [ - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.15+zstd.1.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" -dependencies = [ - "cc", - "pkg-config", -] diff --git a/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.expected new file mode 100644 index 000000000000..adeaf8225fec --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.expected @@ -0,0 +1,609 @@ +models +| 1 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | +| 2 | Source: ::send_request; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | +| 3 | Source: ::connect; ReturnValue.Field[core::result::Result::Ok(0)]; remote | +| 4 | Source: ::connect_timeout; ReturnValue.Field[core::result::Result::Ok(0)]; remote | +| 5 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | +| 6 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote | +| 7 | Source: reqwest::get; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote | +| 8 | Summary: <_ as futures_io::if_std::AsyncBufRead>::poll_fill_buf; Argument[self].Reference; ReturnValue.Field[core::task::poll::Poll::Ready(0)].Field[core::result::Result::Ok(0)]; taint | +| 9 | Summary: <_ as futures_util::io::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 10 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self].Reference; Argument[0].Reference; taint | +| 11 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint | +| 12 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self].Reference; Argument[1].Reference; taint | +| 13 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint | +| 14 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint | +| 15 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | +| 16 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint | +| 17 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 18 | Summary: <_ as std::io::BufRead>::read_line; Argument[self]; Argument[0].Reference; taint | +| 19 | Summary: <_ as std::io::Read>::read; Argument[self]; Argument[0].Reference; taint | +| 20 | Summary: <_ as std::io::Read>::take; Argument[self]; ReturnValue; taint | +| 21 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | +| 22 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 23 | Summary: ::new; Argument[0].Reference; ReturnValue; value | +| 24 | Summary: ::new; Argument[0]; ReturnValue; value | +| 25 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 26 | Summary: ::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 27 | Summary: ::poll_read; Argument[self].Reference; Argument[1].Reference; taint | +| 28 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 29 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 30 | Summary: ::chunk; Argument[self]; 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: ::new; Argument[0]; ReturnValue; taint | +| 36 | Summary: ::read; Argument[self]; Argument[0].Reference; taint | +| 37 | Summary: ::peek; Argument[self]; Argument[0].Reference; taint | +| 38 | Summary: ::try_read; Argument[self]; Argument[0].Reference; taint | +| 39 | Summary: ::try_read_buf; Argument[self]; Argument[0].Reference; taint | +edges +| test.rs:11:9:11:22 | remote_string1 | test.rs:12:10:12:23 | remote_string1 | provenance | | +| test.rs:11:26:11:47 | ...::get | test.rs:11:26:11:62 | ...::get(...) [Ok] | provenance | Src:MaD:6 | +| 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: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:47 | ...::get | test.rs:14:26:14:62 | ...::get(...) [Ok] | provenance | Src:MaD:6 | +| test.rs:14:26:14:62 | ...::get(...) [Ok] | test.rs:14:26:14:71 | ... .unwrap() | provenance | MaD:25 | +| 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:25 | +| 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:47 | ...::get | test.rs:17:26:17:62 | ...::get(...) [Ok] | provenance | Src:MaD:6 | +| test.rs:17:26:17:62 | ...::get(...) [Ok] | test.rs:17:26:17:71 | ... .unwrap() | provenance | MaD:25 | +| 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:25 | +| 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:47 | ...::get | test.rs:20:26:20:62 | ...::get(...) [Ok] | provenance | Src:MaD:6 | +| test.rs:20:26:20:62 | ...::get(...) [Ok] | test.rs:20:26:20:71 | ... .unwrap() | provenance | MaD:25 | +| 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:25 | +| 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:37 | ...::get | test.rs:23:26:23:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:7 | +| 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: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 | | +| test.rs:26:9:26:22 | remote_string6 | test.rs:27:10:27:23 | remote_string6 | provenance | | +| test.rs:26:26:26:37 | ...::get | test.rs:26:26:26:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:7 | +| 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: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 | | +| test.rs:29:9:29:20 | mut request1 | test.rs:30:10:30:25 | request1.chunk() [future, Ok, Some] | provenance | MaD:30 | +| test.rs:29:9:29:20 | mut request1 | test.rs:31:29:31:44 | request1.chunk() [future, Ok, Some] | provenance | MaD:30 | +| test.rs:29:24:29:35 | ...::get | test.rs:29:24:29:50 | ...::get(...) [future, Ok] | provenance | Src:MaD:7 | +| 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: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:22 | +| 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: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 | | +| test.rs:60:13:60:20 | response | test.rs:61:15:61:22 | response | provenance | | +| test.rs:60:13:60:20 | response | test.rs:62:14:62:21 | response | provenance | | +| test.rs:60:24:60:51 | sender.send_request(...) [future, Ok] | test.rs:60:24:60:57 | await ... [Ok] | provenance | | +| test.rs:60:24:60:57 | await ... [Ok] | test.rs:60:24:60:58 | TryExpr | provenance | | +| test.rs:60:24:60:58 | TryExpr | test.rs:60:13:60:20 | response | provenance | | +| test.rs:60:31:60:42 | send_request | test.rs:60:24:60:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:2 | +| test.rs:61:15:61:22 | response | test.rs:61:14:61:22 | &response | provenance | | +| test.rs:67:9:67:20 | mut response | test.rs:68:11:68:18 | response | provenance | | +| test.rs:67:24:67:51 | sender.send_request(...) [future, Ok] | test.rs:67:24:67:57 | await ... [Ok] | provenance | | +| 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:67:31:67:42 | send_request | test.rs:67:24:67:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:2 | +| test.rs:68:11:68:18 | response | test.rs:68:10:68:18 | &response | provenance | | +| test.rs:155:13:155:22 | mut stream | test.rs:162:29:162:39 | [post] &mut buffer [&ref] | provenance | MaD:19 | +| test.rs:155:13:155:22 | mut stream | test.rs:162:29:162:39 | [post] &mut buffer [&ref] | provenance | MaD:36 | +| test.rs:155:26:155:53 | ...::connect | test.rs:155:26:155:62 | ...::connect(...) [Ok] | provenance | Src:MaD:3 | +| 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: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:22 | buffer[0] | provenance | | +| test.rs:165:15:165:20 | buffer | test.rs:165:14:165:20 | &buffer | provenance | | +| test.rs:174:13:174:22 | mut stream | test.rs:182:58:182:63 | stream | provenance | | +| test.rs:174:26:174:61 | ...::connect_timeout | test.rs:174:26:174:105 | ...::connect_timeout(...) [Ok] | provenance | Src:MaD:4 | +| 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:44:185:52 | [post] &mut line [&ref] | provenance | MaD:18 | +| test.rs:182:34:182:64 | ...::new(...) | test.rs:182:34:182:74 | ... .take(...) | provenance | MaD:20 | +| 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:35 | +| 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:224:9:224:24 | mut tokio_stream | test.rs:232:35:232:46 | [post] &mut buffer1 [&ref] | provenance | MaD:37 | +| test.rs:224:9:224:24 | mut tokio_stream | test.rs:236:36:236:47 | [post] &mut buffer2 [&ref] | provenance | MaD:21 | +| test.rs:224:9:224:24 | mut tokio_stream | test.rs:252:41:252:51 | [post] &mut buffer [&ref] | provenance | MaD:38 | +| test.rs:224:9:224:24 | mut tokio_stream | test.rs:275:45:275:55 | [post] &mut buffer [&ref] | provenance | MaD:39 | +| test.rs:224:28:224:57 | ...::connect | test.rs:224:28:224:66 | ...::connect(...) [future, Ok] | provenance | Src:MaD:5 | +| 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: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:23 | buffer1[0] | provenance | | +| 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:23 | buffer2[0] | provenance | | +| test.rs:239:15:239:21 | buffer1 | test.rs:239:14:239:21 | &buffer1 | provenance | | +| test.rs:243:15:243:21 | buffer2 | test.rs:243:14:243:21 | &buffer2 | provenance | | +| 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: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 | | +| 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:36 | ...::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:403:43:403:54 | [post] &mut buffer2 [&ref] | provenance | MaD:14 | +| test.rs:380:13:380:22 | mut reader | test.rs:403:43:403:54 | [post] &mut buffer2 [&ref] | provenance | MaD:15 | +| 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:26 | +| 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:56:389:66 | [post] &mut buffer [&ref] | provenance | MaD:27 | +| test.rs:386:17:386:26 | mut pinned [&ref] | test.rs:387:19:387:24 | pinned [&ref] | provenance | | +| test.rs:386:17:386:26 | mut pinned [&ref] | test.rs:389:56:389:66 | [post] &mut buffer [&ref] | provenance | MaD:27 | +| test.rs:386:30:386:50 | ...::new(...) | test.rs:386:17:386:26 | mut pinned | provenance | | +| test.rs:386:30:386:50 | ...::new(...) [&ref] | test.rs:386:17:386:26 | mut pinned [&ref] | provenance | | +| test.rs:386:39:386:49 | &mut reader [&ref] | test.rs:386:30:386:50 | ...::new(...) | provenance | MaD:23 | +| test.rs:386:39:386:49 | &mut reader [&ref] | test.rs:386:30:386:50 | ...::new(...) [&ref] | provenance | MaD:24 | +| test.rs:386:44:386:49 | reader | test.rs:386:39:386:49 | &mut reader [&ref] | provenance | | +| test.rs:387:19:387:24 | pinned | test.rs:387:18:387:24 | &pinned | provenance | | +| test.rs:387:19:387:24 | pinned [&ref] | test.rs:387:18:387:24 | &pinned | provenance | | +| test.rs:389:56:389:66 | [post] &mut buffer [&ref] | test.rs:389:61:389:66 | [post] buffer | provenance | | +| test.rs:389:61:389:66 | [post] buffer | test.rs:391:23:391:28 | buffer | provenance | | +| test.rs:389:61:389:66 | [post] buffer | test.rs:392:23:392:33 | buffer[...] | provenance | | +| test.rs:391:23:391:28 | buffer | test.rs:391:22:391:28 | &buffer | provenance | | +| 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:14 | +| 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:40 | buffer1[...] | provenance | | +| 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:14 | +| 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:40 | buffer2[...] | provenance | | +| 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:43 | reader2.fill_buf() [future, Ok] | provenance | MaD:9 | +| 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:461:44:461:55 | [post] &mut buffer2 [&ref] | provenance | MaD:14 | +| test.rs:408:13:408:23 | mut reader2 | test.rs:461:44:461:55 | [post] &mut buffer2 [&ref] | provenance | MaD:15 | +| 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:43 | reader2.fill_buf() [future, Ok] | provenance | MaD:9 | +| 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:486:57:486:65 | [post] &mut line [&ref] | provenance | MaD:12 | +| test.rs:408:13:408:23 | mut reader2 | test.rs:486:57:486:65 | [post] &mut line [&ref] | provenance | MaD:13 | +| 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:493:49:493:57 | [post] &mut line [&ref] | provenance | MaD:10 | +| test.rs:408:13:408:23 | mut reader2 | test.rs:493:49:493:57 | [post] &mut line [&ref] | provenance | MaD:11 | +| test.rs:408:13:408:23 | mut reader2 | test.rs:500:31:500:37 | reader2 | provenance | | +| test.rs:408:13:408:23 | mut reader2 | test.rs:500:51:500:61 | [post] &mut buffer [&ref] | provenance | MaD:16 | +| test.rs:408:13:408:23 | mut reader2 | test.rs:500:51:500:61 | [post] &mut buffer [&ref] | provenance | MaD:17 | +| 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:28 | +| 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:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:8 | +| test.rs:413:17:413:26 | mut pinned [&ref] | test.rs:414:19:414:24 | pinned [&ref] | provenance | | +| test.rs:413:17:413:26 | mut pinned [&ref] | test.rs:416:26:416:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:8 | +| test.rs:413:30:413:51 | ...::new(...) | test.rs:413:17:413:26 | mut pinned | provenance | | +| test.rs:413:30:413:51 | ...::new(...) [&ref] | test.rs:413:17:413:26 | mut pinned [&ref] | provenance | | +| test.rs:413:39:413:50 | &mut reader2 [&ref] | test.rs:413:30:413:51 | ...::new(...) | provenance | MaD:23 | +| test.rs:413:39:413:50 | &mut reader2 [&ref] | test.rs:413:30:413:51 | ...::new(...) [&ref] | provenance | MaD:24 | +| test.rs:413:44:413:50 | reader2 | test.rs:413:39:413:50 | &mut reader2 [&ref] | provenance | | +| test.rs:414:19:414:24 | pinned | test.rs:414:18:414:24 | &pinned | provenance | | +| test.rs:414:19:414:24 | pinned [&ref] | test.rs:414:18:414:24 | &pinned | provenance | | +| test.rs: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: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:8 | +| test.rs:423:27:423:48 | ...::new(...) [&ref] | test.rs:423:27:423:71 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:8 | +| test.rs:423:27:423:71 | ... .poll_fill_buf(...) [Ready, Ok] | test.rs:423:17:423:23 | buffer2 [Ready, Ok] | provenance | | +| test.rs:423:36:423:47 | &mut reader2 [&ref] | test.rs:423:27:423:48 | ...::new(...) | provenance | MaD:23 | +| test.rs:423:36:423:47 | &mut reader2 [&ref] | test.rs:423:27:423:48 | ...::new(...) [&ref] | provenance | MaD:24 | +| 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: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 [&ref] | test.rs:445:19:445:24 | pinned [&ref] | provenance | | +| test.rs:444:30:444:51 | ...::new(...) | test.rs:444:17:444:26 | mut pinned | provenance | | +| test.rs:444:30:444:51 | ...::new(...) [&ref] | test.rs:444:17:444:26 | mut pinned [&ref] | provenance | | +| test.rs:444:39:444:50 | &mut reader2 [&ref] | test.rs:444:30:444:51 | ...::new(...) | provenance | MaD:23 | +| test.rs:444:39:444:50 | &mut reader2 [&ref] | test.rs:444:30:444:51 | ...::new(...) [&ref] | provenance | MaD:24 | +| test.rs:444:44:444:50 | reader2 | test.rs:444:39:444:50 | &mut reader2 [&ref] | provenance | | +| test.rs:445:19:445:24 | pinned | test.rs:445:18:445:24 | &pinned | provenance | | +| test.rs:445:19:445:24 | pinned [&ref] | test.rs:445:18:445:24 | &pinned | provenance | | +| test.rs:457:63:457:74 | &mut reader2 [&ref] | test.rs:457:77:457:88 | [post] &mut buffer1 [&ref] | provenance | MaD:14 | +| 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:40 | buffer1[...] | provenance | | +| 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:14 | +| 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:40 | buffer2[...] | provenance | | +| 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:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:8 | +| test.rs:467:17:467:26 | mut pinned [&ref] | test.rs:468:19:468:24 | pinned [&ref] | provenance | | +| test.rs:467:17:467:26 | mut pinned [&ref] | test.rs:470:26:470:54 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:8 | +| test.rs:467:30:467:51 | ...::new(...) | test.rs:467:17:467:26 | mut pinned | provenance | | +| test.rs:467:30:467:51 | ...::new(...) [&ref] | test.rs:467:17:467:26 | mut pinned [&ref] | provenance | | +| test.rs:467:39:467:50 | &mut reader2 [&ref] | test.rs:467:30:467:51 | ...::new(...) | provenance | MaD:23 | +| test.rs:467:39:467:50 | &mut reader2 [&ref] | test.rs:467:30:467:51 | ...::new(...) [&ref] | provenance | MaD:24 | +| test.rs:467:44:467:50 | reader2 | test.rs:467:39:467:50 | &mut reader2 [&ref] | provenance | | +| test.rs:468:19:468:24 | pinned | test.rs:468:18:468:24 | &pinned | provenance | | +| test.rs:468:19:468:24 | pinned [&ref] | test.rs:468:18:468:24 | &pinned | provenance | | +| test.rs: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: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: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:12 | +| 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:10 | +| 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:16 | +| 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 | | +nodes +| test.rs:11:9:11:22 | remote_string1 | semmle.label | remote_string1 | +| test.rs:11:26:11:47 | ...::get | semmle.label | ...::get | +| test.rs:11:26:11:62 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | +| test.rs:11:26:11:63 | TryExpr | semmle.label | TryExpr | +| test.rs:11:26:11:70 | ... .text() [Ok] | semmle.label | ... .text() [Ok] | +| test.rs:11:26:11:71 | TryExpr | semmle.label | TryExpr | +| test.rs:12:10:12:23 | remote_string1 | semmle.label | remote_string1 | +| test.rs:14:9:14:22 | remote_string2 | semmle.label | remote_string2 | +| test.rs:14:26:14:47 | ...::get | semmle.label | ...::get | +| test.rs:14:26:14:62 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | +| test.rs:14:26:14:71 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:14:26:14:78 | ... .text() [Ok] | semmle.label | ... .text() [Ok] | +| test.rs:14:26:14:87 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:15:10:15:23 | remote_string2 | semmle.label | remote_string2 | +| test.rs:17:9:17:22 | remote_string3 | semmle.label | remote_string3 | +| test.rs:17:26:17:47 | ...::get | semmle.label | ...::get | +| test.rs:17:26:17:62 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | +| test.rs:17:26:17:71 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:17:26:17:98 | ... .text_with_charset(...) [Ok] | semmle.label | ... .text_with_charset(...) [Ok] | +| test.rs:17:26:17:107 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:18:10:18:23 | remote_string3 | semmle.label | remote_string3 | +| test.rs:20:9:20:22 | remote_string4 | semmle.label | remote_string4 | +| test.rs:20:26:20:47 | ...::get | semmle.label | ...::get | +| test.rs:20:26:20:62 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | +| test.rs:20:26:20:71 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:20:26:20:79 | ... .bytes() [Ok] | semmle.label | ... .bytes() [Ok] | +| test.rs:20:26:20:88 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:21:10:21:23 | remote_string4 | semmle.label | remote_string4 | +| test.rs:23:9:23:22 | remote_string5 | semmle.label | remote_string5 | +| test.rs:23:26:23:37 | ...::get | semmle.label | ...::get | +| test.rs:23:26:23:52 | ...::get(...) [future, Ok] | semmle.label | ...::get(...) [future, Ok] | +| test.rs:23:26:23:58 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:23:26:23:59 | TryExpr | semmle.label | TryExpr | +| test.rs:23:26:23:66 | ... .text() [future, Ok] | semmle.label | ... .text() [future, Ok] | +| test.rs:23:26:23:72 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:23:26:23:73 | TryExpr | semmle.label | TryExpr | +| test.rs:24:10:24:23 | remote_string5 | semmle.label | remote_string5 | +| test.rs:26:9:26:22 | remote_string6 | semmle.label | remote_string6 | +| test.rs:26:26:26:37 | ...::get | semmle.label | ...::get | +| test.rs:26:26:26:52 | ...::get(...) [future, Ok] | semmle.label | ...::get(...) [future, Ok] | +| test.rs:26:26:26:58 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:26:26:26:59 | TryExpr | semmle.label | TryExpr | +| test.rs:26:26:26:67 | ... .bytes() [future, Ok] | semmle.label | ... .bytes() [future, Ok] | +| test.rs:26:26:26:73 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:26:26:26:74 | TryExpr | semmle.label | TryExpr | +| test.rs:27:10:27:23 | remote_string6 | semmle.label | remote_string6 | +| test.rs:29:9:29:20 | mut request1 | semmle.label | mut request1 | +| test.rs:29:24:29:35 | ...::get | semmle.label | ...::get | +| test.rs:29:24:29:50 | ...::get(...) [future, Ok] | semmle.label | ...::get(...) [future, Ok] | +| test.rs:29:24:29:56 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:29:24:29:57 | TryExpr | semmle.label | TryExpr | +| test.rs:30:10:30:25 | request1.chunk() [future, Ok, Some] | semmle.label | request1.chunk() [future, Ok, Some] | +| test.rs:30:10:30:31 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | +| test.rs:30:10:30:32 | TryExpr [Some] | semmle.label | TryExpr [Some] | +| test.rs:30:10:30:41 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:31:15:31:25 | Some(...) [Some] | semmle.label | Some(...) [Some] | +| test.rs:31:20:31:24 | chunk | semmle.label | chunk | +| test.rs:31:29:31:44 | request1.chunk() [future, Ok, Some] | semmle.label | request1.chunk() [future, Ok, Some] | +| test.rs:31:29:31:50 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | +| test.rs:31:29:31:51 | TryExpr [Some] | semmle.label | TryExpr [Some] | +| test.rs:32:14:32:18 | chunk | semmle.label | chunk | +| test.rs:60:13:60:20 | response | semmle.label | response | +| test.rs:60:24:60:51 | sender.send_request(...) [future, Ok] | semmle.label | sender.send_request(...) [future, Ok] | +| test.rs:60:24:60:57 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:60:24:60:58 | TryExpr | semmle.label | TryExpr | +| test.rs:60:31:60:42 | send_request | semmle.label | send_request | +| test.rs:61:14:61:22 | &response | semmle.label | &response | +| test.rs:61:15:61:22 | response | semmle.label | response | +| test.rs:62:14:62:21 | response | semmle.label | response | +| test.rs:67:9:67:20 | mut response | semmle.label | mut response | +| test.rs:67:24:67:51 | sender.send_request(...) [future, Ok] | semmle.label | sender.send_request(...) [future, Ok] | +| test.rs:67:24:67:57 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:67:24:67:58 | TryExpr | semmle.label | TryExpr | +| test.rs:67:31:67:42 | send_request | semmle.label | send_request | +| test.rs:68:10:68:18 | &response | semmle.label | &response | +| test.rs:68:11:68:18 | response | semmle.label | response | +| test.rs:155:13:155:22 | mut stream | semmle.label | mut stream | +| test.rs:155:26:155:53 | ...::connect | semmle.label | ...::connect | +| test.rs:155:26:155:62 | ...::connect(...) [Ok] | semmle.label | ...::connect(...) [Ok] | +| test.rs:155:26:155:63 | TryExpr | semmle.label | TryExpr | +| test.rs:162:29:162:39 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:162:34:162:39 | [post] buffer | semmle.label | [post] buffer | +| test.rs:165:14:165:20 | &buffer | semmle.label | &buffer | +| test.rs:165:15:165:20 | buffer | semmle.label | buffer | +| test.rs:166:14:166:22 | buffer[0] | semmle.label | buffer[0] | +| test.rs:174:13:174:22 | mut stream | semmle.label | mut stream | +| test.rs:174:26:174:61 | ...::connect_timeout | semmle.label | ...::connect_timeout | +| test.rs:174:26:174:105 | ...::connect_timeout(...) [Ok] | semmle.label | ...::connect_timeout(...) [Ok] | +| test.rs:174:26:174:106 | TryExpr | semmle.label | TryExpr | +| test.rs:182:21:182:30 | mut reader | semmle.label | mut reader | +| test.rs:182:34:182:64 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:182:34:182:74 | ... .take(...) | semmle.label | ... .take(...) | +| test.rs:182:58:182:63 | stream | semmle.label | stream | +| test.rs:185:44:185:52 | [post] &mut line [&ref] | semmle.label | [post] &mut line [&ref] | +| test.rs:185:49:185:52 | [post] line | semmle.label | [post] line | +| test.rs:192:34:192:38 | &line | semmle.label | &line | +| test.rs:192:35:192:38 | line | semmle.label | line | +| test.rs:224:9:224:24 | mut tokio_stream | semmle.label | mut tokio_stream | +| test.rs:224:28:224:57 | ...::connect | semmle.label | ...::connect | +| test.rs:224:28:224:66 | ...::connect(...) [future, Ok] | semmle.label | ...::connect(...) [future, Ok] | +| test.rs:224:28:224:72 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:224:28:224:73 | TryExpr | semmle.label | TryExpr | +| test.rs:232:35:232:46 | [post] &mut buffer1 [&ref] | semmle.label | [post] &mut buffer1 [&ref] | +| test.rs:232:40:232:46 | [post] buffer1 | semmle.label | [post] buffer1 | +| test.rs:236:36:236:47 | [post] &mut buffer2 [&ref] | semmle.label | [post] &mut buffer2 [&ref] | +| test.rs:236:41:236:47 | [post] buffer2 | semmle.label | [post] buffer2 | +| test.rs:239:14:239:21 | &buffer1 | semmle.label | &buffer1 | +| test.rs:239:15:239:21 | buffer1 | semmle.label | buffer1 | +| test.rs:240:14:240:23 | buffer1[0] | semmle.label | buffer1[0] | +| test.rs:243:14:243:21 | &buffer2 | semmle.label | &buffer2 | +| test.rs:243:15:243:21 | buffer2 | semmle.label | buffer2 | +| test.rs:244:14:244:23 | buffer2[0] | semmle.label | buffer2[0] | +| test.rs:252:41:252:51 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:252:46:252:51 | [post] buffer | semmle.label | [post] buffer | +| test.rs:259:26:259:32 | &buffer | semmle.label | &buffer | +| test.rs:259:27:259:32 | buffer | semmle.label | buffer | +| test.rs:275:45:275:55 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:275:50:275:55 | [post] buffer | semmle.label | [post] buffer | +| test.rs:282:26:282:32 | &buffer | semmle.label | &buffer | +| test.rs:282:27:282:32 | buffer | semmle.label | buffer | +| test.rs:373:13:373:15 | tcp | semmle.label | tcp | +| test.rs:373:19:373:36 | ...::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 [&ref] | semmle.label | mut pinned [&ref] | +| test.rs:386:30:386:50 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:386:30:386:50 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | +| test.rs:386:39:386:49 | &mut reader [&ref] | semmle.label | &mut reader [&ref] | +| test.rs:386:44:386:49 | reader | semmle.label | reader | +| test.rs:387:18:387:24 | &pinned | semmle.label | &pinned | +| test.rs:387:19:387:24 | pinned | semmle.label | pinned | +| test.rs:387:19:387:24 | pinned [&ref] | semmle.label | pinned [&ref] | +| test.rs: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: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: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: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 [&ref] | semmle.label | mut pinned [&ref] | +| test.rs:413:30:413:51 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:413:30:413:51 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | +| test.rs:413:39:413:50 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | +| test.rs:413:44:413:50 | reader2 | semmle.label | reader2 | +| test.rs:414:18:414:24 | &pinned | semmle.label | &pinned | +| test.rs:414:19:414:24 | pinned | semmle.label | pinned | +| test.rs:414:19:414:24 | pinned [&ref] | semmle.label | pinned [&ref] | +| test.rs:416:17:416:22 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] | +| 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:48 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | +| test.rs:423:27:423:71 | ... .poll_fill_buf(...) [Ready, Ok] | semmle.label | ... .poll_fill_buf(...) [Ready, Ok] | +| test.rs:423:36:423:47 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | +| test.rs:423:41:423:47 | reader2 | semmle.label | reader2 | +| 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: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 [&ref] | semmle.label | mut pinned [&ref] | +| test.rs:444:30:444:51 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:444:30:444:51 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | +| test.rs:444:39:444:50 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | +| test.rs:444:44:444:50 | reader2 | semmle.label | reader2 | +| test.rs:445:18:445:24 | &pinned | semmle.label | &pinned | +| test.rs:445:19:445:24 | pinned | semmle.label | pinned | +| test.rs:445:19:445:24 | pinned [&ref] | semmle.label | pinned [&ref] | +| test.rs: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: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:40 | buffer2[...] | semmle.label | buffer2[...] | +| test.rs:467:17:467:26 | mut pinned | semmle.label | mut pinned | +| test.rs:467:17:467:26 | mut pinned [&ref] | semmle.label | mut pinned [&ref] | +| test.rs:467:30:467:51 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:467:30:467:51 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] | +| test.rs:467:39:467:50 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] | +| test.rs:467:44:467:50 | reader2 | semmle.label | reader2 | +| test.rs:468:18:468:24 | &pinned | semmle.label | &pinned | +| test.rs:468:19:468:24 | pinned | semmle.label | pinned | +| test.rs:468:19:468:24 | pinned [&ref] | semmle.label | pinned [&ref] | +| test.rs:470:17:470:22 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] | +| 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: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 | +subpaths +testFailures +#select +| test.rs:12:10:12:23 | remote_string1 | test.rs:11:26:11:47 | ...::get | test.rs:12:10:12:23 | remote_string1 | $@ | test.rs:11:26:11:47 | ...::get | ...::get | +| test.rs:15:10:15:23 | remote_string2 | test.rs:14:26:14:47 | ...::get | test.rs:15:10:15:23 | remote_string2 | $@ | test.rs:14:26:14:47 | ...::get | ...::get | +| test.rs:18:10:18:23 | remote_string3 | test.rs:17:26:17:47 | ...::get | test.rs:18:10:18:23 | remote_string3 | $@ | test.rs:17:26:17:47 | ...::get | ...::get | +| test.rs:21:10:21:23 | remote_string4 | test.rs:20:26:20:47 | ...::get | test.rs:21:10:21:23 | remote_string4 | $@ | test.rs:20:26:20:47 | ...::get | ...::get | +| test.rs:24:10:24:23 | remote_string5 | test.rs:23:26:23:37 | ...::get | test.rs:24:10:24:23 | remote_string5 | $@ | test.rs:23:26:23:37 | ...::get | ...::get | +| test.rs:27:10:27:23 | remote_string6 | test.rs:26:26:26:37 | ...::get | test.rs:27:10:27:23 | remote_string6 | $@ | test.rs:26:26:26:37 | ...::get | ...::get | +| test.rs:30:10:30:41 | ... .unwrap() | test.rs:29:24:29:35 | ...::get | test.rs:30:10:30:41 | ... .unwrap() | $@ | test.rs:29:24:29:35 | ...::get | ...::get | +| test.rs:32:14:32:18 | chunk | test.rs:29:24:29:35 | ...::get | test.rs:32:14:32:18 | chunk | $@ | test.rs:29:24:29:35 | ...::get | ...::get | +| test.rs:61:14:61:22 | &response | test.rs:60:31:60:42 | send_request | test.rs:61:14:61:22 | &response | $@ | test.rs:60:31:60:42 | send_request | send_request | +| test.rs:62:14:62:21 | response | test.rs:60:31:60:42 | send_request | test.rs:62:14:62:21 | response | $@ | test.rs:60:31:60:42 | send_request | send_request | +| test.rs:68:10:68:18 | &response | test.rs:67:31:67:42 | send_request | test.rs:68:10:68:18 | &response | $@ | test.rs:67:31:67:42 | send_request | send_request | +| test.rs:165:14:165:20 | &buffer | test.rs:155:26:155:53 | ...::connect | test.rs:165:14:165:20 | &buffer | $@ | test.rs:155:26:155:53 | ...::connect | ...::connect | +| test.rs:166:14:166:22 | buffer[0] | test.rs:155:26:155:53 | ...::connect | test.rs:166:14:166:22 | buffer[0] | $@ | test.rs:155:26:155:53 | ...::connect | ...::connect | +| test.rs:192:34:192:38 | &line | test.rs:174:26:174:61 | ...::connect_timeout | test.rs:192:34:192:38 | &line | $@ | test.rs:174:26:174:61 | ...::connect_timeout | ...::connect_timeout | +| test.rs:239:14:239:21 | &buffer1 | test.rs:224:28:224:57 | ...::connect | test.rs:239:14:239:21 | &buffer1 | $@ | test.rs:224:28:224:57 | ...::connect | ...::connect | +| test.rs:240:14:240:23 | buffer1[0] | test.rs:224:28:224:57 | ...::connect | test.rs:240:14:240:23 | buffer1[0] | $@ | test.rs:224:28:224:57 | ...::connect | ...::connect | +| test.rs:243:14:243:21 | &buffer2 | test.rs:224:28:224:57 | ...::connect | test.rs:243:14:243:21 | &buffer2 | $@ | test.rs:224:28:224:57 | ...::connect | ...::connect | +| test.rs:244:14:244:23 | buffer2[0] | test.rs:224:28:224:57 | ...::connect | test.rs:244:14:244:23 | buffer2[0] | $@ | test.rs:224:28:224:57 | ...::connect | ...::connect | +| test.rs:259:26:259:32 | &buffer | test.rs:224:28:224:57 | ...::connect | test.rs:259:26:259:32 | &buffer | $@ | test.rs:224:28:224:57 | ...::connect | ...::connect | +| test.rs:282:26:282:32 | &buffer | test.rs:224:28:224:57 | ...::connect | test.rs:282:26:282:32 | &buffer | $@ | test.rs:224:28:224:57 | ...::connect | ...::connect | +| test.rs:374:14:374:17 | &tcp | test.rs:373:19:373:36 | ...::connect | test.rs:374:14:374:17 | &tcp | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:381:14:381:20 | &reader | test.rs:373:19:373:36 | ...::connect | test.rs:381:14:381:20 | &reader | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:387:18:387:24 | &pinned | test.rs:373:19:373:36 | ...::connect | test.rs:387:18:387:24 | &pinned | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:391:22:391:28 | &buffer | test.rs:373:19:373:36 | ...::connect | test.rs:391:22:391:28 | &buffer | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:392:22:392:33 | &... | test.rs:373:19:373:36 | ...::connect | test.rs:392:22:392:33 | &... | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:400:18:400:40 | &... | test.rs:373:19:373:36 | ...::connect | test.rs:400:18:400:40 | &... | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:405:18:405:40 | &... | test.rs:373:19:373:36 | ...::connect | test.rs:405:18:405:40 | &... | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:409:14:409:21 | &reader2 | test.rs:373:19:373:36 | ...::connect | test.rs:409:14:409:21 | &reader2 | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:414:18:414:24 | &pinned | test.rs:373:19:373:36 | ...::connect | test.rs:414:18:414:24 | &pinned | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:418:22:418:28 | &buffer | test.rs:373:19:373:36 | ...::connect | test.rs:418:22:418:28 | &buffer | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:419:22:419:24 | buf | test.rs:373:19:373:36 | ...::connect | test.rs:419:22:419:24 | buf | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:426:26:426:33 | &buffer2 | test.rs:373:19:373:36 | ...::connect | test.rs:426:26:426:33 | &buffer2 | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:427:26:427:28 | buf | test.rs:373:19:373:36 | ...::connect | test.rs:427:26:427:28 | buf | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:438:18:438:23 | buffer | test.rs:373:19:373:36 | ...::connect | test.rs:438:18:438:23 | buffer | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:445:18:445:24 | &pinned | test.rs:373:19:373:36 | ...::connect | test.rs:445:18:445:24 | &pinned | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:458:18:458:40 | &... | test.rs:373:19:373:36 | ...::connect | test.rs:458:18:458:40 | &... | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:462:18:462:40 | &... | test.rs:373:19:373:36 | ...::connect | test.rs:462:18:462:40 | &... | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:468:18:468:24 | &pinned | test.rs:373:19:373:36 | ...::connect | test.rs:468:18:468:24 | &pinned | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:471:18:471:24 | &buffer | test.rs:373:19:373:36 | ...::connect | test.rs:471:18:471:24 | &buffer | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:473:22:473:24 | buf | test.rs:373:19:373:36 | ...::connect | test.rs:473:22:473:24 | buf | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:480:18:480:23 | buffer | test.rs:373:19:373:36 | ...::connect | test.rs:480:18:480:23 | buffer | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:487:18:487:22 | &line | test.rs:373:19:373:36 | ...::connect | test.rs:487:18:487:22 | &line | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:494:18:494:22 | &line | test.rs:373:19:373:36 | ...::connect | test.rs:494:18:494:22 | &line | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | +| test.rs:501:18:501:24 | &buffer | test.rs:373:19:373:36 | ...::connect | test.rs:501:18:501:24 | &buffer | $@ | test.rs:373:19:373:36 | ...::connect | ...::connect | diff --git a/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.qlref b/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.qlref new file mode 100644 index 000000000000..e0f7493db396 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/net/InlineFlow.qlref @@ -0,0 +1,2 @@ +query: ../env/InlineFlow.ql + diff --git a/rust/ql/test/library-tests/dataflow/sources/net/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/net/TaintSources.expected new file mode 100644 index 000000000000..190628f93d7d --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/net/TaintSources.expected @@ -0,0 +1,18 @@ +| test.rs:11:26:11:47 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:14:26:14:47 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:17:26:17:47 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:20:26:20:47 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:23:26:23:37 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:26:26:26:37 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:29:24:29:35 | ...::get | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:45:18:45:47 | ...::connect | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:60:31:60:42 | send_request | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:67:31:67:42 | send_request | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:155:26:155:53 | ...::connect | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:174:26:174:61 | ...::connect_timeout | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:224:28:224:57 | ...::connect | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:306:22:306:49 | ...::connect | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:332:22:332:50 | ...::new | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:373:19:373:36 | ...::connect | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:519:16:519:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | +| test.rs:519:16:519:29 | ...::args | Flow source 'CommandLineArgs' of type commandargs (DEFAULT). | diff --git a/rust/ql/test/library-tests/dataflow/sources/net/TaintSources.qlref b/rust/ql/test/library-tests/dataflow/sources/net/TaintSources.qlref new file mode 100644 index 000000000000..7aa95121af3e --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/net/TaintSources.qlref @@ -0,0 +1,2 @@ +query: queries/summary/TaintSources.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/rust/ql/test/library-tests/dataflow/sources/options.yml b/rust/ql/test/library-tests/dataflow/sources/net/options.yml similarity index 59% rename from rust/ql/test/library-tests/dataflow/sources/options.yml rename to rust/ql/test/library-tests/dataflow/sources/net/options.yml index a9ad72911267..24cda1561c0f 100644 --- a/rust/ql/test/library-tests/dataflow/sources/options.yml +++ b/rust/ql/test/library-tests/dataflow/sources/net/options.yml @@ -7,15 +7,6 @@ qltest_dependencies: - http = { version = "1.2.0" } - tokio = { version = "1.43.0", features = ["full"] } - futures = { version = "0.3" } - - bytes = { version = "1.10.1" } - - poem = { version = "3.1.10" } - - serde = { version = "1.0.219" } - - actix-web = { version = "4.10.2" } - - axum = { version = "0.8.4" } - - serde_json = { version = "1.0.140" } - rustls = { version = "0.23.27" } - futures-rustls = { version = "0.26.0" } - async-std = { version = "1.13.1" } - - warp = { version = "0.4.2", features = ["server"] } - - mysql = { version = "26.0.1" } - - mysql_async = { version = "0.36.1" } diff --git a/rust/ql/test/library-tests/dataflow/sources/net/test.rs b/rust/ql/test/library-tests/dataflow/sources/net/test.rs new file mode 100644 index 000000000000..ce100e35f2b8 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/net/test.rs @@ -0,0 +1,564 @@ +fn sink(_: T) { } + +// --- tests --- + +use std::io::{Read, Write, BufRead}; +use tokio::io::{AsyncReadExt, AsyncWriteExt}; +use http_body_util::BodyExt; +use std::net::ToSocketAddrs; + +async fn test_reqwest() -> Result<(), reqwest::Error> { + let remote_string1 = reqwest::blocking::get("example.com")?.text()?; // $ Alert[rust/summary/taint-sources] + sink(remote_string1); // $ hasTaintFlow="example.com" + + let remote_string2 = reqwest::blocking::get("example.com").unwrap().text().unwrap(); // $ Alert[rust/summary/taint-sources] + sink(remote_string2); // $ hasTaintFlow="example.com" + + let remote_string3 = reqwest::blocking::get("example.com").unwrap().text_with_charset("utf-8").unwrap(); // $ Alert[rust/summary/taint-sources] + sink(remote_string3); // $ hasTaintFlow="example.com" + + let remote_string4 = reqwest::blocking::get("example.com").unwrap().bytes().unwrap(); // $ Alert[rust/summary/taint-sources] + sink(remote_string4); // $ hasTaintFlow="example.com" + + let remote_string5 = reqwest::get("example.com").await?.text().await?; // $ Alert[rust/summary/taint-sources] + sink(remote_string5); // $ hasTaintFlow="example.com" + + let remote_string6 = reqwest::get("example.com").await?.bytes().await?; // $ Alert[rust/summary/taint-sources] + sink(remote_string6); // $ hasTaintFlow="example.com" + + let mut request1 = reqwest::get("example.com").await?; // $ Alert[rust/summary/taint-sources] + sink(request1.chunk().await?.unwrap()); // $ hasTaintFlow="example.com" + while let Some(chunk) = request1.chunk().await? { + sink(chunk); // $ hasTaintFlow="example.com" + } + + Ok(()) +} + +async fn test_hyper_http(case: i64) -> Result<(), Box> { + // using http + hyper libs to fetch a web page + let address = "example.com:80"; + let url = "http://example.com/"; + + // create the connection + println!("connecting to {}...", address); + let stream = tokio::net::TcpStream::connect(address).await?; // $ Alert[rust/summary/taint-sources] + let io = hyper_util::rt::TokioIo::new(stream); + let (sender, conn) = hyper::client::conn::http1::handshake(io).await?; + let mut sender: hyper::client::conn::http1::SendRequest = sender; + + // drive the HTTP connection + tokio::task::spawn(async move { + conn.await.expect("connection failed"); + }); + + // make the request + println!("sending request..."); + if case == 0 { + // simple flow case + let request = http::Request::builder().uri(url).body(String::from(""))?; + let response = sender.send_request(request).await?; // $ Alert[rust/summary/taint-sources] + sink(&response); // $ hasTaintFlow=request + sink(response); // $ hasTaintFlow=request + return Ok(()) + } + // more realistic uses of results... + let request = http::Request::builder().uri(url).body(String::from(""))?; + let mut response = sender.send_request(request).await?; // $ Alert[rust/summary/taint-sources] + sink(&response); // $ hasTaintFlow=request + + if !response.status().is_success() { + return Err("request failed".into()) + } + + match case { + 1 => { + sink(response.body()); // $ MISSING: hasTaintFlow + sink(response.body_mut()); // $ MISSING: hasTaintFlow + + let body = response.into_body(); + sink(&body); // $ MISSING: hasTaintFlow + + println!("awaiting response..."); + let data = body.collect().await?; + sink(&data); // $ MISSING: hasTaintFlow + + let bytes = data.to_bytes(); + println!("bytes = {:?}", &bytes); + sink(bytes); // $ MISSING: hasTaintFlow + } + 2 => { + println!("streaming response..."); + while let Some(frame) = response.frame().await { + if let Some(data) = frame?.data_ref() { + std::io::stdout().write_all(data)?; + sink(data); // $ MISSING: hasTaintFlow + sink(data[0]); // $ MISSING: hasTaintFlow + for byte in data { + sink(byte); // $ MISSING: hasTaintFlow + } + } + } + } + 3 => { + let headers = response.headers(); + + if headers.contains_key(http::header::CONTENT_TYPE) { + println!("CONTENT_TYPE = {}", response.headers()[http::header::CONTENT_TYPE].to_str().unwrap()); + sink(&headers[http::header::CONTENT_TYPE]); // $ MISSING: hasTaintFlow + sink(headers[http::header::CONTENT_TYPE].to_str().unwrap()); // $ MISSING: hasTaintFlow + sink(headers[http::header::CONTENT_TYPE].as_bytes()); // $ MISSING: hasTaintFlow + sink(headers.get(http::header::CONTENT_TYPE).unwrap()); // $ MISSING: hasTaintFlow + } + + if headers.contains_key("Content-type") { + println!("Content-type = {}", response.headers().get("Content-type").unwrap().to_str().unwrap()); + sink(headers.get("Content-type").unwrap()); // $ MISSING: hasTaintFlow + sink(headers.get("Content-type").unwrap().to_str().unwrap()); // $ MISSING: hasTaintFlow + sink(headers.get("Content-type").unwrap().as_bytes()); // $ MISSING: hasTaintFlow + sink(&headers["Content-type"]); // $ MISSING: hasTaintFlow + } + + if headers.contains_key(http::header::COOKIE) { + sink(response.headers().get(http::header::COOKIE)); // $ MISSING: hasTaintFlow + for cookie in headers.get_all(http::header::COOKIE) { + println!("cookie = {}", cookie.to_str().unwrap()); + sink(cookie); // $ MISSING: hasTaintFlow + sink(cookie.to_str().unwrap()); // $ MISSING: hasTaintFlow + } + } + + let (parts, body) = response.into_parts(); + + if parts.headers.contains_key(http::header::CONTENT_TYPE) { + println!("CONTENT_TYPE = {}", parts.headers[http::header::CONTENT_TYPE].to_str().unwrap()); + sink(&parts.headers[http::header::CONTENT_TYPE]); // $ MISSING: hasTaintFlow + sink(parts.headers[http::header::CONTENT_TYPE].to_str().unwrap()); // $ MISSING: hasTaintFlow + sink(parts.headers[http::header::CONTENT_TYPE].as_bytes()); // $ MISSING: hasTaintFlow + sink(parts.headers.get(http::header::CONTENT_TYPE).unwrap()); // $ MISSING: hasTaintFlow + } + + sink(body); // $ MISSING: hasTaintFlow + } + _ => {} + } + + Ok(()) +} + +async fn test_std_tcpstream(case: i64) -> std::io::Result<()> { + // using std::net to fetch a web page + let address = "example.com:80"; + + if case == 1 { + // create the connection + let mut stream = std::net::TcpStream::connect(address)?; // $ Alert[rust/summary/taint-sources] + + // send request + let _ = stream.write_all(b"GET / HTTP/1.1\nHost:example.com\n\n"); + + // read response + let mut buffer = vec![0; 32 * 1024]; + let _ = stream.read(&mut buffer); + + println!("data = {:?}", buffer); + sink(&buffer); // $ hasTaintFlow=address + sink(buffer[0]); // $ hasTaintFlow=address + + let buffer_string = String::from_utf8_lossy(&buffer); + println!("string = {}", buffer_string); + sink(buffer_string); // $ MISSING: hasTaintFlow + } else { + // create the connection + let sock_addr = address.to_socket_addrs().unwrap().next().unwrap(); + let mut stream = std::net::TcpStream::connect_timeout(&sock_addr, std::time::Duration::new(1, 0))?; // $ Alert[rust/summary/taint-sources] + + // send request + let _ = stream.write_all(b"GET / HTTP/1.1\nHost:example.com\n\n"); + + // read response + match case { + 2 => { + let mut reader = std::io::BufReader::new(stream).take(256); + let mut line = String::new(); + loop { + match reader.read_line(&mut line) { + Ok(0) => { + println!("end"); + break; + } + Ok(_n) => { + println!("line = {}", line); + sink(&line); // $ hasTaintFlow=&sock_addr + line.clear(); + } + Err(e) => { + println!("error: {}", e); + break; + } + } + } + } + 3 => { + let reader = std::io::BufReader::new(stream.try_clone()?).take(256); + for line in reader.lines() { // $ MISSING: Alert[rust/summary/taint-sources] + if let Ok(string) = line { + println!("line = {}", string); + sink(string); // $ MISSING: hasTaintFlow + } + } + } + _ => {} + } + } + + Ok(()) +} + +async fn test_tokio_tcpstream(case: i64) -> std::io::Result<()> { + // using tokio::io to fetch a web page + let address = "example.com:80"; + + // create the connection + println!("connecting to {}...", address); + let mut tokio_stream = tokio::net::TcpStream::connect(address).await?; // $ Alert[rust/summary/taint-sources] + + // send request + tokio_stream.write_all(b"GET / HTTP/1.1\nHost:example.com\n\n").await?; + + if case == 1 { + // peek response + let mut buffer1 = vec![0; 2 * 1024]; + let _ = tokio_stream.peek(&mut buffer1).await?; + + // read response + let mut buffer2 = vec![0; 2 * 1024]; + let n2 = tokio_stream.read(&mut buffer2).await?; + + println!("buffer1 = {:?}", buffer1); + sink(&buffer1); // $ hasTaintFlow=address + sink(buffer1[0]); // $ hasTaintFlow=address + + println!("buffer2 = {:?}", buffer2); + sink(&buffer2); // $ hasTaintFlow=address + sink(buffer2[0]); // $ hasTaintFlow=address + + let buffer_string = String::from_utf8_lossy(&buffer2[..n2]); + println!("string = {}", buffer_string); + sink(buffer_string); // $ MISSING: hasTaintFlow + } else if case == 2 { + let mut buffer = [0; 2 * 1024]; + loop { + match tokio_stream.try_read(&mut buffer) { + Ok(0) => { + println!("end"); + break; + } + Ok(_n) => { + println!("buffer = {:?}", buffer); + sink(&buffer); // $ hasTaintFlow=address + break; // (or we could wait for more data) + } + Err(ref e) if e.kind() == std::io::ErrorKind::WouldBlock => { + // wait... + continue; + } + Err(e) => { + println!("error: {}", e); + break; + } + } + } + } else { + let mut buffer = Vec::new(); + loop { + match tokio_stream.try_read_buf(&mut buffer) { + Ok(0) => { + println!("end"); + break; + } + Ok(_n) => { + println!("buffer = {:?}", buffer); + sink(&buffer); // $ hasTaintFlow=address + break; // (or we could wait for more data) + } + Err(ref e) if e.kind() == std::io::ErrorKind::WouldBlock => { + // wait... + continue; + } + Err(e) => { + println!("error: {}", e); + break; + } + } + } + } + + Ok(()) +} + +async fn test_std_to_tokio_tcpstream() -> std::io::Result<()> { + // using std::net and tokio::net together to fetch a web page + let address = "example.com:80"; + + // create the connection + println!("connecting to {}...", address); + let std_stream = std::net::TcpStream::connect(address)?; // $ Alert[rust/summary/taint-sources] + + // convert to tokio stream + std_stream.set_nonblocking(true)?; + let mut tokio_stream = tokio::net::TcpStream::from_std(std_stream)?; + + // send request + tokio_stream.write_all(b"GET / HTTP/1.1\nHost:example.com\n\n").await?; + + // read response + let mut buffer = vec![0; 32 * 1024]; + let _n = tokio_stream.read(&mut buffer).await?; // $ MISSING: Alert[rust/summary/taint-sources] + + println!("data = {:?}", buffer); + sink(&buffer); // $ MISSING: hasTaintFlow + sink(buffer[0]); // $ MISSING: hasTaintFlow + + Ok(()) +} + +fn test_rustls() -> std::io::Result<()> { + let config = rustls::ClientConfig::builder() + .with_root_certificates(rustls::RootCertStore::empty()) + .with_no_client_auth(); + let server_name = rustls::pki_types::ServerName::try_from("www.example.com").unwrap(); + let config_arc = std::sync::Arc::new(config); + let mut client = rustls::ClientConnection::new(config_arc, server_name).unwrap(); // $ Alert[rust/summary/taint-sources] + let mut reader = client.reader(); // We cannot resolve the `reader` call because it comes from `Deref`: https://docs.rs/rustls/latest/rustls/client/struct.ClientConnection.html#deref-methods-ConnectionCommon%3CClientConnectionData%3E + sink(&reader); // $ MISSING: hasTaintFlow=config_arc + + { + let mut buffer = [0u8; 100]; + let _bytes = reader.read(&mut buffer)?; + sink(&buffer); // $ MISSING: hasTaintFlow=config_arc + } + + { + let mut buffer = Vec::::new(); + let _bytes = reader.read_to_end(&mut buffer)?; + sink(&buffer); // $ MISSING: hasTaintFlow=config_arc + } + + { + let mut buffer = String::new(); + let _bytes = reader.read_to_string(&mut buffer)?; + sink(&buffer); // $ MISSING: hasTaintFlow=config_arc + } + + Ok(()) +} + +mod futures_rustls { + use async_std::net::TcpStream; + use async_std::sync::Arc; + use futures::io::AsyncBufRead; + use futures::io::AsyncBufReadExt; + use futures::io::AsyncRead; + use futures::io::AsyncReadExt; + use futures::StreamExt; + use futures_rustls::TlsConnector; + use std::io; + use std::pin::Pin; + use std::task::{Context, Poll}; + use super::sink; + + pub async fn test_futures_rustls_futures_io() -> io::Result<()> { + let url = "www.example.com:443"; + let tcp = TcpStream::connect(url).await?; // $ Alert[rust/summary/taint-sources] + sink(&tcp); // $ hasTaintFlow=url + let config = rustls::ClientConfig::builder() + .with_root_certificates(rustls::RootCertStore::empty()) + .with_no_client_auth(); + let connector = TlsConnector::from(Arc::new(config)); + let server_name = rustls::pki_types::ServerName::try_from("www.example.com").unwrap(); + let mut reader = connector.connect(server_name, tcp).await?; + sink(&reader); // $ hasTaintFlow=url + + { + // using the `AsyncRead` trait (low-level) + let mut buffer = [0u8; 64]; + let mut pinned = Pin::new(&mut reader); + sink(&pinned); // $ hasTaintFlow=url + let mut cx = Context::from_waker(futures::task::noop_waker_ref()); + let bytes_read = pinned.poll_read(&mut cx, &mut buffer); + if let Poll::Ready(Ok(n)) = bytes_read { + sink(&buffer); // $ hasTaintFlow=url + sink(&buffer[..n]); // $ hasTaintFlow=url + } + } + + { + // using the `AsyncReadExt::read` extension method (higher-level) + let mut buffer1 = [0u8; 64]; + let bytes_read1 = futures::io::AsyncReadExt::read(&mut reader, &mut buffer1).await?; + sink(&buffer1[..bytes_read1]); // $ hasTaintFlow=url + + let mut buffer2 = [0u8; 64]; + let bytes_read2 = reader.read(&mut buffer2).await?; + + sink(&buffer2[..bytes_read2]); // $ hasTaintFlow=url + } + + let mut reader2 = futures::io::BufReader::new(reader); + sink(&reader2); // $ hasTaintFlow=url + + { + // using the `AsyncBufRead` trait (low-level) + let mut pinned = Pin::new(&mut reader2); + sink(&pinned); // $ hasTaintFlow=url + let mut cx = Context::from_waker(futures::task::noop_waker_ref()); + let buffer = pinned.poll_fill_buf(&mut cx); + if let Poll::Ready(Ok(buf)) = buffer { + sink(&buffer); // $ hasTaintFlow=url + sink(buf); // $ hasTaintFlow=url + } + + // using the `AsyncBufRead` trait (alternative syntax) + let buffer2 = Pin::new(&mut reader2).poll_fill_buf(&mut cx); + match (buffer2) { + Poll::Ready(Ok(buf)) => { + sink(&buffer2); // $ hasTaintFlow=url + sink(buf); // $ hasTaintFlow=url + } + _ => { + // ... + } + } + } + + { + // using the `AsyncBufReadExt::fill_buf` extension method (higher-level) + let buffer = reader2.fill_buf().await?; + sink(buffer); // $ hasTaintFlow=url + } + + { + // using the `AsyncRead` trait (low-level) + let mut buffer = [0u8; 64]; + let mut pinned = Pin::new(&mut reader2); + sink(&pinned); // $ hasTaintFlow=url + let mut cx = Context::from_waker(futures::task::noop_waker_ref()); + let bytes_read = pinned.poll_read(&mut cx, &mut buffer); + sink(&buffer); // $ MISSING: hasTaintFlow=url + if let Poll::Ready(Ok(n)) = bytes_read { + sink(&buffer[..n]); // $ MISSING: hasTaintFlow=url + } + } + + { + // using the `AsyncReadExt::read` extension method (higher-level) + let mut buffer1 = [0u8; 64]; + let bytes_read1 = futures::io::AsyncReadExt::read(&mut reader2, &mut buffer1).await?; + sink(&buffer1[..bytes_read1]); // $ hasTaintFlow=url + + let mut buffer2 = [0u8; 64]; + let bytes_read2 = reader2.read(&mut buffer2).await?; + sink(&buffer2[..bytes_read2]); // $ hasTaintFlow=url + } + + { + // using the `AsyncBufRead` trait (low-level) + let mut pinned = Pin::new(&mut reader2); + sink(&pinned); // $ hasTaintFlow=url + let mut cx = Context::from_waker(futures::task::noop_waker_ref()); + let buffer = pinned.poll_fill_buf(&mut cx); + sink(&buffer); // $ hasTaintFlow=url + if let Poll::Ready(Ok(buf)) = buffer { + sink(buf); // $ hasTaintFlow=url + } + } + + { + // using the `AsyncBufReadExt::fill_buf` extension method (higher-level) + let buffer = reader2.fill_buf().await?; + sink(buffer); // $ hasTaintFlow=url + } + + { + // using the `AsyncBufReadExt::read_until` extension method + let mut line = Vec::new(); + let _bytes_read = reader2.read_until(b'\n', &mut line).await?; + sink(&line); // $ hasTaintFlow=url + } + + { + // using the `AsyncBufReadExt::read_line` extension method + let mut line = String::new(); + let _bytes_read = reader2.read_line(&mut line).await?; + sink(&line); // $ hasTaintFlow=url + } + + { + // using the `AsyncBufReadExt::read_to_end` extension method + let mut buffer = Vec::with_capacity(1024); + let _bytes_read = reader2.read_to_end(&mut buffer).await?; + sink(&buffer); // $ hasTaintFlow=url + } + + { + // using the `AsyncBufReadExt::lines` extension method + let mut lines_stream = reader2.lines(); + sink(lines_stream.next().await.unwrap()); // $ MISSING: hasTaintFlow=url + while let Some(line) = lines_stream.next().await { + sink(line.unwrap()); // $ MISSING: hasTaintFlow + } + } + + Ok(()) + } +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + let case = std::env::args().nth(1).unwrap_or(String::from("1")).parse::().unwrap(); // $ Alert[rust/summary/taint-sources] + + println!("test_reqwest..."); + match futures::executor::block_on(test_reqwest()) { + Ok(_) => println!("complete"), + Err(e) => println!("error: {}", e), + } + + println!("test_hyper_http..."); + match futures::executor::block_on(test_hyper_http(case)) { + Ok(_) => println!("complete"), + Err(e) => println!("error: {}", e), + } + + println!("test_std_tcpstream..."); + match futures::executor::block_on(test_std_tcpstream(case)) { + Ok(_) => println!("complete"), + Err(e) => println!("error: {}", e), + } + + println!("test_tokio_tcpstream..."); + match futures::executor::block_on(test_tokio_tcpstream(case)) { + Ok(_) => println!("complete"), + Err(e) => println!("error: {}", e), + } + + println!("test_std_to_tokio_tcpstream..."); + match futures::executor::block_on(test_std_to_tokio_tcpstream()) { + Ok(_) => println!("complete"), + Err(e) => println!("error: {}", e), + } + + println!("test_rustls..."); + match test_rustls() { + Ok(_) => println!("complete"), + Err(e) => println!("error: {}", e), + } + + println!("test_futures_rustls_futures_io..."); + match futures::executor::block_on(futures_rustls::test_futures_rustls_futures_io()) { + Ok(_) => println!("complete"), + Err(e) => println!("error: {}", e), + } + + Ok(()) +} diff --git a/rust/ql/test/library-tests/dataflow/sources/reqwest.rs b/rust/ql/test/library-tests/dataflow/sources/reqwest.rs deleted file mode 100644 index 3e8f5ef8510a..000000000000 --- a/rust/ql/test/library-tests/dataflow/sources/reqwest.rs +++ /dev/null @@ -1,36 +0,0 @@ - -// --- stubs for the "reqwest" library --- - -/* - --- we don't seem to have a way to use this, hence we currently test against the real reqwest library -#[derive(Debug)] -pub struct Error { } - -pub mod blocking { - pub struct Response { } - impl Response { - pub fn text(self) -> Result { - Ok("".to_string()) - } - } - - pub fn get(url: T) -> Result { - let _url = url; - - Ok(Response {}) - } -} - -pub struct Response { } -impl Response { - pub async fn text(self) -> Result { - Ok("".to_string()) - } -} - -pub async fn get(url: T) -> Result { - let _url = url; - - Ok(Response {}) -} -*/ diff --git a/rust/ql/test/library-tests/dataflow/sources/stdin/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/sources/stdin/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..535b3f339b48 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/stdin/CONSISTENCY/PathResolutionConsistency.expected @@ -0,0 +1,2 @@ +multipleCallTargets +| test.rs:31:22:31:72 | ... .read_to_string(...) | diff --git a/rust/ql/test/library-tests/dataflow/sources/stdin/Cargo.lock b/rust/ql/test/library-tests/dataflow/sources/stdin/Cargo.lock new file mode 100644 index 000000000000..e65fc7517079 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/stdin/Cargo.lock @@ -0,0 +1,390 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "bitflags" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "libc" +version = "0.2.177" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + +[[package]] +name = "mio" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "proc-macro2" +version = "1.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "signal-hook-registry" +version = "1.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +dependencies = [ + "libc", +] + +[[package]] +name = "slab" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "socket2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + +[[package]] +name = "syn" +version = "2.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "test" +version = "0.0.1" +dependencies = [ + "bytes", + "futures", + "tokio", +] + +[[package]] +name = "tokio" +version = "1.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +dependencies = [ + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "unicode-ident" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" diff --git a/rust/ql/test/library-tests/dataflow/sources/stdin/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/stdin/InlineFlow.expected new file mode 100644 index 000000000000..5e0e79e5e5d3 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/stdin/InlineFlow.expected @@ -0,0 +1,484 @@ +models +| 1 | Source: std::io::stdio::stdin; ReturnValue; stdin | +| 2 | Source: tokio::io::stdin::stdin; ReturnValue; stdin | +| 3 | Summary: <_ as core::iter::traits::iterator::Iterator>::next; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; value | +| 4 | Summary: <_ as std::io::BufRead>::fill_buf; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 5 | Summary: <_ as std::io::BufRead>::lines; Argument[self]; ReturnValue; taint | +| 6 | Summary: <_ as std::io::BufRead>::read_line; Argument[self]; Argument[0].Reference; taint | +| 7 | Summary: <_ as std::io::BufRead>::read_until; Argument[self]; Argument[1].Reference; taint | +| 8 | Summary: <_ as std::io::BufRead>::split; Argument[self]; ReturnValue; taint | +| 9 | Summary: <_ as std::io::Read>::bytes; Argument[self]; ReturnValue; taint | +| 10 | Summary: <_ as std::io::Read>::read; Argument[self]; Argument[0].Reference; taint | +| 11 | Summary: <_ as std::io::Read>::read_exact; Argument[self]; Argument[0].Reference; taint | +| 12 | Summary: <_ as std::io::Read>::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 13 | Summary: <_ as std::io::Read>::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 14 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 15 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::lines; Argument[self]; ReturnValue; taint | +| 16 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint | +| 17 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint | +| 18 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::split; Argument[self]; ReturnValue; taint | +| 19 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint | +| 20 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_buf; Argument[self]; Argument[0].Reference; taint | +| 21 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_exact; Argument[self]; Argument[0].Reference; taint | +| 22 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f32; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 23 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 24 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64_le; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 25 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint | +| 26 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string; Argument[self]; Argument[0].Reference; taint | +| 27 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint | +| 28 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 29 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 30 | Summary: ::buffer; Argument[self]; ReturnValue; taint | +| 31 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 32 | Summary: ::read; Argument[self]; Argument[0]; taint | +| 33 | Summary: ::read_exact; Argument[self]; Argument[0]; taint | +| 34 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint | +| 35 | Summary: ::lock; Argument[self]; ReturnValue; taint | +| 36 | Summary: ::buffer; Argument[self]; ReturnValue; taint | +| 37 | Summary: ::new; Argument[0]; ReturnValue; taint | +| 38 | Summary: ::next_line; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +| 39 | Summary: ::next_segment; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint | +edges +| test.rs:13:22:13:35 | ...::stdin | test.rs:13:22:13:37 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | +| test.rs:13:22:13:37 | ...::stdin(...) | test.rs:13:44:13:54 | [post] &mut buffer | provenance | MaD:32 | +| test.rs:13:22:13:37 | ...::stdin(...) | test.rs:13:44:13:54 | [post] &mut buffer [&ref] | provenance | MaD:10 | +| test.rs:13:44:13:54 | [post] &mut buffer | test.rs:14:15:14:20 | buffer | provenance | | +| test.rs:13:44:13:54 | [post] &mut buffer [&ref] | test.rs:13:49:13:54 | [post] buffer | provenance | | +| test.rs:13:49:13:54 | [post] buffer | test.rs:14:15:14:20 | buffer | provenance | | +| test.rs:14:15:14:20 | buffer | test.rs:14:14:14:20 | &buffer | provenance | | +| test.rs:19:22:19:35 | ...::stdin | test.rs:19:22:19:37 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | +| test.rs:19:22:19:37 | ...::stdin(...) | test.rs:19:51:19:61 | [post] &mut buffer [&ref] | provenance | MaD:12 | +| test.rs:19:51:19:61 | [post] &mut buffer [&ref] | test.rs:19:56:19:61 | [post] buffer | provenance | | +| test.rs:19:56:19:61 | [post] buffer | test.rs:20:15:20:20 | buffer | provenance | | +| test.rs:20:15:20:20 | buffer | test.rs:20:14:20:20 | &buffer | provenance | | +| test.rs:25:22:25:35 | ...::stdin | test.rs:25:22:25:37 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | +| test.rs:25:22:25:37 | ...::stdin(...) | test.rs:25:54:25:64 | [post] &mut buffer | provenance | MaD:34 | +| test.rs:25:22:25:37 | ...::stdin(...) | test.rs:25:54:25:64 | [post] &mut buffer [&ref] | provenance | MaD:13 | +| test.rs:25:54:25:64 | [post] &mut buffer | test.rs:26:15:26:20 | buffer | provenance | | +| test.rs:25:54:25:64 | [post] &mut buffer [&ref] | test.rs:25:59:25:64 | [post] buffer | provenance | | +| test.rs:25:59:25:64 | [post] buffer | test.rs:26:15:26:20 | buffer | provenance | | +| test.rs:26:15:26:20 | buffer | test.rs:26:14:26:20 | &buffer | provenance | | +| test.rs:31:22:31:35 | ...::stdin | test.rs:31:22:31:37 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | +| test.rs:31:22:31:37 | ...::stdin(...) | test.rs:31:22:31:44 | ... .lock() | provenance | MaD:35 | +| test.rs:31:22:31:44 | ... .lock() | test.rs:31:61:31:71 | [post] &mut buffer [&ref] | provenance | MaD:13 | +| test.rs:31:61:31:71 | [post] &mut buffer [&ref] | test.rs:31:66:31:71 | [post] buffer | provenance | | +| test.rs:31:66:31:71 | [post] buffer | test.rs:32:15:32:20 | buffer | provenance | | +| test.rs:32:15:32:20 | buffer | test.rs:32:14:32:20 | &buffer | provenance | | +| test.rs:37:9:37:22 | ...::stdin | test.rs:37:9:37:24 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | +| test.rs:37:9:37:24 | ...::stdin(...) | test.rs:37:37:37:47 | [post] &mut buffer | provenance | MaD:33 | +| test.rs:37:9:37:24 | ...::stdin(...) | test.rs:37:37:37:47 | [post] &mut buffer [&ref] | provenance | MaD:11 | +| test.rs:37:37:37:47 | [post] &mut buffer | test.rs:38:15:38:20 | buffer | provenance | | +| test.rs:37:37:37:47 | [post] &mut buffer [&ref] | test.rs:37:42:37:47 | [post] buffer | provenance | | +| test.rs:37:42:37:47 | [post] buffer | test.rs:38:15:38:20 | buffer | provenance | | +| test.rs:38:15:38:20 | buffer | test.rs:38:14:38:20 | &buffer | provenance | | +| test.rs:41:17:41:30 | ...::stdin | test.rs:41:17:41:32 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | +| test.rs:41:17:41:32 | ...::stdin(...) | test.rs:41:17:41:40 | ... .bytes() | provenance | MaD:9 | +| test.rs:41:17:41:40 | ... .bytes() | test.rs:42:14:42:17 | byte | provenance | | +| test.rs:48:13:48:22 | mut reader | test.rs:49:20:49:36 | reader.fill_buf() [Ok] | provenance | MaD:4 | +| test.rs:48:26:48:66 | ...::new(...) | test.rs:48:13:48:22 | mut reader | provenance | | +| test.rs:48:50:48:63 | ...::stdin | test.rs:48:50:48:65 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | +| test.rs:48:50:48:65 | ...::stdin(...) | test.rs:48:26:48:66 | ...::new(...) | provenance | MaD:31 | +| test.rs:49:13:49:16 | data | test.rs:50:15:50:18 | data | provenance | | +| test.rs:49:20:49:36 | reader.fill_buf() [Ok] | test.rs:49:20:49:37 | TryExpr | provenance | | +| test.rs:49:20:49:37 | TryExpr | test.rs:49:13:49:16 | data | provenance | | +| test.rs:50:15:50:18 | data | test.rs:50:14:50:18 | &data | provenance | | +| test.rs:54:13:54:18 | reader | test.rs:55:20:55:34 | reader.buffer() | provenance | MaD:30 | +| test.rs:54:22:54:62 | ...::new(...) | test.rs:54:13:54:18 | reader | provenance | | +| test.rs:54:46:54:59 | ...::stdin | test.rs:54:46:54:61 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | +| test.rs:54:46:54:61 | ...::stdin(...) | test.rs:54:22:54:62 | ...::new(...) | provenance | MaD:31 | +| test.rs:55:13:55:16 | data | test.rs:56:15:56:18 | data | provenance | | +| test.rs:55:20:55:34 | reader.buffer() | test.rs:55:13:55:16 | data | provenance | | +| test.rs:56:15:56:18 | data | test.rs:56:14:56:18 | &data | provenance | | +| test.rs:61:13:61:22 | mut reader | test.rs:62:26:62:36 | [post] &mut buffer [&ref] | provenance | MaD:6 | +| test.rs:61:26:61:66 | ...::new(...) | test.rs:61:13:61:22 | mut reader | provenance | | +| test.rs:61:50:61:63 | ...::stdin | test.rs:61:50:61:65 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | +| test.rs:61:50:61:65 | ...::stdin(...) | test.rs:61:26:61:66 | ...::new(...) | provenance | MaD:31 | +| test.rs:62:26:62:36 | [post] &mut buffer [&ref] | test.rs:62:31:62:36 | [post] buffer | provenance | | +| test.rs:62:31:62:36 | [post] buffer | test.rs:63:15:63:20 | buffer | provenance | | +| test.rs:63:15:63:20 | buffer | test.rs:63:14:63:20 | &buffer | provenance | | +| test.rs:68:13:68:22 | mut reader | test.rs:69:33:69:43 | [post] &mut buffer [&ref] | provenance | MaD:7 | +| test.rs:68:26:68:66 | ...::new(...) | test.rs:68:13:68:22 | mut reader | provenance | | +| test.rs:68:50:68:63 | ...::stdin | test.rs:68:50:68:65 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | +| test.rs:68:50:68:65 | ...::stdin(...) | test.rs:68:26:68:66 | ...::new(...) | provenance | MaD:31 | +| test.rs:69:33:69:43 | [post] &mut buffer [&ref] | test.rs:69:38:69:43 | [post] buffer | provenance | | +| test.rs:69:38:69:43 | [post] buffer | test.rs:70:15:70:20 | buffer | provenance | | +| test.rs:69:38:69:43 | [post] buffer | test.rs:71:14:71:22 | buffer[0] | provenance | | +| test.rs:70:15:70:20 | buffer | test.rs:70:14:70:20 | &buffer | provenance | | +| test.rs:75:13:75:28 | mut reader_split | test.rs:76:14:76:32 | reader_split.next() [Some, Ok] | provenance | MaD:3 | +| test.rs:75:13:75:28 | mut reader_split | test.rs:77:33:77:51 | reader_split.next() [Some, Ok] | provenance | MaD:3 | +| test.rs:75:32:75:72 | ...::new(...) | test.rs:75:32:75:84 | ... .split(...) | provenance | MaD:8 | +| test.rs:75:32:75:84 | ... .split(...) | test.rs:75:13:75:28 | mut reader_split | provenance | | +| test.rs:75:56:75:69 | ...::stdin | test.rs:75:56:75:71 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | +| test.rs:75:56:75:71 | ...::stdin(...) | test.rs:75:32:75:72 | ...::new(...) | provenance | MaD:31 | +| test.rs:76:14:76:32 | reader_split.next() [Some, Ok] | test.rs:76:14:76:41 | ... .unwrap() [Ok] | provenance | MaD:28 | +| test.rs:76:14:76:41 | ... .unwrap() [Ok] | test.rs:76:14:76:50 | ... .unwrap() | provenance | MaD:29 | +| test.rs:77:19:77:29 | Some(...) [Some, Ok] | test.rs:77:24:77:28 | chunk [Ok] | provenance | | +| test.rs:77:24:77:28 | chunk [Ok] | test.rs:78:18:78:31 | chunk.unwrap() | provenance | MaD:29 | +| test.rs:77:33:77:51 | reader_split.next() [Some, Ok] | test.rs:77:19:77:29 | Some(...) [Some, Ok] | provenance | | +| test.rs:83:13:83:18 | reader | test.rs:84:21:84:34 | reader.lines() | provenance | MaD:5 | +| test.rs:83:22:83:62 | ...::new(...) | test.rs:83:13:83:18 | reader | provenance | | +| test.rs:83:46:83:59 | ...::stdin | test.rs:83:46:83:61 | ...::stdin(...) | provenance | Src:MaD:1 MaD:1 | +| test.rs:83:46:83:61 | ...::stdin(...) | test.rs:83:22:83:62 | ...::new(...) | provenance | MaD:31 | +| test.rs:84:21:84:34 | reader.lines() | test.rs:85:18:85:21 | line | provenance | | +| test.rs:109:13:109:21 | mut stdin | test.rs:111:33:111:43 | [post] &mut buffer [&ref] | provenance | MaD:19 | +| test.rs:109:25:109:40 | ...::stdin | test.rs:109:25:109:42 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | +| test.rs:109:25:109:42 | ...::stdin(...) | test.rs:109:13:109:21 | mut stdin | provenance | | +| test.rs:111:33:111:43 | [post] &mut buffer [&ref] | test.rs:111:38:111:43 | [post] buffer | provenance | | +| test.rs:111:38:111:43 | [post] buffer | test.rs:112:15:112:20 | buffer | provenance | | +| test.rs:112:15:112:20 | buffer | test.rs:112:14:112:20 | &buffer | provenance | | +| test.rs:116:13:116:21 | mut stdin | test.rs:118:40:118:50 | [post] &mut buffer [&ref] | provenance | MaD:25 | +| test.rs:116:25:116:40 | ...::stdin | test.rs:116:25:116:42 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | +| test.rs:116:25:116:42 | ...::stdin(...) | test.rs:116:13:116:21 | mut stdin | provenance | | +| test.rs:118:40:118:50 | [post] &mut buffer [&ref] | test.rs:118:45:118:50 | [post] buffer | provenance | | +| test.rs:118:45:118:50 | [post] buffer | test.rs:119:15:119:20 | buffer | provenance | | +| test.rs:119:15:119:20 | buffer | test.rs:119:14:119:20 | &buffer | provenance | | +| test.rs:123:13:123:21 | mut stdin | test.rs:125:43:125:53 | [post] &mut buffer [&ref] | provenance | MaD:26 | +| test.rs:123:25:123:40 | ...::stdin | test.rs:123:25:123:42 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | +| test.rs:123:25:123:42 | ...::stdin(...) | test.rs:123:13:123:21 | mut stdin | provenance | | +| test.rs:125:43:125:53 | [post] &mut buffer [&ref] | test.rs:125:48:125:53 | [post] buffer | provenance | | +| test.rs:125:48:125:53 | [post] buffer | test.rs:126:15:126:20 | buffer | provenance | | +| test.rs:126:15:126:20 | buffer | test.rs:126:14:126:20 | &buffer | provenance | | +| test.rs:130:13:130:21 | mut stdin | test.rs:132:26:132:36 | [post] &mut buffer [&ref] | provenance | MaD:21 | +| test.rs:130:25:130:40 | ...::stdin | test.rs:130:25:130:42 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | +| test.rs:130:25:130:42 | ...::stdin(...) | test.rs:130:13:130:21 | mut stdin | provenance | | +| test.rs:132:26:132:36 | [post] &mut buffer [&ref] | test.rs:132:31:132:36 | [post] buffer | provenance | | +| test.rs:132:31:132:36 | [post] buffer | test.rs:133:15:133:20 | buffer | provenance | | +| test.rs:133:15:133:20 | buffer | test.rs:133:14:133:20 | &buffer | provenance | | +| test.rs:137:13:137:21 | mut stdin | test.rs:138:18:138:32 | stdin.read_u8() [future, Ok] | provenance | MaD:27 | +| test.rs:137:13:137:21 | mut stdin | test.rs:139:18:139:33 | stdin.read_i16() [future, Ok] | provenance | MaD:23 | +| test.rs:137:13:137:21 | mut stdin | test.rs:140:18:140:33 | stdin.read_f32() [future, Ok] | provenance | MaD:22 | +| test.rs:137:13:137:21 | mut stdin | test.rs:141:18:141:36 | stdin.read_i64_le() [future, Ok] | provenance | MaD:24 | +| test.rs:137:25:137:40 | ...::stdin | test.rs:137:25:137:42 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | +| test.rs:137:25:137:42 | ...::stdin(...) | test.rs:137:13:137:21 | mut stdin | provenance | | +| test.rs:138:13:138:14 | v1 | test.rs:142:14:142:15 | v1 | provenance | | +| test.rs:138:18:138:32 | stdin.read_u8() [future, Ok] | test.rs:138:18:138:38 | await ... [Ok] | provenance | | +| test.rs:138:18:138:38 | await ... [Ok] | test.rs:138:18:138:39 | TryExpr | provenance | | +| test.rs:138:18:138:39 | TryExpr | test.rs:138:13:138:14 | v1 | provenance | | +| test.rs:139:13:139:14 | v2 | test.rs:143:14:143:15 | v2 | provenance | | +| test.rs:139:18:139:33 | stdin.read_i16() [future, Ok] | test.rs:139:18:139:39 | await ... [Ok] | provenance | | +| test.rs:139:18:139:39 | await ... [Ok] | test.rs:139:18:139:40 | TryExpr | provenance | | +| test.rs:139:18:139:40 | TryExpr | test.rs:139:13:139:14 | v2 | provenance | | +| test.rs:140:13:140:14 | v3 | test.rs:144:14:144:15 | v3 | provenance | | +| test.rs:140:18:140:33 | stdin.read_f32() [future, Ok] | test.rs:140:18:140:39 | await ... [Ok] | provenance | | +| test.rs:140:18:140:39 | await ... [Ok] | test.rs:140:18:140:40 | TryExpr | provenance | | +| test.rs:140:18:140:40 | TryExpr | test.rs:140:13:140:14 | v3 | provenance | | +| test.rs:141:13:141:14 | v4 | test.rs:145:14:145:15 | v4 | provenance | | +| test.rs:141:18:141:36 | stdin.read_i64_le() [future, Ok] | test.rs:141:18:141:42 | await ... [Ok] | provenance | | +| test.rs:141:18:141:42 | await ... [Ok] | test.rs:141:18:141:43 | TryExpr | provenance | | +| test.rs:141:18:141:43 | TryExpr | test.rs:141:13:141:14 | v4 | provenance | | +| test.rs:149:13:149:21 | mut stdin | test.rs:151:24:151:34 | [post] &mut buffer [&ref] | provenance | MaD:20 | +| test.rs:149:25:149:40 | ...::stdin | test.rs:149:25:149:42 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | +| test.rs:149:25:149:42 | ...::stdin(...) | test.rs:149:13:149:21 | mut stdin | provenance | | +| test.rs:151:24:151:34 | [post] &mut buffer [&ref] | test.rs:151:29:151:34 | [post] buffer | provenance | | +| test.rs:151:29:151:34 | [post] buffer | test.rs:152:15:152:20 | buffer | provenance | | +| test.rs:152:15:152:20 | buffer | test.rs:152:14:152:20 | &buffer | provenance | | +| test.rs:158:13:158:22 | mut reader | test.rs:159:20:159:36 | reader.fill_buf() [future, Ok] | provenance | MaD:14 | +| test.rs:158:26:158:70 | ...::new(...) | test.rs:158:13:158:22 | mut reader | provenance | | +| test.rs:158:52:158:67 | ...::stdin | test.rs:158:52:158:69 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | +| test.rs:158:52:158:69 | ...::stdin(...) | test.rs:158:26:158:70 | ...::new(...) | provenance | MaD:37 | +| test.rs:159:13:159:16 | data | test.rs:160:15:160:18 | data | provenance | | +| test.rs:159:20:159:36 | reader.fill_buf() [future, Ok] | test.rs:159:20:159:42 | await ... [Ok] | provenance | | +| test.rs:159:20:159:42 | await ... [Ok] | test.rs:159:20:159:43 | TryExpr | provenance | | +| test.rs:159:20:159:43 | TryExpr | test.rs:159:13:159:16 | data | provenance | | +| test.rs:160:15:160:18 | data | test.rs:160:14:160:18 | &data | provenance | | +| test.rs:164:13:164:18 | reader | test.rs:165:20:165:34 | reader.buffer() | provenance | MaD:36 | +| test.rs:164:22:164:66 | ...::new(...) | test.rs:164:13:164:18 | reader | provenance | | +| test.rs:164:48:164:63 | ...::stdin | test.rs:164:48:164:65 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | +| test.rs:164:48:164:65 | ...::stdin(...) | test.rs:164:22:164:66 | ...::new(...) | provenance | MaD:37 | +| test.rs:165:13:165:16 | data | test.rs:166:15:166:18 | data | provenance | | +| test.rs:165:20:165:34 | reader.buffer() | test.rs:165:13:165:16 | data | provenance | | +| test.rs:166:15:166:18 | data | test.rs:166:14:166:18 | &data | provenance | | +| test.rs:171:13:171:22 | mut reader | test.rs:172:26:172:36 | [post] &mut buffer [&ref] | provenance | MaD:16 | +| test.rs:171:26:171:70 | ...::new(...) | test.rs:171:13:171:22 | mut reader | provenance | | +| test.rs:171:52:171:67 | ...::stdin | test.rs:171:52:171:69 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | +| test.rs:171:52:171:69 | ...::stdin(...) | test.rs:171:26:171:70 | ...::new(...) | provenance | MaD:37 | +| test.rs:172:26:172:36 | [post] &mut buffer [&ref] | test.rs:172:31:172:36 | [post] buffer | provenance | | +| test.rs:172:31:172:36 | [post] buffer | test.rs:173:15:173:20 | buffer | provenance | | +| test.rs:173:15:173:20 | buffer | test.rs:173:14:173:20 | &buffer | provenance | | +| test.rs:178:13:178:22 | mut reader | test.rs:179:33:179:43 | [post] &mut buffer [&ref] | provenance | MaD:17 | +| test.rs:178:26:178:70 | ...::new(...) | test.rs:178:13:178:22 | mut reader | provenance | | +| test.rs:178:52:178:67 | ...::stdin | test.rs:178:52:178:69 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | +| test.rs:178:52:178:69 | ...::stdin(...) | test.rs:178:26:178:70 | ...::new(...) | provenance | MaD:37 | +| test.rs:179:33:179:43 | [post] &mut buffer [&ref] | test.rs:179:38:179:43 | [post] buffer | provenance | | +| test.rs:179:38:179:43 | [post] buffer | test.rs:180:15:180:20 | buffer | provenance | | +| test.rs:179:38:179:43 | [post] buffer | test.rs:181:14:181:22 | buffer[0] | provenance | | +| test.rs:180:15:180:20 | buffer | test.rs:180:14:180:20 | &buffer | provenance | | +| test.rs:185:13:185:28 | mut reader_split | test.rs:186:14:186:40 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:39 | +| test.rs:185:13:185:28 | mut reader_split | test.rs:187:33:187:59 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:39 | +| test.rs:185:32:185:76 | ...::new(...) | test.rs:185:32:185:88 | ... .split(...) | provenance | MaD:18 | +| test.rs:185:32:185:88 | ... .split(...) | test.rs:185:13:185:28 | mut reader_split | provenance | | +| test.rs:185:58:185:73 | ...::stdin | test.rs:185:58:185:75 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | +| test.rs:185:58:185:75 | ...::stdin(...) | test.rs:185:32:185:76 | ...::new(...) | provenance | MaD:37 | +| test.rs:186:14:186:40 | reader_split.next_segment() [future, Ok, Some] | test.rs:186:14:186:46 | await ... [Ok, Some] | provenance | | +| test.rs:186:14:186:46 | await ... [Ok, Some] | test.rs:186:14:186:47 | TryExpr [Some] | provenance | | +| test.rs:186:14:186:47 | TryExpr [Some] | test.rs:186:14:186:56 | ... .unwrap() | provenance | MaD:28 | +| test.rs:187:19:187:29 | Some(...) [Some] | test.rs:187:24:187:28 | chunk | provenance | | +| test.rs:187:24:187:28 | chunk | test.rs:188:18:188:22 | chunk | provenance | | +| test.rs:187:33:187:59 | reader_split.next_segment() [future, Ok, Some] | test.rs:187:33:187:65 | await ... [Ok, Some] | provenance | | +| test.rs:187:33:187:65 | await ... [Ok, Some] | test.rs:187:33:187:66 | TryExpr [Some] | provenance | | +| test.rs:187:33:187:66 | TryExpr [Some] | test.rs:187:19:187:29 | Some(...) [Some] | provenance | | +| test.rs:193:13:193:18 | reader | test.rs:194:25:194:38 | reader.lines() | provenance | MaD:15 | +| test.rs:193:22:193:66 | ...::new(...) | test.rs:193:13:193:18 | reader | provenance | | +| test.rs:193:48:193:63 | ...::stdin | test.rs:193:48:193:65 | ...::stdin(...) | provenance | Src:MaD:2 MaD:2 | +| test.rs:193:48:193:65 | ...::stdin(...) | test.rs:193:22:193:66 | ...::new(...) | provenance | MaD:37 | +| test.rs:194:13:194:21 | mut lines | test.rs:195:14:195:30 | lines.next_line() [future, Ok, Some] | provenance | MaD:38 | +| test.rs:194:13:194:21 | mut lines | test.rs:196:32:196:48 | lines.next_line() [future, Ok, Some] | provenance | MaD:38 | +| test.rs:194:25:194:38 | reader.lines() | test.rs:194:13:194:21 | mut lines | provenance | | +| test.rs:195:14:195:30 | lines.next_line() [future, Ok, Some] | test.rs:195:14:195:36 | await ... [Ok, Some] | provenance | | +| test.rs:195:14:195:36 | await ... [Ok, Some] | test.rs:195:14:195:37 | TryExpr [Some] | provenance | | +| test.rs:195:14:195:37 | TryExpr [Some] | test.rs:195:14:195:46 | ... .unwrap() | provenance | MaD:28 | +| test.rs:196:19:196:28 | Some(...) [Some] | test.rs:196:24:196:27 | line | provenance | | +| test.rs:196:24:196:27 | line | test.rs:197:18:197:21 | line | provenance | | +| test.rs:196:32:196:48 | lines.next_line() [future, Ok, Some] | test.rs:196:32:196:54 | await ... [Ok, Some] | provenance | | +| test.rs:196:32:196:54 | await ... [Ok, Some] | test.rs:196:32:196:55 | TryExpr [Some] | provenance | | +| test.rs:196:32:196:55 | TryExpr [Some] | test.rs:196:19:196:28 | Some(...) [Some] | provenance | | +nodes +| test.rs:13:22:13:35 | ...::stdin | semmle.label | ...::stdin | +| test.rs:13:22:13:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:13:44:13:54 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:13:44:13:54 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:13:49:13:54 | [post] buffer | semmle.label | [post] buffer | +| test.rs:14:14:14:20 | &buffer | semmle.label | &buffer | +| test.rs:14:15:14:20 | buffer | semmle.label | buffer | +| test.rs:19:22:19:35 | ...::stdin | semmle.label | ...::stdin | +| test.rs:19:22:19:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:19:51:19:61 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:19:56:19:61 | [post] buffer | semmle.label | [post] buffer | +| test.rs:20:14:20:20 | &buffer | semmle.label | &buffer | +| test.rs:20:15:20:20 | buffer | semmle.label | buffer | +| test.rs:25:22:25:35 | ...::stdin | semmle.label | ...::stdin | +| test.rs:25:22:25:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:25:54:25:64 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:25:54:25:64 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:25:59:25:64 | [post] buffer | semmle.label | [post] buffer | +| test.rs:26:14:26:20 | &buffer | semmle.label | &buffer | +| test.rs:26:15:26:20 | buffer | semmle.label | buffer | +| test.rs:31:22:31:35 | ...::stdin | semmle.label | ...::stdin | +| test.rs:31:22:31:37 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:31:22:31:44 | ... .lock() | semmle.label | ... .lock() | +| test.rs:31:61:31:71 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:31:66:31:71 | [post] buffer | semmle.label | [post] buffer | +| test.rs:32:14:32:20 | &buffer | semmle.label | &buffer | +| test.rs:32:15:32:20 | buffer | semmle.label | buffer | +| test.rs:37:9:37:22 | ...::stdin | semmle.label | ...::stdin | +| test.rs:37:9:37:24 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:37:37:37:47 | [post] &mut buffer | semmle.label | [post] &mut buffer | +| test.rs:37:37:37:47 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:37:42:37:47 | [post] buffer | semmle.label | [post] buffer | +| test.rs:38:14:38:20 | &buffer | semmle.label | &buffer | +| test.rs:38:15:38:20 | buffer | semmle.label | buffer | +| test.rs:41:17:41:30 | ...::stdin | semmle.label | ...::stdin | +| test.rs:41:17:41:32 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:41:17:41:40 | ... .bytes() | semmle.label | ... .bytes() | +| test.rs:42:14:42:17 | byte | semmle.label | byte | +| test.rs:48:13:48:22 | mut reader | semmle.label | mut reader | +| test.rs:48:26:48:66 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:48:50:48:63 | ...::stdin | semmle.label | ...::stdin | +| test.rs:48:50:48:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:49:13:49:16 | data | semmle.label | data | +| test.rs:49:20:49:36 | reader.fill_buf() [Ok] | semmle.label | reader.fill_buf() [Ok] | +| test.rs:49:20:49:37 | TryExpr | semmle.label | TryExpr | +| test.rs:50:14:50:18 | &data | semmle.label | &data | +| test.rs:50:15:50:18 | data | semmle.label | data | +| test.rs:54:13:54:18 | reader | semmle.label | reader | +| test.rs:54:22:54:62 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:54:46:54:59 | ...::stdin | semmle.label | ...::stdin | +| test.rs:54:46:54:61 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:55:13:55:16 | data | semmle.label | data | +| test.rs:55:20:55:34 | reader.buffer() | semmle.label | reader.buffer() | +| test.rs:56:14:56:18 | &data | semmle.label | &data | +| test.rs:56:15:56:18 | data | semmle.label | data | +| test.rs:61:13:61:22 | mut reader | semmle.label | mut reader | +| test.rs:61:26:61:66 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:61:50:61:63 | ...::stdin | semmle.label | ...::stdin | +| test.rs:61:50:61:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:62:26:62:36 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:62:31:62:36 | [post] buffer | semmle.label | [post] buffer | +| test.rs:63:14:63:20 | &buffer | semmle.label | &buffer | +| test.rs:63:15:63:20 | buffer | semmle.label | buffer | +| test.rs:68:13:68:22 | mut reader | semmle.label | mut reader | +| test.rs:68:26:68:66 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:68:50:68:63 | ...::stdin | semmle.label | ...::stdin | +| test.rs:68:50:68:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:69:33:69:43 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:69:38:69:43 | [post] buffer | semmle.label | [post] buffer | +| test.rs:70:14:70:20 | &buffer | semmle.label | &buffer | +| test.rs:70:15:70:20 | buffer | semmle.label | buffer | +| test.rs:71:14:71:22 | buffer[0] | semmle.label | buffer[0] | +| test.rs:75:13:75:28 | mut reader_split | semmle.label | mut reader_split | +| test.rs:75:32:75:72 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:75:32:75:84 | ... .split(...) | semmle.label | ... .split(...) | +| test.rs:75:56:75:69 | ...::stdin | semmle.label | ...::stdin | +| test.rs:75:56:75:71 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:76:14:76:32 | reader_split.next() [Some, Ok] | semmle.label | reader_split.next() [Some, Ok] | +| test.rs:76:14:76:41 | ... .unwrap() [Ok] | semmle.label | ... .unwrap() [Ok] | +| test.rs:76:14:76:50 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:77:19:77:29 | Some(...) [Some, Ok] | semmle.label | Some(...) [Some, Ok] | +| test.rs:77:24:77:28 | chunk [Ok] | semmle.label | chunk [Ok] | +| test.rs:77:33:77:51 | reader_split.next() [Some, Ok] | semmle.label | reader_split.next() [Some, Ok] | +| test.rs:78:18:78:31 | chunk.unwrap() | semmle.label | chunk.unwrap() | +| test.rs:83:13:83:18 | reader | semmle.label | reader | +| test.rs:83:22:83:62 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:83:46:83:59 | ...::stdin | semmle.label | ...::stdin | +| test.rs:83:46:83:61 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:84:21:84:34 | reader.lines() | semmle.label | reader.lines() | +| test.rs:85:18:85:21 | line | semmle.label | line | +| test.rs:109:13:109:21 | mut stdin | semmle.label | mut stdin | +| test.rs:109:25:109:40 | ...::stdin | semmle.label | ...::stdin | +| test.rs:109:25:109:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:111:33:111:43 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:111:38:111:43 | [post] buffer | semmle.label | [post] buffer | +| test.rs:112:14:112:20 | &buffer | semmle.label | &buffer | +| test.rs:112:15:112:20 | buffer | semmle.label | buffer | +| test.rs:116:13:116:21 | mut stdin | semmle.label | mut stdin | +| test.rs:116:25:116:40 | ...::stdin | semmle.label | ...::stdin | +| test.rs:116:25:116:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:118:40:118:50 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:118:45:118:50 | [post] buffer | semmle.label | [post] buffer | +| test.rs:119:14:119:20 | &buffer | semmle.label | &buffer | +| test.rs:119:15:119:20 | buffer | semmle.label | buffer | +| test.rs:123:13:123:21 | mut stdin | semmle.label | mut stdin | +| test.rs:123:25:123:40 | ...::stdin | semmle.label | ...::stdin | +| test.rs:123:25:123:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:125:43:125:53 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:125:48:125:53 | [post] buffer | semmle.label | [post] buffer | +| test.rs:126:14:126:20 | &buffer | semmle.label | &buffer | +| test.rs:126:15:126:20 | buffer | semmle.label | buffer | +| test.rs:130:13:130:21 | mut stdin | semmle.label | mut stdin | +| test.rs:130:25:130:40 | ...::stdin | semmle.label | ...::stdin | +| test.rs:130:25:130:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:132:26:132:36 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:132:31:132:36 | [post] buffer | semmle.label | [post] buffer | +| test.rs:133:14:133:20 | &buffer | semmle.label | &buffer | +| test.rs:133:15:133:20 | buffer | semmle.label | buffer | +| test.rs:137:13:137:21 | mut stdin | semmle.label | mut stdin | +| test.rs:137:25:137:40 | ...::stdin | semmle.label | ...::stdin | +| test.rs:137:25:137:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:138:13:138:14 | v1 | semmle.label | v1 | +| test.rs:138:18:138:32 | stdin.read_u8() [future, Ok] | semmle.label | stdin.read_u8() [future, Ok] | +| test.rs:138:18:138:38 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:138:18:138:39 | TryExpr | semmle.label | TryExpr | +| test.rs:139:13:139:14 | v2 | semmle.label | v2 | +| test.rs:139:18:139:33 | stdin.read_i16() [future, Ok] | semmle.label | stdin.read_i16() [future, Ok] | +| test.rs:139:18:139:39 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:139:18:139:40 | TryExpr | semmle.label | TryExpr | +| test.rs:140:13:140:14 | v3 | semmle.label | v3 | +| test.rs:140:18:140:33 | stdin.read_f32() [future, Ok] | semmle.label | stdin.read_f32() [future, Ok] | +| test.rs:140:18:140:39 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:140:18:140:40 | TryExpr | semmle.label | TryExpr | +| test.rs:141:13:141:14 | v4 | semmle.label | v4 | +| test.rs:141:18:141:36 | stdin.read_i64_le() [future, Ok] | semmle.label | stdin.read_i64_le() [future, Ok] | +| test.rs:141:18:141:42 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:141:18:141:43 | TryExpr | semmle.label | TryExpr | +| test.rs:142:14:142:15 | v1 | semmle.label | v1 | +| test.rs:143:14:143:15 | v2 | semmle.label | v2 | +| test.rs:144:14:144:15 | v3 | semmle.label | v3 | +| test.rs:145:14:145:15 | v4 | semmle.label | v4 | +| test.rs:149:13:149:21 | mut stdin | semmle.label | mut stdin | +| test.rs:149:25:149:40 | ...::stdin | semmle.label | ...::stdin | +| test.rs:149:25:149:42 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:151:24:151:34 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:151:29:151:34 | [post] buffer | semmle.label | [post] buffer | +| test.rs:152:14:152:20 | &buffer | semmle.label | &buffer | +| test.rs:152:15:152:20 | buffer | semmle.label | buffer | +| test.rs:158:13:158:22 | mut reader | semmle.label | mut reader | +| test.rs:158:26:158:70 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:158:52:158:67 | ...::stdin | semmle.label | ...::stdin | +| test.rs:158:52:158:69 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:159:13:159:16 | data | semmle.label | data | +| test.rs:159:20:159:36 | reader.fill_buf() [future, Ok] | semmle.label | reader.fill_buf() [future, Ok] | +| test.rs:159:20:159:42 | await ... [Ok] | semmle.label | await ... [Ok] | +| test.rs:159:20:159:43 | TryExpr | semmle.label | TryExpr | +| test.rs:160:14:160:18 | &data | semmle.label | &data | +| test.rs:160:15:160:18 | data | semmle.label | data | +| test.rs:164:13:164:18 | reader | semmle.label | reader | +| test.rs:164:22:164:66 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:164:48:164:63 | ...::stdin | semmle.label | ...::stdin | +| test.rs:164:48:164:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:165:13:165:16 | data | semmle.label | data | +| test.rs:165:20:165:34 | reader.buffer() | semmle.label | reader.buffer() | +| test.rs:166:14:166:18 | &data | semmle.label | &data | +| test.rs:166:15:166:18 | data | semmle.label | data | +| test.rs:171:13:171:22 | mut reader | semmle.label | mut reader | +| test.rs:171:26:171:70 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:171:52:171:67 | ...::stdin | semmle.label | ...::stdin | +| test.rs:171:52:171:69 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:172:26:172:36 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:172:31:172:36 | [post] buffer | semmle.label | [post] buffer | +| test.rs:173:14:173:20 | &buffer | semmle.label | &buffer | +| test.rs:173:15:173:20 | buffer | semmle.label | buffer | +| test.rs:178:13:178:22 | mut reader | semmle.label | mut reader | +| test.rs:178:26:178:70 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:178:52:178:67 | ...::stdin | semmle.label | ...::stdin | +| test.rs:178:52:178:69 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:179:33:179:43 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] | +| test.rs:179:38:179:43 | [post] buffer | semmle.label | [post] buffer | +| test.rs:180:14:180:20 | &buffer | semmle.label | &buffer | +| test.rs:180:15:180:20 | buffer | semmle.label | buffer | +| test.rs:181:14:181:22 | buffer[0] | semmle.label | buffer[0] | +| test.rs:185:13:185:28 | mut reader_split | semmle.label | mut reader_split | +| test.rs:185:32:185:76 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:185:32:185:88 | ... .split(...) | semmle.label | ... .split(...) | +| test.rs:185:58:185:73 | ...::stdin | semmle.label | ...::stdin | +| test.rs:185:58:185:75 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:186:14:186:40 | reader_split.next_segment() [future, Ok, Some] | semmle.label | reader_split.next_segment() [future, Ok, Some] | +| test.rs:186:14:186:46 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | +| test.rs:186:14:186:47 | TryExpr [Some] | semmle.label | TryExpr [Some] | +| test.rs:186:14:186:56 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:187:19:187:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | +| test.rs:187:24:187:28 | chunk | semmle.label | chunk | +| test.rs:187:33:187:59 | reader_split.next_segment() [future, Ok, Some] | semmle.label | reader_split.next_segment() [future, Ok, Some] | +| test.rs:187:33:187:65 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | +| test.rs:187:33:187:66 | TryExpr [Some] | semmle.label | TryExpr [Some] | +| test.rs:188:18:188:22 | chunk | semmle.label | chunk | +| test.rs:193:13:193:18 | reader | semmle.label | reader | +| test.rs:193:22:193:66 | ...::new(...) | semmle.label | ...::new(...) | +| test.rs:193:48:193:63 | ...::stdin | semmle.label | ...::stdin | +| test.rs:193:48:193:65 | ...::stdin(...) | semmle.label | ...::stdin(...) | +| test.rs:194:13:194:21 | mut lines | semmle.label | mut lines | +| test.rs:194:25:194:38 | reader.lines() | semmle.label | reader.lines() | +| test.rs:195:14:195:30 | lines.next_line() [future, Ok, Some] | semmle.label | lines.next_line() [future, Ok, Some] | +| test.rs:195:14:195:36 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | +| test.rs:195:14:195:37 | TryExpr [Some] | semmle.label | TryExpr [Some] | +| test.rs:195:14:195:46 | ... .unwrap() | semmle.label | ... .unwrap() | +| test.rs:196:19:196:28 | Some(...) [Some] | semmle.label | Some(...) [Some] | +| test.rs:196:24:196:27 | line | semmle.label | line | +| test.rs:196:32:196:48 | lines.next_line() [future, Ok, Some] | semmle.label | lines.next_line() [future, Ok, Some] | +| test.rs:196:32:196:54 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] | +| test.rs:196:32:196:55 | TryExpr [Some] | semmle.label | TryExpr [Some] | +| test.rs:197:18:197:21 | line | semmle.label | line | +subpaths +testFailures +#select +| test.rs:14:14:14:20 | &buffer | test.rs:13:22:13:35 | ...::stdin | test.rs:14:14:14:20 | &buffer | $@ | test.rs:13:22:13:35 | ...::stdin | ...::stdin | +| test.rs:20:14:20:20 | &buffer | test.rs:19:22:19:35 | ...::stdin | test.rs:20:14:20:20 | &buffer | $@ | test.rs:19:22:19:35 | ...::stdin | ...::stdin | +| test.rs:26:14:26:20 | &buffer | test.rs:25:22:25:35 | ...::stdin | test.rs:26:14:26:20 | &buffer | $@ | test.rs:25:22:25:35 | ...::stdin | ...::stdin | +| test.rs:32:14:32:20 | &buffer | test.rs:31:22:31:35 | ...::stdin | test.rs:32:14:32:20 | &buffer | $@ | test.rs:31:22:31:35 | ...::stdin | ...::stdin | +| test.rs:38:14:38:20 | &buffer | test.rs:37:9:37:22 | ...::stdin | test.rs:38:14:38:20 | &buffer | $@ | test.rs:37:9:37:22 | ...::stdin | ...::stdin | +| test.rs:42:14:42:17 | byte | test.rs:41:17:41:30 | ...::stdin | test.rs:42:14:42:17 | byte | $@ | test.rs:41:17:41:30 | ...::stdin | ...::stdin | +| test.rs:50:14:50:18 | &data | test.rs:48:50:48:63 | ...::stdin | test.rs:50:14:50:18 | &data | $@ | test.rs:48:50:48:63 | ...::stdin | ...::stdin | +| test.rs:56:14:56:18 | &data | test.rs:54:46:54:59 | ...::stdin | test.rs:56:14:56:18 | &data | $@ | test.rs:54:46:54:59 | ...::stdin | ...::stdin | +| test.rs:63:14:63:20 | &buffer | test.rs:61:50:61:63 | ...::stdin | test.rs:63:14:63:20 | &buffer | $@ | test.rs:61:50:61:63 | ...::stdin | ...::stdin | +| test.rs:70:14:70:20 | &buffer | test.rs:68:50:68:63 | ...::stdin | test.rs:70:14:70:20 | &buffer | $@ | test.rs:68:50:68:63 | ...::stdin | ...::stdin | +| test.rs:71:14:71:22 | buffer[0] | test.rs:68:50:68:63 | ...::stdin | test.rs:71:14:71:22 | buffer[0] | $@ | test.rs:68:50:68:63 | ...::stdin | ...::stdin | +| test.rs:76:14:76:50 | ... .unwrap() | test.rs:75:56:75:69 | ...::stdin | test.rs:76:14:76:50 | ... .unwrap() | $@ | test.rs:75:56:75:69 | ...::stdin | ...::stdin | +| test.rs:78:18:78:31 | chunk.unwrap() | test.rs:75:56:75:69 | ...::stdin | test.rs:78:18:78:31 | chunk.unwrap() | $@ | test.rs:75:56:75:69 | ...::stdin | ...::stdin | +| test.rs:85:18:85:21 | line | test.rs:83:46:83:59 | ...::stdin | test.rs:85:18:85:21 | line | $@ | test.rs:83:46:83:59 | ...::stdin | ...::stdin | +| test.rs:112:14:112:20 | &buffer | test.rs:109:25:109:40 | ...::stdin | test.rs:112:14:112:20 | &buffer | $@ | test.rs:109:25:109:40 | ...::stdin | ...::stdin | +| test.rs:119:14:119:20 | &buffer | test.rs:116:25:116:40 | ...::stdin | test.rs:119:14:119:20 | &buffer | $@ | test.rs:116:25:116:40 | ...::stdin | ...::stdin | +| test.rs:126:14:126:20 | &buffer | test.rs:123:25:123:40 | ...::stdin | test.rs:126:14:126:20 | &buffer | $@ | test.rs:123:25:123:40 | ...::stdin | ...::stdin | +| test.rs:133:14:133:20 | &buffer | test.rs:130:25:130:40 | ...::stdin | test.rs:133:14:133:20 | &buffer | $@ | test.rs:130:25:130:40 | ...::stdin | ...::stdin | +| test.rs:142:14:142:15 | v1 | test.rs:137:25:137:40 | ...::stdin | test.rs:142:14:142:15 | v1 | $@ | test.rs:137:25:137:40 | ...::stdin | ...::stdin | +| test.rs:143:14:143:15 | v2 | test.rs:137:25:137:40 | ...::stdin | test.rs:143:14:143:15 | v2 | $@ | test.rs:137:25:137:40 | ...::stdin | ...::stdin | +| test.rs:144:14:144:15 | v3 | test.rs:137:25:137:40 | ...::stdin | test.rs:144:14:144:15 | v3 | $@ | test.rs:137:25:137:40 | ...::stdin | ...::stdin | +| test.rs:145:14:145:15 | v4 | test.rs:137:25:137:40 | ...::stdin | test.rs:145:14:145:15 | v4 | $@ | test.rs:137:25:137:40 | ...::stdin | ...::stdin | +| test.rs:152:14:152:20 | &buffer | test.rs:149:25:149:40 | ...::stdin | test.rs:152:14:152:20 | &buffer | $@ | test.rs:149:25:149:40 | ...::stdin | ...::stdin | +| test.rs:160:14:160:18 | &data | test.rs:158:52:158:67 | ...::stdin | test.rs:160:14:160:18 | &data | $@ | test.rs:158:52:158:67 | ...::stdin | ...::stdin | +| test.rs:166:14:166:18 | &data | test.rs:164:48:164:63 | ...::stdin | test.rs:166:14:166:18 | &data | $@ | test.rs:164:48:164:63 | ...::stdin | ...::stdin | +| test.rs:173:14:173:20 | &buffer | test.rs:171:52:171:67 | ...::stdin | test.rs:173:14:173:20 | &buffer | $@ | test.rs:171:52:171:67 | ...::stdin | ...::stdin | +| test.rs:180:14:180:20 | &buffer | test.rs:178:52:178:67 | ...::stdin | test.rs:180:14:180:20 | &buffer | $@ | test.rs:178:52:178:67 | ...::stdin | ...::stdin | +| test.rs:181:14:181:22 | buffer[0] | test.rs:178:52:178:67 | ...::stdin | test.rs:181:14:181:22 | buffer[0] | $@ | test.rs:178:52:178:67 | ...::stdin | ...::stdin | +| test.rs:186:14:186:56 | ... .unwrap() | test.rs:185:58:185:73 | ...::stdin | test.rs:186:14:186:56 | ... .unwrap() | $@ | test.rs:185:58:185:73 | ...::stdin | ...::stdin | +| test.rs:188:18:188:22 | chunk | test.rs:185:58:185:73 | ...::stdin | test.rs:188:18:188:22 | chunk | $@ | test.rs:185:58:185:73 | ...::stdin | ...::stdin | +| test.rs:195:14:195:46 | ... .unwrap() | test.rs:193:48:193:63 | ...::stdin | test.rs:195:14:195:46 | ... .unwrap() | $@ | test.rs:193:48:193:63 | ...::stdin | ...::stdin | +| test.rs:197:18:197:21 | line | test.rs:193:48:193:63 | ...::stdin | test.rs:197:18:197:21 | line | $@ | test.rs:193:48:193:63 | ...::stdin | ...::stdin | diff --git a/rust/ql/test/library-tests/dataflow/sources/stdin/InlineFlow.qlref b/rust/ql/test/library-tests/dataflow/sources/stdin/InlineFlow.qlref new file mode 100644 index 000000000000..e0f7493db396 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/stdin/InlineFlow.qlref @@ -0,0 +1,2 @@ +query: ../env/InlineFlow.ql + diff --git a/rust/ql/test/library-tests/dataflow/sources/stdin/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/stdin/TaintSources.expected new file mode 100644 index 000000000000..085237733145 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/stdin/TaintSources.expected @@ -0,0 +1,26 @@ +| test.rs:13:22:13:35 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:19:22:19:35 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:25:22:25:35 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:31:22:31:35 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:37:9:37:22 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:41:17:41:30 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:48:50:48:63 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:54:46:54:59 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:61:50:61:63 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:68:50:68:63 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:75:56:75:69 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:83:46:83:59 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:90:46:90:59 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:96:46:96:59 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:109:25:109:40 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:116:25:116:40 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:123:25:123:40 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:130:25:130:40 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:137:25:137:40 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:149:25:149:40 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:158:52:158:67 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:164:48:164:63 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:171:52:171:67 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:178:52:178:67 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:185:58:185:73 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | +| test.rs:193:48:193:63 | ...::stdin | Flow source 'StdInSource' of type stdin (DEFAULT). | diff --git a/rust/ql/test/library-tests/dataflow/sources/stdin/TaintSources.qlref b/rust/ql/test/library-tests/dataflow/sources/stdin/TaintSources.qlref new file mode 100644 index 000000000000..7aa95121af3e --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/stdin/TaintSources.qlref @@ -0,0 +1,2 @@ +query: queries/summary/TaintSources.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/rust/ql/test/library-tests/dataflow/sources/stdin/options.yml b/rust/ql/test/library-tests/dataflow/sources/stdin/options.yml new file mode 100644 index 000000000000..0b1ee7f1f332 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/stdin/options.yml @@ -0,0 +1,5 @@ +qltest_cargo_check: true +qltest_dependencies: + - bytes = { version = "1.10.1" } + - futures = { version = "0.3" } + - tokio = { version = "1.43.0", features = ["full"] } diff --git a/rust/ql/test/library-tests/dataflow/sources/stdin/test.rs b/rust/ql/test/library-tests/dataflow/sources/stdin/test.rs new file mode 100644 index 000000000000..230303fa1ea9 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/stdin/test.rs @@ -0,0 +1,219 @@ +fn sink(_: T) { } + +// --- tests --- + +use std::io::{Read, BufRead}; +use tokio::io::{AsyncReadExt, AsyncBufReadExt}; + +fn test_io_stdin() -> std::io::Result<()> { + // --- stdin --- + + { + let mut buffer = [0u8; 100]; + let _bytes = std::io::stdin().read(&mut buffer)?; // $ Alert[rust/summary/taint-sources] + sink(&buffer); // $ hasTaintFlow + } + + { + let mut buffer = Vec::::new(); + let _bytes = std::io::stdin().read_to_end(&mut buffer)?; // $ Alert[rust/summary/taint-sources] + sink(&buffer); // $ hasTaintFlow + } + + { + let mut buffer = String::new(); + let _bytes = std::io::stdin().read_to_string(&mut buffer)?; // $ Alert[rust/summary/taint-sources] + sink(&buffer); // $ hasTaintFlow + } + + { + let mut buffer = String::new(); + let _bytes = std::io::stdin().lock().read_to_string(&mut buffer)?; // $ Alert[rust/summary/taint-sources] + sink(&buffer); // $ hasTaintFlow + } + + { + let mut buffer = [0; 100]; + std::io::stdin().read_exact(&mut buffer)?; // $ Alert[rust/summary/taint-sources] + sink(&buffer); // $ hasTaintFlow + } + + for byte in std::io::stdin().bytes() { // $ Alert[rust/summary/taint-sources] + sink(byte); // $ hasTaintFlow + } + + // --- BufReader --- + + { + let mut reader = std::io::BufReader::new(std::io::stdin()); // $ Alert[rust/summary/taint-sources] + let data = reader.fill_buf()?; + sink(&data); // $ hasTaintFlow + } + + { + let reader = std::io::BufReader::new(std::io::stdin()); // $ Alert[rust/summary/taint-sources] + let data = reader.buffer(); + sink(&data); // $ hasTaintFlow + } + + { + let mut buffer = String::new(); + let mut reader = std::io::BufReader::new(std::io::stdin()); // $ Alert[rust/summary/taint-sources] + reader.read_line(&mut buffer)?; + sink(&buffer); // $ hasTaintFlow + } + + { + let mut buffer = Vec::::new(); + let mut reader = std::io::BufReader::new(std::io::stdin()); // $ Alert[rust/summary/taint-sources] + reader.read_until(b',', &mut buffer)?; + sink(&buffer); // $ hasTaintFlow + sink(buffer[0]); // $ hasTaintFlow + } + + { + let mut reader_split = std::io::BufReader::new(std::io::stdin()).split(b','); // $ Alert[rust/summary/taint-sources] + sink(reader_split.next().unwrap().unwrap()); // $ hasTaintFlow + while let Some(chunk) = reader_split.next() { + sink(chunk.unwrap()); // $ hasTaintFlow + } + } + + { + let reader = std::io::BufReader::new(std::io::stdin()); // $ Alert[rust/summary/taint-sources] + for line in reader.lines() { + sink(line); // $ hasTaintFlow + } + } + + { + let reader = std::io::BufReader::new(std::io::stdin()); // $ Alert[rust/summary/taint-sources] + let line = reader.lines().nth(1).unwrap(); + sink(line.unwrap().clone()); // $ MISSING: hasTaintFlow + } + + { + let reader = std::io::BufReader::new(std::io::stdin()); // $ Alert[rust/summary/taint-sources] + let lines: Vec<_> = reader.lines().collect(); + sink(lines[1].as_ref().unwrap().clone()); // $ MISSING: hasTaintFlow + } + + Ok(()) +} + +async fn test_tokio_stdin() -> Result<(), Box> { + + // --- async reading from stdin --- + + { + let mut stdin = tokio::io::stdin(); // $ Alert[rust/summary/taint-sources] + let mut buffer = [0u8; 100]; + let _bytes = stdin.read(&mut buffer).await?; + sink(&buffer); // $ hasTaintFlow + } + + { + let mut stdin = tokio::io::stdin(); // $ Alert[rust/summary/taint-sources] + let mut buffer = Vec::::new(); + let _bytes = stdin.read_to_end(&mut buffer).await?; + sink(&buffer); // $ hasTaintFlow + } + + { + let mut stdin = tokio::io::stdin(); // $ Alert[rust/summary/taint-sources] + let mut buffer = String::new(); + let _bytes = stdin.read_to_string(&mut buffer).await?; + sink(&buffer); // $ hasTaintFlow + } + + { + let mut stdin = tokio::io::stdin(); // $ Alert[rust/summary/taint-sources] + let mut buffer = [0; 100]; + stdin.read_exact(&mut buffer).await?; + sink(&buffer); // $ hasTaintFlow + } + + { + let mut stdin = tokio::io::stdin(); // $ Alert[rust/summary/taint-sources] + let v1 = stdin.read_u8().await?; + let v2 = stdin.read_i16().await?; + let v3 = stdin.read_f32().await?; + let v4 = stdin.read_i64_le().await?; + sink(v1); // $ hasTaintFlow + sink(v2); // $ hasTaintFlow + sink(v3); // $ hasTaintFlow + sink(v4); // $ hasTaintFlow + } + + { + let mut stdin = tokio::io::stdin(); // $ Alert[rust/summary/taint-sources] + let mut buffer = bytes::BytesMut::new(); + stdin.read_buf(&mut buffer).await?; + sink(&buffer); // $ hasTaintFlow + } + + // --- async reading from stdin (BufReader) --- + + { + let mut reader = tokio::io::BufReader::new(tokio::io::stdin()); // $ Alert[rust/summary/taint-sources] + let data = reader.fill_buf().await?; + sink(&data); // $ hasTaintFlow + } + + { + let reader = tokio::io::BufReader::new(tokio::io::stdin()); // $ Alert[rust/summary/taint-sources] + let data = reader.buffer(); + sink(&data); // $ hasTaintFlow + } + + { + let mut buffer = String::new(); + let mut reader = tokio::io::BufReader::new(tokio::io::stdin()); // $ Alert[rust/summary/taint-sources] + reader.read_line(&mut buffer).await?; + sink(&buffer); // $ hasTaintFlow + } + + { + let mut buffer = Vec::::new(); + let mut reader = tokio::io::BufReader::new(tokio::io::stdin()); // $ Alert[rust/summary/taint-sources] + reader.read_until(b',', &mut buffer).await?; + sink(&buffer); // $ hasTaintFlow + sink(buffer[0]); // $ hasTaintFlow + } + + { + let mut reader_split = tokio::io::BufReader::new(tokio::io::stdin()).split(b','); // $ Alert[rust/summary/taint-sources] + sink(reader_split.next_segment().await?.unwrap()); // $ hasTaintFlow + while let Some(chunk) = reader_split.next_segment().await? { + sink(chunk); // $ hasTaintFlow + } + } + + { + let reader = tokio::io::BufReader::new(tokio::io::stdin()); // $ Alert[rust/summary/taint-sources] + let mut lines = reader.lines(); + sink(lines.next_line().await?.unwrap()); // $ hasTaintFlow + while let Some(line) = lines.next_line().await? { + sink(line); // $ hasTaintFlow + } + } + + Ok(()) +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + println!("test_io_stdin..."); + match test_io_stdin() { + Ok(_) => println!("complete"), + Err(e) => println!("error: {}", e), + } + + println!("test_tokio_stdin..."); + match futures::executor::block_on(test_tokio_stdin()) { + Ok(_) => println!("complete"), + Err(e) => println!("error: {}", e), + } + + Ok(()) +} diff --git a/rust/ql/test/library-tests/dataflow/sources/test.rs b/rust/ql/test/library-tests/dataflow/sources/test.rs deleted file mode 100644 index 18911880fce7..000000000000 --- a/rust/ql/test/library-tests/dataflow/sources/test.rs +++ /dev/null @@ -1,1198 +0,0 @@ -#![allow(deprecated)] - -fn sink(_: T) { } - -// --- tests --- - -fn test_env_vars() { - sink(std::env::var("HOME")); // $ Alert[rust/summary/taint-sources] hasTaintFlow="HOME" - sink(std::env::var_os("PATH")); // $ Alert[rust/summary/taint-sources] hasTaintFlow="PATH" - - let var1 = std::env::var("HOME").expect("HOME not set"); // $ Alert[rust/summary/taint-sources] - let var2 = std::env::var_os("PATH").unwrap(); // $ Alert[rust/summary/taint-sources] - - sink(var1); // $ hasTaintFlow="HOME" - sink(var2); // $ hasTaintFlow="PATH" - - for (key, value) in std::env::vars() { // $ Alert[rust/summary/taint-sources] - sink(key); // $ MISSING: hasTaintFlow - sink(value); // $ MISSING: hasTaintFlow - } - - for (key, value) in std::env::vars_os() { // $ Alert[rust/summary/taint-sources] - sink(key); // $ MISSING: hasTaintFlow - sink(value); // $ MISSING: hasTaintFlow - } -} - -fn test_env_args() { - let args: Vec = std::env::args().collect(); // $ Alert[rust/summary/taint-sources] - let my_path = &args[0]; - let arg1 = &args[1]; - let arg2 = std::env::args().nth(2).unwrap(); // $ Alert[rust/summary/taint-sources] - let arg3 = std::env::args_os().nth(3).unwrap(); // $ Alert[rust/summary/taint-sources] - let arg4 = std::env::args().nth(4).unwrap().parse::().unwrap(); // $ Alert[rust/summary/taint-sources] - - sink(my_path); // $ hasTaintFlow - sink(arg1); // $ hasTaintFlow - sink(arg2); // $ hasTaintFlow - sink(arg3); // $ hasTaintFlow - sink(arg4); // $ hasTaintFlow - - for arg in std::env::args() { // $ Alert[rust/summary/taint-sources] - sink(arg); // $ hasTaintFlow - } - - for arg in std::env::args_os() { // $ Alert[rust/summary/taint-sources] - sink(arg); // $ hasTaintFlow - } -} - -fn test_env_dirs() { - let dir = std::env::current_dir().expect("FAILED"); // $ Alert[rust/summary/taint-sources] - let exe = std::env::current_exe().expect("FAILED"); // $ Alert[rust/summary/taint-sources] - let home = std::env::home_dir().expect("FAILED"); // $ Alert[rust/summary/taint-sources] - - sink(dir); // $ hasTaintFlow - sink(exe); // $ hasTaintFlow - sink(home); // $ hasTaintFlow -} - -async fn test_reqwest() -> Result<(), reqwest::Error> { - let remote_string1 = reqwest::blocking::get("example.com")?.text()?; // $ Alert[rust/summary/taint-sources] - sink(remote_string1); // $ hasTaintFlow="example.com" - - let remote_string2 = reqwest::blocking::get("example.com").unwrap().text().unwrap(); // $ Alert[rust/summary/taint-sources] - sink(remote_string2); // $ hasTaintFlow="example.com" - - let remote_string3 = reqwest::blocking::get("example.com").unwrap().text_with_charset("utf-8").unwrap(); // $ Alert[rust/summary/taint-sources] - sink(remote_string3); // $ hasTaintFlow="example.com" - - let remote_string4 = reqwest::blocking::get("example.com").unwrap().bytes().unwrap(); // $ Alert[rust/summary/taint-sources] - sink(remote_string4); // $ hasTaintFlow="example.com" - - let remote_string5 = reqwest::get("example.com").await?.text().await?; // $ Alert[rust/summary/taint-sources] - sink(remote_string5); // $ hasTaintFlow="example.com" - - let remote_string6 = reqwest::get("example.com").await?.bytes().await?; // $ Alert[rust/summary/taint-sources] - sink(remote_string6); // $ hasTaintFlow="example.com" - - let mut request1 = reqwest::get("example.com").await?; // $ Alert[rust/summary/taint-sources] - sink(request1.chunk().await?.unwrap()); // $ hasTaintFlow="example.com" - while let Some(chunk) = request1.chunk().await? { - sink(chunk); // $ hasTaintFlow="example.com" - } - - Ok(()) -} - -use std::io::Write; -use http_body_util::BodyExt; - -async fn test_hyper_http(case: i64) -> Result<(), Box> { - // using http + hyper libs to fetch a web page - let address = "example.com:80"; - let url = "http://example.com/"; - - // create the connection - println!("connecting to {}...", address); - let stream = tokio::net::TcpStream::connect(address).await?; // $ Alert[rust/summary/taint-sources] - let io = hyper_util::rt::TokioIo::new(stream); - let (sender, conn) = hyper::client::conn::http1::handshake(io).await?; - let mut sender: hyper::client::conn::http1::SendRequest = sender; - - // drive the HTTP connection - tokio::task::spawn(async move { - conn.await.expect("connection failed"); - }); - - // make the request - println!("sending request..."); - if case == 0 { - // simple flow case - let request = http::Request::builder().uri(url).body(String::from(""))?; - let response = sender.send_request(request).await?; // $ Alert[rust/summary/taint-sources] - sink(&response); // $ hasTaintFlow=request - sink(response); // $ hasTaintFlow=request - return Ok(()) - } - // more realistic uses of results... - let request = http::Request::builder().uri(url).body(String::from(""))?; - let mut response = sender.send_request(request).await?; // $ Alert[rust/summary/taint-sources] - sink(&response); // $ hasTaintFlow=request - - if !response.status().is_success() { - return Err("request failed".into()) - } - - match case { - 1 => { - sink(response.body()); // $ MISSING: hasTaintFlow - sink(response.body_mut()); // $ MISSING: hasTaintFlow - - let body = response.into_body(); - sink(&body); // $ MISSING: hasTaintFlow - - println!("awaiting response..."); - let data = body.collect().await?; - sink(&data); // $ MISSING: hasTaintFlow - - let bytes = data.to_bytes(); - println!("bytes = {:?}", &bytes); - sink(bytes); // $ MISSING: hasTaintFlow - } - 2 => { - println!("streaming response..."); - while let Some(frame) = response.frame().await { - if let Some(data) = frame?.data_ref() { - std::io::stdout().write_all(data)?; - sink(data); // $ MISSING: hasTaintFlow - sink(data[0]); // $ MISSING: hasTaintFlow - for byte in data { - sink(byte); // $ MISSING: hasTaintFlow - } - } - } - } - 3 => { - let headers = response.headers(); - - if headers.contains_key(http::header::CONTENT_TYPE) { - println!("CONTENT_TYPE = {}", response.headers()[http::header::CONTENT_TYPE].to_str().unwrap()); - sink(&headers[http::header::CONTENT_TYPE]); // $ MISSING: hasTaintFlow - sink(headers[http::header::CONTENT_TYPE].to_str().unwrap()); // $ MISSING: hasTaintFlow - sink(headers[http::header::CONTENT_TYPE].as_bytes()); // $ MISSING: hasTaintFlow - sink(headers.get(http::header::CONTENT_TYPE).unwrap()); // $ MISSING: hasTaintFlow - } - - if headers.contains_key("Content-type") { - println!("Content-type = {}", response.headers().get("Content-type").unwrap().to_str().unwrap()); - sink(headers.get("Content-type").unwrap()); // $ MISSING: hasTaintFlow - sink(headers.get("Content-type").unwrap().to_str().unwrap()); // $ MISSING: hasTaintFlow - sink(headers.get("Content-type").unwrap().as_bytes()); // $ MISSING: hasTaintFlow - sink(&headers["Content-type"]); // $ MISSING: hasTaintFlow - } - - if headers.contains_key(http::header::COOKIE) { - sink(response.headers().get(http::header::COOKIE)); // $ MISSING: hasTaintFlow - for cookie in headers.get_all(http::header::COOKIE) { - println!("cookie = {}", cookie.to_str().unwrap()); - sink(cookie); // $ MISSING: hasTaintFlow - sink(cookie.to_str().unwrap()); // $ MISSING: hasTaintFlow - } - } - - let (parts, body) = response.into_parts(); - - if parts.headers.contains_key(http::header::CONTENT_TYPE) { - println!("CONTENT_TYPE = {}", parts.headers[http::header::CONTENT_TYPE].to_str().unwrap()); - sink(&parts.headers[http::header::CONTENT_TYPE]); // $ MISSING: hasTaintFlow - sink(parts.headers[http::header::CONTENT_TYPE].to_str().unwrap()); // $ MISSING: hasTaintFlow - sink(parts.headers[http::header::CONTENT_TYPE].as_bytes()); // $ MISSING: hasTaintFlow - sink(parts.headers.get(http::header::CONTENT_TYPE).unwrap()); // $ MISSING: hasTaintFlow - } - - sink(body); // $ MISSING: hasTaintFlow - } - _ => {} - } - - Ok(()) -} - -use std::io::Read; -use std::io::BufRead; - -fn test_io_stdin() -> std::io::Result<()> { - // --- stdin --- - - { - let mut buffer = [0u8; 100]; - let _bytes = std::io::stdin().read(&mut buffer)?; // $ Alert[rust/summary/taint-sources] - sink(&buffer); // $ hasTaintFlow - } - - { - let mut buffer = Vec::::new(); - let _bytes = std::io::stdin().read_to_end(&mut buffer)?; // $ Alert[rust/summary/taint-sources] - sink(&buffer); // $ hasTaintFlow - } - - { - let mut buffer = String::new(); - let _bytes = std::io::stdin().read_to_string(&mut buffer)?; // $ Alert[rust/summary/taint-sources] - sink(&buffer); // $ hasTaintFlow - } - - { - let mut buffer = String::new(); - let _bytes = std::io::stdin().lock().read_to_string(&mut buffer)?; // $ Alert[rust/summary/taint-sources] - sink(&buffer); // $ hasTaintFlow - } - - { - let mut buffer = [0; 100]; - std::io::stdin().read_exact(&mut buffer)?; // $ Alert[rust/summary/taint-sources] - sink(&buffer); // $ hasTaintFlow - } - - for byte in std::io::stdin().bytes() { // $ Alert[rust/summary/taint-sources] - sink(byte); // $ hasTaintFlow - } - - // --- BufReader --- - - { - let mut reader = std::io::BufReader::new(std::io::stdin()); // $ Alert[rust/summary/taint-sources] - let data = reader.fill_buf()?; - sink(&data); // $ hasTaintFlow - } - - { - let reader = std::io::BufReader::new(std::io::stdin()); // $ Alert[rust/summary/taint-sources] - let data = reader.buffer(); - sink(&data); // $ hasTaintFlow - } - - { - let mut buffer = String::new(); - let mut reader = std::io::BufReader::new(std::io::stdin()); // $ Alert[rust/summary/taint-sources] - reader.read_line(&mut buffer)?; - sink(&buffer); // $ hasTaintFlow - } - - { - let mut buffer = Vec::::new(); - let mut reader = std::io::BufReader::new(std::io::stdin()); // $ Alert[rust/summary/taint-sources] - reader.read_until(b',', &mut buffer)?; - sink(&buffer); // $ hasTaintFlow - sink(buffer[0]); // $ hasTaintFlow - } - - { - let mut reader_split = std::io::BufReader::new(std::io::stdin()).split(b','); // $ Alert[rust/summary/taint-sources] - sink(reader_split.next().unwrap().unwrap()); // $ hasTaintFlow - while let Some(chunk) = reader_split.next() { - sink(chunk.unwrap()); // $ hasTaintFlow - } - } - - { - let reader = std::io::BufReader::new(std::io::stdin()); // $ Alert[rust/summary/taint-sources] - for line in reader.lines() { - sink(line); // $ hasTaintFlow - } - } - - { - let reader = std::io::BufReader::new(std::io::stdin()); // $ Alert[rust/summary/taint-sources] - let line = reader.lines().nth(1).unwrap(); - sink(line.unwrap().clone()); // $ MISSING: hasTaintFlow - } - - { - let reader = std::io::BufReader::new(std::io::stdin()); // $ Alert[rust/summary/taint-sources] - let lines: Vec<_> = reader.lines().collect(); - sink(lines[1].as_ref().unwrap().clone()); // $ MISSING: hasTaintFlow - } - - Ok(()) -} - -use tokio::io::{AsyncReadExt, AsyncBufReadExt}; - -async fn test_tokio_stdin() -> Result<(), Box> { - - // --- async reading from stdin --- - - { - let mut stdin = tokio::io::stdin(); // $ Alert[rust/summary/taint-sources] - let mut buffer = [0u8; 100]; - let _bytes = stdin.read(&mut buffer).await?; - sink(&buffer); // $ hasTaintFlow - } - - { - let mut stdin = tokio::io::stdin(); // $ Alert[rust/summary/taint-sources] - let mut buffer = Vec::::new(); - let _bytes = stdin.read_to_end(&mut buffer).await?; - sink(&buffer); // $ hasTaintFlow - } - - { - let mut stdin = tokio::io::stdin(); // $ Alert[rust/summary/taint-sources] - let mut buffer = String::new(); - let _bytes = stdin.read_to_string(&mut buffer).await?; - sink(&buffer); // $ hasTaintFlow - } - - { - let mut stdin = tokio::io::stdin(); // $ Alert[rust/summary/taint-sources] - let mut buffer = [0; 100]; - stdin.read_exact(&mut buffer).await?; - sink(&buffer); // $ hasTaintFlow - } - - { - let mut stdin = tokio::io::stdin(); // $ Alert[rust/summary/taint-sources] - let v1 = stdin.read_u8().await?; - let v2 = stdin.read_i16().await?; - let v3 = stdin.read_f32().await?; - let v4 = stdin.read_i64_le().await?; - sink(v1); // $ hasTaintFlow - sink(v2); // $ hasTaintFlow - sink(v3); // $ hasTaintFlow - sink(v4); // $ hasTaintFlow - } - - { - let mut stdin = tokio::io::stdin(); // $ Alert[rust/summary/taint-sources] - let mut buffer = bytes::BytesMut::new(); - stdin.read_buf(&mut buffer).await?; - sink(&buffer); // $ hasTaintFlow - } - - // --- async reading from stdin (BufReader) --- - - { - let mut reader = tokio::io::BufReader::new(tokio::io::stdin()); // $ Alert[rust/summary/taint-sources] - let data = reader.fill_buf().await?; - sink(&data); // $ hasTaintFlow - } - - { - let reader = tokio::io::BufReader::new(tokio::io::stdin()); // $ Alert[rust/summary/taint-sources] - let data = reader.buffer(); - sink(&data); // $ hasTaintFlow - } - - { - let mut buffer = String::new(); - let mut reader = tokio::io::BufReader::new(tokio::io::stdin()); // $ Alert[rust/summary/taint-sources] - reader.read_line(&mut buffer).await?; - sink(&buffer); // $ hasTaintFlow - } - - { - let mut buffer = Vec::::new(); - let mut reader = tokio::io::BufReader::new(tokio::io::stdin()); // $ Alert[rust/summary/taint-sources] - reader.read_until(b',', &mut buffer).await?; - sink(&buffer); // $ hasTaintFlow - sink(buffer[0]); // $ hasTaintFlow - } - - { - let mut reader_split = tokio::io::BufReader::new(tokio::io::stdin()).split(b','); // $ Alert[rust/summary/taint-sources] - sink(reader_split.next_segment().await?.unwrap()); // $ hasTaintFlow - while let Some(chunk) = reader_split.next_segment().await? { - sink(chunk); // $ hasTaintFlow - } - } - - { - let reader = tokio::io::BufReader::new(tokio::io::stdin()); // $ Alert[rust/summary/taint-sources] - let mut lines = reader.lines(); - sink(lines.next_line().await?.unwrap()); // $ hasTaintFlow - while let Some(line) = lines.next_line().await? { - sink(line); // $ hasTaintFlow - } - } - - Ok(()) -} - -use std::fs; - -fn test_fs() -> Result<(), Box> { - { - let buffer: Vec = std::fs::read("file.bin")?; // $ Alert[rust/summary/taint-sources] - sink(buffer); // $ hasTaintFlow="file.bin" - } - - { - let buffer: Vec = fs::read("file.bin")?; // $ Alert[rust/summary/taint-sources] - sink(buffer); // $ hasTaintFlow="file.bin" - } - - { - let buffer = fs::read_to_string("file.txt")?; // $ Alert[rust/summary/taint-sources] - sink(buffer); // $ hasTaintFlow="file.txt" - } - - for entry in fs::read_dir("directory")? { - let e = entry?; - - let path = e.path(); // $ Alert[rust/summary/taint-sources] - sink(path.clone()); // $ hasTaintFlow - sink(path.clone().as_path()); // $ hasTaintFlow - sink(path.clone().into_os_string()); // $ MISSING: hasTaintFlow - sink(std::path::PathBuf::from(path.clone().into_boxed_path())); // $ MISSING: hasTaintFlow - sink(path.clone().as_os_str()); // $ MISSING: hasTaintFlow - sink(path.clone().as_mut_os_str()); // $ MISSING: hasTaintFlow - sink(path.to_str()); // $ MISSING: hasTaintFlow - sink(path.to_path_buf()); // $ MISSING: hasTaintFlow - sink(path.file_name().unwrap()); // $ MISSING: hasTaintFlow - sink(path.extension().unwrap()); // $ MISSING: hasTaintFlow - sink(path.canonicalize().unwrap()); // $ MISSING: hasTaintFlow - sink(path); // $ hasTaintFlow - - let file_name = e.file_name(); // $ Alert[rust/summary/taint-sources] - sink(file_name.clone()); // $ hasTaintFlow - sink(file_name.clone().into_string().unwrap()); // $ MISSING: hasTaintFlow - sink(file_name.to_str().unwrap()); // $ MISSING: hasTaintFlow - sink(file_name.to_string_lossy().to_mut()); // $ MISSING: hasTaintFlow - sink(file_name.clone().as_encoded_bytes()); // $ MISSING: hasTaintFlow - sink(file_name); // $ hasTaintFlow - } - for entry in std::path::Path::new("directory").read_dir()? { - let e = entry?; - - let path = e.path(); // $ Alert[rust/summary/taint-sources] - let file_name = e.file_name(); // $ Alert[rust/summary/taint-sources] - } - for entry in std::path::PathBuf::from("directory").read_dir()? { - let e = entry?; - - let path = e.path(); // $ MISSING: Alert[rust/summary/taint-sources] - let file_name = e.file_name(); // $ MISSING: Alert[rust/summary/taint-sources] - } - - { - let target = fs::read_link("symlink.txt")?; // $ Alert[rust/summary/taint-sources] - sink(target); // $ hasTaintFlow="symlink.txt" - } - - Ok(()) -} - -async fn test_tokio_fs() -> Result<(), Box> { - { - let buffer: Vec = tokio::fs::read("file.bin").await?; // $ Alert[rust/summary/taint-sources] - sink(buffer); // $ hasTaintFlow="file.bin" - } - - { - let buffer: Vec = tokio::fs::read("file.bin").await?; // $ Alert[rust/summary/taint-sources] - sink(buffer); // $ hasTaintFlow="file.bin" - } - - { - let buffer = tokio::fs::read_to_string("file.txt").await?; // $ Alert[rust/summary/taint-sources] - sink(buffer); // $ hasTaintFlow="file.txt" - } - - let mut read_dir = tokio::fs::read_dir("directory").await?; - for entry in read_dir.next_entry().await? { - let path = entry.path(); // $ Alert[rust/summary/taint-sources] - let file_name = entry.file_name(); // $ Alert[rust/summary/taint-sources] - sink(path); // $ hasTaintFlow - sink(file_name); // $ hasTaintFlow - } - - { - let target = tokio::fs::read_link("symlink.txt").await?; // $ Alert[rust/summary/taint-sources] - sink(target); // $ hasTaintFlow="symlink.txt" - } - - Ok(()) -} - -fn test_io_file() -> std::io::Result<()> { - // --- file --- - - let mut file = std::fs::File::open("file.txt")?; // $ Alert[rust/summary/taint-sources] - - { - let mut buffer = [0u8; 100]; - let _bytes = file.read(&mut buffer)?; - sink(&buffer); // $ hasTaintFlow="file.txt" - } - - { - let mut buffer = Vec::::new(); - let _bytes = file.read_to_end(&mut buffer)?; - sink(&buffer); // $ hasTaintFlow="file.txt" - } - - { - let mut buffer = String::new(); - let _bytes = file.read_to_string(&mut buffer)?; - sink(&buffer); // $ hasTaintFlow="file.txt" - } - - { - let mut buffer = [0; 100]; - file.read_exact(&mut buffer)?; - sink(&buffer); // $ hasTaintFlow="file.txt" - } - - for byte in file.bytes() { - sink(byte); // $ hasTaintFlow="file.txt" - } - - // --- OpenOptions --- - - { - let mut f1 = std::fs::OpenOptions::new().open("f1.txt").unwrap(); // $ Alert[rust/summary/taint-sources] - let mut buffer = [0u8; 1024]; - let _bytes = f1.read(&mut buffer)?; - sink(&buffer); // $ hasTaintFlow="f1.txt" - } - - { - let mut f2 = std::fs::OpenOptions::new().create_new(true).open("f2.txt").unwrap(); // $ Alert[rust/summary/taint-sources] - let mut buffer = [0u8; 1024]; - let _bytes = f2.read(&mut buffer)?; - sink(&buffer); // $ hasTaintFlow="f2.txt" - } - - { - let mut f3 = std::fs::OpenOptions::new().read(true).write(true).truncate(true).create(true).open("f3.txt").unwrap(); // $ Alert[rust/summary/taint-sources] - let mut buffer = [0u8; 1024]; - let _bytes = f3.read(&mut buffer)?; - sink(&buffer); // $ hasTaintFlow="f3.txt" - } - - // --- misc operations --- - - { - let mut buffer = String::new(); - let file1 = std::fs::File::open("file.txt")?; // $ Alert[rust/summary/taint-sources] - let file2 = std::fs::File::open("another_file.txt")?; // $ Alert[rust/summary/taint-sources] - let mut reader = file1.chain(file2); - reader.read_to_string(&mut buffer)?; - sink(&buffer); // $ hasTaintFlow="file.txt" hasTaintFlow="another_file.txt" - } - - { - let mut buffer = String::new(); - let file1 = std::fs::File::open("file.txt")?; // $ Alert[rust/summary/taint-sources] - let mut reader = file1.take(100); - reader.read_to_string(&mut buffer)?; - sink(&buffer); // $ hasTaintFlow="file.txt" - } - - Ok(()) -} - -async fn test_tokio_file() -> std::io::Result<()> { - // --- file --- - - let mut file = tokio::fs::File::open("file.txt").await?; // $ Alert[rust/summary/taint-sources] - - { - let mut buffer = [0u8; 100]; - let _bytes = file.read(&mut buffer).await?; - sink(&buffer); // $ hasTaintFlow="file.txt" - } - - { - let mut buffer = Vec::::new(); - let _bytes = file.read_to_end(&mut buffer).await?; - sink(&buffer); // $ hasTaintFlow="file.txt" - } - - { - let mut buffer = String::new(); - let _bytes = file.read_to_string(&mut buffer).await?; - sink(&buffer); // $ hasTaintFlow="file.txt" - } - - { - let mut buffer = [0; 100]; - file.read_exact(&mut buffer).await?; - sink(&buffer); // $ hasTaintFlow="file.txt" - } - - { - let v1 = file.read_u8().await?; - let v2 = file.read_i16().await?; - let v3 = file.read_f32().await?; - let v4 = file.read_i64_le().await?; - sink(v1); // $ hasTaintFlow="file.txt" - sink(v2); // $ hasTaintFlow="file.txt" - sink(v3); // $ hasTaintFlow="file.txt" - sink(v4); // $ hasTaintFlow="file.txt" - } - - { - let mut buffer = bytes::BytesMut::new(); - file.read_buf(&mut buffer).await?; - sink(&buffer); // $ hasTaintFlow="file.txt" - } - - // --- OpenOptions --- - - { - let mut f1 = tokio::fs::OpenOptions::new().open("f1.txt").await?; // $ Alert[rust/summary/taint-sources] - let mut buffer = [0u8; 1024]; - let _bytes = f1.read(&mut buffer).await?; - sink(&buffer); // $ hasTaintFlow="f1.txt" - } - - // --- misc operations --- - - { - let mut buffer = String::new(); - let file1 = tokio::fs::File::open("file.txt").await?; // $ Alert[rust/summary/taint-sources] - let file2 = tokio::fs::File::open("another_file.txt").await?; // $ Alert[rust/summary/taint-sources] - let mut reader = file1.chain(file2); - reader.read_to_string(&mut buffer).await?; - sink(&buffer); // $ MISSING: hasTaintFlow="file.txt" hasTaintFlow="another_file.txt" - } - - { - let mut buffer = String::new(); - let file1 = tokio::fs::File::open("file.txt").await?; // $ Alert[rust/summary/taint-sources] - let mut reader = file1.take(100); - reader.read_to_string(&mut buffer).await?; - sink(&buffer); // $ MISSING: hasTaintFlow="file.txt" - } - - Ok(()) -} - -use async_std::io::ReadExt; - -async fn test_async_std_file() -> std::io::Result<()> { - // --- file --- - - let mut file = async_std::fs::File::open("file.txt").await?; // $ Alert[rust/summary/taint-sources] - - { - let mut buffer = [0u8; 100]; - let _bytes = file.read(&mut buffer).await?; - sink(&buffer); // $ hasTaintFlow="file.txt" - } - - // --- OpenOptions --- - - { - let mut f1 = async_std::fs::OpenOptions::new().open("f1.txt").await?; // $ Alert[rust/summary/taint-sources] - let mut buffer = [0u8; 1024]; - let _bytes = f1.read(&mut buffer).await?; - sink(&buffer); // $ hasTaintFlow="f1.txt" - } - - Ok(()) -} - -use std::net::ToSocketAddrs; - -async fn test_std_tcpstream(case: i64) -> std::io::Result<()> { - // using std::net to fetch a web page - let address = "example.com:80"; - - if case == 1 { - // create the connection - let mut stream = std::net::TcpStream::connect(address)?; // $ Alert[rust/summary/taint-sources] - - // send request - let _ = stream.write_all(b"GET / HTTP/1.1\nHost:example.com\n\n"); - - // read response - let mut buffer = vec![0; 32 * 1024]; - let _ = stream.read(&mut buffer); - - println!("data = {:?}", buffer); - sink(&buffer); // $ hasTaintFlow=address - sink(buffer[0]); // $ hasTaintFlow=address - - let buffer_string = String::from_utf8_lossy(&buffer); - println!("string = {}", buffer_string); - sink(buffer_string); // $ MISSING: hasTaintFlow - } else { - // create the connection - let sock_addr = address.to_socket_addrs().unwrap().next().unwrap(); - let mut stream = std::net::TcpStream::connect_timeout(&sock_addr, std::time::Duration::new(1, 0))?; // $ Alert[rust/summary/taint-sources] - - // send request - let _ = stream.write_all(b"GET / HTTP/1.1\nHost:example.com\n\n"); - - // read response - match case { - 2 => { - let mut reader = std::io::BufReader::new(stream).take(256); - let mut line = String::new(); - loop { - match reader.read_line(&mut line) { - Ok(0) => { - println!("end"); - break; - } - Ok(_n) => { - println!("line = {}", line); - sink(&line); // $ hasTaintFlow=&sock_addr - line.clear(); - } - Err(e) => { - println!("error: {}", e); - break; - } - } - } - } - 3 => { - let reader = std::io::BufReader::new(stream.try_clone()?).take(256); - for line in reader.lines() { // $ MISSING: Alert[rust/summary/taint-sources] - if let Ok(string) = line { - println!("line = {}", string); - sink(string); // $ MISSING: hasTaintFlow - } - } - } - _ => {} - } - } - - Ok(()) -} - -use tokio::io::AsyncWriteExt; - -async fn test_tokio_tcpstream(case: i64) -> std::io::Result<()> { - // using tokio::io to fetch a web page - let address = "example.com:80"; - - // create the connection - println!("connecting to {}...", address); - let mut tokio_stream = tokio::net::TcpStream::connect(address).await?; // $ Alert[rust/summary/taint-sources] - - // send request - tokio_stream.write_all(b"GET / HTTP/1.1\nHost:example.com\n\n").await?; - - if case == 1 { - // peek response - let mut buffer1 = vec![0; 2 * 1024]; - let _ = tokio_stream.peek(&mut buffer1).await?; - - // read response - let mut buffer2 = vec![0; 2 * 1024]; - let n2 = tokio_stream.read(&mut buffer2).await?; - - println!("buffer1 = {:?}", buffer1); - sink(&buffer1); // $ hasTaintFlow=address - sink(buffer1[0]); // $ hasTaintFlow=address - - println!("buffer2 = {:?}", buffer2); - sink(&buffer2); // $ hasTaintFlow=address - sink(buffer2[0]); // $ hasTaintFlow=address - - let buffer_string = String::from_utf8_lossy(&buffer2[..n2]); - println!("string = {}", buffer_string); - sink(buffer_string); // $ MISSING: hasTaintFlow - } else if case == 2 { - let mut buffer = [0; 2 * 1024]; - loop { - match tokio_stream.try_read(&mut buffer) { - Ok(0) => { - println!("end"); - break; - } - Ok(_n) => { - println!("buffer = {:?}", buffer); - sink(&buffer); // $ hasTaintFlow=address - break; // (or we could wait for more data) - } - Err(ref e) if e.kind() == std::io::ErrorKind::WouldBlock => { - // wait... - continue; - } - Err(e) => { - println!("error: {}", e); - break; - } - } - } - } else { - let mut buffer = Vec::new(); - loop { - match tokio_stream.try_read_buf(&mut buffer) { - Ok(0) => { - println!("end"); - break; - } - Ok(_n) => { - println!("buffer = {:?}", buffer); - sink(&buffer); // $ hasTaintFlow=address - break; // (or we could wait for more data) - } - Err(ref e) if e.kind() == std::io::ErrorKind::WouldBlock => { - // wait... - continue; - } - Err(e) => { - println!("error: {}", e); - break; - } - } - } - } - - Ok(()) -} - -async fn test_std_to_tokio_tcpstream() -> std::io::Result<()> { - // using tokio::io to fetch a web page - let address = "example.com:80"; - - // create the connection - println!("connecting to {}...", address); - let std_stream = std::net::TcpStream::connect(address)?; // $ Alert[rust/summary/taint-sources] - - // convert to tokio stream - std_stream.set_nonblocking(true)?; - let mut tokio_stream = tokio::net::TcpStream::from_std(std_stream)?; - - // send request - tokio_stream.write_all(b"GET / HTTP/1.1\nHost:example.com\n\n").await?; - - // read response - let mut buffer = vec![0; 32 * 1024]; - let _n = tokio_stream.read(&mut buffer).await?; // $ MISSING: Alert[rust/summary/taint-sources] - - println!("data = {:?}", buffer); - sink(&buffer); // $ MISSING: hasTaintFlow - sink(buffer[0]); // $ MISSING: hasTaintFlow - - Ok(()) -} - -fn test_rustls() -> std::io::Result<()> { - let config = rustls::ClientConfig::builder() - .with_root_certificates(rustls::RootCertStore::empty()) - .with_no_client_auth(); - let server_name = rustls::pki_types::ServerName::try_from("www.example.com").unwrap(); - let config_arc = std::sync::Arc::new(config); - let mut client = rustls::ClientConnection::new(config_arc, server_name).unwrap(); // $ Alert[rust/summary/taint-sources] - let mut reader = client.reader(); // We cannot resolve the `reader` call because it comes from `Deref`: https://docs.rs/rustls/latest/rustls/client/struct.ClientConnection.html#deref-methods-ConnectionCommon%3CClientConnectionData%3E - sink(&reader); // $ MISSING: hasTaintFlow=config_arc - - { - let mut buffer = [0u8; 100]; - let _bytes = reader.read(&mut buffer)?; - sink(&buffer); // $ MISSING: hasTaintFlow=config_arc - } - - { - let mut buffer = Vec::::new(); - let _bytes = reader.read_to_end(&mut buffer)?; - sink(&buffer); // $ MISSING: hasTaintFlow=config_arc - } - - { - let mut buffer = String::new(); - let _bytes = reader.read_to_string(&mut buffer)?; - sink(&buffer); // $ MISSING: hasTaintFlow=config_arc - } - - Ok(()) -} - -mod test_mysql { - use mysql::*; - use mysql::prelude::*; - use super::sink; - - pub fn test_mysql() -> Result<(), Box> { - // connect through a MySQL connection pool - let mut pool = mysql::Pool::new("")?; - let mut conn = pool.get_conn()?; - - let mut rows : Vec = conn.query("SELECT id, name, age FROM person")?; // $ Alert[rust/summary/taint-sources] - let mut row = &mut rows[0]; - - let v1 : i64 = row.get(0).unwrap(); // $ Alert[rust/summary/taint-sources] - sink(v1); // $ hasTaintFlow=0 - - let v2 : i64 = row.get_opt(0).unwrap().unwrap(); // $ Alert[rust/summary/taint-sources] - sink(v2); // $ hasTaintFlow=0 - - let v3 : i64 = row.take(0).unwrap(); // $ Alert[rust/summary/taint-sources] - sink(v3); // $ hasTaintFlow=0 - - let v4 : i64 = row.take_opt(0).unwrap().unwrap(); // $ Alert[rust/summary/taint-sources] - sink(v4); // $ hasTaintFlow=0 - - let value5 = row.as_ref(0).unwrap(); // $ Alert[rust/summary/taint-sources] - if let mysql::Value::Int(v) = value5 { - sink(v); // $ MISSING: hasTaintFlow=0 - } else if let mysql::Value::Bytes(v) = value5 { - sink(v); // $ MISSING: hasTaintFlow=0 - } - - let v6: i64 = conn.query_first("SELECT id FROM person")?.unwrap(); // $ Alert[rust/summary/taint-sources] - sink(v6); // $ hasTaintFlow - - let mut t1 = conn.exec_iter("SELECT id FROM person", (1, 2, 3))?; // $ Alert[rust/summary/taint-sources] - sink(t1.nth(0).unwrap().unwrap().get::(1).unwrap()); // $ Alert[rust/summary/taint-sources] hasTaintFlow=1 - for row in t1 { - for v in row { - sink(v); // $ hasTaintFlow - } - } - - let _ = conn.query_map( // $ Alert[rust/summary/taint-sources] - "SELECT id FROM person", - |values: i64| -> () { - sink(values); // $ hasTaintFlow - } - )?; - - let _ = conn.query_map( // $ Alert[rust/summary/taint-sources] - "SELECT id, name, age FROM person", - |values: (i64, String, i32)| -> () { - sink(values.0); // $ MISSING: hasTaintFlow - sink(values.1); // $ MISSING: hasTaintFlow - sink(values.2); // $ MISSING: hasTaintFlow - } - )?; - - let total = conn.query_fold("SELECT id FROM person", 0, |acc: i64, row: i64| { // $ Alert[rust/summary/taint-sources] - sink(row); // $ hasTaintFlow - acc + row - })?; - sink(total); // $ hasTaintFlow - - let _ = conn.query_fold("SELECT id, name, age FROM person", 0, |acc: i64, row: (i64, String, i32)| { // $ Alert[rust/summary/taint-sources] - let id: i64 = row.0; - let name: String = row.1; - let age: i32 = row.2; - sink(id); // $ MISSING: hasTaintFlow - sink(name); // $ MISSING: hasTaintFlow - sink(age); // $ MISSING: hasTaintFlow - acc + 1 - })?; - - Ok(()) - } -} - -mod test_mysql_async { - use mysql_async::*; - use mysql_async::prelude::*; - use async_std::stream::StreamExt; - use super::sink; - - #[derive(Debug, PartialEq, Eq, Clone)] - struct Person { - id: i64, - name: String, - age: i32, - } - - pub async fn test_mysql_async() -> Result<()> { - // connect through a MySQL connection pool - let mut pool = mysql_async::Pool::new(""); - let mut conn = pool.get_conn().await?; - - let mut rows : Vec = conn.query("SELECT id, name, age FROM person").await?; // $ Alert[rust/summary/taint-sources] - let mut row = &mut rows[0]; - - let v1 : i64 = row.get(0).unwrap(); // $ Alert[rust/summary/taint-sources] - sink(v1); // $ hasTaintFlow=0 - - let v2 : i64 = row.get_opt(0).unwrap().unwrap(); // $ Alert[rust/summary/taint-sources] - sink(v2); // $ hasTaintFlow=0 - - let v3 : i64 = row.take(0).unwrap(); // $ Alert[rust/summary/taint-sources] - sink(v3); // $ hasTaintFlow=0 - - let v4 : i64 = row.take_opt(0).unwrap().unwrap(); // $ Alert[rust/summary/taint-sources] - sink(v4); // $ hasTaintFlow=0 - - let value5 = row.as_ref(0).unwrap(); // $ Alert[rust/summary/taint-sources] - if let mysql_async::Value::Int(v) = value5 { - sink(v); // $ MISSING: hasTaintFlow=0 - } else if let mysql_async::Value::Bytes(v) = value5 { - sink(v); // $ MISSING: hasTaintFlow=0 - } - - let v6: i64 = conn.query_first("SELECT id FROM person").await?.unwrap(); // $ Alert[rust/summary/taint-sources] - sink(v6); // $ MISSING: hasTaintFlow - - let mut t1 = conn.exec_iter("SELECT id FROM person", (1, 2, 3)).await?; // $ Alert[rust/summary/taint-sources] - for mut row in t1.stream::<(i64, String, i32)>().await? { - while let v = row.next().await { - let v = v.unwrap(); - sink(v); // $ MISSING: hasTaintFlow - } - } - - let _ = conn.query_map( // $ Alert[rust/summary/taint-sources] - "SELECT id FROM person", - |values: i64| -> () { - sink(values); // $ hasTaintFlow - } - ).await?; - - let _ = conn.query_map( // $ Alert[rust/summary/taint-sources] - "SELECT id, name, age FROM person", - |values: (i64, String, i32)| -> () { - sink(values.0); // $ MISSING: hasTaintFlow - sink(values.1); // $ MISSING: hasTaintFlow - sink(values.2); // $ MISSING: hasTaintFlow - } - ).await?; - - let total = conn.query_fold("SELECT id FROM person", 0, |acc: i64, row: i64| { // $ Alert[rust/summary/taint-sources] - sink(row); // $ hasTaintFlow - acc + row - }).await?; - sink(total); // $ hasTaintFlow - - let _ = conn.query_fold("SELECT id, name, age FROM person", 0, |acc: i64, row: (i64, String, i32)| { // $ Alert[rust/summary/taint-sources] - let id: i64 = row.0; - let name: String = row.1; - let age: i32 = row.2; - sink(id); // $ MISSING: hasTaintFlow - sink(name); // $ MISSING: hasTaintFlow - sink(age); // $ MISSING: hasTaintFlow - acc + 1 - }).await?; - - let ids = "SELECT id FROM person".with(()).map(&mut conn, - |person: i64| -> i64 { - sink(person); // $ MISSING: hasTaintFlow - person - } - ).await?; - sink(ids[0]); // $ MISSING: hasTaintFlow - - let ages = "SELECT id, name, age FROM person".with(()).map(&mut conn, // $ MISSING: Alert[rust/summary/taint-sources] - |person: (i64, String, i32)| -> i32 { - sink(person.0); // $ MISSING: hasTaintFlow - sink(person.1); // $ MISSING: hasTaintFlow - sink(person.2); // $ MISSING: hasTaintFlow - person.2 - } - ).await?; - sink(ages[0]); // $ MISSING: hasTaintFlow - - { - let mut stream = "SELECT id FROM person".stream::(&mut conn).await?; // $ MISSING: Alert[rust/summary/taint-sources] - while let Some(row) = stream.next().await { - let id = row?; - sink(id); // $ MISSING: hasTaintFlow - } - } - - { - let mut stream = "SELECT id, name, age FROM person".stream::<(i64, String, i32), _>(&mut conn).await?; // $ MISSING: Alert[rust/summary/taint-sources] - while let Some(row) = stream.next().await { - let (id, name, age) = row?; - sink(id); // $ MISSING: hasTaintFlow - sink(name); // $ MISSING: hasTaintFlow - sink(age); // $ MISSING: hasTaintFlow - } - } - - Ok(()) - } -} - -#[tokio::main] -async fn main() -> Result<(), Box> { - let case = std::env::args().nth(1).unwrap_or(String::from("1")).parse::().unwrap(); // $ Alert[rust/summary/taint-sources] - - println!("test_env_vars..."); - test_env_vars(); - - println!("test_env_args..."); - test_env_args(); - - println!("test_env_dirs..."); - test_env_dirs(); - - println!("test_reqwest..."); - match futures::executor::block_on(test_reqwest()) { - Ok(_) => println!("complete"), - Err(e) => println!("error: {}", e), - } - - println!("test_hyper_http..."); - match futures::executor::block_on(test_hyper_http(case)) { - Ok(_) => println!("complete"), - Err(e) => println!("error: {}", e), - } - - println!("test_io_stdin..."); - match test_io_stdin() { - Ok(_) => println!("complete"), - Err(e) => println!("error: {}", e), - } - - println!("test_tokio_stdin..."); - match futures::executor::block_on(test_tokio_stdin()) { - Ok(_) => println!("complete"), - Err(e) => println!("error: {}", e), - } - - println!("test_fs..."); - match test_fs() { - Ok(_) => println!("complete"), - Err(e) => println!("error: {}", e), - } - - println!("test_tokio_fs..."); - match futures::executor::block_on(test_tokio_fs()) { - Ok(_) => println!("complete"), - Err(e) => println!("error: {}", e), - } - - println!("test_io_file..."); - match test_io_file() { - Ok(_) => println!("complete"), - Err(e) => println!("error: {}", e), - } - - println!("test_tokio_file..."); - match futures::executor::block_on(test_tokio_file()) { - Ok(_) => println!("complete"), - Err(e) => println!("error: {}", e), - } - - println!("test_async_std_file..."); - match futures::executor::block_on(test_async_std_file()) { - Ok(_) => println!("complete"), - Err(e) => println!("error: {}", e), - } - - println!("test_std_tcpstream..."); - match futures::executor::block_on(test_std_tcpstream(case)) { - Ok(_) => println!("complete"), - Err(e) => println!("error: {}", e), - } - - println!("test_tokio_tcpstream..."); - match futures::executor::block_on(test_tokio_tcpstream(case)) { - Ok(_) => println!("complete"), - Err(e) => println!("error: {}", e), - } - - println!("test_std_to_tokio_tcpstream..."); - match futures::executor::block_on(test_std_to_tokio_tcpstream()) { - Ok(_) => println!("complete"), - Err(e) => println!("error: {}", e), - } - - println!("test_rustls..."); - match test_rustls() { - Ok(_) => println!("complete"), - Err(e) => println!("error: {}", e), - } - - println!("test_mysql..."); - match test_mysql::test_mysql() { - Ok(_) => println!("complete"), - Err(e) => println!("error: {}", e), - } - - println!("test_mysql_async..."); - match futures::executor::block_on(test_mysql_async::test_mysql_async()) { - Ok(_) => println!("complete"), - Err(e) => println!("error: {}", e), - } - - Ok(()) -} diff --git a/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs b/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs deleted file mode 100644 index c4ee15dfe4c1..000000000000 --- a/rust/ql/test/library-tests/dataflow/sources/test_futures_io.rs +++ /dev/null @@ -1,160 +0,0 @@ -fn sink(_: T) {} - -// --- tests --- - -use async_std::net::TcpStream; -use async_std::sync::Arc; -use futures::io::AsyncBufRead; -use futures::io::AsyncBufReadExt; -use futures::io::AsyncRead; -use futures::io::AsyncReadExt; -use futures::StreamExt; -use futures_rustls::TlsConnector; -use std::io; -use std::pin::Pin; -use std::task::{Context, Poll}; - -async fn test_futures_rustls_futures_io() -> io::Result<()> { - let url = "www.example.com:443"; - let tcp = TcpStream::connect(url).await?; // $ Alert[rust/summary/taint-sources] - sink(&tcp); // $ hasTaintFlow=url - let config = rustls::ClientConfig::builder() - .with_root_certificates(rustls::RootCertStore::empty()) - .with_no_client_auth(); - let connector = TlsConnector::from(Arc::new(config)); - let server_name = rustls::pki_types::ServerName::try_from("www.example.com").unwrap(); - let mut reader = connector.connect(server_name, tcp).await?; - sink(&reader); // $ hasTaintFlow=url - - { - // using the `AsyncRead` trait (low-level) - let mut buffer = [0u8; 64]; - let mut pinned = Pin::new(&mut reader); - sink(&pinned); // $ hasTaintFlow=url - let mut cx = Context::from_waker(futures::task::noop_waker_ref()); - let bytes_read = pinned.poll_read(&mut cx, &mut buffer); - if let Poll::Ready(Ok(n)) = bytes_read { - sink(&buffer); // $ hasTaintFlow=url - sink(&buffer[..n]); // $ hasTaintFlow=url - } - } - - { - // using the `AsyncReadExt::read` extension method (higher-level) - let mut buffer1 = [0u8; 64]; - let bytes_read1 = futures::io::AsyncReadExt::read(&mut reader, &mut buffer1).await?; - sink(&buffer1[..bytes_read1]); // $ hasTaintFlow=url - - let mut buffer2 = [0u8; 64]; - let bytes_read2 = reader.read(&mut buffer2).await?; - - sink(&buffer2[..bytes_read2]); // $ hasTaintFlow=url - } - - let mut reader2 = futures::io::BufReader::new(reader); - sink(&reader2); // $ hasTaintFlow=url - - { - // using the `AsyncBufRead` trait (low-level) - let mut pinned = Pin::new(&mut reader2); - sink(&pinned); // $ hasTaintFlow=url - let mut cx = Context::from_waker(futures::task::noop_waker_ref()); - let buffer = pinned.poll_fill_buf(&mut cx); - if let Poll::Ready(Ok(buf)) = buffer { - sink(&buffer); // $ hasTaintFlow=url - sink(buf); // $ hasTaintFlow=url - } - - // using the `AsyncBufRead` trait (alternative syntax) - let buffer2 = Pin::new(&mut reader2).poll_fill_buf(&mut cx); - match (buffer2) { - Poll::Ready(Ok(buf)) => { - sink(&buffer2); // $ hasTaintFlow=url - sink(buf); // $ hasTaintFlow=url - } - _ => { - // ... - } - } - } - - { - // using the `AsyncBufReadExt::fill_buf` extension method (higher-level) - let buffer = reader2.fill_buf().await?; - sink(buffer); // $ hasTaintFlow=url - } - - { - // using the `AsyncRead` trait (low-level) - let mut buffer = [0u8; 64]; - let mut pinned = Pin::new(&mut reader2); - sink(&pinned); // $ hasTaintFlow=url - let mut cx = Context::from_waker(futures::task::noop_waker_ref()); - let bytes_read = pinned.poll_read(&mut cx, &mut buffer); - sink(&buffer); // $ MISSING: hasTaintFlow=url - if let Poll::Ready(Ok(n)) = bytes_read { - sink(&buffer[..n]); // $ MISSING: hasTaintFlow=url - } - } - - { - // using the `AsyncReadExt::read` extension method (higher-level) - let mut buffer1 = [0u8; 64]; - let bytes_read1 = futures::io::AsyncReadExt::read(&mut reader2, &mut buffer1).await?; - sink(&buffer1[..bytes_read1]); // $ hasTaintFlow=url - - let mut buffer2 = [0u8; 64]; - let bytes_read2 = reader2.read(&mut buffer2).await?; - sink(&buffer2[..bytes_read2]); // $ hasTaintFlow=url - } - - { - // using the `AsyncBufRead` trait (low-level) - let mut pinned = Pin::new(&mut reader2); - sink(&pinned); // $ hasTaintFlow=url - let mut cx = Context::from_waker(futures::task::noop_waker_ref()); - let buffer = pinned.poll_fill_buf(&mut cx); - sink(&buffer); // $ hasTaintFlow=url - if let Poll::Ready(Ok(buf)) = buffer { - sink(buf); // $ hasTaintFlow=url - } - } - - { - // using the `AsyncBufReadExt::fill_buf` extension method (higher-level) - let buffer = reader2.fill_buf().await?; - sink(buffer); // $ hasTaintFlow=url - } - - { - // using the `AsyncBufReadExt::read_until` extension method - let mut line = Vec::new(); - let _bytes_read = reader2.read_until(b'\n', &mut line).await?; - sink(&line); // $ hasTaintFlow=url - } - - { - // using the `AsyncBufReadExt::read_line` extension method - let mut line = String::new(); - let _bytes_read = reader2.read_line(&mut line).await?; - sink(&line); // $ hasTaintFlow=url - } - - { - // using the `AsyncBufReadExt::read_to_end` extension method - let mut buffer = Vec::with_capacity(1024); - let _bytes_read = reader2.read_to_end(&mut buffer).await?; - sink(&buffer); // $ hasTaintFlow=url - } - - { - // using the `AsyncBufReadExt::lines` extension method - let mut lines_stream = reader2.lines(); - sink(lines_stream.next().await.unwrap()); // $ MISSING: hasTaintFlow=url - while let Some(line) = lines_stream.next().await { - sink(line.unwrap()); // $ MISSING: hasTaintFlow - } - } - - Ok(()) -} diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/CONSISTENCY/PathResolutionConsistency.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks/CONSISTENCY/TypeInferenceConsistency.expected b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/CONSISTENCY/TypeInferenceConsistency.expected new file mode 100644 index 000000000000..08edbe8c6121 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/CONSISTENCY/TypeInferenceConsistency.expected @@ -0,0 +1,4 @@ +nonUniqueCertainType +| test.rs:139:30:139:39 | ...::get(...) | | +| test.rs:140:34:140:43 | ...::get(...) | | +| test.rs:141:30:141:39 | ...::get(...) | | diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks/Cargo.lock b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/Cargo.lock new file mode 100644 index 000000000000..38298d50a719 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/Cargo.lock @@ -0,0 +1,2055 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "actix-codec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" +dependencies = [ + "bitflags", + "bytes", + "futures-core", + "futures-sink", + "memchr", + "pin-project-lite", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "actix-http" +version = "3.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7926860314cbe2fb5d1f13731e387ab43bd32bca224e82e6e2db85de0a3dba49" +dependencies = [ + "actix-codec", + "actix-rt", + "actix-service", + "actix-utils", + "base64", + "bitflags", + "brotli", + "bytes", + "bytestring", + "derive_more", + "encoding_rs", + "flate2", + "foldhash", + "futures-core", + "h2 0.3.27", + "http 0.2.12", + "httparse", + "httpdate", + "itoa", + "language-tags", + "local-channel", + "mime", + "percent-encoding", + "pin-project-lite", + "rand", + "sha1", + "smallvec", + "tokio", + "tokio-util", + "tracing", + "zstd", +] + +[[package]] +name = "actix-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "actix-router" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13d324164c51f63867b57e73ba5936ea151b8a41a1d23d1031eeb9f70d0236f8" +dependencies = [ + "bytestring", + "cfg-if", + "http 0.2.12", + "regex", + "regex-lite", + "serde", + "tracing", +] + +[[package]] +name = "actix-rt" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92589714878ca59a7626ea19734f0e07a6a875197eec751bb5d3f99e64998c63" +dependencies = [ + "futures-core", + "tokio", +] + +[[package]] +name = "actix-server" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a65064ea4a457eaf07f2fba30b4c695bf43b721790e9530d26cb6f9019ff7502" +dependencies = [ + "actix-rt", + "actix-service", + "actix-utils", + "futures-core", + "futures-util", + "mio", + "socket2 0.5.10", + "tokio", + "tracing", +] + +[[package]] +name = "actix-service" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e46f36bf0e5af44bdc4bdb36fbbd421aa98c79a9bce724e1edeb3894e10dc7f" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "actix-utils" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8" +dependencies = [ + "local-waker", + "pin-project-lite", +] + +[[package]] +name = "actix-web" +version = "4.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a597b77b5c6d6a1e1097fddde329a83665e25c5437c696a3a9a4aa514a614dea" +dependencies = [ + "actix-codec", + "actix-http", + "actix-macros", + "actix-router", + "actix-rt", + "actix-server", + "actix-service", + "actix-utils", + "actix-web-codegen", + "bytes", + "bytestring", + "cfg-if", + "cookie", + "derive_more", + "encoding_rs", + "foldhash", + "futures-core", + "futures-util", + "impl-more", + "itoa", + "language-tags", + "log", + "mime", + "once_cell", + "pin-project-lite", + "regex", + "regex-lite", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "socket2 0.5.10", + "time", + "tracing", + "url", +] + +[[package]] +name = "actix-web-codegen" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f591380e2e68490b5dfaf1dd1aa0ebe78d84ba7067078512b4ea6e4492d622b8" +dependencies = [ + "actix-router", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "axum" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18ed336352031311f4e0b4dd2ff392d4fbb370777c9d18d7fc9d7359f73871" +dependencies = [ + "axum-core", + "bytes", + "form_urlencoded", + "futures-util", + "http 1.3.1", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "serde_core", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59446ce19cd142f8833f856eb31f3eb097812d1479ab224f54d72428ca21ea22" +dependencies = [ + "bytes", + "futures-core", + "http 1.3.1", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "sync_wrapper", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "brotli" +version = "8.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" + +[[package]] +name = "bytestring" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "113b4343b5f6617e7ad401ced8de3cc8b012e73a594347c307b90db3e9271289" +dependencies = [ + "bytes", +] + +[[package]] +name = "cc" +version = "1.2.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" +dependencies = [ + "find-msvc-tools", + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "cookie" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "deranged" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derive_more" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "unicode-xid", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "find-msvc-tools" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" + +[[package]] +name = "flate2" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-core", + "futures-macro", + "futures-sink", + "futures-task", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", +] + +[[package]] +name = "h2" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.3.1", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" + +[[package]] +name = "headers" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" +dependencies = [ + "base64", + "bytes", + "headers-core", + "http 1.3.1", + "httpdate", + "mime", + "sha1", +] + +[[package]] +name = "headers-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" +dependencies = [ + "http 1.3.1", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.3.1", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http 1.3.1", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "h2 0.4.12", + "http 1.3.1", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "pin-utils", + "smallvec", + "tokio", +] + +[[package]] +name = "hyper-util" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" +dependencies = [ + "bytes", + "futures-core", + "http 1.3.1", + "http-body", + "hyper", + "pin-project-lite", + "tokio", + "tower-service", +] + +[[package]] +name = "icu_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "potential_utf", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +dependencies = [ + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "impl-more" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a5a9a0ff0086c7a148acb942baaabeadf9504d10400b5a05645853729b9cd2" + +[[package]] +name = "indexmap" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom", + "libc", +] + +[[package]] +name = "language-tags" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" + +[[package]] +name = "libc" +version = "0.2.177" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" + +[[package]] +name = "litemap" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + +[[package]] +name = "local-channel" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8" +dependencies = [ + "futures-core", + "futures-sink", + "local-waker", +] + +[[package]] +name = "local-waker" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" + +[[package]] +name = "matchit" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" + +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "nix" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" +dependencies = [ + "bitflags", + "cfg-if", + "cfg_aliases", + "libc", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pin-project" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "poem" +version = "3.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f977080932c87287147dca052951c3e2696f8759863f6b4e4c0c9ffe7a4cc8b" +dependencies = [ + "bytes", + "futures-util", + "headers", + "http 1.3.1", + "http-body-util", + "hyper", + "hyper-util", + "mime", + "nix", + "parking_lot", + "percent-encoding", + "pin-project-lite", + "poem-derive", + "regex", + "rfc7239", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "sync_wrapper", + "thiserror", + "tokio", + "tokio-util", + "tracing", + "wildmatch", +] + +[[package]] +name = "poem-derive" +version = "3.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "056e2fea6de1cb240ffe23cfc4fc370b629f8be83b5f27e16b7acd5231a72de4" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "potential_utf" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro-crate" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags", +] + +[[package]] +name = "regex" +version = "1.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-lite" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d942b98df5e658f56f20d592c7f868833fe38115e65c33003d8cd224b0155da" + +[[package]] +name = "regex-syntax" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" + +[[package]] +name = "rfc7239" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a82f1d1e38e9a85bb58ffcfadf22ed6f2c94e8cd8581ec2b0f80a2a6858350f" +dependencies = [ + "uncased", +] + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.145" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", + "serde_core", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" +dependencies = [ + "itoa", + "serde", + "serde_core", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +dependencies = [ + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "slab" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "socket2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "socket2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "syn" +version = "2.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "test" +version = "0.0.1" +dependencies = [ + "actix-web", + "axum", + "poem", + "serde", + "serde_json", + "tokio", + "warp", +] + +[[package]] +name = "thiserror" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "time" +version = "0.3.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" + +[[package]] +name = "time-macros" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tokio" +version = "1.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +dependencies = [ + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2 0.6.1", + "tokio-macros", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-util" +version = "0.7.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml_datetime" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.23.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +dependencies = [ + "indexmap", + "toml_datetime", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +dependencies = [ + "winnow", +] + +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +dependencies = [ + "once_cell", +] + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "uncased" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicase" +version = "2.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" + +[[package]] +name = "unicode-ident" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "url" +version = "2.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "warp" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d06d9202adc1f15d709c4f4a2069be5428aa912cc025d6f268ac441ab066b0" +dependencies = [ + "bytes", + "futures-util", + "headers", + "http 1.3.1", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "log", + "mime", + "mime_guess", + "percent-encoding", + "pin-project", + "scoped-tls", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-util", + "tower-service", + "tracing", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wildmatch" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39b7d07a236abaef6607536ccfaf19b396dbe3f5110ddb73d39f4562902ed382" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "winnow" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +dependencies = [ + "memchr", +] + +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + +[[package]] +name = "yoke" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.16+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/InlineFlow.expected new file mode 100644 index 000000000000..e128916f8473 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/InlineFlow.expected @@ -0,0 +1,212 @@ +models +| 1 | Source: <_ as warp::filter::Filter>::and_then; Argument[0].Parameter[0..7]; remote | +| 2 | Source: <_ as warp::filter::Filter>::map; Argument[0].Parameter[0..7]; remote | +| 3 | Source: <_ as warp::filter::Filter>::then; Argument[0].Parameter[0..7]; remote | +| 4 | Source: ::to; Argument[0].Parameter[0..7]; remote | +| 5 | Source: ::to; Argument[0].Parameter[0..7]; remote | +| 6 | Summary: ::into_inner; Argument[self]; ReturnValue.Field[0]; taint | +| 7 | Summary: ::into_inner; Argument[self]; ReturnValue.Field[1]; taint | +| 8 | Summary: ::into_inner; Argument[self]; ReturnValue.Field[2]; taint | +| 9 | Summary: ::into_inner; Argument[self]; ReturnValue; taint | +| 10 | Summary: ::as_bytes; Argument[self]; ReturnValue; value | +| 11 | Summary: ::as_str; Argument[self]; ReturnValue; value | +edges +| test.rs:11:31:11:31 | a | test.rs:13:14:13:14 | a | provenance | | +| test.rs:11:31:11:31 | a | test.rs:13:14:13:14 | a | provenance | | +| test.rs:11:31:11:31 | a | test.rs:13:14:13:23 | a.as_str() | provenance | MaD:11 | +| test.rs:11:31:11:31 | a | test.rs:13:14:13:23 | a.as_str() | provenance | MaD:11 | +| test.rs:11:31:11:31 | a | test.rs:14:14:14:14 | a | provenance | | +| test.rs:11:31:11:31 | a | test.rs:14:14:14:14 | a | provenance | | +| test.rs:11:31:11:31 | a | test.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:10 | +| test.rs:11:31:11:31 | a | test.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:10 | +| test.rs:11:31:11:31 | a | test.rs:15:14:15:14 | a | provenance | | +| test.rs:11:31:11:31 | a | test.rs:15:14:15:14 | a | provenance | | +| test.rs:13:14:13:14 | a | test.rs:13:14:13:23 | a.as_str() | provenance | MaD:11 | +| test.rs:13:14:13:14 | a | test.rs:13:14:13:23 | a.as_str() | provenance | MaD:11 | +| test.rs:14:14:14:14 | a | test.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:10 | +| test.rs:14:14:14:14 | a | test.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:10 | +| test.rs:68:15:68:15 | a | test.rs:70:14:70:14 | a | provenance | | +| test.rs:68:15:68:15 | a | test.rs:70:14:70:14 | a | provenance | | +| test.rs:98:9:98:31 | ...: ...::Path::<...> | test.rs:100:17:100:33 | path.into_inner() | provenance | MaD:9 | +| test.rs:98:9:98:31 | ...: ...::Path::<...> | test.rs:100:17:100:33 | path.into_inner() [tuple.0] | provenance | MaD:6 | +| test.rs:98:9:98:31 | ...: ...::Path::<...> | test.rs:100:17:100:33 | path.into_inner() [tuple.1] | provenance | MaD:7 | +| test.rs:98:9:98:31 | ...: ...::Path::<...> | test.rs:100:17:100:33 | path.into_inner() [tuple.2] | provenance | MaD:8 | +| test.rs:100:13:100:13 | a | test.rs:101:14:101:14 | a | provenance | | +| test.rs:100:13:100:13 | a | test.rs:101:14:101:23 | a.as_str() | provenance | MaD:11 | +| test.rs:100:13:100:13 | a | test.rs:102:14:102:14 | a | provenance | | +| test.rs:100:13:100:13 | a | test.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:10 | +| test.rs:100:13:100:13 | a | test.rs:103:14:103:14 | a | provenance | | +| test.rs:100:13:100:13 | a [tuple.0] | test.rs:101:14:101:14 | a [tuple.0] | provenance | | +| test.rs:100:13:100:13 | a [tuple.0] | test.rs:101:14:101:23 | a.as_str() | provenance | MaD:11 | +| test.rs:100:13:100:13 | a [tuple.0] | test.rs:102:14:102:14 | a [tuple.0] | provenance | | +| test.rs:100:13:100:13 | a [tuple.0] | test.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:10 | +| test.rs:100:13:100:13 | a [tuple.0] | test.rs:103:14:103:14 | a | provenance | | +| test.rs:100:13:100:13 | a [tuple.1] | test.rs:101:14:101:14 | a [tuple.1] | provenance | | +| test.rs:100:13:100:13 | a [tuple.1] | test.rs:101:14:101:23 | a.as_str() | provenance | MaD:11 | +| test.rs:100:13:100:13 | a [tuple.1] | test.rs:102:14:102:14 | a [tuple.1] | provenance | | +| test.rs:100:13:100:13 | a [tuple.1] | test.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:10 | +| test.rs:100:13:100:13 | a [tuple.1] | test.rs:103:14:103:14 | a | provenance | | +| test.rs:100:13:100:13 | a [tuple.2] | test.rs:101:14:101:14 | a [tuple.2] | provenance | | +| test.rs:100:13:100:13 | a [tuple.2] | test.rs:101:14:101:23 | a.as_str() | provenance | MaD:11 | +| test.rs:100:13:100:13 | a [tuple.2] | test.rs:102:14:102:14 | a [tuple.2] | provenance | | +| test.rs:100:13:100:13 | a [tuple.2] | test.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:10 | +| test.rs:100:13:100:13 | a [tuple.2] | test.rs:103:14:103:14 | a | provenance | | +| test.rs:100:17:100:33 | path.into_inner() | test.rs:100:13:100:13 | a | provenance | | +| test.rs:100:17:100:33 | path.into_inner() [tuple.0] | test.rs:100:13:100:13 | a [tuple.0] | provenance | | +| test.rs:100:17:100:33 | path.into_inner() [tuple.1] | test.rs:100:13:100:13 | a [tuple.1] | provenance | | +| test.rs:100:17:100:33 | path.into_inner() [tuple.2] | test.rs:100:13:100:13 | a [tuple.2] | provenance | | +| test.rs:101:14:101:14 | a | test.rs:101:14:101:23 | a.as_str() | provenance | MaD:11 | +| test.rs:101:14:101:14 | a [tuple.0] | test.rs:101:14:101:23 | a.as_str() | provenance | MaD:11 | +| test.rs:101:14:101:14 | a [tuple.1] | test.rs:101:14:101:23 | a.as_str() | provenance | MaD:11 | +| test.rs:101:14:101:14 | a [tuple.2] | test.rs:101:14:101:23 | a.as_str() | provenance | MaD:11 | +| test.rs:102:14:102:14 | a | test.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:10 | +| test.rs:102:14:102:14 | a [tuple.0] | test.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:10 | +| test.rs:102:14:102:14 | a [tuple.1] | test.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:10 | +| test.rs:102:14:102:14 | a [tuple.2] | test.rs:102:14:102:25 | a.as_bytes() | provenance | MaD:10 | +| test.rs:109:9:109:41 | ...: ...::Path::<...> | test.rs:111:22:111:38 | path.into_inner() [tuple.0] | provenance | MaD:6 | +| test.rs:109:9:109:41 | ...: ...::Path::<...> | test.rs:111:22:111:38 | path.into_inner() [tuple.1] | provenance | MaD:7 | +| test.rs:111:13:111:18 | TuplePat [tuple.0] | test.rs:111:14:111:14 | a | provenance | | +| test.rs:111:13:111:18 | TuplePat [tuple.1] | test.rs:111:17:111:17 | b | provenance | | +| test.rs:111:14:111:14 | a | test.rs:113:14:113:14 | a | provenance | | +| test.rs:111:17:111:17 | b | test.rs:114:14:114:14 | b | provenance | | +| test.rs:111:22:111:38 | path.into_inner() [tuple.0] | test.rs:111:13:111:18 | TuplePat [tuple.0] | provenance | | +| test.rs:111:22:111:38 | path.into_inner() [tuple.1] | test.rs:111:13:111:18 | TuplePat [tuple.1] | provenance | | +| test.rs:127:5:127:20 | to | test.rs:129:9:129:31 | ...: ...::Path::<...> | provenance | Src:MaD:4 | +| test.rs:129:9:129:31 | ...: ...::Path::<...> | test.rs:131:17:131:33 | path.into_inner() | provenance | MaD:9 | +| test.rs:129:9:129:31 | ...: ...::Path::<...> | test.rs:131:17:131:33 | path.into_inner() [tuple.0] | provenance | MaD:6 | +| test.rs:129:9:129:31 | ...: ...::Path::<...> | test.rs:131:17:131:33 | path.into_inner() [tuple.1] | provenance | MaD:7 | +| test.rs:129:9:129:31 | ...: ...::Path::<...> | test.rs:131:17:131:33 | path.into_inner() [tuple.2] | provenance | MaD:8 | +| test.rs:131:13:131:13 | a | test.rs:132:14:132:14 | a | provenance | | +| test.rs:131:13:131:13 | a [tuple.0] | test.rs:132:14:132:14 | a | provenance | | +| test.rs:131:13:131:13 | a [tuple.1] | test.rs:132:14:132:14 | a | provenance | | +| test.rs:131:13:131:13 | a [tuple.2] | test.rs:132:14:132:14 | a | provenance | | +| test.rs:131:17:131:33 | path.into_inner() | test.rs:131:13:131:13 | a | provenance | | +| test.rs:131:17:131:33 | path.into_inner() [tuple.0] | test.rs:131:13:131:13 | a [tuple.0] | provenance | | +| test.rs:131:17:131:33 | path.into_inner() [tuple.1] | test.rs:131:13:131:13 | a [tuple.1] | provenance | | +| test.rs:131:17:131:33 | path.into_inner() [tuple.2] | test.rs:131:13:131:13 | a [tuple.2] | provenance | | +| test.rs:139:41:139:42 | to | test.rs:98:9:98:31 | ...: ...::Path::<...> | provenance | Src:MaD:5 | +| test.rs:140:45:140:46 | to | test.rs:109:9:109:41 | ...: ...::Path::<...> | provenance | Src:MaD:5 | +| test.rs:242:33:242:35 | map | test.rs:242:38:242:46 | ...: String | provenance | Src:MaD:2 | +| test.rs:242:33:242:35 | map | test.rs:242:38:242:46 | ...: String | provenance | Src:MaD:2 | +| test.rs:242:38:242:46 | ...: String | test.rs:244:18:244:18 | a | provenance | | +| test.rs:242:38:242:46 | ...: String | test.rs:244:18:244:18 | a | provenance | | +| test.rs:250:46:250:49 | then | test.rs:251:25:251:33 | ...: String | provenance | Src:MaD:3 | +| test.rs:250:46:250:49 | then | test.rs:251:25:251:33 | ...: String | provenance | Src:MaD:3 | +| test.rs:251:25:251:33 | ...: String | test.rs:252:22:252:22 | a | provenance | | +| test.rs:251:25:251:33 | ...: String | test.rs:252:22:252:22 | a | provenance | | +| test.rs:259:50:259:57 | and_then | test.rs:260:26:260:32 | ...: u64 | provenance | Src:MaD:1 | +| test.rs:259:50:259:57 | and_then | test.rs:260:26:260:32 | ...: u64 | provenance | Src:MaD:1 | +| test.rs:260:26:260:32 | ...: u64 | test.rs:263:22:263:23 | id | provenance | | +| test.rs:260:26:260:32 | ...: u64 | test.rs:263:22:263:23 | id | provenance | | +| test.rs:272:75:272:77 | map | test.rs:273:15:273:23 | ...: String | provenance | Src:MaD:2 | +| test.rs:272:75:272:77 | map | test.rs:273:15:273:23 | ...: String | provenance | Src:MaD:2 | +| test.rs:273:15:273:23 | ...: String | test.rs:275:22:275:22 | a | provenance | | +| test.rs:273:15:273:23 | ...: String | test.rs:275:22:275:22 | a | provenance | | +nodes +| test.rs:11:31:11:31 | a | semmle.label | a | +| test.rs:11:31:11:31 | a | semmle.label | a | +| test.rs:13:14:13:14 | a | semmle.label | a | +| test.rs:13:14:13:14 | a | semmle.label | a | +| test.rs:13:14:13:23 | a.as_str() | semmle.label | a.as_str() | +| test.rs:13:14:13:23 | a.as_str() | semmle.label | a.as_str() | +| test.rs:14:14:14:14 | a | semmle.label | a | +| test.rs:14:14:14:14 | a | semmle.label | a | +| test.rs:14:14:14:25 | a.as_bytes() | semmle.label | a.as_bytes() | +| test.rs:14:14:14:25 | a.as_bytes() | semmle.label | a.as_bytes() | +| test.rs:15:14:15:14 | a | semmle.label | a | +| test.rs:15:14:15:14 | a | semmle.label | a | +| test.rs:68:15:68:15 | a | semmle.label | a | +| test.rs:68:15:68:15 | a | semmle.label | a | +| test.rs:70:14:70:14 | a | semmle.label | a | +| test.rs:70:14:70:14 | a | semmle.label | a | +| test.rs:98:9:98:31 | ...: ...::Path::<...> | semmle.label | ...: ...::Path::<...> | +| test.rs:100:13:100:13 | a | semmle.label | a | +| test.rs:100:13:100:13 | a [tuple.0] | semmle.label | a [tuple.0] | +| test.rs:100:13:100:13 | a [tuple.1] | semmle.label | a [tuple.1] | +| test.rs:100:13:100:13 | a [tuple.2] | semmle.label | a [tuple.2] | +| test.rs:100:17:100:33 | path.into_inner() | semmle.label | path.into_inner() | +| test.rs:100:17:100:33 | path.into_inner() [tuple.0] | semmle.label | path.into_inner() [tuple.0] | +| test.rs:100:17:100:33 | path.into_inner() [tuple.1] | semmle.label | path.into_inner() [tuple.1] | +| test.rs:100:17:100:33 | path.into_inner() [tuple.2] | semmle.label | path.into_inner() [tuple.2] | +| test.rs:101:14:101:14 | a | semmle.label | a | +| test.rs:101:14:101:14 | a [tuple.0] | semmle.label | a [tuple.0] | +| test.rs:101:14:101:14 | a [tuple.1] | semmle.label | a [tuple.1] | +| test.rs:101:14:101:14 | a [tuple.2] | semmle.label | a [tuple.2] | +| test.rs:101:14:101:23 | a.as_str() | semmle.label | a.as_str() | +| test.rs:102:14:102:14 | a | semmle.label | a | +| test.rs:102:14:102:14 | a [tuple.0] | semmle.label | a [tuple.0] | +| test.rs:102:14:102:14 | a [tuple.1] | semmle.label | a [tuple.1] | +| test.rs:102:14:102:14 | a [tuple.2] | semmle.label | a [tuple.2] | +| test.rs:102:14:102:25 | a.as_bytes() | semmle.label | a.as_bytes() | +| test.rs:103:14:103:14 | a | semmle.label | a | +| test.rs:109:9:109:41 | ...: ...::Path::<...> | semmle.label | ...: ...::Path::<...> | +| test.rs:111:13:111:18 | TuplePat [tuple.0] | semmle.label | TuplePat [tuple.0] | +| test.rs:111:13:111:18 | TuplePat [tuple.1] | semmle.label | TuplePat [tuple.1] | +| test.rs:111:14:111:14 | a | semmle.label | a | +| test.rs:111:17:111:17 | b | semmle.label | b | +| test.rs:111:22:111:38 | path.into_inner() [tuple.0] | semmle.label | path.into_inner() [tuple.0] | +| test.rs:111:22:111:38 | path.into_inner() [tuple.1] | semmle.label | path.into_inner() [tuple.1] | +| test.rs:113:14:113:14 | a | semmle.label | a | +| test.rs:114:14:114:14 | b | semmle.label | b | +| test.rs:127:5:127:20 | to | semmle.label | to | +| test.rs:129:9:129:31 | ...: ...::Path::<...> | semmle.label | ...: ...::Path::<...> | +| test.rs:131:13:131:13 | a | semmle.label | a | +| test.rs:131:13:131:13 | a [tuple.0] | semmle.label | a [tuple.0] | +| test.rs:131:13:131:13 | a [tuple.1] | semmle.label | a [tuple.1] | +| test.rs:131:13:131:13 | a [tuple.2] | semmle.label | a [tuple.2] | +| test.rs:131:17:131:33 | path.into_inner() | semmle.label | path.into_inner() | +| test.rs:131:17:131:33 | path.into_inner() [tuple.0] | semmle.label | path.into_inner() [tuple.0] | +| test.rs:131:17:131:33 | path.into_inner() [tuple.1] | semmle.label | path.into_inner() [tuple.1] | +| test.rs:131:17:131:33 | path.into_inner() [tuple.2] | semmle.label | path.into_inner() [tuple.2] | +| test.rs:132:14:132:14 | a | semmle.label | a | +| test.rs:139:41:139:42 | to | semmle.label | to | +| test.rs:140:45:140:46 | to | semmle.label | to | +| test.rs:242:33:242:35 | map | semmle.label | map | +| test.rs:242:33:242:35 | map | semmle.label | map | +| test.rs:242:38:242:46 | ...: String | semmle.label | ...: String | +| test.rs:242:38:242:46 | ...: String | semmle.label | ...: String | +| test.rs:244:18:244:18 | a | semmle.label | a | +| test.rs:244:18:244:18 | a | semmle.label | a | +| test.rs:250:46:250:49 | then | semmle.label | then | +| test.rs:250:46:250:49 | then | semmle.label | then | +| test.rs:251:25:251:33 | ...: String | semmle.label | ...: String | +| test.rs:251:25:251:33 | ...: String | semmle.label | ...: String | +| test.rs:252:22:252:22 | a | semmle.label | a | +| test.rs:252:22:252:22 | a | semmle.label | a | +| test.rs:259:50:259:57 | and_then | semmle.label | and_then | +| test.rs:259:50:259:57 | and_then | semmle.label | and_then | +| test.rs:260:26:260:32 | ...: u64 | semmle.label | ...: u64 | +| test.rs:260:26:260:32 | ...: u64 | semmle.label | ...: u64 | +| test.rs:263:22:263:23 | id | semmle.label | id | +| test.rs:263:22:263:23 | id | semmle.label | id | +| test.rs:272:75:272:77 | map | semmle.label | map | +| test.rs:272:75:272:77 | map | semmle.label | map | +| test.rs:273:15:273:23 | ...: String | semmle.label | ...: String | +| test.rs:273:15:273:23 | ...: String | semmle.label | ...: String | +| test.rs:275:22:275:22 | a | semmle.label | a | +| test.rs:275:22:275:22 | a | semmle.label | a | +subpaths +testFailures +#select +| test.rs:13:14:13:23 | a.as_str() | test.rs:11:31:11:31 | a | test.rs:13:14:13:23 | a.as_str() | $@ | test.rs:11:31:11:31 | a | a | +| test.rs:13:14:13:23 | a.as_str() | test.rs:11:31:11:31 | a | test.rs:13:14:13:23 | a.as_str() | $@ | test.rs:11:31:11:31 | a | a | +| test.rs:14:14:14:25 | a.as_bytes() | test.rs:11:31:11:31 | a | test.rs:14:14:14:25 | a.as_bytes() | $@ | test.rs:11:31:11:31 | a | a | +| test.rs:14:14:14:25 | a.as_bytes() | test.rs:11:31:11:31 | a | test.rs:14:14:14:25 | a.as_bytes() | $@ | test.rs:11:31:11:31 | a | a | +| test.rs:15:14:15:14 | a | test.rs:11:31:11:31 | a | test.rs:15:14:15:14 | a | $@ | test.rs:11:31:11:31 | a | a | +| test.rs:15:14:15:14 | a | test.rs:11:31:11:31 | a | test.rs:15:14:15:14 | a | $@ | test.rs:11:31:11:31 | a | a | +| test.rs:70:14:70:14 | a | test.rs:68:15:68:15 | a | test.rs:70:14:70:14 | a | $@ | test.rs:68:15:68:15 | a | a | +| test.rs:70:14:70:14 | a | test.rs:68:15:68:15 | a | test.rs:70:14:70:14 | a | $@ | test.rs:68:15:68:15 | a | a | +| test.rs:101:14:101:23 | a.as_str() | test.rs:139:41:139:42 | to | test.rs:101:14:101:23 | a.as_str() | $@ | test.rs:139:41:139:42 | to | to | +| test.rs:102:14:102:25 | a.as_bytes() | test.rs:139:41:139:42 | to | test.rs:102:14:102:25 | a.as_bytes() | $@ | test.rs:139:41:139:42 | to | to | +| test.rs:103:14:103:14 | a | test.rs:139:41:139:42 | to | test.rs:103:14:103:14 | a | $@ | test.rs:139:41:139:42 | to | to | +| test.rs:113:14:113:14 | a | test.rs:140:45:140:46 | to | test.rs:113:14:113:14 | a | $@ | test.rs:140:45:140:46 | to | to | +| test.rs:114:14:114:14 | b | test.rs:140:45:140:46 | to | test.rs:114:14:114:14 | b | $@ | test.rs:140:45:140:46 | to | to | +| test.rs:132:14:132:14 | a | test.rs:127:5:127:20 | to | test.rs:132:14:132:14 | a | $@ | test.rs:127:5:127:20 | to | to | +| test.rs:244:18:244:18 | a | test.rs:242:33:242:35 | map | test.rs:244:18:244:18 | a | $@ | test.rs:242:33:242:35 | map | map | +| test.rs:244:18:244:18 | a | test.rs:242:33:242:35 | map | test.rs:244:18:244:18 | a | $@ | test.rs:242:33:242:35 | map | map | +| test.rs:252:22:252:22 | a | test.rs:250:46:250:49 | then | test.rs:252:22:252:22 | a | $@ | test.rs:250:46:250:49 | then | then | +| test.rs:252:22:252:22 | a | test.rs:250:46:250:49 | then | test.rs:252:22:252:22 | a | $@ | test.rs:250:46:250:49 | then | then | +| test.rs:263:22:263:23 | id | test.rs:259:50:259:57 | and_then | test.rs:263:22:263:23 | id | $@ | test.rs:259:50:259:57 | and_then | and_then | +| test.rs:263:22:263:23 | id | test.rs:259:50:259:57 | and_then | test.rs:263:22:263:23 | id | $@ | test.rs:259:50:259:57 | and_then | and_then | +| test.rs:275:22:275:22 | a | test.rs:272:75:272:77 | map | test.rs:275:22:275:22 | a | $@ | test.rs:272:75:272:77 | map | map | +| test.rs:275:22:275:22 | a | test.rs:272:75:272:77 | map | test.rs:275:22:275:22 | a | $@ | test.rs:272:75:272:77 | map | map | diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks/InlineFlow.qlref b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/InlineFlow.qlref new file mode 100644 index 000000000000..e0f7493db396 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/InlineFlow.qlref @@ -0,0 +1,2 @@ +query: ../env/InlineFlow.ql + diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/TaintSources.expected new file mode 100644 index 000000000000..549f9c4ab762 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/TaintSources.expected @@ -0,0 +1,106 @@ +| test.rs:11:31:11:31 | a | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:11:31:11:31 | a | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:22:14:22:19 | TuplePat | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:22:14:22:19 | TuplePat | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:48:14:48:30 | MyStruct {...} | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:48:14:48:30 | MyStruct {...} | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:58:14:58:15 | ms | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:58:14:58:15 | ms | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:68:15:68:15 | a | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:68:15:68:15 | a | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:127:5:127:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:127:5:127:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:127:5:127:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:127:5:127:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:127:5:127:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:127:5:127:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:127:5:127:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:127:5:127:20 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:139:41:139:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:139:41:139:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:139:41:139:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:139:41:139:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:139:41:139:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:139:41:139:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:139:41:139:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:139:41:139:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:140:45:140:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:140:45:140:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:140:45:140:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:140:45:140:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:140:45:140:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:140:45:140:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:140:45:140:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:140:45:140:46 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:141:41:141:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:141:41:141:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:141:41:141:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:141:41:141:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:141:41:141:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:141:41:141:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:141:41:141:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:141:41:141:42 | to | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | +| test.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). | diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks/TaintSources.qlref b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/TaintSources.qlref new file mode 100644 index 000000000000..7aa95121af3e --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/TaintSources.qlref @@ -0,0 +1,2 @@ +query: queries/summary/TaintSources.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks/options.yml b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/options.yml new file mode 100644 index 000000000000..f13960c5c309 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/options.yml @@ -0,0 +1,9 @@ +qltest_cargo_check: true +qltest_dependencies: + - actix-web = { version = "4.10.2" } + - axum = { version = "0.8.4" } + - poem = { version = "3.1.10" } + - serde = { version = "1.0.219" } + - serde_json = { version = "1.0.140" } + - tokio = { version = "1.43.0", features = ["full"] } + - warp = { version = "0.4.2", features = ["server"] } diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs b/rust/ql/test/library-tests/dataflow/sources/web_frameworks/test.rs similarity index 100% rename from rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs rename to rust/ql/test/library-tests/dataflow/sources/web_frameworks/test.rs