From b659cc8e4184cce3cdcdda6a5ddb72b3be94fb22 Mon Sep 17 00:00:00 2001 From: John Carmack Date: Sat, 24 Oct 2026 21:42:12 -0700 Subject: [PATCH 1/3] Rust: Add tests for spurious actix-web `connection_info` sink models --- .../query-tests/security/CWE-117/Cargo.lock | 418 ++++++- .../security/CWE-117/LogInjection.expected | 168 +-- .../test/query-tests/security/CWE-117/main.rs | 20 + .../query-tests/security/CWE-117/options.yml | 1 + .../query-tests/security/CWE-770/Cargo.lock | 1015 +++++++++++++++++ .../UncontrolledAllocationSize.expected | 362 +++--- .../test/query-tests/security/CWE-770/main.rs | 20 + .../query-tests/security/CWE-770/options.yml | 1 + 8 files changed, 1764 insertions(+), 241 deletions(-) diff --git a/rust/ql/test/query-tests/security/CWE-117/Cargo.lock b/rust/ql/test/query-tests/security/CWE-117/Cargo.lock index 7629f8fa2fe3..89e1982788b4 100644 --- a/rust/ql/test/query-tests/security/CWE-117/Cargo.lock +++ b/rust/ql/test/query-tests/security/CWE-117/Cargo.lock @@ -4,6 +4,154 @@ # It should be committed to the repository version = 4 +[[package]] +name = "actix-codec" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c13df95297bcf9014dc89162b0cc69431e192e34e3b419612fc124cfcd45dbf" +dependencies = [ + "bitflags", + "bytes", + "futures-core", + "futures-sink", + "memchr", + "pin-project-lite", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "actix-http" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b796ba3c974e5133f6ca1a2c4e97c5941ea1a46d202df83344afaa18219f1a62" +dependencies = [ + "actix-codec", + "actix-service", + "actix-utils", + "bitflags", + "bytes", + "bytestring", + "derive_more", + "encoding_rs", + "foldhash", + "futures-core", + "http 0.2.12", + "httparse", + "httpdate", + "itoa", + "language-tags", + "mime", + "percent-encoding", + "pin-project-lite", + "smallvec", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "actix-router" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14f8c75c51892f18d9c46150c5ac7beb81c95f78c8b83a634d49f4ca32551fe7" +dependencies = [ + "bytestring", + "cfg-if", + "http 0.2.12", + "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.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc8dcb6fa613d47c3b764a7dc672b4b31f25751dcbcf542f7b16f3e1f700044c" +dependencies = [ + "actix-rt", + "actix-service", + "actix-utils", + "futures-core", + "futures-util", + "mio", + "socket2 0.6.5", + "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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0128396dd7313f697ad05b21b1a7be7d4cbb81888704f55996e4a27db196bb4d" +dependencies = [ + "local-waker", + "pin-project-lite", +] + +[[package]] +name = "actix-web" +version = "4.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81f8da0d2ae4200dde8773d72ba47a65c220b251ba7b9248db5bd263c247e959" +dependencies = [ + "actix-codec", + "actix-http", + "actix-router", + "actix-rt", + "actix-server", + "actix-service", + "actix-utils", + "bytes", + "bytestring", + "cfg-if", + "derive_more", + "encoding_rs", + "foldhash", + "futures-core", + "futures-util", + "impl-more", + "itoa", + "language-tags", + "log", + "mime", + "once_cell", + "pin-project-lite", + "regex-lite", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "socket2 0.6.5", + "time", + "tokio", + "tracing", + "url", +] + [[package]] name = "addr2line" version = "0.24.2" @@ -44,7 +192,7 @@ dependencies = [ "bytes", "form_urlencoded", "futures-util", - "http", + "http 1.3.1", "http-body", "http-body-util", "hyper", @@ -75,7 +223,7 @@ checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" dependencies = [ "bytes", "futures-core", - "http", + "http 1.3.1", "http-body", "http-body-util", "mime", @@ -125,6 +273,15 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +[[package]] +name = "bytestring" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86566c496f2f47d9b8147a4c8b02ffdb69c919fe0c2b2e7195d22cbba0e635c9" +dependencies = [ + "bytes", +] + [[package]] name = "cc" version = "1.2.32" @@ -140,6 +297,15 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +[[package]] +name = "convert_case" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -156,6 +322,35 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "deranged" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9de72ce2ad1f90dc62fa25f0f430ef85eb4b0d8fa0be4f30373bc40a21d28e" + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn", + "unicode-xid", +] + [[package]] name = "displaydoc" version = "0.2.5" @@ -217,6 +412,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + [[package]] name = "foreign-types" version = "0.3.2" @@ -331,7 +532,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http", + "http 1.3.1", "indexmap", "slab", "tokio", @@ -351,6 +552,17 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" +[[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" @@ -369,7 +581,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http", + "http 1.3.1", ] [[package]] @@ -380,7 +592,7 @@ checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", - "http", + "http 1.3.1", "http-body", "pin-project-lite", ] @@ -413,7 +625,7 @@ dependencies = [ "futures-channel", "futures-util", "h2", - "http", + "http 1.3.1", "http-body", "httparse", "httpdate", @@ -430,7 +642,7 @@ version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "http", + "http 1.3.1", "hyper", "hyper-util", "rustls", @@ -466,12 +678,12 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "http", + "http 1.3.1", "http-body", "hyper", "libc", "pin-project-lite", - "socket2", + "socket2 0.5.10", "tokio", "tower-service", "tracing", @@ -584,6 +796,12 @@ dependencies = [ "icu_properties", ] +[[package]] +name = "impl-more" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d3a73c82a0b0747dba739b380c046a140b5ae747234bf701df3460282da7193" + [[package]] name = "indexmap" version = "2.10.0" @@ -627,6 +845,12 @@ dependencies = [ "wasm-bindgen", ] +[[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.175" @@ -645,6 +869,21 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" +[[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.20" @@ -685,6 +924,7 @@ 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", ] @@ -706,6 +946,12 @@ dependencies = [ "tempfile", ] +[[package]] +name = "num-conv" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" + [[package]] name = "object" version = "0.36.7" @@ -765,6 +1011,29 @@ dependencies = [ "vcpkg", ] +[[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 0.2.1", +] + [[package]] name = "percent-encoding" version = "2.3.1" @@ -798,6 +1067,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "powerfmt" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a6394b9e965e73d0a289ee54f589087e2c676aedf60885baf52c76b771e4958" + [[package]] name = "proc-macro2" version = "1.0.97" @@ -822,6 +1097,15 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[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.11.1" @@ -845,6 +1129,12 @@ dependencies = [ "regex-syntax", ] +[[package]] +name = "regex-lite" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" + [[package]] name = "regex-syntax" version = "0.8.5" @@ -864,7 +1154,7 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http", + "http 1.3.1", "http-body", "http-body-util", "hyper", @@ -915,6 +1205,15 @@ version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + [[package]] name = "rustix" version = "1.0.8" @@ -991,6 +1290,12 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "security-framework" version = "2.11.1" @@ -1014,6 +1319,12 @@ dependencies = [ "libc", ] +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + [[package]] name = "serde" version = "1.0.228" @@ -1084,6 +1395,16 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + [[package]] name = "slab" version = "0.4.11" @@ -1106,6 +1427,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -1196,12 +1527,43 @@ dependencies = [ name = "test" version = "0.0.1" dependencies = [ + "actix-web", "axum", "env_logger", "log", "reqwest", ] +[[package]] +name = "time" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" + +[[package]] +name = "time-macros" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tinystr" version = "0.8.1" @@ -1222,8 +1584,10 @@ dependencies = [ "bytes", "libc", "mio", + "parking_lot", "pin-project-lite", - "socket2", + "signal-hook-registry", + "socket2 0.5.10", "tokio-macros", "windows-sys 0.52.0", ] @@ -1308,9 +1672,21 @@ checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", "pin-project-lite", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tracing-core" version = "0.1.34" @@ -1332,6 +1708,18 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +[[package]] +name = "unicode-segmentation" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + [[package]] name = "untrusted" version = "0.9.0" @@ -1481,6 +1869,12 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + [[package]] name = "windows-registry" version = "0.2.0" @@ -1560,7 +1954,7 @@ version = "0.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" dependencies = [ - "windows-link", + "windows-link 0.1.3", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", diff --git a/rust/ql/test/query-tests/security/CWE-117/LogInjection.expected b/rust/ql/test/query-tests/security/CWE-117/LogInjection.expected index 5ccfc2084386..30be6c1c1773 100644 --- a/rust/ql/test/query-tests/security/CWE-117/LogInjection.expected +++ b/rust/ql/test/query-tests/security/CWE-117/LogInjection.expected @@ -18,99 +18,123 @@ | main.rs:130:18:130:38 | MacroExpr | main.rs:127:25:127:45 | ...::var(...) | main.rs:130:18:130:38 | MacroExpr | Log entry depends on a $@. | main.rs:127:25:127:45 | ...::var(...) | user-provided value | | main.rs:131:19:131:49 | MacroExpr | main.rs:127:25:127:45 | ...::var(...) | main.rs:131:19:131:49 | MacroExpr | Log entry depends on a $@. | main.rs:127:25:127:45 | ...::var(...) | user-provided value | | main.rs:143:18:143:40 | MacroExpr | main.rs:150:32:150:48 | my_axum_handler_1 | main.rs:143:18:143:40 | MacroExpr | Log entry depends on a $@. | main.rs:150:32:150:48 | my_axum_handler_1 | user-provided value | +| main.rs:160:17:160:19 | req | main.rs:170:53:170:75 | connection_info_handler | main.rs:160:17:160:19 | req | Log entry depends on a $@. | main.rs:170:53:170:75 | connection_info_handler | user-provided value | +| main.rs:161:17:161:19 | req | main.rs:170:53:170:75 | connection_info_handler | main.rs:161:17:161:19 | req | Log entry depends on a $@. | main.rs:170:53:170:75 | connection_info_handler | user-provided value | +| main.rs:162:17:162:19 | req | main.rs:170:53:170:75 | connection_info_handler | main.rs:162:17:162:19 | req | Log entry depends on a $@. | main.rs:170:53:170:75 | connection_info_handler | user-provided value | +| main.rs:163:17:163:19 | req | main.rs:170:53:170:75 | connection_info_handler | main.rs:163:17:163:19 | req | Log entry depends on a $@. | main.rs:170:53:170:75 | connection_info_handler | user-provided value | +| main.rs:164:44:164:47 | &req | main.rs:170:53:170:75 | connection_info_handler | main.rs:164:44:164:47 | &req | Log entry depends on a $@. | main.rs:170:53:170:75 | connection_info_handler | user-provided value | +| main.rs:165:46:165:49 | &req | main.rs:170:53:170:75 | connection_info_handler | main.rs:165:46:165:49 | &req | Log entry depends on a $@. | main.rs:170:53:170:75 | connection_info_handler | user-provided value | edges | main.rs:8:9:8:12 | args [element] | main.rs:9:20:9:23 | args [element] | provenance | | -| main.rs:8:29:8:39 | ...::args(...) | main.rs:8:29:8:39 | ...::args(...) [element] | provenance | Src:MaD:6 | -| main.rs:8:29:8:39 | ...::args(...) [element] | main.rs:8:29:8:49 | ... .collect() [element] | provenance | MaD:12 | +| main.rs:8:29:8:39 | ...::args(...) | main.rs:8:29:8:39 | ...::args(...) [element] | provenance | Src:MaD:13 | +| main.rs:8:29:8:39 | ...::args(...) [element] | main.rs:8:29:8:49 | ... .collect() [element] | provenance | MaD:19 | | main.rs:8:29:8:49 | ... .collect() [element] | main.rs:8:9:8:12 | args [element] | provenance | | -| main.rs:9:9:9:16 | username | main.rs:15:11:15:36 | MacroExpr | provenance | Sink:MaD:1 | -| main.rs:9:9:9:16 | username | main.rs:18:12:18:37 | MacroExpr | provenance | Sink:MaD:1 | +| main.rs:9:9:9:16 | username | main.rs:15:11:15:36 | MacroExpr | provenance | Sink:MaD:7 | +| main.rs:9:9:9:16 | username | main.rs:18:12:18:37 | MacroExpr | provenance | Sink:MaD:7 | | main.rs:9:9:9:16 | username | main.rs:22:33:22:63 | MacroExpr | provenance | | | main.rs:9:9:9:16 | username | main.rs:26:55:26:62 | username | provenance | | -| main.rs:9:9:9:16 | username | main.rs:30:11:30:66 | MacroExpr | provenance | Sink:MaD:1 | +| main.rs:9:9:9:16 | username | main.rs:30:11:30:66 | MacroExpr | provenance | Sink:MaD:7 | | main.rs:9:9:9:16 | username | main.rs:52:29:52:36 | username | provenance | | -| main.rs:9:20:9:23 | args [element] | main.rs:9:20:9:30 | args.get(...) [Some, &ref] | provenance | MaD:10 | -| main.rs:9:20:9:30 | args.get(...) [Some, &ref] | main.rs:9:20:9:64 | ... .unwrap_or(...) [&ref] | provenance | MaD:16 | -| main.rs:9:20:9:64 | ... .unwrap_or(...) [&ref] | main.rs:9:20:9:72 | ... .clone() | provenance | MaD:11 | +| main.rs:9:20:9:23 | args [element] | main.rs:9:20:9:30 | args.get(...) [Some, &ref] | provenance | MaD:17 | +| main.rs:9:20:9:30 | args.get(...) [Some, &ref] | main.rs:9:20:9:64 | ... .unwrap_or(...) [&ref] | provenance | MaD:23 | +| main.rs:9:20:9:64 | ... .unwrap_or(...) [&ref] | main.rs:9:20:9:72 | ... .clone() | provenance | MaD:18 | | main.rs:9:20:9:72 | ... .clone() | main.rs:9:9:9:16 | username | provenance | | -| main.rs:10:9:10:18 | user_input | main.rs:16:11:16:44 | MacroExpr | provenance | Sink:MaD:1 | -| main.rs:10:9:10:18 | user_input | main.rs:19:12:19:39 | MacroExpr | provenance | Sink:MaD:1 | -| main.rs:10:22:10:48 | ...::var(...) | main.rs:10:22:10:48 | ...::var(...) [Ok] | provenance | Src:MaD:7 | -| main.rs:10:22:10:48 | ...::var(...) [Ok] | main.rs:10:22:10:81 | ... .unwrap_or(...) | provenance | MaD:19 | +| main.rs:10:9:10:18 | user_input | main.rs:16:11:16:44 | MacroExpr | provenance | Sink:MaD:7 | +| main.rs:10:9:10:18 | user_input | main.rs:19:12:19:39 | MacroExpr | provenance | Sink:MaD:7 | +| main.rs:10:22:10:48 | ...::var(...) | main.rs:10:22:10:48 | ...::var(...) [Ok] | provenance | Src:MaD:14 | +| main.rs:10:22:10:48 | ...::var(...) [Ok] | main.rs:10:22:10:81 | ... .unwrap_or(...) | provenance | MaD:26 | | main.rs:10:22:10:81 | ... .unwrap_or(...) | main.rs:10:9:10:18 | user_input | provenance | | -| main.rs:11:9:11:19 | remote_data | main.rs:17:12:17:46 | MacroExpr | provenance | Sink:MaD:1 | -| main.rs:11:9:11:19 | remote_data | main.rs:30:11:30:66 | MacroExpr | provenance | Sink:MaD:1 | -| main.rs:11:23:11:71 | ...::get(...) | main.rs:11:23:11:71 | ...::get(...) [Ok] | provenance | Src:MaD:5 | -| main.rs:11:23:11:71 | ...::get(...) [Ok] | main.rs:11:23:12:17 | ... .unwrap() | provenance | MaD:18 | -| main.rs:11:23:12:17 | ... .unwrap() | main.rs:11:23:12:24 | ... .text() [Ok] | provenance | MaD:21 | -| main.rs:11:23:12:24 | ... .text() [Ok] | main.rs:11:23:12:61 | ... .unwrap_or(...) | provenance | MaD:19 | +| main.rs:11:9:11:19 | remote_data | main.rs:17:12:17:46 | MacroExpr | provenance | Sink:MaD:7 | +| main.rs:11:9:11:19 | remote_data | main.rs:30:11:30:66 | MacroExpr | provenance | Sink:MaD:7 | +| main.rs:11:23:11:71 | ...::get(...) | main.rs:11:23:11:71 | ...::get(...) [Ok] | provenance | Src:MaD:12 | +| main.rs:11:23:11:71 | ...::get(...) [Ok] | main.rs:11:23:12:17 | ... .unwrap() | provenance | MaD:25 | +| main.rs:11:23:12:17 | ... .unwrap() | main.rs:11:23:12:24 | ... .text() [Ok] | provenance | MaD:28 | +| main.rs:11:23:12:24 | ... .text() [Ok] | main.rs:11:23:12:61 | ... .unwrap_or(...) | provenance | MaD:26 | | main.rs:11:23:12:61 | ... .unwrap_or(...) | main.rs:11:9:11:19 | remote_data | provenance | | -| main.rs:22:9:22:21 | formatted_msg | main.rs:23:11:23:29 | MacroExpr | provenance | Sink:MaD:1 | +| main.rs:22:9:22:21 | formatted_msg | main.rs:23:11:23:29 | MacroExpr | provenance | Sink:MaD:7 | | main.rs:22:33:22:63 | ...::format(...) | main.rs:22:33:22:63 | { ... } | provenance | | | main.rs:22:33:22:63 | ...::must_use(...) | main.rs:22:9:22:21 | formatted_msg | provenance | | -| main.rs:22:33:22:63 | MacroExpr | main.rs:22:33:22:63 | ...::format(...) | provenance | MaD:22 | -| main.rs:22:33:22:63 | { ... } | main.rs:22:33:22:63 | ...::must_use(...) | provenance | MaD:23 | -| main.rs:26:9:26:18 | concat_msg | main.rs:27:11:27:26 | MacroExpr | provenance | Sink:MaD:1 | +| main.rs:22:33:22:63 | MacroExpr | main.rs:22:33:22:63 | ...::format(...) | provenance | MaD:29 | +| main.rs:22:33:22:63 | { ... } | main.rs:22:33:22:63 | ...::must_use(...) | provenance | MaD:30 | +| main.rs:26:9:26:18 | concat_msg | main.rs:27:11:27:26 | MacroExpr | provenance | Sink:MaD:7 | | main.rs:26:22:26:62 | ... + ... | main.rs:26:9:26:18 | concat_msg | provenance | | -| main.rs:26:54:26:62 | &username [&ref] | main.rs:26:22:26:62 | ... + ... | provenance | MaD:8 | +| main.rs:26:54:26:62 | &username [&ref] | main.rs:26:22:26:62 | ... + ... | provenance | MaD:15 | | main.rs:26:55:26:62 | username | main.rs:26:54:26:62 | &username [&ref] | provenance | | | main.rs:52:28:52:36 | &username [&ref] | main.rs:56:27:56:40 | ...: ... [&ref] | provenance | | | main.rs:52:29:52:36 | username | main.rs:52:28:52:36 | &username [&ref] | provenance | | | main.rs:56:27:56:40 | ...: ... [&ref] | main.rs:65:38:65:45 | username [&ref] | provenance | | | main.rs:65:9:65:17 | user_info [UserInfo] | main.rs:66:28:66:36 | user_info [UserInfo] | provenance | | | main.rs:65:21:65:59 | UserInfo {...} [UserInfo] | main.rs:65:9:65:17 | user_info [UserInfo] | provenance | | -| main.rs:65:38:65:45 | username [&ref] | main.rs:65:38:65:57 | username.to_string() | provenance | MaD:9 | +| main.rs:65:38:65:45 | username [&ref] | main.rs:65:38:65:57 | username.to_string() | provenance | MaD:16 | | main.rs:65:38:65:57 | username.to_string() | main.rs:65:21:65:59 | UserInfo {...} [UserInfo] | provenance | | | main.rs:66:28:66:36 | user_info [UserInfo] | main.rs:66:28:66:41 | user_info.name | provenance | | -| main.rs:66:28:66:41 | user_info.name | main.rs:66:11:66:41 | MacroExpr | provenance | Sink:MaD:1 | -| main.rs:109:13:109:21 | user_data | main.rs:112:15:112:35 | MacroExpr | provenance | Sink:MaD:1 | -| main.rs:109:13:109:21 | user_data | main.rs:113:15:113:38 | MacroExpr | provenance | Sink:MaD:1 | -| main.rs:109:13:109:21 | user_data | main.rs:114:16:114:37 | MacroExpr | provenance | Sink:MaD:1 | -| main.rs:109:13:109:21 | user_data | main.rs:115:16:115:37 | MacroExpr | provenance | Sink:MaD:1 | -| main.rs:109:13:109:21 | user_data | main.rs:116:16:116:37 | MacroExpr | provenance | Sink:MaD:1 | -| main.rs:109:13:109:21 | user_data | main.rs:119:15:119:75 | MacroExpr | provenance | Sink:MaD:1 | -| main.rs:109:25:109:40 | ...::args(...) | main.rs:109:25:109:40 | ...::args(...) [element] | provenance | Src:MaD:6 | -| main.rs:109:25:109:40 | ...::args(...) [element] | main.rs:109:25:109:47 | ... .nth(...) [Some] | provenance | MaD:13 | -| main.rs:109:25:109:47 | ... .nth(...) [Some] | main.rs:109:25:109:67 | ... .unwrap_or_default() | provenance | MaD:17 | +| main.rs:66:28:66:41 | user_info.name | main.rs:66:11:66:41 | MacroExpr | provenance | Sink:MaD:7 | +| main.rs:109:13:109:21 | user_data | main.rs:112:15:112:35 | MacroExpr | provenance | Sink:MaD:7 | +| main.rs:109:13:109:21 | user_data | main.rs:113:15:113:38 | MacroExpr | provenance | Sink:MaD:7 | +| main.rs:109:13:109:21 | user_data | main.rs:114:16:114:37 | MacroExpr | provenance | Sink:MaD:7 | +| main.rs:109:13:109:21 | user_data | main.rs:115:16:115:37 | MacroExpr | provenance | Sink:MaD:7 | +| main.rs:109:13:109:21 | user_data | main.rs:116:16:116:37 | MacroExpr | provenance | Sink:MaD:7 | +| main.rs:109:13:109:21 | user_data | main.rs:119:15:119:75 | MacroExpr | provenance | Sink:MaD:7 | +| main.rs:109:25:109:40 | ...::args(...) | main.rs:109:25:109:40 | ...::args(...) [element] | provenance | Src:MaD:13 | +| main.rs:109:25:109:40 | ...::args(...) [element] | main.rs:109:25:109:47 | ... .nth(...) [Some] | provenance | MaD:20 | +| main.rs:109:25:109:47 | ... .nth(...) [Some] | main.rs:109:25:109:67 | ... .unwrap_or_default() | provenance | MaD:24 | | main.rs:109:25:109:67 | ... .unwrap_or_default() | main.rs:109:13:109:21 | user_data | provenance | | -| main.rs:127:13:127:21 | user_data | main.rs:130:18:130:38 | MacroExpr | provenance | Sink:MaD:3 | -| main.rs:127:13:127:21 | user_data | main.rs:131:19:131:49 | MacroExpr | provenance | Sink:MaD:2 | -| main.rs:127:25:127:45 | ...::var(...) | main.rs:127:25:127:45 | ...::var(...) [Ok] | provenance | Src:MaD:7 | -| main.rs:127:25:127:45 | ...::var(...) [Ok] | main.rs:127:25:127:65 | ... .unwrap_or_default() | provenance | MaD:20 | +| main.rs:127:13:127:21 | user_data | main.rs:130:18:130:38 | MacroExpr | provenance | Sink:MaD:9 | +| main.rs:127:13:127:21 | user_data | main.rs:131:19:131:49 | MacroExpr | provenance | Sink:MaD:8 | +| main.rs:127:25:127:45 | ...::var(...) | main.rs:127:25:127:45 | ...::var(...) [Ok] | provenance | Src:MaD:14 | +| main.rs:127:25:127:45 | ...::var(...) [Ok] | main.rs:127:25:127:65 | ... .unwrap_or_default() | provenance | MaD:27 | | main.rs:127:25:127:65 | ... .unwrap_or_default() | main.rs:127:13:127:21 | user_data | provenance | | | main.rs:140:32:140:59 | ...: Option::<...> | main.rs:141:22:141:27 | o_path | provenance | | | main.rs:141:13:141:18 | m_path [Some] | main.rs:143:26:143:31 | m_path [Some] | provenance | | -| main.rs:141:22:141:27 | o_path | main.rs:141:22:141:38 | o_path.map(...) [Some] | provenance | MaD:14 | -| main.rs:141:22:141:27 | o_path | main.rs:141:34:141:34 | ... | provenance | MaD:14 | +| main.rs:141:22:141:27 | o_path | main.rs:141:22:141:38 | o_path.map(...) [Some] | provenance | MaD:21 | +| main.rs:141:22:141:27 | o_path | main.rs:141:34:141:34 | ... | provenance | MaD:21 | | main.rs:141:22:141:38 | o_path.map(...) [Some] | main.rs:141:13:141:18 | m_path [Some] | provenance | | | main.rs:141:34:141:34 | ... | main.rs:141:37:141:37 | x | provenance | | -| main.rs:143:26:143:31 | m_path [Some] | main.rs:143:26:143:40 | m_path.unwrap() | provenance | MaD:15 | -| main.rs:143:26:143:40 | m_path.unwrap() | main.rs:143:18:143:40 | MacroExpr | provenance | Sink:MaD:3 | -| main.rs:150:32:150:48 | my_axum_handler_1 | main.rs:140:32:140:59 | ...: Option::<...> | provenance | Src:MaD:4 | +| main.rs:143:26:143:31 | m_path [Some] | main.rs:143:26:143:40 | m_path.unwrap() | provenance | MaD:22 | +| main.rs:143:26:143:40 | m_path.unwrap() | main.rs:143:18:143:40 | MacroExpr | provenance | Sink:MaD:9 | +| main.rs:150:32:150:48 | my_axum_handler_1 | main.rs:140:32:140:59 | ...: Option::<...> | provenance | Src:MaD:11 | +| main.rs:158:38:158:53 | ...: HttpRequest | main.rs:160:17:160:19 | req | provenance | Sink:MaD:2 | +| main.rs:158:38:158:53 | ...: HttpRequest | main.rs:161:17:161:19 | req | provenance | Sink:MaD:3 | +| main.rs:158:38:158:53 | ...: HttpRequest | main.rs:162:17:162:19 | req | provenance | Sink:MaD:4 | +| main.rs:158:38:158:53 | ...: HttpRequest | main.rs:163:17:163:19 | req | provenance | Sink:MaD:5 | +| main.rs:158:38:158:53 | ...: HttpRequest | main.rs:164:45:164:47 | req | provenance | | +| main.rs:158:38:158:53 | ...: HttpRequest | main.rs:165:47:165:49 | req | provenance | | +| main.rs:164:44:164:47 | &req [&ref] | main.rs:164:44:164:47 | &req | provenance | Sink:MaD:6 | +| main.rs:164:45:164:47 | req | main.rs:164:44:164:47 | &req [&ref] | provenance | | +| main.rs:165:46:165:49 | &req [&ref] | main.rs:165:46:165:49 | &req | provenance | Sink:MaD:1 | +| main.rs:165:47:165:49 | req | main.rs:165:46:165:49 | &req [&ref] | provenance | | +| main.rs:170:53:170:75 | connection_info_handler | main.rs:158:38:158:53 | ...: HttpRequest | provenance | Src:MaD:10 | models -| 1 | Sink: log::__private_api::log; Argument[0]; log-injection | -| 2 | Sink: std::io::stdio::_eprint; Argument[0]; log-injection | -| 3 | Sink: std::io::stdio::_print; Argument[0]; log-injection | -| 4 | Source: axum::routing::method_routing::get; Argument[0].Parameter[0..7]; remote | -| 5 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote | -| 6 | Source: std::env::args; ReturnValue.Element; commandargs | -| 7 | Source: std::env::var; ReturnValue.Field[core::result::Result::Ok(0)]; environment | -| 8 | Summary: ::add; Argument[0].Reference; ReturnValue; taint | -| 9 | Summary: ::to_string; Argument[self].Reference; ReturnValue; taint | -| 10 | Summary: ::deref; Argument[self].Reference.Element; ReturnValue.Reference.Element; value | -| 11 | Summary: ::clone; Argument[self].Reference; ReturnValue; value | -| 12 | Summary: ::collect; Argument[self].Element; ReturnValue.Element; value | -| 13 | Summary: ::nth; Argument[self].Reference.Element; ReturnValue.Field[core::option::Option::Some(0)]; value | -| 14 | Summary: ::map; Argument[self].Field[core::option::Option::Some(0)]; Argument[0].Parameter[0]; value | -| 15 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 16 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 17 | Summary: ::unwrap_or_default; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 18 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 19 | Summary: ::unwrap_or; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 20 | Summary: ::unwrap_or_default; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 21 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 22 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | -| 23 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | +| 1 | Sink: ::from_request; Argument[0]; log-injection | +| 2 | Sink: ::connection_info; Argument[self]; log-injection | +| 3 | Sink: ::full_url; Argument[self]; log-injection | +| 4 | Sink: ::url_for; Argument[self]; log-injection | +| 5 | Sink: ::url_for_static; Argument[self]; log-injection | +| 6 | Sink: ::url_for; Argument[0]; log-injection | +| 7 | Sink: log::__private_api::log; Argument[0]; log-injection | +| 8 | Sink: std::io::stdio::_eprint; Argument[0]; log-injection | +| 9 | Sink: std::io::stdio::_print; Argument[0]; log-injection | +| 10 | Source: ::to; Argument[0].Parameter[0..7]; remote | +| 11 | Source: axum::routing::method_routing::get; Argument[0].Parameter[0..7]; remote | +| 12 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote | +| 13 | Source: std::env::args; ReturnValue.Element; commandargs | +| 14 | Source: std::env::var; ReturnValue.Field[core::result::Result::Ok(0)]; environment | +| 15 | Summary: ::add; Argument[0].Reference; ReturnValue; taint | +| 16 | Summary: ::to_string; Argument[self].Reference; ReturnValue; taint | +| 17 | Summary: ::deref; Argument[self].Reference.Element; ReturnValue.Reference.Element; value | +| 18 | Summary: ::clone; Argument[self].Reference; ReturnValue; value | +| 19 | Summary: ::collect; Argument[self].Element; ReturnValue.Element; value | +| 20 | Summary: ::nth; Argument[self].Reference.Element; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 21 | Summary: ::map; Argument[self].Field[core::option::Option::Some(0)]; Argument[0].Parameter[0]; value | +| 22 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 23 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 24 | Summary: ::unwrap_or_default; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 25 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 26 | Summary: ::unwrap_or; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 27 | Summary: ::unwrap_or_default; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 28 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 29 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | +| 30 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | nodes | main.rs:8:9:8:12 | args [element] | semmle.label | args [element] | | main.rs:8:29:8:39 | ...::args(...) | semmle.label | ...::args(...) | @@ -185,5 +209,17 @@ nodes | main.rs:143:26:143:31 | m_path [Some] | semmle.label | m_path [Some] | | main.rs:143:26:143:40 | m_path.unwrap() | semmle.label | m_path.unwrap() | | main.rs:150:32:150:48 | my_axum_handler_1 | semmle.label | my_axum_handler_1 | +| main.rs:158:38:158:53 | ...: HttpRequest | semmle.label | ...: HttpRequest | +| main.rs:160:17:160:19 | req | semmle.label | req | +| main.rs:161:17:161:19 | req | semmle.label | req | +| main.rs:162:17:162:19 | req | semmle.label | req | +| main.rs:163:17:163:19 | req | semmle.label | req | +| main.rs:164:44:164:47 | &req | semmle.label | &req | +| main.rs:164:44:164:47 | &req [&ref] | semmle.label | &req [&ref] | +| main.rs:164:45:164:47 | req | semmle.label | req | +| main.rs:165:46:165:49 | &req | semmle.label | &req | +| main.rs:165:46:165:49 | &req [&ref] | semmle.label | &req [&ref] | +| main.rs:165:47:165:49 | req | semmle.label | req | +| main.rs:170:53:170:75 | connection_info_handler | semmle.label | connection_info_handler | subpaths | main.rs:141:22:141:27 | o_path | main.rs:141:34:141:34 | ... | main.rs:141:37:141:37 | x | main.rs:141:22:141:38 | o_path.map(...) [Some] | diff --git a/rust/ql/test/query-tests/security/CWE-117/main.rs b/rust/ql/test/query-tests/security/CWE-117/main.rs index 21eabac01c61..9e1b2fa85d30 100644 --- a/rust/ql/test/query-tests/security/CWE-117/main.rs +++ b/rust/ql/test/query-tests/security/CWE-117/main.rs @@ -150,3 +150,23 @@ mod axum_tests { .route("/{a}", get(my_axum_handler_1)); // $ Source=post_handler } } + +mod actix_tests { + use actix_web::dev::{ConnectionInfo, Payload}; + use actix_web::{web, App, FromRequest, HttpRequest}; + + async fn connection_info_handler(req: HttpRequest) -> &'static str { + // reading the connection info does not log anything + let _ = req.connection_info(); // $ SPURIOUS: Alert[rust/log-injection]=actix + let _ = req.full_url(); // $ SPURIOUS: Alert[rust/log-injection]=actix + let _ = req.url_for("index", ["a"]); // $ SPURIOUS: Alert[rust/log-injection]=actix + let _ = req.url_for_static("index"); // $ SPURIOUS: Alert[rust/log-injection]=actix + let _ = req.resource_map().url_for(&req, "index", ["a"]); // $ SPURIOUS: Alert[rust/log-injection]=actix + let _ = ConnectionInfo::from_request(&req, &mut Payload::None); // $ SPURIOUS: Alert[rust/log-injection]=actix + "" + } + + fn test_actix() { + let _ = App::new().route("/", web::get().to(connection_info_handler)); // $ Source=actix + } +} diff --git a/rust/ql/test/query-tests/security/CWE-117/options.yml b/rust/ql/test/query-tests/security/CWE-117/options.yml index 8807ab636318..6115ec398b6e 100644 --- a/rust/ql/test/query-tests/security/CWE-117/options.yml +++ b/rust/ql/test/query-tests/security/CWE-117/options.yml @@ -4,3 +4,4 @@ qltest_dependencies: - env_logger = "0.10" - reqwest = { version = "0.12.9", features = ["blocking"] } - axum = { version = "0.8.7" } + - actix-web = { version = "4", default-features = false } diff --git a/rust/ql/test/query-tests/security/CWE-770/Cargo.lock b/rust/ql/test/query-tests/security/CWE-770/Cargo.lock index 444f7a92c563..0f0124e7d69f 100644 --- a/rust/ql/test/query-tests/security/CWE-770/Cargo.lock +++ b/rust/ql/test/query-tests/security/CWE-770/Cargo.lock @@ -2,15 +2,1030 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "actix-codec" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c13df95297bcf9014dc89162b0cc69431e192e34e3b419612fc124cfcd45dbf" +dependencies = [ + "bitflags", + "bytes", + "futures-core", + "futures-sink", + "memchr", + "pin-project-lite", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "actix-http" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b796ba3c974e5133f6ca1a2c4e97c5941ea1a46d202df83344afaa18219f1a62" +dependencies = [ + "actix-codec", + "actix-service", + "actix-utils", + "bitflags", + "bytes", + "bytestring", + "derive_more", + "encoding_rs", + "foldhash", + "futures-core", + "http", + "httparse", + "httpdate", + "itoa", + "language-tags", + "mime", + "percent-encoding", + "pin-project-lite", + "smallvec", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "actix-router" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14f8c75c51892f18d9c46150c5ac7beb81c95f78c8b83a634d49f4ca32551fe7" +dependencies = [ + "bytestring", + "cfg-if", + "http", + "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.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc8dcb6fa613d47c3b764a7dc672b4b31f25751dcbcf542f7b16f3e1f700044c" +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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0128396dd7313f697ad05b21b1a7be7d4cbb81888704f55996e4a27db196bb4d" +dependencies = [ + "local-waker", + "pin-project-lite", +] + +[[package]] +name = "actix-web" +version = "4.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81f8da0d2ae4200dde8773d72ba47a65c220b251ba7b9248db5bd263c247e959" +dependencies = [ + "actix-codec", + "actix-http", + "actix-router", + "actix-rt", + "actix-server", + "actix-service", + "actix-utils", + "bytes", + "bytestring", + "cfg-if", + "derive_more", + "encoding_rs", + "foldhash", + "futures-core", + "futures-util", + "impl-more", + "itoa", + "language-tags", + "log", + "mime", + "once_cell", + "pin-project-lite", + "regex-lite", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "socket2", + "time", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "bitflags" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" + +[[package]] +name = "bytes" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" + +[[package]] +name = "bytestring" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86566c496f2f47d9b8147a4c8b02ffdb69c919fe0c2b2e7195d22cbba0e635c9" +dependencies = [ + "bytes", +] + +[[package]] +name = "cfg-if" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" + +[[package]] +name = "convert_case" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "core_detect" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f8f80099a98041a3d1622845c271458a2d73e688351bf3cb999266764b81d48" + +[[package]] +name = "deranged" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9de72ce2ad1f90dc62fa25f0f430ef85eb4b0d8fa0be4f30373bc40a21d28e" + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.119", + "unicode-xid", +] + +[[package]] +name = "displaydoc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.9", +] + +[[package]] +name = "encoding_rs" +version = "0.8.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e985e0451871ad22fb8d2b6b076e2028a502a0d3950998c2c5c0a4f9b5d9679" +dependencies = [ + "cfg-if", + "core_detect", + "multiversion_no_op", + "rustversion", + "scopeguard", + "simdutf8", +] + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[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-core" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" + +[[package]] +name = "futures-sink" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" + +[[package]] +name = "futures-task" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" + +[[package]] +name = "futures-util" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "slab", +] + +[[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 = "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 = "icu_collections" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe090a42a0d3140fed8c63263ed1fecc02422cb2f4bfe55cd8de2de1b8e105dd" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25d29b57c17c6528d0dc4c2141cfa2d08200465acb537a3909c8b9b8a4a984c0" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "404a3b8c486f205c87fe7f23ab6894d84a4ad76d6e4671ae1981ba7def87c599" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20f0088bfb7441f7a37fa0c9e20cb1e9cba1cac6b9ce8cd2a6dc44294f8e8cbc" + +[[package]] +name = "icu_properties" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ea83d991c56158f7cf898bf86436c1dfe7c07ee82fe88951f2695c9f37a379f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98f29af82d02b163fe50161388350e743bb3107cc8e8c2f7314cb505faddfcf" + +[[package]] +name = "icu_provider" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413099315636c588ee8f011190b329b971a09a8fae9d157e01dcae8379468514" +dependencies = [ + "displaydoc", + "icu_locale_core", + "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.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "impl-more" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d3a73c82a0b0747dba739b380c046a140b5ae747234bf701df3460282da7193" + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[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.174" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" +[[package]] +name = "litemap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" + +[[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.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[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", +] + +[[package]] +name = "multiversion_no_op" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "743fb55ba31b18fb1ecef6bdc9aa2743314978ac084044301a7eee33fb99a20d" + +[[package]] +name = "num-conv" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[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-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "potential_utf" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a6394b9e965e73d0a289ee54f589087e2c676aedf60885baf52c76b771e4958" + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +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 = "regex-lite" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.9", +] + +[[package]] +name = "serde_json" +version = "1.0.154" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[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 = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.16.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0d5d4b1981b8bbbb7aed204cae5726d683d5d6ac7e74ec54122ea28f315e7c8" + +[[package]] +name = "socket2" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +dependencies = [ + "libc", + "windows-sys", +] + +[[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.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.9", +] + [[package]] name = "test" version = "0.0.1" dependencies = [ + "actix-web", "libc", ] + +[[package]] +name = "time" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" + +[[package]] +name = "time-macros" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abc840c238154d58f9e86b2792261edfde565a17696e1cda1a449de27979801a" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tokio" +version = "1.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" +dependencies = [ + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "windows-sys", +] + +[[package]] +name = "tokio-util" +version = "0.7.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "libc", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "unicode-ident" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563" + +[[package]] +name = "unicode-segmentation" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" + +[[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.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +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 = "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.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "writeable" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" + +[[package]] +name = "yoke" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "417ef3fcf6c300b7dbd25c85531a746931c02ad536f3cf4786ed1e88223340b3" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.9", + "synstructure", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.9", + "synstructure", +] + +[[package]] +name = "zerotrie" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58a2799cfe9a1670c7ea8edbd52ef8edb93cb37a7f83bf31ba9e35d9dae6a40" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3743ddbf47738d929cd1ae2e199d40d0162979dfe31aef8ae646d2bf00bf97a" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.9", +] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected index 6b6cb7066279..b135a2b7ad16 100644 --- a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected +++ b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected @@ -52,101 +52,107 @@ | main.rs:231:42:231:42 | v | main.rs:339:13:339:28 | ...::args(...) | main.rs:231:42:231:42 | v | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | | main.rs:287:40:287:45 | layout | main.rs:311:25:311:40 | ...::args(...) | main.rs:287:40:287:45 | layout | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:311:25:311:40 | ...::args(...) | user-provided value | | main.rs:331:26:331:26 | a | main.rs:339:13:339:28 | ...::args(...) | main.rs:331:26:331:26 | a | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | +| main.rs:361:17:361:19 | req | main.rs:371:53:371:75 | connection_info_handler | main.rs:361:17:361:19 | req | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:371:53:371:75 | connection_info_handler | user-provided value | +| main.rs:362:17:362:19 | req | main.rs:371:53:371:75 | connection_info_handler | main.rs:362:17:362:19 | req | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:371:53:371:75 | connection_info_handler | user-provided value | +| main.rs:363:17:363:19 | req | main.rs:371:53:371:75 | connection_info_handler | main.rs:363:17:363:19 | req | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:371:53:371:75 | connection_info_handler | user-provided value | +| main.rs:364:17:364:19 | req | main.rs:371:53:371:75 | connection_info_handler | main.rs:364:17:364:19 | req | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:371:53:371:75 | connection_info_handler | user-provided value | +| main.rs:365:44:365:47 | &req | main.rs:371:53:371:75 | connection_info_handler | main.rs:365:44:365:47 | &req | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:371:53:371:75 | connection_info_handler | user-provided value | +| main.rs:366:46:366:49 | &req | main.rs:371:53:371:75 | connection_info_handler | main.rs:366:46:366:49 | &req | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:371:53:371:75 | connection_info_handler | user-provided value | edges -| main.rs:12:36:12:43 | ...: usize | main.rs:18:41:18:41 | v | provenance | Sink:MaD:17 | +| main.rs:12:36:12:43 | ...: usize | main.rs:18:41:18:41 | v | provenance | Sink:MaD:23 | | main.rs:12:36:12:43 | ...: usize | main.rs:20:50:20:50 | v | provenance | | | main.rs:12:36:12:43 | ...: usize | main.rs:29:60:29:60 | v | provenance | | | main.rs:12:36:12:43 | ...: usize | main.rs:32:60:32:60 | v | provenance | | | main.rs:12:36:12:43 | ...: usize | main.rs:35:49:35:49 | v | provenance | | -| main.rs:20:9:20:10 | l2 | main.rs:21:31:21:32 | l2 | provenance | Sink:MaD:15 | +| main.rs:20:9:20:10 | l2 | main.rs:21:31:21:32 | l2 | provenance | Sink:MaD:21 | | main.rs:20:9:20:10 | l2 | main.rs:22:31:22:32 | l2 | provenance | | | main.rs:20:9:20:10 | l2 | main.rs:23:31:23:32 | l2 | provenance | | -| main.rs:20:9:20:10 | l2 | main.rs:24:38:24:39 | l2 | provenance | Sink:MaD:16 | -| main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | main.rs:20:14:20:63 | ... .unwrap() | provenance | MaD:41 | +| main.rs:20:9:20:10 | l2 | main.rs:24:38:24:39 | l2 | provenance | Sink:MaD:22 | +| main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | main.rs:20:14:20:63 | ... .unwrap() | provenance | MaD:48 | | main.rs:20:14:20:63 | ... .unwrap() | main.rs:20:9:20:10 | l2 | provenance | | -| main.rs:20:50:20:50 | v | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | provenance | MaD:30 | -| main.rs:22:31:22:32 | l2 | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | provenance | MaD:24 | -| main.rs:22:31:22:44 | l2.align_to(...) [Ok] | main.rs:22:31:22:53 | ... .unwrap() | provenance | MaD:41 | -| main.rs:22:31:22:53 | ... .unwrap() | main.rs:22:31:22:53 | ... .unwrap() | provenance | Sink:MaD:15 | -| main.rs:23:31:23:32 | l2 | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | provenance | MaD:24 | -| main.rs:23:31:23:44 | l2.align_to(...) [Ok] | main.rs:23:31:23:53 | ... .unwrap() | provenance | MaD:41 | -| main.rs:23:31:23:53 | ... .unwrap() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | MaD:32 | -| main.rs:23:31:23:68 | ... .pad_to_align() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | Sink:MaD:15 | -| main.rs:29:9:29:10 | l4 | main.rs:30:31:30:32 | l4 | provenance | Sink:MaD:15 | +| main.rs:20:50:20:50 | v | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | provenance | MaD:37 | +| main.rs:22:31:22:32 | l2 | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | provenance | MaD:31 | +| main.rs:22:31:22:44 | l2.align_to(...) [Ok] | main.rs:22:31:22:53 | ... .unwrap() | provenance | MaD:48 | +| main.rs:22:31:22:53 | ... .unwrap() | main.rs:22:31:22:53 | ... .unwrap() | provenance | Sink:MaD:21 | +| main.rs:23:31:23:32 | l2 | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | provenance | MaD:31 | +| main.rs:23:31:23:44 | l2.align_to(...) [Ok] | main.rs:23:31:23:53 | ... .unwrap() | provenance | MaD:48 | +| main.rs:23:31:23:53 | ... .unwrap() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | MaD:39 | +| main.rs:23:31:23:68 | ... .pad_to_align() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | Sink:MaD:21 | +| main.rs:29:9:29:10 | l4 | main.rs:30:31:30:32 | l4 | provenance | Sink:MaD:21 | | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | main.rs:29:9:29:10 | l4 | provenance | | -| main.rs:29:60:29:60 | v | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | provenance | MaD:31 | -| main.rs:32:9:32:10 | l5 | main.rs:33:31:33:32 | l5 | provenance | Sink:MaD:15 | +| main.rs:29:60:29:60 | v | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | provenance | MaD:38 | +| main.rs:32:9:32:10 | l5 | main.rs:33:31:33:32 | l5 | provenance | Sink:MaD:21 | | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | main.rs:32:9:32:10 | l5 | provenance | | -| main.rs:32:60:32:60 | v | main.rs:32:60:32:89 | ... * ... | provenance | MaD:38 | -| main.rs:32:60:32:89 | ... * ... | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | provenance | MaD:31 | +| main.rs:32:60:32:60 | v | main.rs:32:60:32:89 | ... * ... | provenance | MaD:45 | +| main.rs:32:60:32:89 | ... * ... | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | provenance | MaD:38 | | main.rs:35:9:35:10 | s6 | main.rs:36:60:36:61 | s6 | provenance | | | main.rs:35:14:35:54 | ... + ... | main.rs:35:9:35:10 | s6 | provenance | | -| main.rs:35:15:35:49 | ... * ... | main.rs:35:14:35:54 | ... + ... | provenance | MaD:37 | -| main.rs:35:49:35:49 | v | main.rs:35:15:35:49 | ... * ... | provenance | MaD:38 | -| main.rs:36:9:36:10 | l6 | main.rs:37:31:37:32 | l6 | provenance | Sink:MaD:15 | +| main.rs:35:15:35:49 | ... * ... | main.rs:35:14:35:54 | ... + ... | provenance | MaD:44 | +| main.rs:35:49:35:49 | v | main.rs:35:15:35:49 | ... * ... | provenance | MaD:45 | +| main.rs:36:9:36:10 | l6 | main.rs:37:31:37:32 | l6 | provenance | Sink:MaD:21 | | main.rs:36:9:36:10 | l6 | main.rs:39:60:39:61 | l6 | provenance | | | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | main.rs:36:9:36:10 | l6 | provenance | | -| main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | provenance | MaD:31 | -| main.rs:39:9:39:10 | l7 | main.rs:40:31:40:32 | l7 | provenance | Sink:MaD:15 | +| main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | provenance | MaD:38 | +| main.rs:39:9:39:10 | l7 | main.rs:40:31:40:32 | l7 | provenance | Sink:MaD:21 | | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | main.rs:39:9:39:10 | l7 | provenance | | -| main.rs:39:60:39:61 | l6 | main.rs:39:60:39:68 | l6.size() | provenance | MaD:35 | -| main.rs:39:60:39:68 | l6.size() | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | provenance | MaD:31 | +| main.rs:39:60:39:61 | l6 | main.rs:39:60:39:68 | l6.size() | provenance | MaD:42 | +| main.rs:39:60:39:68 | l6.size() | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | provenance | MaD:38 | | main.rs:43:44:43:51 | ...: usize | main.rs:50:41:50:41 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:51:41:51:41 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:53:48:53:48 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:54:48:54:48 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:58:34:58:34 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:67:46:67:46 | v | provenance | | -| main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | provenance | MaD:41 | +| main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | provenance | MaD:48 | | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | main.rs:50:31:50:53 | ... .0 | provenance | | -| main.rs:50:31:50:53 | ... .0 | main.rs:50:31:50:53 | ... .0 | provenance | Sink:MaD:15 | -| main.rs:50:41:50:41 | v | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:33 | -| main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | provenance | MaD:41 | +| main.rs:50:31:50:53 | ... .0 | main.rs:50:31:50:53 | ... .0 | provenance | Sink:MaD:21 | +| main.rs:50:41:50:41 | v | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:40 | +| main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | provenance | MaD:48 | | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | main.rs:51:31:51:57 | ... .0 | provenance | | -| main.rs:51:31:51:57 | ... .0 | main.rs:51:31:51:57 | ... .0 | provenance | Sink:MaD:15 | -| main.rs:51:41:51:41 | v | main.rs:51:41:51:45 | ... + ... | provenance | MaD:37 | -| main.rs:51:41:51:45 | ... + ... | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:33 | -| main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | main.rs:53:31:53:58 | ... .unwrap() | provenance | MaD:41 | -| main.rs:53:31:53:58 | ... .unwrap() | main.rs:53:31:53:58 | ... .unwrap() | provenance | Sink:MaD:15 | -| main.rs:53:48:53:48 | v | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | provenance | MaD:34 | -| main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | main.rs:54:31:54:63 | ... .unwrap() | provenance | MaD:41 | -| main.rs:54:31:54:63 | ... .unwrap() | main.rs:54:31:54:63 | ... .unwrap() | provenance | Sink:MaD:15 | -| main.rs:54:48:54:48 | v | main.rs:54:48:54:53 | ... * ... | provenance | MaD:38 | -| main.rs:54:48:54:53 | ... * ... | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | provenance | MaD:34 | +| main.rs:51:31:51:57 | ... .0 | main.rs:51:31:51:57 | ... .0 | provenance | Sink:MaD:21 | +| main.rs:51:41:51:41 | v | main.rs:51:41:51:45 | ... + ... | provenance | MaD:44 | +| main.rs:51:41:51:45 | ... + ... | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:40 | +| main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | main.rs:53:31:53:58 | ... .unwrap() | provenance | MaD:48 | +| main.rs:53:31:53:58 | ... .unwrap() | main.rs:53:31:53:58 | ... .unwrap() | provenance | Sink:MaD:21 | +| main.rs:53:48:53:48 | v | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | provenance | MaD:41 | +| main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | main.rs:54:31:54:63 | ... .unwrap() | provenance | MaD:48 | +| main.rs:54:31:54:63 | ... .unwrap() | main.rs:54:31:54:63 | ... .unwrap() | provenance | Sink:MaD:21 | +| main.rs:54:48:54:48 | v | main.rs:54:48:54:53 | ... * ... | provenance | MaD:45 | +| main.rs:54:48:54:53 | ... * ... | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | provenance | MaD:41 | | main.rs:58:9:58:20 | TuplePat [tuple.0] | main.rs:58:10:58:11 | k1 | provenance | | -| main.rs:58:10:58:11 | k1 | main.rs:59:31:59:32 | k1 | provenance | Sink:MaD:15 | +| main.rs:58:10:58:11 | k1 | main.rs:59:31:59:32 | k1 | provenance | Sink:MaD:21 | | main.rs:58:10:58:11 | k1 | main.rs:60:34:60:35 | k1 | provenance | | | main.rs:58:10:58:11 | k1 | main.rs:62:24:62:25 | k1 | provenance | | | main.rs:58:10:58:11 | k1 | main.rs:64:48:64:49 | k1 | provenance | | | main.rs:58:10:58:11 | k1 | main.rs:65:31:65:32 | k1 | provenance | | -| main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | provenance | MaD:40 | +| main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | provenance | MaD:47 | | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | main.rs:58:9:58:20 | TuplePat [tuple.0] | provenance | | -| main.rs:58:34:58:34 | v | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | provenance | MaD:33 | +| main.rs:58:34:58:34 | v | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | provenance | MaD:40 | | main.rs:60:9:60:20 | TuplePat [tuple.0] | main.rs:60:10:60:11 | k2 | provenance | | -| main.rs:60:10:60:11 | k2 | main.rs:61:31:61:32 | k2 | provenance | Sink:MaD:15 | -| main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | provenance | MaD:41 | +| main.rs:60:10:60:11 | k2 | main.rs:61:31:61:32 | k2 | provenance | Sink:MaD:21 | +| main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | provenance | MaD:48 | | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | main.rs:60:9:60:20 | TuplePat [tuple.0] | provenance | | -| main.rs:60:34:60:35 | k1 | main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | provenance | MaD:26 | +| main.rs:60:34:60:35 | k1 | main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | provenance | MaD:33 | | main.rs:62:9:62:20 | TuplePat [tuple.0] | main.rs:62:10:62:11 | k3 | provenance | | -| main.rs:62:10:62:11 | k3 | main.rs:63:31:63:32 | k3 | provenance | Sink:MaD:15 | -| main.rs:62:24:62:25 | k1 | main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | provenance | MaD:27 | -| main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | provenance | MaD:41 | +| main.rs:62:10:62:11 | k3 | main.rs:63:31:63:32 | k3 | provenance | Sink:MaD:21 | +| main.rs:62:24:62:25 | k1 | main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | provenance | MaD:34 | +| main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | provenance | MaD:48 | | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | main.rs:62:9:62:20 | TuplePat [tuple.0] | provenance | | -| main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | main.rs:64:31:64:59 | ... .unwrap() | provenance | MaD:41 | -| main.rs:64:31:64:59 | ... .unwrap() | main.rs:64:31:64:59 | ... .unwrap() | provenance | Sink:MaD:15 | -| main.rs:64:48:64:49 | k1 | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | provenance | MaD:28 | -| main.rs:65:31:65:32 | k1 | main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | provenance | MaD:29 | -| main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | main.rs:65:31:65:59 | ... .unwrap() | provenance | MaD:41 | -| main.rs:65:31:65:59 | ... .unwrap() | main.rs:65:31:65:59 | ... .unwrap() | provenance | Sink:MaD:15 | -| main.rs:67:9:67:10 | l4 | main.rs:68:31:68:32 | l4 | provenance | Sink:MaD:15 | -| main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | main.rs:67:14:67:56 | ... .unwrap() | provenance | MaD:41 | +| main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | main.rs:64:31:64:59 | ... .unwrap() | provenance | MaD:48 | +| main.rs:64:31:64:59 | ... .unwrap() | main.rs:64:31:64:59 | ... .unwrap() | provenance | Sink:MaD:21 | +| main.rs:64:48:64:49 | k1 | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | provenance | MaD:35 | +| main.rs:65:31:65:32 | k1 | main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | provenance | MaD:36 | +| main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | main.rs:65:31:65:59 | ... .unwrap() | provenance | MaD:48 | +| main.rs:65:31:65:59 | ... .unwrap() | main.rs:65:31:65:59 | ... .unwrap() | provenance | Sink:MaD:21 | +| main.rs:67:9:67:10 | l4 | main.rs:68:31:68:32 | l4 | provenance | Sink:MaD:21 | +| main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | main.rs:67:14:67:56 | ... .unwrap() | provenance | MaD:48 | | main.rs:67:14:67:56 | ... .unwrap() | main.rs:67:9:67:10 | l4 | provenance | | -| main.rs:67:46:67:46 | v | main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | provenance | MaD:25 | +| main.rs:67:46:67:46 | v | main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | provenance | MaD:32 | | main.rs:86:35:86:42 | ...: usize | main.rs:87:54:87:54 | v | provenance | | -| main.rs:87:9:87:14 | layout | main.rs:88:31:88:36 | layout | provenance | Sink:MaD:15 | -| main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | main.rs:87:18:87:67 | ... .unwrap() | provenance | MaD:41 | +| main.rs:87:9:87:14 | layout | main.rs:88:31:88:36 | layout | provenance | Sink:MaD:21 | +| main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | main.rs:87:18:87:67 | ... .unwrap() | provenance | MaD:48 | | main.rs:87:18:87:67 | ... .unwrap() | main.rs:87:9:87:14 | layout | provenance | | -| main.rs:87:54:87:54 | v | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | provenance | MaD:30 | +| main.rs:87:54:87:54 | v | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | provenance | MaD:37 | | main.rs:91:38:91:45 | ...: usize | main.rs:92:47:92:47 | v | provenance | | | main.rs:91:38:91:45 | ...: usize | main.rs:101:51:101:51 | v | provenance | | | main.rs:91:38:91:45 | ...: usize | main.rs:105:33:105:33 | v | provenance | | @@ -154,77 +160,77 @@ edges | main.rs:91:38:91:45 | ...: usize | main.rs:151:62:151:62 | v | provenance | | | main.rs:91:38:91:45 | ...: usize | main.rs:154:62:154:62 | v | provenance | | | main.rs:91:38:91:45 | ...: usize | main.rs:161:55:161:55 | v | provenance | | -| main.rs:92:9:92:10 | l1 | main.rs:96:35:96:36 | l1 | provenance | Sink:MaD:15 | -| main.rs:92:9:92:10 | l1 | main.rs:102:35:102:36 | l1 | provenance | Sink:MaD:15 | -| main.rs:92:9:92:10 | l1 | main.rs:109:35:109:36 | l1 | provenance | Sink:MaD:15 | -| main.rs:92:9:92:10 | l1 | main.rs:111:35:111:36 | l1 | provenance | Sink:MaD:15 | -| main.rs:92:9:92:10 | l1 | main.rs:146:35:146:36 | l1 | provenance | Sink:MaD:15 | -| main.rs:92:9:92:10 | l1 | main.rs:177:31:177:32 | l1 | provenance | Sink:MaD:15 | -| main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | main.rs:92:14:92:57 | ... .unwrap() | provenance | MaD:41 | +| main.rs:92:9:92:10 | l1 | main.rs:96:35:96:36 | l1 | provenance | Sink:MaD:21 | +| main.rs:92:9:92:10 | l1 | main.rs:102:35:102:36 | l1 | provenance | Sink:MaD:21 | +| main.rs:92:9:92:10 | l1 | main.rs:109:35:109:36 | l1 | provenance | Sink:MaD:21 | +| main.rs:92:9:92:10 | l1 | main.rs:111:35:111:36 | l1 | provenance | Sink:MaD:21 | +| main.rs:92:9:92:10 | l1 | main.rs:146:35:146:36 | l1 | provenance | Sink:MaD:21 | +| main.rs:92:9:92:10 | l1 | main.rs:177:31:177:32 | l1 | provenance | Sink:MaD:21 | +| main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | main.rs:92:14:92:57 | ... .unwrap() | provenance | MaD:48 | | main.rs:92:14:92:57 | ... .unwrap() | main.rs:92:9:92:10 | l1 | provenance | | -| main.rs:92:47:92:47 | v | main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | provenance | MaD:25 | -| main.rs:101:13:101:14 | l3 | main.rs:103:35:103:36 | l3 | provenance | Sink:MaD:15 | -| main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | main.rs:101:18:101:61 | ... .unwrap() | provenance | MaD:41 | +| main.rs:92:47:92:47 | v | main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | provenance | MaD:32 | +| main.rs:101:13:101:14 | l3 | main.rs:103:35:103:36 | l3 | provenance | Sink:MaD:21 | +| main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | main.rs:101:18:101:61 | ... .unwrap() | provenance | MaD:48 | | main.rs:101:18:101:61 | ... .unwrap() | main.rs:101:13:101:14 | l3 | provenance | | -| main.rs:101:51:101:51 | v | main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | provenance | MaD:25 | +| main.rs:101:51:101:51 | v | main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | provenance | MaD:32 | | main.rs:105:33:105:33 | v | main.rs:86:35:86:42 | ...: usize | provenance | | -| main.rs:145:13:145:14 | l9 | main.rs:148:35:148:36 | l9 | provenance | Sink:MaD:15 | -| main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | main.rs:145:18:145:61 | ... .unwrap() | provenance | MaD:41 | +| main.rs:145:13:145:14 | l9 | main.rs:148:35:148:36 | l9 | provenance | Sink:MaD:21 | +| main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | main.rs:145:18:145:61 | ... .unwrap() | provenance | MaD:48 | | main.rs:145:18:145:61 | ... .unwrap() | main.rs:145:13:145:14 | l9 | provenance | | -| main.rs:145:51:145:51 | v | main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | provenance | MaD:25 | -| main.rs:151:9:151:11 | l10 | main.rs:152:31:152:33 | l10 | provenance | Sink:MaD:15 | -| main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | main.rs:151:15:151:78 | ... .unwrap() | provenance | MaD:41 | +| main.rs:145:51:145:51 | v | main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | provenance | MaD:32 | +| main.rs:151:9:151:11 | l10 | main.rs:152:31:152:33 | l10 | provenance | Sink:MaD:21 | +| main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | main.rs:151:15:151:78 | ... .unwrap() | provenance | MaD:48 | | main.rs:151:15:151:78 | ... .unwrap() | main.rs:151:9:151:11 | l10 | provenance | | -| main.rs:151:48:151:68 | ...::min(...) | main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | provenance | MaD:25 | -| main.rs:151:62:151:62 | v | main.rs:151:48:151:68 | ...::min(...) | provenance | MaD:43 | -| main.rs:154:9:154:11 | l11 | main.rs:155:31:155:33 | l11 | provenance | Sink:MaD:15 | -| main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | main.rs:154:15:154:78 | ... .unwrap() | provenance | MaD:41 | +| main.rs:151:48:151:68 | ...::min(...) | main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | provenance | MaD:32 | +| main.rs:151:62:151:62 | v | main.rs:151:48:151:68 | ...::min(...) | provenance | MaD:50 | +| main.rs:154:9:154:11 | l11 | main.rs:155:31:155:33 | l11 | provenance | Sink:MaD:21 | +| main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | main.rs:154:15:154:78 | ... .unwrap() | provenance | MaD:48 | | main.rs:154:15:154:78 | ... .unwrap() | main.rs:154:9:154:11 | l11 | provenance | | -| main.rs:154:48:154:68 | ...::max(...) | main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | provenance | MaD:25 | -| main.rs:154:62:154:62 | v | main.rs:154:48:154:68 | ...::max(...) | provenance | MaD:42 | -| main.rs:161:13:161:15 | l13 | main.rs:162:35:162:37 | l13 | provenance | Sink:MaD:15 | -| main.rs:161:13:161:15 | l13 | main.rs:169:35:169:37 | l13 | provenance | Sink:MaD:15 | -| main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | main.rs:161:19:161:68 | ... .unwrap() | provenance | MaD:41 | +| main.rs:154:48:154:68 | ...::max(...) | main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | provenance | MaD:32 | +| main.rs:154:62:154:62 | v | main.rs:154:48:154:68 | ...::max(...) | provenance | MaD:49 | +| main.rs:161:13:161:15 | l13 | main.rs:162:35:162:37 | l13 | provenance | Sink:MaD:21 | +| main.rs:161:13:161:15 | l13 | main.rs:169:35:169:37 | l13 | provenance | Sink:MaD:21 | +| main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | main.rs:161:19:161:68 | ... .unwrap() | provenance | MaD:48 | | main.rs:161:19:161:68 | ... .unwrap() | main.rs:161:13:161:15 | l13 | provenance | | -| main.rs:161:55:161:55 | v | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | provenance | MaD:30 | +| main.rs:161:55:161:55 | v | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | provenance | MaD:37 | | main.rs:183:29:183:36 | ...: usize | main.rs:192:46:192:46 | v | provenance | | -| main.rs:183:29:183:36 | ...: usize | main.rs:202:48:202:48 | v | provenance | Sink:MaD:9 | -| main.rs:192:9:192:10 | l2 | main.rs:193:38:193:39 | l2 | provenance | Sink:MaD:7 | -| main.rs:192:9:192:10 | l2 | main.rs:194:45:194:46 | l2 | provenance | Sink:MaD:8 | -| main.rs:192:9:192:10 | l2 | main.rs:195:41:195:42 | l2 | provenance | Sink:MaD:10 | -| main.rs:192:9:192:10 | l2 | main.rs:196:48:196:49 | l2 | provenance | Sink:MaD:11 | -| main.rs:192:9:192:10 | l2 | main.rs:197:41:197:42 | l2 | provenance | Sink:MaD:1 | -| main.rs:192:9:192:10 | l2 | main.rs:198:48:198:49 | l2 | provenance | Sink:MaD:2 | -| main.rs:192:9:192:10 | l2 | main.rs:208:53:208:54 | l2 | provenance | Sink:MaD:12 | -| main.rs:192:9:192:10 | l2 | main.rs:210:60:210:61 | l2 | provenance | Sink:MaD:13 | -| main.rs:192:9:192:10 | l2 | main.rs:213:51:213:52 | l2 | provenance | Sink:MaD:14 | -| main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | main.rs:192:14:192:56 | ... .unwrap() | provenance | MaD:41 | +| main.rs:183:29:183:36 | ...: usize | main.rs:202:48:202:48 | v | provenance | Sink:MaD:15 | +| main.rs:192:9:192:10 | l2 | main.rs:193:38:193:39 | l2 | provenance | Sink:MaD:13 | +| main.rs:192:9:192:10 | l2 | main.rs:194:45:194:46 | l2 | provenance | Sink:MaD:14 | +| main.rs:192:9:192:10 | l2 | main.rs:195:41:195:42 | l2 | provenance | Sink:MaD:16 | +| main.rs:192:9:192:10 | l2 | main.rs:196:48:196:49 | l2 | provenance | Sink:MaD:17 | +| main.rs:192:9:192:10 | l2 | main.rs:197:41:197:42 | l2 | provenance | Sink:MaD:7 | +| main.rs:192:9:192:10 | l2 | main.rs:198:48:198:49 | l2 | provenance | Sink:MaD:8 | +| main.rs:192:9:192:10 | l2 | main.rs:208:53:208:54 | l2 | provenance | Sink:MaD:18 | +| main.rs:192:9:192:10 | l2 | main.rs:210:60:210:61 | l2 | provenance | Sink:MaD:19 | +| main.rs:192:9:192:10 | l2 | main.rs:213:51:213:52 | l2 | provenance | Sink:MaD:20 | +| main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | main.rs:192:14:192:56 | ... .unwrap() | provenance | MaD:48 | | main.rs:192:14:192:56 | ... .unwrap() | main.rs:192:9:192:10 | l2 | provenance | | -| main.rs:192:46:192:46 | v | main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | provenance | MaD:25 | -| main.rs:217:27:217:34 | ...: usize | main.rs:219:26:219:26 | v | provenance | Sink:MaD:20 | -| main.rs:217:27:217:34 | ...: usize | main.rs:220:36:220:36 | v | provenance | Sink:MaD:18 | -| main.rs:217:27:217:34 | ...: usize | main.rs:222:30:222:30 | v | provenance | Sink:MaD:19 | -| main.rs:217:27:217:34 | ...: usize | main.rs:223:26:223:26 | v | provenance | Sink:MaD:19 | -| main.rs:217:27:217:34 | ...: usize | main.rs:224:31:224:31 | v | provenance | Sink:MaD:21 | -| main.rs:227:24:227:31 | ...: usize | main.rs:228:43:228:43 | v | provenance | Sink:MaD:3 | -| main.rs:227:24:227:31 | ...: usize | main.rs:229:39:229:39 | v | provenance | Sink:MaD:5 | -| main.rs:227:24:227:31 | ...: usize | main.rs:230:46:230:46 | v | provenance | Sink:MaD:4 | -| main.rs:227:24:227:31 | ...: usize | main.rs:231:42:231:42 | v | provenance | Sink:MaD:6 | +| main.rs:192:46:192:46 | v | main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | provenance | MaD:32 | +| main.rs:217:27:217:34 | ...: usize | main.rs:219:26:219:26 | v | provenance | Sink:MaD:26 | +| main.rs:217:27:217:34 | ...: usize | main.rs:220:36:220:36 | v | provenance | Sink:MaD:24 | +| main.rs:217:27:217:34 | ...: usize | main.rs:222:30:222:30 | v | provenance | Sink:MaD:25 | +| main.rs:217:27:217:34 | ...: usize | main.rs:223:26:223:26 | v | provenance | Sink:MaD:25 | +| main.rs:217:27:217:34 | ...: usize | main.rs:224:31:224:31 | v | provenance | Sink:MaD:27 | +| main.rs:227:24:227:31 | ...: usize | main.rs:228:43:228:43 | v | provenance | Sink:MaD:9 | +| main.rs:227:24:227:31 | ...: usize | main.rs:229:39:229:39 | v | provenance | Sink:MaD:11 | +| main.rs:227:24:227:31 | ...: usize | main.rs:230:46:230:46 | v | provenance | Sink:MaD:10 | +| main.rs:227:24:227:31 | ...: usize | main.rs:231:42:231:42 | v | provenance | Sink:MaD:12 | | main.rs:282:24:282:41 | ...: String | main.rs:283:21:283:30 | user_input | provenance | | | main.rs:283:9:283:17 | num_bytes | main.rs:285:54:285:62 | num_bytes | provenance | | -| main.rs:283:21:283:30 | user_input | main.rs:283:21:283:47 | user_input.parse() [Ok] | provenance | MaD:23 | +| main.rs:283:21:283:30 | user_input | main.rs:283:21:283:47 | user_input.parse() [Ok] | provenance | MaD:30 | | main.rs:283:21:283:47 | user_input.parse() [Ok] | main.rs:283:21:283:48 | TryExpr | provenance | | -| main.rs:283:21:283:48 | TryExpr | main.rs:283:21:283:77 | ... * ... | provenance | MaD:38 | +| main.rs:283:21:283:48 | TryExpr | main.rs:283:21:283:77 | ... * ... | provenance | MaD:45 | | main.rs:283:21:283:77 | ... * ... | main.rs:283:9:283:17 | num_bytes | provenance | | -| main.rs:285:9:285:14 | layout | main.rs:287:40:287:45 | layout | provenance | Sink:MaD:15 | -| main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | main.rs:285:18:285:75 | ... .unwrap() | provenance | MaD:41 | +| main.rs:285:9:285:14 | layout | main.rs:287:40:287:45 | layout | provenance | Sink:MaD:21 | +| main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | main.rs:285:18:285:75 | ... .unwrap() | provenance | MaD:48 | | main.rs:285:18:285:75 | ... .unwrap() | main.rs:285:9:285:14 | layout | provenance | | -| main.rs:285:54:285:62 | num_bytes | main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | provenance | MaD:30 | -| main.rs:311:25:311:40 | ...::args(...) | main.rs:311:25:311:40 | ...::args(...) [element] | provenance | Src:MaD:22 | -| main.rs:311:25:311:40 | ...::args(...) [element] | main.rs:311:25:311:47 | ... .nth(...) [Some] | provenance | MaD:36 | -| main.rs:311:25:311:47 | ... .nth(...) [Some] | main.rs:311:25:311:74 | ... .unwrap_or(...) | provenance | MaD:39 | +| main.rs:285:54:285:62 | num_bytes | main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | provenance | MaD:37 | +| main.rs:311:25:311:40 | ...::args(...) | main.rs:311:25:311:40 | ...::args(...) [element] | provenance | Src:MaD:29 | +| main.rs:311:25:311:40 | ...::args(...) [element] | main.rs:311:25:311:47 | ... .nth(...) [Some] | provenance | MaD:43 | +| main.rs:311:25:311:47 | ... .nth(...) [Some] | main.rs:311:25:311:74 | ... .unwrap_or(...) | provenance | MaD:46 | | main.rs:311:25:311:74 | ... .unwrap_or(...) | main.rs:282:24:282:41 | ...: String | provenance | | -| main.rs:317:26:317:33 | ...: usize | main.rs:331:26:331:26 | a | provenance | Sink:MaD:20 | +| main.rs:317:26:317:33 | ...: usize | main.rs:331:26:331:26 | a | provenance | Sink:MaD:26 | | main.rs:339:9:339:9 | v | main.rs:342:34:342:34 | v | provenance | | | main.rs:339:9:339:9 | v | main.rs:343:42:343:42 | v | provenance | | | main.rs:339:9:339:9 | v | main.rs:344:36:344:36 | v | provenance | | @@ -232,11 +238,11 @@ edges | main.rs:339:9:339:9 | v | main.rs:346:25:346:25 | v | provenance | | | main.rs:339:9:339:9 | v | main.rs:347:22:347:22 | v | provenance | | | main.rs:339:9:339:9 | v | main.rs:349:24:349:24 | v | provenance | | -| main.rs:339:13:339:28 | ...::args(...) | main.rs:339:13:339:28 | ...::args(...) [element] | provenance | Src:MaD:22 | -| main.rs:339:13:339:28 | ...::args(...) [element] | main.rs:339:13:339:35 | ... .nth(...) [Some] | provenance | MaD:36 | -| main.rs:339:13:339:35 | ... .nth(...) [Some] | main.rs:339:13:339:65 | ... .unwrap_or(...) | provenance | MaD:39 | -| main.rs:339:13:339:65 | ... .unwrap_or(...) | main.rs:339:13:339:82 | ... .parse() [Ok] | provenance | MaD:23 | -| main.rs:339:13:339:82 | ... .parse() [Ok] | main.rs:339:13:339:91 | ... .unwrap() | provenance | MaD:41 | +| main.rs:339:13:339:28 | ...::args(...) | main.rs:339:13:339:28 | ...::args(...) [element] | provenance | Src:MaD:29 | +| main.rs:339:13:339:28 | ...::args(...) [element] | main.rs:339:13:339:35 | ... .nth(...) [Some] | provenance | MaD:43 | +| main.rs:339:13:339:35 | ... .nth(...) [Some] | main.rs:339:13:339:65 | ... .unwrap_or(...) | provenance | MaD:46 | +| main.rs:339:13:339:65 | ... .unwrap_or(...) | main.rs:339:13:339:82 | ... .parse() [Ok] | provenance | MaD:30 | +| main.rs:339:13:339:82 | ... .parse() [Ok] | main.rs:339:13:339:91 | ... .unwrap() | provenance | MaD:48 | | main.rs:339:13:339:91 | ... .unwrap() | main.rs:339:9:339:9 | v | provenance | | | main.rs:342:34:342:34 | v | main.rs:12:36:12:43 | ...: usize | provenance | | | main.rs:343:42:343:42 | v | main.rs:43:44:43:51 | ...: usize | provenance | | @@ -245,50 +251,68 @@ edges | main.rs:346:25:346:25 | v | main.rs:217:27:217:34 | ...: usize | provenance | | | main.rs:347:22:347:22 | v | main.rs:227:24:227:31 | ...: usize | provenance | | | main.rs:349:24:349:24 | v | main.rs:317:26:317:33 | ...: usize | provenance | | +| main.rs:359:38:359:53 | ...: HttpRequest | main.rs:361:17:361:19 | req | provenance | Sink:MaD:2 | +| main.rs:359:38:359:53 | ...: HttpRequest | main.rs:362:17:362:19 | req | provenance | Sink:MaD:3 | +| main.rs:359:38:359:53 | ...: HttpRequest | main.rs:363:17:363:19 | req | provenance | Sink:MaD:4 | +| main.rs:359:38:359:53 | ...: HttpRequest | main.rs:364:17:364:19 | req | provenance | Sink:MaD:5 | +| main.rs:359:38:359:53 | ...: HttpRequest | main.rs:365:45:365:47 | req | provenance | | +| main.rs:359:38:359:53 | ...: HttpRequest | main.rs:366:47:366:49 | req | provenance | | +| main.rs:365:44:365:47 | &req [&ref] | main.rs:365:44:365:47 | &req | provenance | Sink:MaD:6 | +| main.rs:365:45:365:47 | req | main.rs:365:44:365:47 | &req [&ref] | provenance | | +| main.rs:366:46:366:49 | &req [&ref] | main.rs:366:46:366:49 | &req | provenance | Sink:MaD:1 | +| main.rs:366:47:366:49 | req | main.rs:366:46:366:49 | &req [&ref] | provenance | | +| main.rs:371:53:371:75 | connection_info_handler | main.rs:359:38:359:53 | ...: HttpRequest | provenance | Src:MaD:28 | models -| 1 | Sink: ::allocate; Argument[0]; alloc-layout | -| 2 | Sink: ::allocate_zeroed; Argument[0]; alloc-layout | -| 3 | Sink: ::try_with_capacity; Argument[0]; alloc-layout | -| 4 | Sink: ::try_with_capacity_in; Argument[0]; alloc-layout | -| 5 | Sink: ::with_capacity; Argument[0]; alloc-layout | -| 6 | Sink: ::with_capacity_in; Argument[0]; alloc-layout | -| 7 | Sink: ::alloc; Argument[0]; alloc-layout | -| 8 | Sink: ::alloc_zeroed; Argument[0]; alloc-layout | -| 9 | Sink: ::realloc; Argument[2]; alloc-size | -| 10 | Sink: ::allocate; Argument[0]; alloc-size | -| 11 | Sink: ::allocate_zeroed; Argument[0]; alloc-size | -| 12 | Sink: ::grow; Argument[2]; alloc-size | -| 13 | Sink: ::grow_zeroed; Argument[2]; alloc-size | -| 14 | Sink: ::shrink; Argument[2]; alloc-size | -| 15 | Sink: alloc::alloc::alloc; Argument[0]; alloc-layout | -| 16 | Sink: alloc::alloc::alloc_zeroed; Argument[0]; alloc-layout | -| 17 | Sink: alloc::alloc::realloc; Argument[2]; alloc-size | -| 18 | Sink: libc::unix::aligned_alloc; Argument[1]; alloc-size | -| 19 | Sink: libc::unix::calloc; Argument[0,1]; alloc-size | -| 20 | Sink: libc::unix::malloc; Argument[0]; alloc-size | -| 21 | Sink: libc::unix::realloc; Argument[1]; alloc-size | -| 22 | Source: std::env::args; ReturnValue.Element; commandargs | -| 23 | Summary: ::deref; Argument[self]; ReturnValue; value | -| 24 | Summary: ::align_to; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 25 | Summary: ::array; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 26 | Summary: ::extend; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | -| 27 | Summary: ::extend; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | -| 28 | Summary: ::extend_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 29 | Summary: ::extend_packed; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 30 | Summary: ::from_size_align; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 31 | Summary: ::from_size_align_unchecked; Argument[0]; ReturnValue; taint | -| 32 | Summary: ::pad_to_align; Argument[self].Reference; ReturnValue; taint | -| 33 | Summary: ::repeat; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | -| 34 | Summary: ::repeat_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 35 | Summary: ::size; Argument[self].Reference; ReturnValue; taint | -| 36 | Summary: ::nth; Argument[self].Reference.Element; ReturnValue.Field[core::option::Option::Some(0)]; value | -| 37 | Summary: ::add; Argument[self,0]; ReturnValue; taint | -| 38 | Summary: ::mul; Argument[self,0]; ReturnValue; taint | -| 39 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 40 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 41 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 42 | Summary: core::cmp::max; Argument[0]; ReturnValue; value | -| 43 | Summary: core::cmp::min; Argument[0]; ReturnValue; value | +| 1 | Sink: ::from_request; Argument[0]; alloc-layout | +| 2 | Sink: ::connection_info; Argument[self]; alloc-layout | +| 3 | Sink: ::full_url; Argument[self]; alloc-layout | +| 4 | Sink: ::url_for; Argument[self]; alloc-layout | +| 5 | Sink: ::url_for_static; Argument[self]; alloc-layout | +| 6 | Sink: ::url_for; Argument[0]; alloc-layout | +| 7 | Sink: ::allocate; Argument[0]; alloc-layout | +| 8 | Sink: ::allocate_zeroed; Argument[0]; alloc-layout | +| 9 | Sink: ::try_with_capacity; Argument[0]; alloc-layout | +| 10 | Sink: ::try_with_capacity_in; Argument[0]; alloc-layout | +| 11 | Sink: ::with_capacity; Argument[0]; alloc-layout | +| 12 | Sink: ::with_capacity_in; Argument[0]; alloc-layout | +| 13 | Sink: ::alloc; Argument[0]; alloc-layout | +| 14 | Sink: ::alloc_zeroed; Argument[0]; alloc-layout | +| 15 | Sink: ::realloc; Argument[2]; alloc-size | +| 16 | Sink: ::allocate; Argument[0]; alloc-size | +| 17 | Sink: ::allocate_zeroed; Argument[0]; alloc-size | +| 18 | Sink: ::grow; Argument[2]; alloc-size | +| 19 | Sink: ::grow_zeroed; Argument[2]; alloc-size | +| 20 | Sink: ::shrink; Argument[2]; alloc-size | +| 21 | Sink: alloc::alloc::alloc; Argument[0]; alloc-layout | +| 22 | Sink: alloc::alloc::alloc_zeroed; Argument[0]; alloc-layout | +| 23 | Sink: alloc::alloc::realloc; Argument[2]; alloc-size | +| 24 | Sink: libc::unix::aligned_alloc; Argument[1]; alloc-size | +| 25 | Sink: libc::unix::calloc; Argument[0,1]; alloc-size | +| 26 | Sink: libc::unix::malloc; Argument[0]; alloc-size | +| 27 | Sink: libc::unix::realloc; Argument[1]; alloc-size | +| 28 | Source: ::to; Argument[0].Parameter[0..7]; remote | +| 29 | Source: std::env::args; ReturnValue.Element; commandargs | +| 30 | Summary: ::deref; Argument[self]; ReturnValue; value | +| 31 | Summary: ::align_to; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 32 | Summary: ::array; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 33 | Summary: ::extend; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | +| 34 | Summary: ::extend; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | +| 35 | Summary: ::extend_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 36 | Summary: ::extend_packed; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 37 | Summary: ::from_size_align; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 38 | Summary: ::from_size_align_unchecked; Argument[0]; ReturnValue; taint | +| 39 | Summary: ::pad_to_align; Argument[self].Reference; ReturnValue; taint | +| 40 | Summary: ::repeat; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | +| 41 | Summary: ::repeat_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 42 | Summary: ::size; Argument[self].Reference; ReturnValue; taint | +| 43 | Summary: ::nth; Argument[self].Reference.Element; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 44 | Summary: ::add; Argument[self,0]; ReturnValue; taint | +| 45 | Summary: ::mul; Argument[self,0]; ReturnValue; taint | +| 46 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 47 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 48 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 49 | Summary: core::cmp::max; Argument[0]; ReturnValue; value | +| 50 | Summary: core::cmp::min; Argument[0]; ReturnValue; value | nodes | main.rs:12:36:12:43 | ...: usize | semmle.label | ...: usize | | main.rs:18:41:18:41 | v | semmle.label | v | @@ -484,4 +508,16 @@ nodes | main.rs:346:25:346:25 | v | semmle.label | v | | main.rs:347:22:347:22 | v | semmle.label | v | | main.rs:349:24:349:24 | v | semmle.label | v | +| main.rs:359:38:359:53 | ...: HttpRequest | semmle.label | ...: HttpRequest | +| main.rs:361:17:361:19 | req | semmle.label | req | +| main.rs:362:17:362:19 | req | semmle.label | req | +| main.rs:363:17:363:19 | req | semmle.label | req | +| main.rs:364:17:364:19 | req | semmle.label | req | +| main.rs:365:44:365:47 | &req | semmle.label | &req | +| main.rs:365:44:365:47 | &req [&ref] | semmle.label | &req [&ref] | +| main.rs:365:45:365:47 | req | semmle.label | req | +| main.rs:366:46:366:49 | &req | semmle.label | &req | +| main.rs:366:46:366:49 | &req [&ref] | semmle.label | &req [&ref] | +| main.rs:366:47:366:49 | req | semmle.label | req | +| main.rs:371:53:371:75 | connection_info_handler | semmle.label | connection_info_handler | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-770/main.rs b/rust/ql/test/query-tests/security/CWE-770/main.rs index 7ab9f9445fba..d283ad3dd737 100644 --- a/rust/ql/test/query-tests/security/CWE-770/main.rs +++ b/rust/ql/test/query-tests/security/CWE-770/main.rs @@ -351,3 +351,23 @@ fn main() { println!("--- end ---"); } + +mod actix_tests { + use actix_web::dev::{ConnectionInfo, Payload}; + use actix_web::{web, App, FromRequest, HttpRequest}; + + async fn connection_info_handler(req: HttpRequest) -> &'static str { + // reading the connection info does not allocate an uncontrolled amount of memory + let _ = req.connection_info(); // $ SPURIOUS: Alert[rust/uncontrolled-allocation-size]=actix + let _ = req.full_url(); // $ SPURIOUS: Alert[rust/uncontrolled-allocation-size]=actix + let _ = req.url_for("index", ["a"]); // $ SPURIOUS: Alert[rust/uncontrolled-allocation-size]=actix + let _ = req.url_for_static("index"); // $ SPURIOUS: Alert[rust/uncontrolled-allocation-size]=actix + let _ = req.resource_map().url_for(&req, "index", ["a"]); // $ SPURIOUS: Alert[rust/uncontrolled-allocation-size]=actix + let _ = ConnectionInfo::from_request(&req, &mut Payload::None); // $ SPURIOUS: Alert[rust/uncontrolled-allocation-size]=actix + "" + } + + fn test_actix() { + let _ = App::new().route("/", web::get().to(connection_info_handler)); // $ Source=actix + } +} diff --git a/rust/ql/test/query-tests/security/CWE-770/options.yml b/rust/ql/test/query-tests/security/CWE-770/options.yml index 5a0244bf92b8..0a7537bd03e1 100644 --- a/rust/ql/test/query-tests/security/CWE-770/options.yml +++ b/rust/ql/test/query-tests/security/CWE-770/options.yml @@ -1,3 +1,4 @@ qltest_use_nightly: true qltest_dependencies: - libc = { version = "0.2.174" } + - actix-web = { version = "4", default-features = false } From fd836f5538ea1eacc0c90210a4d7345abaa4b4d3 Mon Sep 17 00:00:00 2001 From: John Carmack Date: Sat, 24 Oct 2026 21:48:02 -0700 Subject: [PATCH 2/3] Rust: Add neutral models for spurious actix-web `connection_info` sink models --- .../rust/frameworks/actix-web.model.yml | 13 +- .../security/CWE-117/LogInjection.expected | 168 ++++---- .../test/query-tests/security/CWE-117/main.rs | 14 +- .../UncontrolledAllocationSize.expected | 362 ++++++++---------- .../test/query-tests/security/CWE-770/main.rs | 14 +- 5 files changed, 255 insertions(+), 316 deletions(-) diff --git a/rust/ql/lib/codeql/rust/frameworks/actix-web.model.yml b/rust/ql/lib/codeql/rust/frameworks/actix-web.model.yml index bef64edf68d6..863bcc98c153 100644 --- a/rust/ql/lib/codeql/rust/frameworks/actix-web.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/actix-web.model.yml @@ -15,4 +15,15 @@ extensions: pack: codeql/rust-all extensible: summaryModel data: - - ["::into_inner", "Argument[self]", "ReturnValue", "taint", "manual"] \ No newline at end of file + - ["::into_inner", "Argument[self]", "ReturnValue", "taint", "manual"] + - addsTo: + pack: codeql/rust-all + extensible: neutralModel + data: + - ["::from_request", "sink", "manual"] + - ["::connection_info", "sink", "manual"] + - ["::full_url", "sink", "manual"] + - ["::url_for", "sink", "manual"] + - ["::url_for_static", "sink", "manual"] + - ["::url_for", "sink", "manual"] + - ["::connection_info", "sink", "manual"] diff --git a/rust/ql/test/query-tests/security/CWE-117/LogInjection.expected b/rust/ql/test/query-tests/security/CWE-117/LogInjection.expected index 30be6c1c1773..5ccfc2084386 100644 --- a/rust/ql/test/query-tests/security/CWE-117/LogInjection.expected +++ b/rust/ql/test/query-tests/security/CWE-117/LogInjection.expected @@ -18,123 +18,99 @@ | main.rs:130:18:130:38 | MacroExpr | main.rs:127:25:127:45 | ...::var(...) | main.rs:130:18:130:38 | MacroExpr | Log entry depends on a $@. | main.rs:127:25:127:45 | ...::var(...) | user-provided value | | main.rs:131:19:131:49 | MacroExpr | main.rs:127:25:127:45 | ...::var(...) | main.rs:131:19:131:49 | MacroExpr | Log entry depends on a $@. | main.rs:127:25:127:45 | ...::var(...) | user-provided value | | main.rs:143:18:143:40 | MacroExpr | main.rs:150:32:150:48 | my_axum_handler_1 | main.rs:143:18:143:40 | MacroExpr | Log entry depends on a $@. | main.rs:150:32:150:48 | my_axum_handler_1 | user-provided value | -| main.rs:160:17:160:19 | req | main.rs:170:53:170:75 | connection_info_handler | main.rs:160:17:160:19 | req | Log entry depends on a $@. | main.rs:170:53:170:75 | connection_info_handler | user-provided value | -| main.rs:161:17:161:19 | req | main.rs:170:53:170:75 | connection_info_handler | main.rs:161:17:161:19 | req | Log entry depends on a $@. | main.rs:170:53:170:75 | connection_info_handler | user-provided value | -| main.rs:162:17:162:19 | req | main.rs:170:53:170:75 | connection_info_handler | main.rs:162:17:162:19 | req | Log entry depends on a $@. | main.rs:170:53:170:75 | connection_info_handler | user-provided value | -| main.rs:163:17:163:19 | req | main.rs:170:53:170:75 | connection_info_handler | main.rs:163:17:163:19 | req | Log entry depends on a $@. | main.rs:170:53:170:75 | connection_info_handler | user-provided value | -| main.rs:164:44:164:47 | &req | main.rs:170:53:170:75 | connection_info_handler | main.rs:164:44:164:47 | &req | Log entry depends on a $@. | main.rs:170:53:170:75 | connection_info_handler | user-provided value | -| main.rs:165:46:165:49 | &req | main.rs:170:53:170:75 | connection_info_handler | main.rs:165:46:165:49 | &req | Log entry depends on a $@. | main.rs:170:53:170:75 | connection_info_handler | user-provided value | edges | main.rs:8:9:8:12 | args [element] | main.rs:9:20:9:23 | args [element] | provenance | | -| main.rs:8:29:8:39 | ...::args(...) | main.rs:8:29:8:39 | ...::args(...) [element] | provenance | Src:MaD:13 | -| main.rs:8:29:8:39 | ...::args(...) [element] | main.rs:8:29:8:49 | ... .collect() [element] | provenance | MaD:19 | +| main.rs:8:29:8:39 | ...::args(...) | main.rs:8:29:8:39 | ...::args(...) [element] | provenance | Src:MaD:6 | +| main.rs:8:29:8:39 | ...::args(...) [element] | main.rs:8:29:8:49 | ... .collect() [element] | provenance | MaD:12 | | main.rs:8:29:8:49 | ... .collect() [element] | main.rs:8:9:8:12 | args [element] | provenance | | -| main.rs:9:9:9:16 | username | main.rs:15:11:15:36 | MacroExpr | provenance | Sink:MaD:7 | -| main.rs:9:9:9:16 | username | main.rs:18:12:18:37 | MacroExpr | provenance | Sink:MaD:7 | +| main.rs:9:9:9:16 | username | main.rs:15:11:15:36 | MacroExpr | provenance | Sink:MaD:1 | +| main.rs:9:9:9:16 | username | main.rs:18:12:18:37 | MacroExpr | provenance | Sink:MaD:1 | | main.rs:9:9:9:16 | username | main.rs:22:33:22:63 | MacroExpr | provenance | | | main.rs:9:9:9:16 | username | main.rs:26:55:26:62 | username | provenance | | -| main.rs:9:9:9:16 | username | main.rs:30:11:30:66 | MacroExpr | provenance | Sink:MaD:7 | +| main.rs:9:9:9:16 | username | main.rs:30:11:30:66 | MacroExpr | provenance | Sink:MaD:1 | | main.rs:9:9:9:16 | username | main.rs:52:29:52:36 | username | provenance | | -| main.rs:9:20:9:23 | args [element] | main.rs:9:20:9:30 | args.get(...) [Some, &ref] | provenance | MaD:17 | -| main.rs:9:20:9:30 | args.get(...) [Some, &ref] | main.rs:9:20:9:64 | ... .unwrap_or(...) [&ref] | provenance | MaD:23 | -| main.rs:9:20:9:64 | ... .unwrap_or(...) [&ref] | main.rs:9:20:9:72 | ... .clone() | provenance | MaD:18 | +| main.rs:9:20:9:23 | args [element] | main.rs:9:20:9:30 | args.get(...) [Some, &ref] | provenance | MaD:10 | +| main.rs:9:20:9:30 | args.get(...) [Some, &ref] | main.rs:9:20:9:64 | ... .unwrap_or(...) [&ref] | provenance | MaD:16 | +| main.rs:9:20:9:64 | ... .unwrap_or(...) [&ref] | main.rs:9:20:9:72 | ... .clone() | provenance | MaD:11 | | main.rs:9:20:9:72 | ... .clone() | main.rs:9:9:9:16 | username | provenance | | -| main.rs:10:9:10:18 | user_input | main.rs:16:11:16:44 | MacroExpr | provenance | Sink:MaD:7 | -| main.rs:10:9:10:18 | user_input | main.rs:19:12:19:39 | MacroExpr | provenance | Sink:MaD:7 | -| main.rs:10:22:10:48 | ...::var(...) | main.rs:10:22:10:48 | ...::var(...) [Ok] | provenance | Src:MaD:14 | -| main.rs:10:22:10:48 | ...::var(...) [Ok] | main.rs:10:22:10:81 | ... .unwrap_or(...) | provenance | MaD:26 | +| main.rs:10:9:10:18 | user_input | main.rs:16:11:16:44 | MacroExpr | provenance | Sink:MaD:1 | +| main.rs:10:9:10:18 | user_input | main.rs:19:12:19:39 | MacroExpr | provenance | Sink:MaD:1 | +| main.rs:10:22:10:48 | ...::var(...) | main.rs:10:22:10:48 | ...::var(...) [Ok] | provenance | Src:MaD:7 | +| main.rs:10:22:10:48 | ...::var(...) [Ok] | main.rs:10:22:10:81 | ... .unwrap_or(...) | provenance | MaD:19 | | main.rs:10:22:10:81 | ... .unwrap_or(...) | main.rs:10:9:10:18 | user_input | provenance | | -| main.rs:11:9:11:19 | remote_data | main.rs:17:12:17:46 | MacroExpr | provenance | Sink:MaD:7 | -| main.rs:11:9:11:19 | remote_data | main.rs:30:11:30:66 | MacroExpr | provenance | Sink:MaD:7 | -| main.rs:11:23:11:71 | ...::get(...) | main.rs:11:23:11:71 | ...::get(...) [Ok] | provenance | Src:MaD:12 | -| main.rs:11:23:11:71 | ...::get(...) [Ok] | main.rs:11:23:12:17 | ... .unwrap() | provenance | MaD:25 | -| main.rs:11:23:12:17 | ... .unwrap() | main.rs:11:23:12:24 | ... .text() [Ok] | provenance | MaD:28 | -| main.rs:11:23:12:24 | ... .text() [Ok] | main.rs:11:23:12:61 | ... .unwrap_or(...) | provenance | MaD:26 | +| main.rs:11:9:11:19 | remote_data | main.rs:17:12:17:46 | MacroExpr | provenance | Sink:MaD:1 | +| main.rs:11:9:11:19 | remote_data | main.rs:30:11:30:66 | MacroExpr | provenance | Sink:MaD:1 | +| main.rs:11:23:11:71 | ...::get(...) | main.rs:11:23:11:71 | ...::get(...) [Ok] | provenance | Src:MaD:5 | +| main.rs:11:23:11:71 | ...::get(...) [Ok] | main.rs:11:23:12:17 | ... .unwrap() | provenance | MaD:18 | +| main.rs:11:23:12:17 | ... .unwrap() | main.rs:11:23:12:24 | ... .text() [Ok] | provenance | MaD:21 | +| main.rs:11:23:12:24 | ... .text() [Ok] | main.rs:11:23:12:61 | ... .unwrap_or(...) | provenance | MaD:19 | | main.rs:11:23:12:61 | ... .unwrap_or(...) | main.rs:11:9:11:19 | remote_data | provenance | | -| main.rs:22:9:22:21 | formatted_msg | main.rs:23:11:23:29 | MacroExpr | provenance | Sink:MaD:7 | +| main.rs:22:9:22:21 | formatted_msg | main.rs:23:11:23:29 | MacroExpr | provenance | Sink:MaD:1 | | main.rs:22:33:22:63 | ...::format(...) | main.rs:22:33:22:63 | { ... } | provenance | | | main.rs:22:33:22:63 | ...::must_use(...) | main.rs:22:9:22:21 | formatted_msg | provenance | | -| main.rs:22:33:22:63 | MacroExpr | main.rs:22:33:22:63 | ...::format(...) | provenance | MaD:29 | -| main.rs:22:33:22:63 | { ... } | main.rs:22:33:22:63 | ...::must_use(...) | provenance | MaD:30 | -| main.rs:26:9:26:18 | concat_msg | main.rs:27:11:27:26 | MacroExpr | provenance | Sink:MaD:7 | +| main.rs:22:33:22:63 | MacroExpr | main.rs:22:33:22:63 | ...::format(...) | provenance | MaD:22 | +| main.rs:22:33:22:63 | { ... } | main.rs:22:33:22:63 | ...::must_use(...) | provenance | MaD:23 | +| main.rs:26:9:26:18 | concat_msg | main.rs:27:11:27:26 | MacroExpr | provenance | Sink:MaD:1 | | main.rs:26:22:26:62 | ... + ... | main.rs:26:9:26:18 | concat_msg | provenance | | -| main.rs:26:54:26:62 | &username [&ref] | main.rs:26:22:26:62 | ... + ... | provenance | MaD:15 | +| main.rs:26:54:26:62 | &username [&ref] | main.rs:26:22:26:62 | ... + ... | provenance | MaD:8 | | main.rs:26:55:26:62 | username | main.rs:26:54:26:62 | &username [&ref] | provenance | | | main.rs:52:28:52:36 | &username [&ref] | main.rs:56:27:56:40 | ...: ... [&ref] | provenance | | | main.rs:52:29:52:36 | username | main.rs:52:28:52:36 | &username [&ref] | provenance | | | main.rs:56:27:56:40 | ...: ... [&ref] | main.rs:65:38:65:45 | username [&ref] | provenance | | | main.rs:65:9:65:17 | user_info [UserInfo] | main.rs:66:28:66:36 | user_info [UserInfo] | provenance | | | main.rs:65:21:65:59 | UserInfo {...} [UserInfo] | main.rs:65:9:65:17 | user_info [UserInfo] | provenance | | -| main.rs:65:38:65:45 | username [&ref] | main.rs:65:38:65:57 | username.to_string() | provenance | MaD:16 | +| main.rs:65:38:65:45 | username [&ref] | main.rs:65:38:65:57 | username.to_string() | provenance | MaD:9 | | main.rs:65:38:65:57 | username.to_string() | main.rs:65:21:65:59 | UserInfo {...} [UserInfo] | provenance | | | main.rs:66:28:66:36 | user_info [UserInfo] | main.rs:66:28:66:41 | user_info.name | provenance | | -| main.rs:66:28:66:41 | user_info.name | main.rs:66:11:66:41 | MacroExpr | provenance | Sink:MaD:7 | -| main.rs:109:13:109:21 | user_data | main.rs:112:15:112:35 | MacroExpr | provenance | Sink:MaD:7 | -| main.rs:109:13:109:21 | user_data | main.rs:113:15:113:38 | MacroExpr | provenance | Sink:MaD:7 | -| main.rs:109:13:109:21 | user_data | main.rs:114:16:114:37 | MacroExpr | provenance | Sink:MaD:7 | -| main.rs:109:13:109:21 | user_data | main.rs:115:16:115:37 | MacroExpr | provenance | Sink:MaD:7 | -| main.rs:109:13:109:21 | user_data | main.rs:116:16:116:37 | MacroExpr | provenance | Sink:MaD:7 | -| main.rs:109:13:109:21 | user_data | main.rs:119:15:119:75 | MacroExpr | provenance | Sink:MaD:7 | -| main.rs:109:25:109:40 | ...::args(...) | main.rs:109:25:109:40 | ...::args(...) [element] | provenance | Src:MaD:13 | -| main.rs:109:25:109:40 | ...::args(...) [element] | main.rs:109:25:109:47 | ... .nth(...) [Some] | provenance | MaD:20 | -| main.rs:109:25:109:47 | ... .nth(...) [Some] | main.rs:109:25:109:67 | ... .unwrap_or_default() | provenance | MaD:24 | +| main.rs:66:28:66:41 | user_info.name | main.rs:66:11:66:41 | MacroExpr | provenance | Sink:MaD:1 | +| main.rs:109:13:109:21 | user_data | main.rs:112:15:112:35 | MacroExpr | provenance | Sink:MaD:1 | +| main.rs:109:13:109:21 | user_data | main.rs:113:15:113:38 | MacroExpr | provenance | Sink:MaD:1 | +| main.rs:109:13:109:21 | user_data | main.rs:114:16:114:37 | MacroExpr | provenance | Sink:MaD:1 | +| main.rs:109:13:109:21 | user_data | main.rs:115:16:115:37 | MacroExpr | provenance | Sink:MaD:1 | +| main.rs:109:13:109:21 | user_data | main.rs:116:16:116:37 | MacroExpr | provenance | Sink:MaD:1 | +| main.rs:109:13:109:21 | user_data | main.rs:119:15:119:75 | MacroExpr | provenance | Sink:MaD:1 | +| main.rs:109:25:109:40 | ...::args(...) | main.rs:109:25:109:40 | ...::args(...) [element] | provenance | Src:MaD:6 | +| main.rs:109:25:109:40 | ...::args(...) [element] | main.rs:109:25:109:47 | ... .nth(...) [Some] | provenance | MaD:13 | +| main.rs:109:25:109:47 | ... .nth(...) [Some] | main.rs:109:25:109:67 | ... .unwrap_or_default() | provenance | MaD:17 | | main.rs:109:25:109:67 | ... .unwrap_or_default() | main.rs:109:13:109:21 | user_data | provenance | | -| main.rs:127:13:127:21 | user_data | main.rs:130:18:130:38 | MacroExpr | provenance | Sink:MaD:9 | -| main.rs:127:13:127:21 | user_data | main.rs:131:19:131:49 | MacroExpr | provenance | Sink:MaD:8 | -| main.rs:127:25:127:45 | ...::var(...) | main.rs:127:25:127:45 | ...::var(...) [Ok] | provenance | Src:MaD:14 | -| main.rs:127:25:127:45 | ...::var(...) [Ok] | main.rs:127:25:127:65 | ... .unwrap_or_default() | provenance | MaD:27 | +| main.rs:127:13:127:21 | user_data | main.rs:130:18:130:38 | MacroExpr | provenance | Sink:MaD:3 | +| main.rs:127:13:127:21 | user_data | main.rs:131:19:131:49 | MacroExpr | provenance | Sink:MaD:2 | +| main.rs:127:25:127:45 | ...::var(...) | main.rs:127:25:127:45 | ...::var(...) [Ok] | provenance | Src:MaD:7 | +| main.rs:127:25:127:45 | ...::var(...) [Ok] | main.rs:127:25:127:65 | ... .unwrap_or_default() | provenance | MaD:20 | | main.rs:127:25:127:65 | ... .unwrap_or_default() | main.rs:127:13:127:21 | user_data | provenance | | | main.rs:140:32:140:59 | ...: Option::<...> | main.rs:141:22:141:27 | o_path | provenance | | | main.rs:141:13:141:18 | m_path [Some] | main.rs:143:26:143:31 | m_path [Some] | provenance | | -| main.rs:141:22:141:27 | o_path | main.rs:141:22:141:38 | o_path.map(...) [Some] | provenance | MaD:21 | -| main.rs:141:22:141:27 | o_path | main.rs:141:34:141:34 | ... | provenance | MaD:21 | +| main.rs:141:22:141:27 | o_path | main.rs:141:22:141:38 | o_path.map(...) [Some] | provenance | MaD:14 | +| main.rs:141:22:141:27 | o_path | main.rs:141:34:141:34 | ... | provenance | MaD:14 | | main.rs:141:22:141:38 | o_path.map(...) [Some] | main.rs:141:13:141:18 | m_path [Some] | provenance | | | main.rs:141:34:141:34 | ... | main.rs:141:37:141:37 | x | provenance | | -| main.rs:143:26:143:31 | m_path [Some] | main.rs:143:26:143:40 | m_path.unwrap() | provenance | MaD:22 | -| main.rs:143:26:143:40 | m_path.unwrap() | main.rs:143:18:143:40 | MacroExpr | provenance | Sink:MaD:9 | -| main.rs:150:32:150:48 | my_axum_handler_1 | main.rs:140:32:140:59 | ...: Option::<...> | provenance | Src:MaD:11 | -| main.rs:158:38:158:53 | ...: HttpRequest | main.rs:160:17:160:19 | req | provenance | Sink:MaD:2 | -| main.rs:158:38:158:53 | ...: HttpRequest | main.rs:161:17:161:19 | req | provenance | Sink:MaD:3 | -| main.rs:158:38:158:53 | ...: HttpRequest | main.rs:162:17:162:19 | req | provenance | Sink:MaD:4 | -| main.rs:158:38:158:53 | ...: HttpRequest | main.rs:163:17:163:19 | req | provenance | Sink:MaD:5 | -| main.rs:158:38:158:53 | ...: HttpRequest | main.rs:164:45:164:47 | req | provenance | | -| main.rs:158:38:158:53 | ...: HttpRequest | main.rs:165:47:165:49 | req | provenance | | -| main.rs:164:44:164:47 | &req [&ref] | main.rs:164:44:164:47 | &req | provenance | Sink:MaD:6 | -| main.rs:164:45:164:47 | req | main.rs:164:44:164:47 | &req [&ref] | provenance | | -| main.rs:165:46:165:49 | &req [&ref] | main.rs:165:46:165:49 | &req | provenance | Sink:MaD:1 | -| main.rs:165:47:165:49 | req | main.rs:165:46:165:49 | &req [&ref] | provenance | | -| main.rs:170:53:170:75 | connection_info_handler | main.rs:158:38:158:53 | ...: HttpRequest | provenance | Src:MaD:10 | +| main.rs:143:26:143:31 | m_path [Some] | main.rs:143:26:143:40 | m_path.unwrap() | provenance | MaD:15 | +| main.rs:143:26:143:40 | m_path.unwrap() | main.rs:143:18:143:40 | MacroExpr | provenance | Sink:MaD:3 | +| main.rs:150:32:150:48 | my_axum_handler_1 | main.rs:140:32:140:59 | ...: Option::<...> | provenance | Src:MaD:4 | models -| 1 | Sink: ::from_request; Argument[0]; log-injection | -| 2 | Sink: ::connection_info; Argument[self]; log-injection | -| 3 | Sink: ::full_url; Argument[self]; log-injection | -| 4 | Sink: ::url_for; Argument[self]; log-injection | -| 5 | Sink: ::url_for_static; Argument[self]; log-injection | -| 6 | Sink: ::url_for; Argument[0]; log-injection | -| 7 | Sink: log::__private_api::log; Argument[0]; log-injection | -| 8 | Sink: std::io::stdio::_eprint; Argument[0]; log-injection | -| 9 | Sink: std::io::stdio::_print; Argument[0]; log-injection | -| 10 | Source: ::to; Argument[0].Parameter[0..7]; remote | -| 11 | Source: axum::routing::method_routing::get; Argument[0].Parameter[0..7]; remote | -| 12 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote | -| 13 | Source: std::env::args; ReturnValue.Element; commandargs | -| 14 | Source: std::env::var; ReturnValue.Field[core::result::Result::Ok(0)]; environment | -| 15 | Summary: ::add; Argument[0].Reference; ReturnValue; taint | -| 16 | Summary: ::to_string; Argument[self].Reference; ReturnValue; taint | -| 17 | Summary: ::deref; Argument[self].Reference.Element; ReturnValue.Reference.Element; value | -| 18 | Summary: ::clone; Argument[self].Reference; ReturnValue; value | -| 19 | Summary: ::collect; Argument[self].Element; ReturnValue.Element; value | -| 20 | Summary: ::nth; Argument[self].Reference.Element; ReturnValue.Field[core::option::Option::Some(0)]; value | -| 21 | Summary: ::map; Argument[self].Field[core::option::Option::Some(0)]; Argument[0].Parameter[0]; value | -| 22 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 23 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 24 | Summary: ::unwrap_or_default; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 25 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 26 | Summary: ::unwrap_or; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 27 | Summary: ::unwrap_or_default; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 28 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 29 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | -| 30 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | +| 1 | Sink: log::__private_api::log; Argument[0]; log-injection | +| 2 | Sink: std::io::stdio::_eprint; Argument[0]; log-injection | +| 3 | Sink: std::io::stdio::_print; Argument[0]; log-injection | +| 4 | Source: axum::routing::method_routing::get; Argument[0].Parameter[0..7]; remote | +| 5 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote | +| 6 | Source: std::env::args; ReturnValue.Element; commandargs | +| 7 | Source: std::env::var; ReturnValue.Field[core::result::Result::Ok(0)]; environment | +| 8 | Summary: ::add; Argument[0].Reference; ReturnValue; taint | +| 9 | Summary: ::to_string; Argument[self].Reference; ReturnValue; taint | +| 10 | Summary: ::deref; Argument[self].Reference.Element; ReturnValue.Reference.Element; value | +| 11 | Summary: ::clone; Argument[self].Reference; ReturnValue; value | +| 12 | Summary: ::collect; Argument[self].Element; ReturnValue.Element; value | +| 13 | Summary: ::nth; Argument[self].Reference.Element; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 14 | Summary: ::map; Argument[self].Field[core::option::Option::Some(0)]; Argument[0].Parameter[0]; value | +| 15 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 16 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 17 | Summary: ::unwrap_or_default; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 18 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 19 | Summary: ::unwrap_or; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 20 | Summary: ::unwrap_or_default; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 21 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 22 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint | +| 23 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value | nodes | main.rs:8:9:8:12 | args [element] | semmle.label | args [element] | | main.rs:8:29:8:39 | ...::args(...) | semmle.label | ...::args(...) | @@ -209,17 +185,5 @@ nodes | main.rs:143:26:143:31 | m_path [Some] | semmle.label | m_path [Some] | | main.rs:143:26:143:40 | m_path.unwrap() | semmle.label | m_path.unwrap() | | main.rs:150:32:150:48 | my_axum_handler_1 | semmle.label | my_axum_handler_1 | -| main.rs:158:38:158:53 | ...: HttpRequest | semmle.label | ...: HttpRequest | -| main.rs:160:17:160:19 | req | semmle.label | req | -| main.rs:161:17:161:19 | req | semmle.label | req | -| main.rs:162:17:162:19 | req | semmle.label | req | -| main.rs:163:17:163:19 | req | semmle.label | req | -| main.rs:164:44:164:47 | &req | semmle.label | &req | -| main.rs:164:44:164:47 | &req [&ref] | semmle.label | &req [&ref] | -| main.rs:164:45:164:47 | req | semmle.label | req | -| main.rs:165:46:165:49 | &req | semmle.label | &req | -| main.rs:165:46:165:49 | &req [&ref] | semmle.label | &req [&ref] | -| main.rs:165:47:165:49 | req | semmle.label | req | -| main.rs:170:53:170:75 | connection_info_handler | semmle.label | connection_info_handler | subpaths | main.rs:141:22:141:27 | o_path | main.rs:141:34:141:34 | ... | main.rs:141:37:141:37 | x | main.rs:141:22:141:38 | o_path.map(...) [Some] | diff --git a/rust/ql/test/query-tests/security/CWE-117/main.rs b/rust/ql/test/query-tests/security/CWE-117/main.rs index 9e1b2fa85d30..de6686e82ec6 100644 --- a/rust/ql/test/query-tests/security/CWE-117/main.rs +++ b/rust/ql/test/query-tests/security/CWE-117/main.rs @@ -157,16 +157,16 @@ mod actix_tests { async fn connection_info_handler(req: HttpRequest) -> &'static str { // reading the connection info does not log anything - let _ = req.connection_info(); // $ SPURIOUS: Alert[rust/log-injection]=actix - let _ = req.full_url(); // $ SPURIOUS: Alert[rust/log-injection]=actix - let _ = req.url_for("index", ["a"]); // $ SPURIOUS: Alert[rust/log-injection]=actix - let _ = req.url_for_static("index"); // $ SPURIOUS: Alert[rust/log-injection]=actix - let _ = req.resource_map().url_for(&req, "index", ["a"]); // $ SPURIOUS: Alert[rust/log-injection]=actix - let _ = ConnectionInfo::from_request(&req, &mut Payload::None); // $ SPURIOUS: Alert[rust/log-injection]=actix + let _ = req.connection_info(); + let _ = req.full_url(); + let _ = req.url_for("index", ["a"]); + let _ = req.url_for_static("index"); + let _ = req.resource_map().url_for(&req, "index", ["a"]); + let _ = ConnectionInfo::from_request(&req, &mut Payload::None); "" } fn test_actix() { - let _ = App::new().route("/", web::get().to(connection_info_handler)); // $ Source=actix + let _ = App::new().route("/", web::get().to(connection_info_handler)); } } diff --git a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected index b135a2b7ad16..6b6cb7066279 100644 --- a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected +++ b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected @@ -52,107 +52,101 @@ | main.rs:231:42:231:42 | v | main.rs:339:13:339:28 | ...::args(...) | main.rs:231:42:231:42 | v | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | | main.rs:287:40:287:45 | layout | main.rs:311:25:311:40 | ...::args(...) | main.rs:287:40:287:45 | layout | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:311:25:311:40 | ...::args(...) | user-provided value | | main.rs:331:26:331:26 | a | main.rs:339:13:339:28 | ...::args(...) | main.rs:331:26:331:26 | a | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:339:13:339:28 | ...::args(...) | user-provided value | -| main.rs:361:17:361:19 | req | main.rs:371:53:371:75 | connection_info_handler | main.rs:361:17:361:19 | req | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:371:53:371:75 | connection_info_handler | user-provided value | -| main.rs:362:17:362:19 | req | main.rs:371:53:371:75 | connection_info_handler | main.rs:362:17:362:19 | req | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:371:53:371:75 | connection_info_handler | user-provided value | -| main.rs:363:17:363:19 | req | main.rs:371:53:371:75 | connection_info_handler | main.rs:363:17:363:19 | req | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:371:53:371:75 | connection_info_handler | user-provided value | -| main.rs:364:17:364:19 | req | main.rs:371:53:371:75 | connection_info_handler | main.rs:364:17:364:19 | req | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:371:53:371:75 | connection_info_handler | user-provided value | -| main.rs:365:44:365:47 | &req | main.rs:371:53:371:75 | connection_info_handler | main.rs:365:44:365:47 | &req | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:371:53:371:75 | connection_info_handler | user-provided value | -| main.rs:366:46:366:49 | &req | main.rs:371:53:371:75 | connection_info_handler | main.rs:366:46:366:49 | &req | This allocation size is derived from a $@ and could allocate arbitrary amounts of memory. | main.rs:371:53:371:75 | connection_info_handler | user-provided value | edges -| main.rs:12:36:12:43 | ...: usize | main.rs:18:41:18:41 | v | provenance | Sink:MaD:23 | +| main.rs:12:36:12:43 | ...: usize | main.rs:18:41:18:41 | v | provenance | Sink:MaD:17 | | main.rs:12:36:12:43 | ...: usize | main.rs:20:50:20:50 | v | provenance | | | main.rs:12:36:12:43 | ...: usize | main.rs:29:60:29:60 | v | provenance | | | main.rs:12:36:12:43 | ...: usize | main.rs:32:60:32:60 | v | provenance | | | main.rs:12:36:12:43 | ...: usize | main.rs:35:49:35:49 | v | provenance | | -| main.rs:20:9:20:10 | l2 | main.rs:21:31:21:32 | l2 | provenance | Sink:MaD:21 | +| main.rs:20:9:20:10 | l2 | main.rs:21:31:21:32 | l2 | provenance | Sink:MaD:15 | | main.rs:20:9:20:10 | l2 | main.rs:22:31:22:32 | l2 | provenance | | | main.rs:20:9:20:10 | l2 | main.rs:23:31:23:32 | l2 | provenance | | -| main.rs:20:9:20:10 | l2 | main.rs:24:38:24:39 | l2 | provenance | Sink:MaD:22 | -| main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | main.rs:20:14:20:63 | ... .unwrap() | provenance | MaD:48 | +| main.rs:20:9:20:10 | l2 | main.rs:24:38:24:39 | l2 | provenance | Sink:MaD:16 | +| main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | main.rs:20:14:20:63 | ... .unwrap() | provenance | MaD:41 | | main.rs:20:14:20:63 | ... .unwrap() | main.rs:20:9:20:10 | l2 | provenance | | -| main.rs:20:50:20:50 | v | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | provenance | MaD:37 | -| main.rs:22:31:22:32 | l2 | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | provenance | MaD:31 | -| main.rs:22:31:22:44 | l2.align_to(...) [Ok] | main.rs:22:31:22:53 | ... .unwrap() | provenance | MaD:48 | -| main.rs:22:31:22:53 | ... .unwrap() | main.rs:22:31:22:53 | ... .unwrap() | provenance | Sink:MaD:21 | -| main.rs:23:31:23:32 | l2 | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | provenance | MaD:31 | -| main.rs:23:31:23:44 | l2.align_to(...) [Ok] | main.rs:23:31:23:53 | ... .unwrap() | provenance | MaD:48 | -| main.rs:23:31:23:53 | ... .unwrap() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | MaD:39 | -| main.rs:23:31:23:68 | ... .pad_to_align() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | Sink:MaD:21 | -| main.rs:29:9:29:10 | l4 | main.rs:30:31:30:32 | l4 | provenance | Sink:MaD:21 | +| main.rs:20:50:20:50 | v | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | provenance | MaD:30 | +| main.rs:22:31:22:32 | l2 | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | provenance | MaD:24 | +| main.rs:22:31:22:44 | l2.align_to(...) [Ok] | main.rs:22:31:22:53 | ... .unwrap() | provenance | MaD:41 | +| main.rs:22:31:22:53 | ... .unwrap() | main.rs:22:31:22:53 | ... .unwrap() | provenance | Sink:MaD:15 | +| main.rs:23:31:23:32 | l2 | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | provenance | MaD:24 | +| main.rs:23:31:23:44 | l2.align_to(...) [Ok] | main.rs:23:31:23:53 | ... .unwrap() | provenance | MaD:41 | +| main.rs:23:31:23:53 | ... .unwrap() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | MaD:32 | +| main.rs:23:31:23:68 | ... .pad_to_align() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | Sink:MaD:15 | +| main.rs:29:9:29:10 | l4 | main.rs:30:31:30:32 | l4 | provenance | Sink:MaD:15 | | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | main.rs:29:9:29:10 | l4 | provenance | | -| main.rs:29:60:29:60 | v | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | provenance | MaD:38 | -| main.rs:32:9:32:10 | l5 | main.rs:33:31:33:32 | l5 | provenance | Sink:MaD:21 | +| main.rs:29:60:29:60 | v | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | provenance | MaD:31 | +| main.rs:32:9:32:10 | l5 | main.rs:33:31:33:32 | l5 | provenance | Sink:MaD:15 | | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | main.rs:32:9:32:10 | l5 | provenance | | -| main.rs:32:60:32:60 | v | main.rs:32:60:32:89 | ... * ... | provenance | MaD:45 | -| main.rs:32:60:32:89 | ... * ... | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | provenance | MaD:38 | +| main.rs:32:60:32:60 | v | main.rs:32:60:32:89 | ... * ... | provenance | MaD:38 | +| main.rs:32:60:32:89 | ... * ... | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | provenance | MaD:31 | | main.rs:35:9:35:10 | s6 | main.rs:36:60:36:61 | s6 | provenance | | | main.rs:35:14:35:54 | ... + ... | main.rs:35:9:35:10 | s6 | provenance | | -| main.rs:35:15:35:49 | ... * ... | main.rs:35:14:35:54 | ... + ... | provenance | MaD:44 | -| main.rs:35:49:35:49 | v | main.rs:35:15:35:49 | ... * ... | provenance | MaD:45 | -| main.rs:36:9:36:10 | l6 | main.rs:37:31:37:32 | l6 | provenance | Sink:MaD:21 | +| main.rs:35:15:35:49 | ... * ... | main.rs:35:14:35:54 | ... + ... | provenance | MaD:37 | +| main.rs:35:49:35:49 | v | main.rs:35:15:35:49 | ... * ... | provenance | MaD:38 | +| main.rs:36:9:36:10 | l6 | main.rs:37:31:37:32 | l6 | provenance | Sink:MaD:15 | | main.rs:36:9:36:10 | l6 | main.rs:39:60:39:61 | l6 | provenance | | | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | main.rs:36:9:36:10 | l6 | provenance | | -| main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | provenance | MaD:38 | -| main.rs:39:9:39:10 | l7 | main.rs:40:31:40:32 | l7 | provenance | Sink:MaD:21 | +| main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | provenance | MaD:31 | +| main.rs:39:9:39:10 | l7 | main.rs:40:31:40:32 | l7 | provenance | Sink:MaD:15 | | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | main.rs:39:9:39:10 | l7 | provenance | | -| main.rs:39:60:39:61 | l6 | main.rs:39:60:39:68 | l6.size() | provenance | MaD:42 | -| main.rs:39:60:39:68 | l6.size() | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | provenance | MaD:38 | +| main.rs:39:60:39:61 | l6 | main.rs:39:60:39:68 | l6.size() | provenance | MaD:35 | +| main.rs:39:60:39:68 | l6.size() | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | provenance | MaD:31 | | main.rs:43:44:43:51 | ...: usize | main.rs:50:41:50:41 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:51:41:51:41 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:53:48:53:48 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:54:48:54:48 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:58:34:58:34 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:67:46:67:46 | v | provenance | | -| main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | provenance | MaD:48 | +| main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | provenance | MaD:41 | | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | main.rs:50:31:50:53 | ... .0 | provenance | | -| main.rs:50:31:50:53 | ... .0 | main.rs:50:31:50:53 | ... .0 | provenance | Sink:MaD:21 | -| main.rs:50:41:50:41 | v | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:40 | -| main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | provenance | MaD:48 | +| main.rs:50:31:50:53 | ... .0 | main.rs:50:31:50:53 | ... .0 | provenance | Sink:MaD:15 | +| main.rs:50:41:50:41 | v | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:33 | +| main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | provenance | MaD:41 | | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | main.rs:51:31:51:57 | ... .0 | provenance | | -| main.rs:51:31:51:57 | ... .0 | main.rs:51:31:51:57 | ... .0 | provenance | Sink:MaD:21 | -| main.rs:51:41:51:41 | v | main.rs:51:41:51:45 | ... + ... | provenance | MaD:44 | -| main.rs:51:41:51:45 | ... + ... | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:40 | -| main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | main.rs:53:31:53:58 | ... .unwrap() | provenance | MaD:48 | -| main.rs:53:31:53:58 | ... .unwrap() | main.rs:53:31:53:58 | ... .unwrap() | provenance | Sink:MaD:21 | -| main.rs:53:48:53:48 | v | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | provenance | MaD:41 | -| main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | main.rs:54:31:54:63 | ... .unwrap() | provenance | MaD:48 | -| main.rs:54:31:54:63 | ... .unwrap() | main.rs:54:31:54:63 | ... .unwrap() | provenance | Sink:MaD:21 | -| main.rs:54:48:54:48 | v | main.rs:54:48:54:53 | ... * ... | provenance | MaD:45 | -| main.rs:54:48:54:53 | ... * ... | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | provenance | MaD:41 | +| main.rs:51:31:51:57 | ... .0 | main.rs:51:31:51:57 | ... .0 | provenance | Sink:MaD:15 | +| main.rs:51:41:51:41 | v | main.rs:51:41:51:45 | ... + ... | provenance | MaD:37 | +| main.rs:51:41:51:45 | ... + ... | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:33 | +| main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | main.rs:53:31:53:58 | ... .unwrap() | provenance | MaD:41 | +| main.rs:53:31:53:58 | ... .unwrap() | main.rs:53:31:53:58 | ... .unwrap() | provenance | Sink:MaD:15 | +| main.rs:53:48:53:48 | v | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | provenance | MaD:34 | +| main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | main.rs:54:31:54:63 | ... .unwrap() | provenance | MaD:41 | +| main.rs:54:31:54:63 | ... .unwrap() | main.rs:54:31:54:63 | ... .unwrap() | provenance | Sink:MaD:15 | +| main.rs:54:48:54:48 | v | main.rs:54:48:54:53 | ... * ... | provenance | MaD:38 | +| main.rs:54:48:54:53 | ... * ... | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | provenance | MaD:34 | | main.rs:58:9:58:20 | TuplePat [tuple.0] | main.rs:58:10:58:11 | k1 | provenance | | -| main.rs:58:10:58:11 | k1 | main.rs:59:31:59:32 | k1 | provenance | Sink:MaD:21 | +| main.rs:58:10:58:11 | k1 | main.rs:59:31:59:32 | k1 | provenance | Sink:MaD:15 | | main.rs:58:10:58:11 | k1 | main.rs:60:34:60:35 | k1 | provenance | | | main.rs:58:10:58:11 | k1 | main.rs:62:24:62:25 | k1 | provenance | | | main.rs:58:10:58:11 | k1 | main.rs:64:48:64:49 | k1 | provenance | | | main.rs:58:10:58:11 | k1 | main.rs:65:31:65:32 | k1 | provenance | | -| main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | provenance | MaD:47 | +| main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | provenance | MaD:40 | | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | main.rs:58:9:58:20 | TuplePat [tuple.0] | provenance | | -| main.rs:58:34:58:34 | v | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | provenance | MaD:40 | +| main.rs:58:34:58:34 | v | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | provenance | MaD:33 | | main.rs:60:9:60:20 | TuplePat [tuple.0] | main.rs:60:10:60:11 | k2 | provenance | | -| main.rs:60:10:60:11 | k2 | main.rs:61:31:61:32 | k2 | provenance | Sink:MaD:21 | -| main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | provenance | MaD:48 | +| main.rs:60:10:60:11 | k2 | main.rs:61:31:61:32 | k2 | provenance | Sink:MaD:15 | +| main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | provenance | MaD:41 | | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | main.rs:60:9:60:20 | TuplePat [tuple.0] | provenance | | -| main.rs:60:34:60:35 | k1 | main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | provenance | MaD:33 | +| main.rs:60:34:60:35 | k1 | main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | provenance | MaD:26 | | main.rs:62:9:62:20 | TuplePat [tuple.0] | main.rs:62:10:62:11 | k3 | provenance | | -| main.rs:62:10:62:11 | k3 | main.rs:63:31:63:32 | k3 | provenance | Sink:MaD:21 | -| main.rs:62:24:62:25 | k1 | main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | provenance | MaD:34 | -| main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | provenance | MaD:48 | +| main.rs:62:10:62:11 | k3 | main.rs:63:31:63:32 | k3 | provenance | Sink:MaD:15 | +| main.rs:62:24:62:25 | k1 | main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | provenance | MaD:27 | +| main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | provenance | MaD:41 | | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | main.rs:62:9:62:20 | TuplePat [tuple.0] | provenance | | -| main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | main.rs:64:31:64:59 | ... .unwrap() | provenance | MaD:48 | -| main.rs:64:31:64:59 | ... .unwrap() | main.rs:64:31:64:59 | ... .unwrap() | provenance | Sink:MaD:21 | -| main.rs:64:48:64:49 | k1 | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | provenance | MaD:35 | -| main.rs:65:31:65:32 | k1 | main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | provenance | MaD:36 | -| main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | main.rs:65:31:65:59 | ... .unwrap() | provenance | MaD:48 | -| main.rs:65:31:65:59 | ... .unwrap() | main.rs:65:31:65:59 | ... .unwrap() | provenance | Sink:MaD:21 | -| main.rs:67:9:67:10 | l4 | main.rs:68:31:68:32 | l4 | provenance | Sink:MaD:21 | -| main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | main.rs:67:14:67:56 | ... .unwrap() | provenance | MaD:48 | +| main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | main.rs:64:31:64:59 | ... .unwrap() | provenance | MaD:41 | +| main.rs:64:31:64:59 | ... .unwrap() | main.rs:64:31:64:59 | ... .unwrap() | provenance | Sink:MaD:15 | +| main.rs:64:48:64:49 | k1 | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | provenance | MaD:28 | +| main.rs:65:31:65:32 | k1 | main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | provenance | MaD:29 | +| main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | main.rs:65:31:65:59 | ... .unwrap() | provenance | MaD:41 | +| main.rs:65:31:65:59 | ... .unwrap() | main.rs:65:31:65:59 | ... .unwrap() | provenance | Sink:MaD:15 | +| main.rs:67:9:67:10 | l4 | main.rs:68:31:68:32 | l4 | provenance | Sink:MaD:15 | +| main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | main.rs:67:14:67:56 | ... .unwrap() | provenance | MaD:41 | | main.rs:67:14:67:56 | ... .unwrap() | main.rs:67:9:67:10 | l4 | provenance | | -| main.rs:67:46:67:46 | v | main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | provenance | MaD:32 | +| main.rs:67:46:67:46 | v | main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | provenance | MaD:25 | | main.rs:86:35:86:42 | ...: usize | main.rs:87:54:87:54 | v | provenance | | -| main.rs:87:9:87:14 | layout | main.rs:88:31:88:36 | layout | provenance | Sink:MaD:21 | -| main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | main.rs:87:18:87:67 | ... .unwrap() | provenance | MaD:48 | +| main.rs:87:9:87:14 | layout | main.rs:88:31:88:36 | layout | provenance | Sink:MaD:15 | +| main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | main.rs:87:18:87:67 | ... .unwrap() | provenance | MaD:41 | | main.rs:87:18:87:67 | ... .unwrap() | main.rs:87:9:87:14 | layout | provenance | | -| main.rs:87:54:87:54 | v | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | provenance | MaD:37 | +| main.rs:87:54:87:54 | v | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | provenance | MaD:30 | | main.rs:91:38:91:45 | ...: usize | main.rs:92:47:92:47 | v | provenance | | | main.rs:91:38:91:45 | ...: usize | main.rs:101:51:101:51 | v | provenance | | | main.rs:91:38:91:45 | ...: usize | main.rs:105:33:105:33 | v | provenance | | @@ -160,77 +154,77 @@ edges | main.rs:91:38:91:45 | ...: usize | main.rs:151:62:151:62 | v | provenance | | | main.rs:91:38:91:45 | ...: usize | main.rs:154:62:154:62 | v | provenance | | | main.rs:91:38:91:45 | ...: usize | main.rs:161:55:161:55 | v | provenance | | -| main.rs:92:9:92:10 | l1 | main.rs:96:35:96:36 | l1 | provenance | Sink:MaD:21 | -| main.rs:92:9:92:10 | l1 | main.rs:102:35:102:36 | l1 | provenance | Sink:MaD:21 | -| main.rs:92:9:92:10 | l1 | main.rs:109:35:109:36 | l1 | provenance | Sink:MaD:21 | -| main.rs:92:9:92:10 | l1 | main.rs:111:35:111:36 | l1 | provenance | Sink:MaD:21 | -| main.rs:92:9:92:10 | l1 | main.rs:146:35:146:36 | l1 | provenance | Sink:MaD:21 | -| main.rs:92:9:92:10 | l1 | main.rs:177:31:177:32 | l1 | provenance | Sink:MaD:21 | -| main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | main.rs:92:14:92:57 | ... .unwrap() | provenance | MaD:48 | +| main.rs:92:9:92:10 | l1 | main.rs:96:35:96:36 | l1 | provenance | Sink:MaD:15 | +| main.rs:92:9:92:10 | l1 | main.rs:102:35:102:36 | l1 | provenance | Sink:MaD:15 | +| main.rs:92:9:92:10 | l1 | main.rs:109:35:109:36 | l1 | provenance | Sink:MaD:15 | +| main.rs:92:9:92:10 | l1 | main.rs:111:35:111:36 | l1 | provenance | Sink:MaD:15 | +| main.rs:92:9:92:10 | l1 | main.rs:146:35:146:36 | l1 | provenance | Sink:MaD:15 | +| main.rs:92:9:92:10 | l1 | main.rs:177:31:177:32 | l1 | provenance | Sink:MaD:15 | +| main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | main.rs:92:14:92:57 | ... .unwrap() | provenance | MaD:41 | | main.rs:92:14:92:57 | ... .unwrap() | main.rs:92:9:92:10 | l1 | provenance | | -| main.rs:92:47:92:47 | v | main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | provenance | MaD:32 | -| main.rs:101:13:101:14 | l3 | main.rs:103:35:103:36 | l3 | provenance | Sink:MaD:21 | -| main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | main.rs:101:18:101:61 | ... .unwrap() | provenance | MaD:48 | +| main.rs:92:47:92:47 | v | main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | provenance | MaD:25 | +| main.rs:101:13:101:14 | l3 | main.rs:103:35:103:36 | l3 | provenance | Sink:MaD:15 | +| main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | main.rs:101:18:101:61 | ... .unwrap() | provenance | MaD:41 | | main.rs:101:18:101:61 | ... .unwrap() | main.rs:101:13:101:14 | l3 | provenance | | -| main.rs:101:51:101:51 | v | main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | provenance | MaD:32 | +| main.rs:101:51:101:51 | v | main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | provenance | MaD:25 | | main.rs:105:33:105:33 | v | main.rs:86:35:86:42 | ...: usize | provenance | | -| main.rs:145:13:145:14 | l9 | main.rs:148:35:148:36 | l9 | provenance | Sink:MaD:21 | -| main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | main.rs:145:18:145:61 | ... .unwrap() | provenance | MaD:48 | +| main.rs:145:13:145:14 | l9 | main.rs:148:35:148:36 | l9 | provenance | Sink:MaD:15 | +| main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | main.rs:145:18:145:61 | ... .unwrap() | provenance | MaD:41 | | main.rs:145:18:145:61 | ... .unwrap() | main.rs:145:13:145:14 | l9 | provenance | | -| main.rs:145:51:145:51 | v | main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | provenance | MaD:32 | -| main.rs:151:9:151:11 | l10 | main.rs:152:31:152:33 | l10 | provenance | Sink:MaD:21 | -| main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | main.rs:151:15:151:78 | ... .unwrap() | provenance | MaD:48 | +| main.rs:145:51:145:51 | v | main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | provenance | MaD:25 | +| main.rs:151:9:151:11 | l10 | main.rs:152:31:152:33 | l10 | provenance | Sink:MaD:15 | +| main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | main.rs:151:15:151:78 | ... .unwrap() | provenance | MaD:41 | | main.rs:151:15:151:78 | ... .unwrap() | main.rs:151:9:151:11 | l10 | provenance | | -| main.rs:151:48:151:68 | ...::min(...) | main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | provenance | MaD:32 | -| main.rs:151:62:151:62 | v | main.rs:151:48:151:68 | ...::min(...) | provenance | MaD:50 | -| main.rs:154:9:154:11 | l11 | main.rs:155:31:155:33 | l11 | provenance | Sink:MaD:21 | -| main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | main.rs:154:15:154:78 | ... .unwrap() | provenance | MaD:48 | +| main.rs:151:48:151:68 | ...::min(...) | main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | provenance | MaD:25 | +| main.rs:151:62:151:62 | v | main.rs:151:48:151:68 | ...::min(...) | provenance | MaD:43 | +| main.rs:154:9:154:11 | l11 | main.rs:155:31:155:33 | l11 | provenance | Sink:MaD:15 | +| main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | main.rs:154:15:154:78 | ... .unwrap() | provenance | MaD:41 | | main.rs:154:15:154:78 | ... .unwrap() | main.rs:154:9:154:11 | l11 | provenance | | -| main.rs:154:48:154:68 | ...::max(...) | main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | provenance | MaD:32 | -| main.rs:154:62:154:62 | v | main.rs:154:48:154:68 | ...::max(...) | provenance | MaD:49 | -| main.rs:161:13:161:15 | l13 | main.rs:162:35:162:37 | l13 | provenance | Sink:MaD:21 | -| main.rs:161:13:161:15 | l13 | main.rs:169:35:169:37 | l13 | provenance | Sink:MaD:21 | -| main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | main.rs:161:19:161:68 | ... .unwrap() | provenance | MaD:48 | +| main.rs:154:48:154:68 | ...::max(...) | main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | provenance | MaD:25 | +| main.rs:154:62:154:62 | v | main.rs:154:48:154:68 | ...::max(...) | provenance | MaD:42 | +| main.rs:161:13:161:15 | l13 | main.rs:162:35:162:37 | l13 | provenance | Sink:MaD:15 | +| main.rs:161:13:161:15 | l13 | main.rs:169:35:169:37 | l13 | provenance | Sink:MaD:15 | +| main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | main.rs:161:19:161:68 | ... .unwrap() | provenance | MaD:41 | | main.rs:161:19:161:68 | ... .unwrap() | main.rs:161:13:161:15 | l13 | provenance | | -| main.rs:161:55:161:55 | v | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | provenance | MaD:37 | +| main.rs:161:55:161:55 | v | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | provenance | MaD:30 | | main.rs:183:29:183:36 | ...: usize | main.rs:192:46:192:46 | v | provenance | | -| main.rs:183:29:183:36 | ...: usize | main.rs:202:48:202:48 | v | provenance | Sink:MaD:15 | -| main.rs:192:9:192:10 | l2 | main.rs:193:38:193:39 | l2 | provenance | Sink:MaD:13 | -| main.rs:192:9:192:10 | l2 | main.rs:194:45:194:46 | l2 | provenance | Sink:MaD:14 | -| main.rs:192:9:192:10 | l2 | main.rs:195:41:195:42 | l2 | provenance | Sink:MaD:16 | -| main.rs:192:9:192:10 | l2 | main.rs:196:48:196:49 | l2 | provenance | Sink:MaD:17 | -| main.rs:192:9:192:10 | l2 | main.rs:197:41:197:42 | l2 | provenance | Sink:MaD:7 | -| main.rs:192:9:192:10 | l2 | main.rs:198:48:198:49 | l2 | provenance | Sink:MaD:8 | -| main.rs:192:9:192:10 | l2 | main.rs:208:53:208:54 | l2 | provenance | Sink:MaD:18 | -| main.rs:192:9:192:10 | l2 | main.rs:210:60:210:61 | l2 | provenance | Sink:MaD:19 | -| main.rs:192:9:192:10 | l2 | main.rs:213:51:213:52 | l2 | provenance | Sink:MaD:20 | -| main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | main.rs:192:14:192:56 | ... .unwrap() | provenance | MaD:48 | +| main.rs:183:29:183:36 | ...: usize | main.rs:202:48:202:48 | v | provenance | Sink:MaD:9 | +| main.rs:192:9:192:10 | l2 | main.rs:193:38:193:39 | l2 | provenance | Sink:MaD:7 | +| main.rs:192:9:192:10 | l2 | main.rs:194:45:194:46 | l2 | provenance | Sink:MaD:8 | +| main.rs:192:9:192:10 | l2 | main.rs:195:41:195:42 | l2 | provenance | Sink:MaD:10 | +| main.rs:192:9:192:10 | l2 | main.rs:196:48:196:49 | l2 | provenance | Sink:MaD:11 | +| main.rs:192:9:192:10 | l2 | main.rs:197:41:197:42 | l2 | provenance | Sink:MaD:1 | +| main.rs:192:9:192:10 | l2 | main.rs:198:48:198:49 | l2 | provenance | Sink:MaD:2 | +| main.rs:192:9:192:10 | l2 | main.rs:208:53:208:54 | l2 | provenance | Sink:MaD:12 | +| main.rs:192:9:192:10 | l2 | main.rs:210:60:210:61 | l2 | provenance | Sink:MaD:13 | +| main.rs:192:9:192:10 | l2 | main.rs:213:51:213:52 | l2 | provenance | Sink:MaD:14 | +| main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | main.rs:192:14:192:56 | ... .unwrap() | provenance | MaD:41 | | main.rs:192:14:192:56 | ... .unwrap() | main.rs:192:9:192:10 | l2 | provenance | | -| main.rs:192:46:192:46 | v | main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | provenance | MaD:32 | -| main.rs:217:27:217:34 | ...: usize | main.rs:219:26:219:26 | v | provenance | Sink:MaD:26 | -| main.rs:217:27:217:34 | ...: usize | main.rs:220:36:220:36 | v | provenance | Sink:MaD:24 | -| main.rs:217:27:217:34 | ...: usize | main.rs:222:30:222:30 | v | provenance | Sink:MaD:25 | -| main.rs:217:27:217:34 | ...: usize | main.rs:223:26:223:26 | v | provenance | Sink:MaD:25 | -| main.rs:217:27:217:34 | ...: usize | main.rs:224:31:224:31 | v | provenance | Sink:MaD:27 | -| main.rs:227:24:227:31 | ...: usize | main.rs:228:43:228:43 | v | provenance | Sink:MaD:9 | -| main.rs:227:24:227:31 | ...: usize | main.rs:229:39:229:39 | v | provenance | Sink:MaD:11 | -| main.rs:227:24:227:31 | ...: usize | main.rs:230:46:230:46 | v | provenance | Sink:MaD:10 | -| main.rs:227:24:227:31 | ...: usize | main.rs:231:42:231:42 | v | provenance | Sink:MaD:12 | +| main.rs:192:46:192:46 | v | main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | provenance | MaD:25 | +| main.rs:217:27:217:34 | ...: usize | main.rs:219:26:219:26 | v | provenance | Sink:MaD:20 | +| main.rs:217:27:217:34 | ...: usize | main.rs:220:36:220:36 | v | provenance | Sink:MaD:18 | +| main.rs:217:27:217:34 | ...: usize | main.rs:222:30:222:30 | v | provenance | Sink:MaD:19 | +| main.rs:217:27:217:34 | ...: usize | main.rs:223:26:223:26 | v | provenance | Sink:MaD:19 | +| main.rs:217:27:217:34 | ...: usize | main.rs:224:31:224:31 | v | provenance | Sink:MaD:21 | +| main.rs:227:24:227:31 | ...: usize | main.rs:228:43:228:43 | v | provenance | Sink:MaD:3 | +| main.rs:227:24:227:31 | ...: usize | main.rs:229:39:229:39 | v | provenance | Sink:MaD:5 | +| main.rs:227:24:227:31 | ...: usize | main.rs:230:46:230:46 | v | provenance | Sink:MaD:4 | +| main.rs:227:24:227:31 | ...: usize | main.rs:231:42:231:42 | v | provenance | Sink:MaD:6 | | main.rs:282:24:282:41 | ...: String | main.rs:283:21:283:30 | user_input | provenance | | | main.rs:283:9:283:17 | num_bytes | main.rs:285:54:285:62 | num_bytes | provenance | | -| main.rs:283:21:283:30 | user_input | main.rs:283:21:283:47 | user_input.parse() [Ok] | provenance | MaD:30 | +| main.rs:283:21:283:30 | user_input | main.rs:283:21:283:47 | user_input.parse() [Ok] | provenance | MaD:23 | | main.rs:283:21:283:47 | user_input.parse() [Ok] | main.rs:283:21:283:48 | TryExpr | provenance | | -| main.rs:283:21:283:48 | TryExpr | main.rs:283:21:283:77 | ... * ... | provenance | MaD:45 | +| main.rs:283:21:283:48 | TryExpr | main.rs:283:21:283:77 | ... * ... | provenance | MaD:38 | | main.rs:283:21:283:77 | ... * ... | main.rs:283:9:283:17 | num_bytes | provenance | | -| main.rs:285:9:285:14 | layout | main.rs:287:40:287:45 | layout | provenance | Sink:MaD:21 | -| main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | main.rs:285:18:285:75 | ... .unwrap() | provenance | MaD:48 | +| main.rs:285:9:285:14 | layout | main.rs:287:40:287:45 | layout | provenance | Sink:MaD:15 | +| main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | main.rs:285:18:285:75 | ... .unwrap() | provenance | MaD:41 | | main.rs:285:18:285:75 | ... .unwrap() | main.rs:285:9:285:14 | layout | provenance | | -| main.rs:285:54:285:62 | num_bytes | main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | provenance | MaD:37 | -| main.rs:311:25:311:40 | ...::args(...) | main.rs:311:25:311:40 | ...::args(...) [element] | provenance | Src:MaD:29 | -| main.rs:311:25:311:40 | ...::args(...) [element] | main.rs:311:25:311:47 | ... .nth(...) [Some] | provenance | MaD:43 | -| main.rs:311:25:311:47 | ... .nth(...) [Some] | main.rs:311:25:311:74 | ... .unwrap_or(...) | provenance | MaD:46 | +| main.rs:285:54:285:62 | num_bytes | main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | provenance | MaD:30 | +| main.rs:311:25:311:40 | ...::args(...) | main.rs:311:25:311:40 | ...::args(...) [element] | provenance | Src:MaD:22 | +| main.rs:311:25:311:40 | ...::args(...) [element] | main.rs:311:25:311:47 | ... .nth(...) [Some] | provenance | MaD:36 | +| main.rs:311:25:311:47 | ... .nth(...) [Some] | main.rs:311:25:311:74 | ... .unwrap_or(...) | provenance | MaD:39 | | main.rs:311:25:311:74 | ... .unwrap_or(...) | main.rs:282:24:282:41 | ...: String | provenance | | -| main.rs:317:26:317:33 | ...: usize | main.rs:331:26:331:26 | a | provenance | Sink:MaD:26 | +| main.rs:317:26:317:33 | ...: usize | main.rs:331:26:331:26 | a | provenance | Sink:MaD:20 | | main.rs:339:9:339:9 | v | main.rs:342:34:342:34 | v | provenance | | | main.rs:339:9:339:9 | v | main.rs:343:42:343:42 | v | provenance | | | main.rs:339:9:339:9 | v | main.rs:344:36:344:36 | v | provenance | | @@ -238,11 +232,11 @@ edges | main.rs:339:9:339:9 | v | main.rs:346:25:346:25 | v | provenance | | | main.rs:339:9:339:9 | v | main.rs:347:22:347:22 | v | provenance | | | main.rs:339:9:339:9 | v | main.rs:349:24:349:24 | v | provenance | | -| main.rs:339:13:339:28 | ...::args(...) | main.rs:339:13:339:28 | ...::args(...) [element] | provenance | Src:MaD:29 | -| main.rs:339:13:339:28 | ...::args(...) [element] | main.rs:339:13:339:35 | ... .nth(...) [Some] | provenance | MaD:43 | -| main.rs:339:13:339:35 | ... .nth(...) [Some] | main.rs:339:13:339:65 | ... .unwrap_or(...) | provenance | MaD:46 | -| main.rs:339:13:339:65 | ... .unwrap_or(...) | main.rs:339:13:339:82 | ... .parse() [Ok] | provenance | MaD:30 | -| main.rs:339:13:339:82 | ... .parse() [Ok] | main.rs:339:13:339:91 | ... .unwrap() | provenance | MaD:48 | +| main.rs:339:13:339:28 | ...::args(...) | main.rs:339:13:339:28 | ...::args(...) [element] | provenance | Src:MaD:22 | +| main.rs:339:13:339:28 | ...::args(...) [element] | main.rs:339:13:339:35 | ... .nth(...) [Some] | provenance | MaD:36 | +| main.rs:339:13:339:35 | ... .nth(...) [Some] | main.rs:339:13:339:65 | ... .unwrap_or(...) | provenance | MaD:39 | +| main.rs:339:13:339:65 | ... .unwrap_or(...) | main.rs:339:13:339:82 | ... .parse() [Ok] | provenance | MaD:23 | +| main.rs:339:13:339:82 | ... .parse() [Ok] | main.rs:339:13:339:91 | ... .unwrap() | provenance | MaD:41 | | main.rs:339:13:339:91 | ... .unwrap() | main.rs:339:9:339:9 | v | provenance | | | main.rs:342:34:342:34 | v | main.rs:12:36:12:43 | ...: usize | provenance | | | main.rs:343:42:343:42 | v | main.rs:43:44:43:51 | ...: usize | provenance | | @@ -251,68 +245,50 @@ edges | main.rs:346:25:346:25 | v | main.rs:217:27:217:34 | ...: usize | provenance | | | main.rs:347:22:347:22 | v | main.rs:227:24:227:31 | ...: usize | provenance | | | main.rs:349:24:349:24 | v | main.rs:317:26:317:33 | ...: usize | provenance | | -| main.rs:359:38:359:53 | ...: HttpRequest | main.rs:361:17:361:19 | req | provenance | Sink:MaD:2 | -| main.rs:359:38:359:53 | ...: HttpRequest | main.rs:362:17:362:19 | req | provenance | Sink:MaD:3 | -| main.rs:359:38:359:53 | ...: HttpRequest | main.rs:363:17:363:19 | req | provenance | Sink:MaD:4 | -| main.rs:359:38:359:53 | ...: HttpRequest | main.rs:364:17:364:19 | req | provenance | Sink:MaD:5 | -| main.rs:359:38:359:53 | ...: HttpRequest | main.rs:365:45:365:47 | req | provenance | | -| main.rs:359:38:359:53 | ...: HttpRequest | main.rs:366:47:366:49 | req | provenance | | -| main.rs:365:44:365:47 | &req [&ref] | main.rs:365:44:365:47 | &req | provenance | Sink:MaD:6 | -| main.rs:365:45:365:47 | req | main.rs:365:44:365:47 | &req [&ref] | provenance | | -| main.rs:366:46:366:49 | &req [&ref] | main.rs:366:46:366:49 | &req | provenance | Sink:MaD:1 | -| main.rs:366:47:366:49 | req | main.rs:366:46:366:49 | &req [&ref] | provenance | | -| main.rs:371:53:371:75 | connection_info_handler | main.rs:359:38:359:53 | ...: HttpRequest | provenance | Src:MaD:28 | models -| 1 | Sink: ::from_request; Argument[0]; alloc-layout | -| 2 | Sink: ::connection_info; Argument[self]; alloc-layout | -| 3 | Sink: ::full_url; Argument[self]; alloc-layout | -| 4 | Sink: ::url_for; Argument[self]; alloc-layout | -| 5 | Sink: ::url_for_static; Argument[self]; alloc-layout | -| 6 | Sink: ::url_for; Argument[0]; alloc-layout | -| 7 | Sink: ::allocate; Argument[0]; alloc-layout | -| 8 | Sink: ::allocate_zeroed; Argument[0]; alloc-layout | -| 9 | Sink: ::try_with_capacity; Argument[0]; alloc-layout | -| 10 | Sink: ::try_with_capacity_in; Argument[0]; alloc-layout | -| 11 | Sink: ::with_capacity; Argument[0]; alloc-layout | -| 12 | Sink: ::with_capacity_in; Argument[0]; alloc-layout | -| 13 | Sink: ::alloc; Argument[0]; alloc-layout | -| 14 | Sink: ::alloc_zeroed; Argument[0]; alloc-layout | -| 15 | Sink: ::realloc; Argument[2]; alloc-size | -| 16 | Sink: ::allocate; Argument[0]; alloc-size | -| 17 | Sink: ::allocate_zeroed; Argument[0]; alloc-size | -| 18 | Sink: ::grow; Argument[2]; alloc-size | -| 19 | Sink: ::grow_zeroed; Argument[2]; alloc-size | -| 20 | Sink: ::shrink; Argument[2]; alloc-size | -| 21 | Sink: alloc::alloc::alloc; Argument[0]; alloc-layout | -| 22 | Sink: alloc::alloc::alloc_zeroed; Argument[0]; alloc-layout | -| 23 | Sink: alloc::alloc::realloc; Argument[2]; alloc-size | -| 24 | Sink: libc::unix::aligned_alloc; Argument[1]; alloc-size | -| 25 | Sink: libc::unix::calloc; Argument[0,1]; alloc-size | -| 26 | Sink: libc::unix::malloc; Argument[0]; alloc-size | -| 27 | Sink: libc::unix::realloc; Argument[1]; alloc-size | -| 28 | Source: ::to; Argument[0].Parameter[0..7]; remote | -| 29 | Source: std::env::args; ReturnValue.Element; commandargs | -| 30 | Summary: ::deref; Argument[self]; ReturnValue; value | -| 31 | Summary: ::align_to; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 32 | Summary: ::array; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 33 | Summary: ::extend; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | -| 34 | Summary: ::extend; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | -| 35 | Summary: ::extend_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 36 | Summary: ::extend_packed; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 37 | Summary: ::from_size_align; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 38 | Summary: ::from_size_align_unchecked; Argument[0]; ReturnValue; taint | -| 39 | Summary: ::pad_to_align; Argument[self].Reference; ReturnValue; taint | -| 40 | Summary: ::repeat; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | -| 41 | Summary: ::repeat_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 42 | Summary: ::size; Argument[self].Reference; ReturnValue; taint | -| 43 | Summary: ::nth; Argument[self].Reference.Element; ReturnValue.Field[core::option::Option::Some(0)]; value | -| 44 | Summary: ::add; Argument[self,0]; ReturnValue; taint | -| 45 | Summary: ::mul; Argument[self,0]; ReturnValue; taint | -| 46 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 47 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 48 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 49 | Summary: core::cmp::max; Argument[0]; ReturnValue; value | -| 50 | Summary: core::cmp::min; Argument[0]; ReturnValue; value | +| 1 | Sink: ::allocate; Argument[0]; alloc-layout | +| 2 | Sink: ::allocate_zeroed; Argument[0]; alloc-layout | +| 3 | Sink: ::try_with_capacity; Argument[0]; alloc-layout | +| 4 | Sink: ::try_with_capacity_in; Argument[0]; alloc-layout | +| 5 | Sink: ::with_capacity; Argument[0]; alloc-layout | +| 6 | Sink: ::with_capacity_in; Argument[0]; alloc-layout | +| 7 | Sink: ::alloc; Argument[0]; alloc-layout | +| 8 | Sink: ::alloc_zeroed; Argument[0]; alloc-layout | +| 9 | Sink: ::realloc; Argument[2]; alloc-size | +| 10 | Sink: ::allocate; Argument[0]; alloc-size | +| 11 | Sink: ::allocate_zeroed; Argument[0]; alloc-size | +| 12 | Sink: ::grow; Argument[2]; alloc-size | +| 13 | Sink: ::grow_zeroed; Argument[2]; alloc-size | +| 14 | Sink: ::shrink; Argument[2]; alloc-size | +| 15 | Sink: alloc::alloc::alloc; Argument[0]; alloc-layout | +| 16 | Sink: alloc::alloc::alloc_zeroed; Argument[0]; alloc-layout | +| 17 | Sink: alloc::alloc::realloc; Argument[2]; alloc-size | +| 18 | Sink: libc::unix::aligned_alloc; Argument[1]; alloc-size | +| 19 | Sink: libc::unix::calloc; Argument[0,1]; alloc-size | +| 20 | Sink: libc::unix::malloc; Argument[0]; alloc-size | +| 21 | Sink: libc::unix::realloc; Argument[1]; alloc-size | +| 22 | Source: std::env::args; ReturnValue.Element; commandargs | +| 23 | Summary: ::deref; Argument[self]; ReturnValue; value | +| 24 | Summary: ::align_to; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 25 | Summary: ::array; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 26 | Summary: ::extend; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | +| 27 | Summary: ::extend; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | +| 28 | Summary: ::extend_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 29 | Summary: ::extend_packed; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 30 | Summary: ::from_size_align; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 31 | Summary: ::from_size_align_unchecked; Argument[0]; ReturnValue; taint | +| 32 | Summary: ::pad_to_align; Argument[self].Reference; ReturnValue; taint | +| 33 | Summary: ::repeat; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | +| 34 | Summary: ::repeat_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 35 | Summary: ::size; Argument[self].Reference; ReturnValue; taint | +| 36 | Summary: ::nth; Argument[self].Reference.Element; ReturnValue.Field[core::option::Option::Some(0)]; value | +| 37 | Summary: ::add; Argument[self,0]; ReturnValue; taint | +| 38 | Summary: ::mul; Argument[self,0]; ReturnValue; taint | +| 39 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 40 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 41 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 42 | Summary: core::cmp::max; Argument[0]; ReturnValue; value | +| 43 | Summary: core::cmp::min; Argument[0]; ReturnValue; value | nodes | main.rs:12:36:12:43 | ...: usize | semmle.label | ...: usize | | main.rs:18:41:18:41 | v | semmle.label | v | @@ -508,16 +484,4 @@ nodes | main.rs:346:25:346:25 | v | semmle.label | v | | main.rs:347:22:347:22 | v | semmle.label | v | | main.rs:349:24:349:24 | v | semmle.label | v | -| main.rs:359:38:359:53 | ...: HttpRequest | semmle.label | ...: HttpRequest | -| main.rs:361:17:361:19 | req | semmle.label | req | -| main.rs:362:17:362:19 | req | semmle.label | req | -| main.rs:363:17:363:19 | req | semmle.label | req | -| main.rs:364:17:364:19 | req | semmle.label | req | -| main.rs:365:44:365:47 | &req | semmle.label | &req | -| main.rs:365:44:365:47 | &req [&ref] | semmle.label | &req [&ref] | -| main.rs:365:45:365:47 | req | semmle.label | req | -| main.rs:366:46:366:49 | &req | semmle.label | &req | -| main.rs:366:46:366:49 | &req [&ref] | semmle.label | &req [&ref] | -| main.rs:366:47:366:49 | req | semmle.label | req | -| main.rs:371:53:371:75 | connection_info_handler | semmle.label | connection_info_handler | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-770/main.rs b/rust/ql/test/query-tests/security/CWE-770/main.rs index d283ad3dd737..4caac7033cfa 100644 --- a/rust/ql/test/query-tests/security/CWE-770/main.rs +++ b/rust/ql/test/query-tests/security/CWE-770/main.rs @@ -358,16 +358,16 @@ mod actix_tests { async fn connection_info_handler(req: HttpRequest) -> &'static str { // reading the connection info does not allocate an uncontrolled amount of memory - let _ = req.connection_info(); // $ SPURIOUS: Alert[rust/uncontrolled-allocation-size]=actix - let _ = req.full_url(); // $ SPURIOUS: Alert[rust/uncontrolled-allocation-size]=actix - let _ = req.url_for("index", ["a"]); // $ SPURIOUS: Alert[rust/uncontrolled-allocation-size]=actix - let _ = req.url_for_static("index"); // $ SPURIOUS: Alert[rust/uncontrolled-allocation-size]=actix - let _ = req.resource_map().url_for(&req, "index", ["a"]); // $ SPURIOUS: Alert[rust/uncontrolled-allocation-size]=actix - let _ = ConnectionInfo::from_request(&req, &mut Payload::None); // $ SPURIOUS: Alert[rust/uncontrolled-allocation-size]=actix + let _ = req.connection_info(); + let _ = req.full_url(); + let _ = req.url_for("index", ["a"]); + let _ = req.url_for_static("index"); + let _ = req.resource_map().url_for(&req, "index", ["a"]); + let _ = ConnectionInfo::from_request(&req, &mut Payload::None); "" } fn test_actix() { - let _ = App::new().route("/", web::get().to(connection_info_handler)); // $ Source=actix + let _ = App::new().route("/", web::get().to(connection_info_handler)); } } From 2a21b03b942aa365fc6d5e5f3d54e67e1d563d37 Mon Sep 17 00:00:00 2001 From: John Carmack Date: Sat, 24 Oct 2026 21:48:12 -0700 Subject: [PATCH 3/3] Rust: Add change note --- .../2026-10-25-neutral-models-actix-connection-info.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 rust/ql/lib/change-notes/2026-10-25-neutral-models-actix-connection-info.md diff --git a/rust/ql/lib/change-notes/2026-10-25-neutral-models-actix-connection-info.md b/rust/ql/lib/change-notes/2026-10-25-neutral-models-actix-connection-info.md new file mode 100644 index 000000000000..bbe8eacf0cc8 --- /dev/null +++ b/rust/ql/lib/change-notes/2026-10-25-neutral-models-actix-connection-info.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added neutral models to inhibit spurious generated sink models for `actix_web::HttpRequest::connection_info` and the methods built on it, such as `full_url` and `url_for`. This fixes some false positive results from queries such as `rust/uncontrolled-allocation-size` and `rust/log-injection`.