From 55364c0c81ed7fb4426f55e10feadc0c6e57421a Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 13 Aug 2026 11:33:05 +0100 Subject: [PATCH 1/7] Rust: Test more logging variants. --- .../query-tests/security/CWE-312/Cargo.lock | 13 +- .../CWE-312/CleartextLogging.expected | 904 +++++++++--------- .../query-tests/security/CWE-312/options.yml | 1 + .../security/CWE-312/test_logging.rs | 34 + 4 files changed, 497 insertions(+), 455 deletions(-) diff --git a/rust/ql/test/query-tests/security/CWE-312/Cargo.lock b/rust/ql/test/query-tests/security/CWE-312/Cargo.lock index d327342e7651..25a18caffd3f 100644 --- a/rust/ql/test/query-tests/security/CWE-312/Cargo.lock +++ b/rust/ql/test/query-tests/security/CWE-312/Cargo.lock @@ -1994,6 +1994,7 @@ dependencies = [ "rusqlite", "simple_logger", "sqlx", + "tracing", ] [[package]] @@ -2076,9 +2077,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "log", "pin-project-lite", @@ -2088,9 +2089,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", @@ -2099,9 +2100,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.34" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", ] diff --git a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected index 61de9de03b58..4dfa2d591d13 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected @@ -5,54 +5,55 @@ | test_logging.rs:45:5:45:10 | ...::log | test_logging.rs:45:28:45:35 | password | test_logging.rs:45:5:45:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:45:28:45:35 | password | password | | test_logging.rs:46:5:46:9 | ...::log | test_logging.rs:46:27:46:34 | password | test_logging.rs:46:5:46:9 | ...::log | This operation writes $@ to a log file. | test_logging.rs:46:27:46:34 | password | password | | test_logging.rs:47:5:47:8 | ...::log | test_logging.rs:47:40:47:47 | password | test_logging.rs:47:5:47:8 | ...::log | This operation writes $@ to a log file. | test_logging.rs:47:40:47:47 | password | password | -| test_logging.rs:52:5:52:10 | ...::log | test_logging.rs:52:28:52:35 | password | test_logging.rs:52:5:52:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:52:28:52:35 | password | password | -| test_logging.rs:54:5:54:10 | ...::log | test_logging.rs:54:41:54:48 | password | test_logging.rs:54:5:54:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:54:41:54:48 | password | password | -| test_logging.rs:56:5:56:10 | ...::log | test_logging.rs:56:39:56:46 | password | test_logging.rs:56:5:56:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:56:39:56:46 | password | password | -| test_logging.rs:57:5:57:10 | ...::log | test_logging.rs:57:24:57:31 | password | test_logging.rs:57:5:57:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:57:24:57:31 | password | password | +| test_logging.rs:48:5:48:15 | ...::log | test_logging.rs:48:33:48:40 | password | test_logging.rs:48:5:48:15 | ...::log | This operation writes $@ to a log file. | test_logging.rs:48:33:48:40 | password | password | +| test_logging.rs:53:5:53:10 | ...::log | test_logging.rs:53:28:53:35 | password | test_logging.rs:53:5:53:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:53:28:53:35 | password | password | +| test_logging.rs:55:5:55:10 | ...::log | test_logging.rs:55:41:55:48 | password | test_logging.rs:55:5:55:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:55:41:55:48 | password | password | +| test_logging.rs:57:5:57:10 | ...::log | test_logging.rs:57:39:57:46 | password | test_logging.rs:57:5:57:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:57:39:57:46 | password | password | | test_logging.rs:58:5:58:10 | ...::log | test_logging.rs:58:24:58:31 | password | test_logging.rs:58:5:58:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:58:24:58:31 | password | password | -| test_logging.rs:60:5:60:10 | ...::log | test_logging.rs:60:46:60:53 | password | test_logging.rs:60:5:60:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:60:46:60:53 | password | password | -| test_logging.rs:61:5:61:10 | ...::log | test_logging.rs:61:21:61:28 | password | test_logging.rs:61:5:61:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:61:21:61:28 | password | password | -| test_logging.rs:65:5:65:8 | ...::log | test_logging.rs:65:40:65:47 | password | test_logging.rs:65:5:65:8 | ...::log | This operation writes $@ to a log file. | test_logging.rs:65:40:65:47 | password | password | -| test_logging.rs:67:5:67:8 | ...::log | test_logging.rs:67:58:67:65 | password | test_logging.rs:67:5:67:8 | ...::log | This operation writes $@ to a log file. | test_logging.rs:67:58:67:65 | password | password | -| test_logging.rs:68:5:68:8 | ...::log | test_logging.rs:68:19:68:26 | password | test_logging.rs:68:5:68:8 | ...::log | This operation writes $@ to a log file. | test_logging.rs:68:19:68:26 | password | password | -| test_logging.rs:72:5:72:10 | ...::log | test_logging.rs:72:39:72:46 | password | test_logging.rs:72:5:72:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:72:39:72:46 | password | password | -| test_logging.rs:74:5:74:10 | ...::log | test_logging.rs:74:57:74:64 | password | test_logging.rs:74:5:74:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:74:57:74:64 | password | password | -| test_logging.rs:75:5:75:10 | ...::log | test_logging.rs:75:21:75:28 | password | test_logging.rs:75:5:75:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:75:21:75:28 | password | password | -| test_logging.rs:76:5:76:10 | ...::log | test_logging.rs:76:39:76:46 | password | test_logging.rs:76:5:76:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:76:39:76:46 | password | password | -| test_logging.rs:82:5:82:10 | ...::log | test_logging.rs:82:36:82:43 | password | test_logging.rs:82:5:82:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:82:36:82:43 | password | password | -| test_logging.rs:84:5:84:10 | ...::log | test_logging.rs:84:54:84:61 | password | test_logging.rs:84:5:84:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:84:54:84:61 | password | password | -| test_logging.rs:85:5:85:10 | ...::log | test_logging.rs:85:21:85:28 | password | test_logging.rs:85:5:85:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:85:21:85:28 | password | password | -| test_logging.rs:86:5:86:10 | ...::log | test_logging.rs:86:36:86:43 | password | test_logging.rs:86:5:86:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:86:36:86:43 | password | password | -| test_logging.rs:94:5:94:9 | ...::log | test_logging.rs:93:15:93:22 | password | test_logging.rs:94:5:94:9 | ...::log | This operation writes $@ to a log file. | test_logging.rs:93:15:93:22 | password | password | -| test_logging.rs:97:5:97:9 | ...::log | test_logging.rs:96:42:96:49 | password | test_logging.rs:97:5:97:9 | ...::log | This operation writes $@ to a log file. | test_logging.rs:96:42:96:49 | password | password | -| test_logging.rs:100:5:100:9 | ...::log | test_logging.rs:99:38:99:45 | password | test_logging.rs:100:5:100:9 | ...::log | This operation writes $@ to a log file. | test_logging.rs:99:38:99:45 | password | password | -| test_logging.rs:118:5:118:10 | ...::log | test_logging.rs:118:28:118:41 | get_password(...) | test_logging.rs:118:5:118:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:118:28:118:41 | get_password(...) | get_password(...) | -| test_logging.rs:131:5:131:10 | ...::log | test_logging.rs:129:25:129:32 | password | test_logging.rs:131:5:131:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:129:25:129:32 | password | password | -| test_logging.rs:141:5:141:9 | ...::log | test_logging.rs:141:27:141:37 | s1.password | test_logging.rs:141:5:141:9 | ...::log | This operation writes $@ to a log file. | test_logging.rs:141:27:141:37 | s1.password | s1.password | -| test_logging.rs:151:5:151:9 | ...::log | test_logging.rs:151:27:151:37 | s2.password | test_logging.rs:151:5:151:9 | ...::log | This operation writes $@ to a log file. | test_logging.rs:151:27:151:37 | s2.password | s2.password | -| test_logging.rs:176:22:176:31 | log_expect | test_logging.rs:176:70:176:78 | password2 | test_logging.rs:176:22:176:31 | log_expect | This operation writes $@ to a log file. | test_logging.rs:176:70:176:78 | password2 | password2 | -| test_logging.rs:180:24:180:33 | log_expect | test_logging.rs:180:72:180:80 | password2 | test_logging.rs:180:24:180:33 | log_expect | This operation writes $@ to a log file. | test_logging.rs:180:72:180:80 | password2 | password2 | -| test_logging.rs:184:25:184:34 | log_expect | test_logging.rs:183:51:183:59 | password2 | test_logging.rs:184:25:184:34 | log_expect | This operation writes $@ to a log file. | test_logging.rs:183:51:183:59 | password2 | password2 | -| test_logging.rs:188:25:188:34 | log_unwrap | test_logging.rs:187:51:187:59 | password2 | test_logging.rs:188:25:188:34 | log_unwrap | This operation writes $@ to a log file. | test_logging.rs:187:51:187:59 | password2 | password2 | -| test_logging.rs:192:5:192:10 | ...::_print | test_logging.rs:192:30:192:37 | password | test_logging.rs:192:5:192:10 | ...::_print | This operation writes $@ to a log file. | test_logging.rs:192:30:192:37 | password | password | -| test_logging.rs:193:5:193:12 | ...::_print | test_logging.rs:193:30:193:37 | password | test_logging.rs:193:5:193:12 | ...::_print | This operation writes $@ to a log file. | test_logging.rs:193:30:193:37 | password | password | -| test_logging.rs:194:5:194:11 | ...::_eprint | test_logging.rs:194:31:194:38 | password | test_logging.rs:194:5:194:11 | ...::_eprint | This operation writes $@ to a log file. | test_logging.rs:194:31:194:38 | password | password | -| test_logging.rs:195:5:195:13 | ...::_eprint | test_logging.rs:195:31:195:38 | password | test_logging.rs:195:5:195:13 | ...::_eprint | This operation writes $@ to a log file. | test_logging.rs:195:31:195:38 | password | password | -| test_logging.rs:199:13:199:18 | ...::panic_fmt | test_logging.rs:199:36:199:43 | password | test_logging.rs:199:13:199:18 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:199:36:199:43 | password | password | -| test_logging.rs:202:13:202:17 | ...::panic_fmt | test_logging.rs:202:35:202:42 | password | test_logging.rs:202:13:202:17 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:202:35:202:42 | password | password | -| test_logging.rs:205:13:205:26 | ...::panic_fmt | test_logging.rs:205:44:205:51 | password | test_logging.rs:205:13:205:26 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:205:44:205:51 | password | password | -| test_logging.rs:208:13:208:24 | ...::panic_fmt | test_logging.rs:208:42:208:49 | password | test_logging.rs:208:13:208:24 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:208:42:208:49 | password | password | -| test_logging.rs:211:13:211:19 | ...::panic_fmt | test_logging.rs:211:44:211:51 | password | test_logging.rs:211:13:211:19 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:211:44:211:51 | password | password | -| test_logging.rs:214:13:214:22 | ...::assert_failed | test_logging.rs:214:46:214:53 | password | test_logging.rs:214:13:214:22 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:214:46:214:53 | password | password | -| test_logging.rs:217:13:217:22 | ...::assert_failed | test_logging.rs:217:46:217:53 | password | test_logging.rs:217:13:217:22 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:217:46:217:53 | password | password | -| test_logging.rs:220:13:220:25 | ...::panic_fmt | test_logging.rs:220:50:220:57 | password | test_logging.rs:220:13:220:25 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:220:50:220:57 | password | password | -| test_logging.rs:223:13:223:28 | ...::assert_failed | test_logging.rs:223:52:223:59 | password | test_logging.rs:223:13:223:28 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:223:52:223:59 | password | password | -| test_logging.rs:226:13:226:28 | ...::assert_failed | test_logging.rs:226:52:226:59 | password | test_logging.rs:226:13:226:28 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:226:52:226:59 | password | password | -| test_logging.rs:229:23:229:28 | expect | test_logging.rs:229:54:229:61 | password | test_logging.rs:229:23:229:28 | expect | This operation writes $@ to a log file. | test_logging.rs:229:54:229:61 | password | password | -| test_logging.rs:242:10:242:14 | write | test_logging.rs:242:42:242:49 | password | test_logging.rs:242:10:242:14 | write | This operation writes $@ to a log file. | test_logging.rs:242:42:242:49 | password | password | -| test_logging.rs:245:10:245:18 | write_all | test_logging.rs:245:46:245:53 | password | test_logging.rs:245:10:245:18 | write_all | This operation writes $@ to a log file. | test_logging.rs:245:46:245:53 | password | password | -| test_logging.rs:248:9:248:13 | write | test_logging.rs:248:41:248:48 | password | test_logging.rs:248:9:248:13 | write | This operation writes $@ to a log file. | test_logging.rs:248:41:248:48 | password | password | -| test_logging.rs:251:9:251:13 | write | test_logging.rs:251:41:251:48 | password | test_logging.rs:251:9:251:13 | write | This operation writes $@ to a log file. | test_logging.rs:251:41:251:48 | password | password | +| test_logging.rs:59:5:59:10 | ...::log | test_logging.rs:59:24:59:31 | password | test_logging.rs:59:5:59:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:59:24:59:31 | password | password | +| test_logging.rs:61:5:61:10 | ...::log | test_logging.rs:61:46:61:53 | password | test_logging.rs:61:5:61:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:61:46:61:53 | password | password | +| test_logging.rs:62:5:62:10 | ...::log | test_logging.rs:62:21:62:28 | password | test_logging.rs:62:5:62:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:62:21:62:28 | password | password | +| test_logging.rs:66:5:66:8 | ...::log | test_logging.rs:66:40:66:47 | password | test_logging.rs:66:5:66:8 | ...::log | This operation writes $@ to a log file. | test_logging.rs:66:40:66:47 | password | password | +| test_logging.rs:68:5:68:8 | ...::log | test_logging.rs:68:58:68:65 | password | test_logging.rs:68:5:68:8 | ...::log | This operation writes $@ to a log file. | test_logging.rs:68:58:68:65 | password | password | +| test_logging.rs:69:5:69:8 | ...::log | test_logging.rs:69:19:69:26 | password | test_logging.rs:69:5:69:8 | ...::log | This operation writes $@ to a log file. | test_logging.rs:69:19:69:26 | password | password | +| test_logging.rs:73:5:73:10 | ...::log | test_logging.rs:73:39:73:46 | password | test_logging.rs:73:5:73:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:73:39:73:46 | password | password | +| test_logging.rs:75:5:75:10 | ...::log | test_logging.rs:75:57:75:64 | password | test_logging.rs:75:5:75:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:75:57:75:64 | password | password | +| test_logging.rs:76:5:76:10 | ...::log | test_logging.rs:76:21:76:28 | password | test_logging.rs:76:5:76:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:76:21:76:28 | password | password | +| test_logging.rs:77:5:77:10 | ...::log | test_logging.rs:77:39:77:46 | password | test_logging.rs:77:5:77:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:77:39:77:46 | password | password | +| test_logging.rs:83:5:83:10 | ...::log | test_logging.rs:83:36:83:43 | password | test_logging.rs:83:5:83:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:83:36:83:43 | password | password | +| test_logging.rs:85:5:85:10 | ...::log | test_logging.rs:85:54:85:61 | password | test_logging.rs:85:5:85:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:85:54:85:61 | password | password | +| test_logging.rs:86:5:86:10 | ...::log | test_logging.rs:86:21:86:28 | password | test_logging.rs:86:5:86:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:86:21:86:28 | password | password | +| test_logging.rs:87:5:87:10 | ...::log | test_logging.rs:87:36:87:43 | password | test_logging.rs:87:5:87:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:87:36:87:43 | password | password | +| test_logging.rs:95:5:95:9 | ...::log | test_logging.rs:94:15:94:22 | password | test_logging.rs:95:5:95:9 | ...::log | This operation writes $@ to a log file. | test_logging.rs:94:15:94:22 | password | password | +| test_logging.rs:98:5:98:9 | ...::log | test_logging.rs:97:42:97:49 | password | test_logging.rs:98:5:98:9 | ...::log | This operation writes $@ to a log file. | test_logging.rs:97:42:97:49 | password | password | +| test_logging.rs:101:5:101:9 | ...::log | test_logging.rs:100:38:100:45 | password | test_logging.rs:101:5:101:9 | ...::log | This operation writes $@ to a log file. | test_logging.rs:100:38:100:45 | password | password | +| test_logging.rs:119:5:119:10 | ...::log | test_logging.rs:119:28:119:41 | get_password(...) | test_logging.rs:119:5:119:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:119:28:119:41 | get_password(...) | get_password(...) | +| test_logging.rs:132:5:132:10 | ...::log | test_logging.rs:130:25:130:32 | password | test_logging.rs:132:5:132:10 | ...::log | This operation writes $@ to a log file. | test_logging.rs:130:25:130:32 | password | password | +| test_logging.rs:142:5:142:9 | ...::log | test_logging.rs:142:27:142:37 | s1.password | test_logging.rs:142:5:142:9 | ...::log | This operation writes $@ to a log file. | test_logging.rs:142:27:142:37 | s1.password | s1.password | +| test_logging.rs:152:5:152:9 | ...::log | test_logging.rs:152:27:152:37 | s2.password | test_logging.rs:152:5:152:9 | ...::log | This operation writes $@ to a log file. | test_logging.rs:152:27:152:37 | s2.password | s2.password | +| test_logging.rs:177:22:177:31 | log_expect | test_logging.rs:177:70:177:78 | password2 | test_logging.rs:177:22:177:31 | log_expect | This operation writes $@ to a log file. | test_logging.rs:177:70:177:78 | password2 | password2 | +| test_logging.rs:181:24:181:33 | log_expect | test_logging.rs:181:72:181:80 | password2 | test_logging.rs:181:24:181:33 | log_expect | This operation writes $@ to a log file. | test_logging.rs:181:72:181:80 | password2 | password2 | +| test_logging.rs:185:25:185:34 | log_expect | test_logging.rs:184:51:184:59 | password2 | test_logging.rs:185:25:185:34 | log_expect | This operation writes $@ to a log file. | test_logging.rs:184:51:184:59 | password2 | password2 | +| test_logging.rs:189:25:189:34 | log_unwrap | test_logging.rs:188:51:188:59 | password2 | test_logging.rs:189:25:189:34 | log_unwrap | This operation writes $@ to a log file. | test_logging.rs:188:51:188:59 | password2 | password2 | +| test_logging.rs:193:5:193:10 | ...::_print | test_logging.rs:193:30:193:37 | password | test_logging.rs:193:5:193:10 | ...::_print | This operation writes $@ to a log file. | test_logging.rs:193:30:193:37 | password | password | +| test_logging.rs:194:5:194:12 | ...::_print | test_logging.rs:194:30:194:37 | password | test_logging.rs:194:5:194:12 | ...::_print | This operation writes $@ to a log file. | test_logging.rs:194:30:194:37 | password | password | +| test_logging.rs:195:5:195:11 | ...::_eprint | test_logging.rs:195:31:195:38 | password | test_logging.rs:195:5:195:11 | ...::_eprint | This operation writes $@ to a log file. | test_logging.rs:195:31:195:38 | password | password | +| test_logging.rs:196:5:196:13 | ...::_eprint | test_logging.rs:196:31:196:38 | password | test_logging.rs:196:5:196:13 | ...::_eprint | This operation writes $@ to a log file. | test_logging.rs:196:31:196:38 | password | password | +| test_logging.rs:200:13:200:18 | ...::panic_fmt | test_logging.rs:200:36:200:43 | password | test_logging.rs:200:13:200:18 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:200:36:200:43 | password | password | +| test_logging.rs:203:13:203:17 | ...::panic_fmt | test_logging.rs:203:35:203:42 | password | test_logging.rs:203:13:203:17 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:203:35:203:42 | password | password | +| test_logging.rs:206:13:206:26 | ...::panic_fmt | test_logging.rs:206:44:206:51 | password | test_logging.rs:206:13:206:26 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:206:44:206:51 | password | password | +| test_logging.rs:209:13:209:24 | ...::panic_fmt | test_logging.rs:209:42:209:49 | password | test_logging.rs:209:13:209:24 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:209:42:209:49 | password | password | +| test_logging.rs:212:13:212:19 | ...::panic_fmt | test_logging.rs:212:44:212:51 | password | test_logging.rs:212:13:212:19 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:212:44:212:51 | password | password | +| test_logging.rs:215:13:215:22 | ...::assert_failed | test_logging.rs:215:46:215:53 | password | test_logging.rs:215:13:215:22 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:215:46:215:53 | password | password | +| test_logging.rs:218:13:218:22 | ...::assert_failed | test_logging.rs:218:46:218:53 | password | test_logging.rs:218:13:218:22 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:218:46:218:53 | password | password | +| test_logging.rs:221:13:221:25 | ...::panic_fmt | test_logging.rs:221:50:221:57 | password | test_logging.rs:221:13:221:25 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:221:50:221:57 | password | password | +| test_logging.rs:224:13:224:28 | ...::assert_failed | test_logging.rs:224:52:224:59 | password | test_logging.rs:224:13:224:28 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:224:52:224:59 | password | password | +| test_logging.rs:227:13:227:28 | ...::assert_failed | test_logging.rs:227:52:227:59 | password | test_logging.rs:227:13:227:28 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:227:52:227:59 | password | password | +| test_logging.rs:230:23:230:28 | expect | test_logging.rs:230:54:230:61 | password | test_logging.rs:230:23:230:28 | expect | This operation writes $@ to a log file. | test_logging.rs:230:54:230:61 | password | password | +| test_logging.rs:243:10:243:14 | write | test_logging.rs:243:42:243:49 | password | test_logging.rs:243:10:243:14 | write | This operation writes $@ to a log file. | test_logging.rs:243:42:243:49 | password | password | +| test_logging.rs:246:10:246:18 | write_all | test_logging.rs:246:46:246:53 | password | test_logging.rs:246:10:246:18 | write_all | This operation writes $@ to a log file. | test_logging.rs:246:46:246:53 | password | password | +| test_logging.rs:249:9:249:13 | write | test_logging.rs:249:41:249:48 | password | test_logging.rs:249:9:249:13 | write | This operation writes $@ to a log file. | test_logging.rs:249:41:249:48 | password | password | +| test_logging.rs:252:9:252:13 | write | test_logging.rs:252:41:252:48 | password | test_logging.rs:252:9:252:13 | write | This operation writes $@ to a log file. | test_logging.rs:252:41:252:48 | password | password | edges | test_logging.rs:42:12:42:35 | MacroExpr | test_logging.rs:42:5:42:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:42:28:42:35 | password | test_logging.rs:42:12:42:35 | MacroExpr | provenance | | @@ -66,194 +67,196 @@ edges | test_logging.rs:46:27:46:34 | password | test_logging.rs:46:11:46:34 | MacroExpr | provenance | | | test_logging.rs:47:24:47:47 | MacroExpr | test_logging.rs:47:5:47:8 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:47:40:47:47 | password | test_logging.rs:47:24:47:47 | MacroExpr | provenance | | -| test_logging.rs:52:12:52:35 | MacroExpr | test_logging.rs:52:5:52:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:52:28:52:35 | password | test_logging.rs:52:12:52:35 | MacroExpr | provenance | | -| test_logging.rs:54:12:54:48 | MacroExpr | test_logging.rs:54:5:54:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:54:41:54:48 | password | test_logging.rs:54:12:54:48 | MacroExpr | provenance | | -| test_logging.rs:56:12:56:46 | MacroExpr | test_logging.rs:56:5:56:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:56:39:56:46 | password | test_logging.rs:56:12:56:46 | MacroExpr | provenance | | -| test_logging.rs:57:12:57:33 | MacroExpr | test_logging.rs:57:5:57:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:57:24:57:31 | password | test_logging.rs:57:12:57:33 | MacroExpr | provenance | | -| test_logging.rs:58:12:58:35 | MacroExpr | test_logging.rs:58:5:58:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:58:24:58:31 | password | test_logging.rs:58:12:58:35 | MacroExpr | provenance | | -| test_logging.rs:60:30:60:53 | MacroExpr | test_logging.rs:60:5:60:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:60:46:60:53 | password | test_logging.rs:60:30:60:53 | MacroExpr | provenance | | -| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | -| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 Sink:MaD:12 | -| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | test_logging.rs:61:5:61:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | -| test_logging.rs:61:20:61:28 | &password | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0] | provenance | | -| test_logging.rs:61:20:61:28 | &password [&ref] | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0, &ref] | provenance | | -| test_logging.rs:61:20:61:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | provenance | | -| test_logging.rs:61:20:61:28 | TupleExpr [tuple.0] | test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | provenance | | -| test_logging.rs:61:21:61:28 | password | test_logging.rs:61:20:61:28 | &password | provenance | Config | -| test_logging.rs:61:21:61:28 | password | test_logging.rs:61:20:61:28 | &password [&ref] | provenance | | -| test_logging.rs:65:24:65:47 | MacroExpr | test_logging.rs:65:5:65:8 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:65:40:65:47 | password | test_logging.rs:65:24:65:47 | MacroExpr | provenance | | -| test_logging.rs:67:42:67:65 | MacroExpr | test_logging.rs:67:5:67:8 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:67:58:67:65 | password | test_logging.rs:67:42:67:65 | MacroExpr | provenance | | -| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:8 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | -| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:8 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 Sink:MaD:12 | -| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | test_logging.rs:68:5:68:8 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | -| test_logging.rs:68:18:68:26 | &password | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0] | provenance | | -| test_logging.rs:68:18:68:26 | &password [&ref] | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0, &ref] | provenance | | -| test_logging.rs:68:18:68:26 | TupleExpr [tuple.0, &ref] | test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | provenance | | -| test_logging.rs:68:18:68:26 | TupleExpr [tuple.0] | test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | provenance | | -| test_logging.rs:68:19:68:26 | password | test_logging.rs:68:18:68:26 | &password | provenance | Config | -| test_logging.rs:68:19:68:26 | password | test_logging.rs:68:18:68:26 | &password [&ref] | provenance | | -| test_logging.rs:72:23:72:46 | MacroExpr | test_logging.rs:72:5:72:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:72:39:72:46 | password | test_logging.rs:72:23:72:46 | MacroExpr | provenance | | -| test_logging.rs:74:41:74:64 | MacroExpr | test_logging.rs:74:5:74:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:74:57:74:64 | password | test_logging.rs:74:41:74:64 | MacroExpr | provenance | | -| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | -| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 Sink:MaD:12 | -| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | test_logging.rs:75:5:75:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | -| test_logging.rs:75:20:75:28 | &password | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0] | provenance | | -| test_logging.rs:75:20:75:28 | &password [&ref] | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0, &ref] | provenance | | -| test_logging.rs:75:20:75:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | provenance | | -| test_logging.rs:75:20:75:28 | TupleExpr [tuple.0] | test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | provenance | | -| test_logging.rs:75:21:75:28 | password | test_logging.rs:75:20:75:28 | &password | provenance | Config | -| test_logging.rs:75:21:75:28 | password | test_logging.rs:75:20:75:28 | &password [&ref] | provenance | | -| test_logging.rs:76:23:76:46 | MacroExpr | test_logging.rs:76:5:76:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:76:39:76:46 | password | test_logging.rs:76:23:76:46 | MacroExpr | provenance | | -| test_logging.rs:82:20:82:43 | MacroExpr | test_logging.rs:82:5:82:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:82:36:82:43 | password | test_logging.rs:82:20:82:43 | MacroExpr | provenance | | -| test_logging.rs:84:38:84:61 | MacroExpr | test_logging.rs:84:5:84:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:84:54:84:61 | password | test_logging.rs:84:38:84:61 | MacroExpr | provenance | | -| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | -| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 Sink:MaD:12 | -| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | test_logging.rs:85:5:85:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | -| test_logging.rs:85:20:85:28 | &password | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0] | provenance | | -| test_logging.rs:85:20:85:28 | &password [&ref] | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0, &ref] | provenance | | -| test_logging.rs:85:20:85:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | provenance | | -| test_logging.rs:85:20:85:28 | TupleExpr [tuple.0] | test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | provenance | | -| test_logging.rs:85:21:85:28 | password | test_logging.rs:85:20:85:28 | &password | provenance | Config | -| test_logging.rs:85:21:85:28 | password | test_logging.rs:85:20:85:28 | &password [&ref] | provenance | | -| test_logging.rs:86:20:86:43 | MacroExpr | test_logging.rs:86:5:86:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:86:36:86:43 | password | test_logging.rs:86:20:86:43 | MacroExpr | provenance | | -| test_logging.rs:93:9:93:10 | m1 | test_logging.rs:94:11:94:28 | MacroExpr | provenance | | -| test_logging.rs:93:14:93:22 | &password | test_logging.rs:93:9:93:10 | m1 | provenance | | -| test_logging.rs:93:15:93:22 | password | test_logging.rs:93:14:93:22 | &password | provenance | Config | -| test_logging.rs:94:11:94:28 | MacroExpr | test_logging.rs:94:5:94:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:96:9:96:10 | m2 | test_logging.rs:97:11:97:18 | MacroExpr | provenance | | -| test_logging.rs:96:14:96:49 | ... + ... | test_logging.rs:96:9:96:10 | m2 | provenance | | -| test_logging.rs:96:41:96:49 | &password | test_logging.rs:96:14:96:49 | ... + ... | provenance | MaD:16 | -| test_logging.rs:96:41:96:49 | &password [&ref] | test_logging.rs:96:14:96:49 | ... + ... | provenance | MaD:16 | -| test_logging.rs:96:42:96:49 | password | test_logging.rs:96:41:96:49 | &password | provenance | Config | -| test_logging.rs:96:42:96:49 | password | test_logging.rs:96:41:96:49 | &password [&ref] | provenance | | -| test_logging.rs:97:11:97:18 | MacroExpr | test_logging.rs:97:5:97:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:99:9:99:10 | m3 | test_logging.rs:100:11:100:18 | MacroExpr | provenance | | -| test_logging.rs:99:22:99:45 | ...::format(...) | test_logging.rs:99:22:99:45 | { ... } | provenance | | -| test_logging.rs:99:22:99:45 | ...::must_use(...) | test_logging.rs:99:9:99:10 | m3 | provenance | | -| test_logging.rs:99:22:99:45 | MacroExpr | test_logging.rs:99:22:99:45 | ...::format(...) | provenance | MaD:19 | -| test_logging.rs:99:22:99:45 | { ... } | test_logging.rs:99:22:99:45 | ...::must_use(...) | provenance | MaD:20 | -| test_logging.rs:99:38:99:45 | password | test_logging.rs:99:22:99:45 | MacroExpr | provenance | | -| test_logging.rs:100:11:100:18 | MacroExpr | test_logging.rs:100:5:100:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:118:12:118:41 | MacroExpr | test_logging.rs:118:5:118:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:118:28:118:41 | get_password(...) | test_logging.rs:118:12:118:41 | MacroExpr | provenance | | -| test_logging.rs:129:9:129:10 | t1 [tuple.1] | test_logging.rs:131:28:131:29 | t1 [tuple.1] | provenance | | -| test_logging.rs:129:14:129:33 | TupleExpr [tuple.1] | test_logging.rs:129:9:129:10 | t1 [tuple.1] | provenance | | -| test_logging.rs:129:25:129:32 | password | test_logging.rs:129:14:129:33 | TupleExpr [tuple.1] | provenance | | -| test_logging.rs:131:12:131:31 | MacroExpr | test_logging.rs:131:5:131:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:131:28:131:29 | t1 [tuple.1] | test_logging.rs:131:28:131:31 | t1.1 | provenance | | -| test_logging.rs:131:28:131:31 | t1.1 | test_logging.rs:131:12:131:31 | MacroExpr | provenance | | -| test_logging.rs:141:11:141:37 | MacroExpr | test_logging.rs:141:5:141:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:141:27:141:37 | s1.password | test_logging.rs:141:11:141:37 | MacroExpr | provenance | | -| test_logging.rs:151:11:151:37 | MacroExpr | test_logging.rs:151:5:151:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | -| test_logging.rs:151:27:151:37 | s2.password | test_logging.rs:151:11:151:37 | MacroExpr | provenance | | -| test_logging.rs:176:33:176:79 | &... | test_logging.rs:176:22:176:31 | log_expect | provenance | MaD:1 Sink:MaD:1 | -| test_logging.rs:176:33:176:79 | &... [&ref] | test_logging.rs:176:22:176:31 | log_expect | provenance | MaD:1 Sink:MaD:1 | -| test_logging.rs:176:34:176:79 | MacroExpr | test_logging.rs:176:33:176:79 | &... | provenance | Config | -| test_logging.rs:176:34:176:79 | MacroExpr | test_logging.rs:176:33:176:79 | &... [&ref] | provenance | | -| test_logging.rs:176:42:176:78 | ...::format(...) | test_logging.rs:176:42:176:78 | { ... } | provenance | | -| test_logging.rs:176:42:176:78 | ...::must_use(...) | test_logging.rs:176:34:176:79 | MacroExpr | provenance | | -| test_logging.rs:176:42:176:78 | MacroExpr | test_logging.rs:176:42:176:78 | ...::format(...) | provenance | MaD:19 | -| test_logging.rs:176:42:176:78 | { ... } | test_logging.rs:176:42:176:78 | ...::must_use(...) | provenance | MaD:20 | -| test_logging.rs:176:70:176:78 | password2 | test_logging.rs:176:42:176:78 | MacroExpr | provenance | | -| test_logging.rs:180:35:180:81 | &... | test_logging.rs:180:24:180:33 | log_expect | provenance | MaD:3 Sink:MaD:3 | -| test_logging.rs:180:35:180:81 | &... [&ref] | test_logging.rs:180:24:180:33 | log_expect | provenance | MaD:3 Sink:MaD:3 | -| test_logging.rs:180:36:180:81 | MacroExpr | test_logging.rs:180:35:180:81 | &... | provenance | Config | -| test_logging.rs:180:36:180:81 | MacroExpr | test_logging.rs:180:35:180:81 | &... [&ref] | provenance | | -| test_logging.rs:180:44:180:80 | ...::format(...) | test_logging.rs:180:44:180:80 | { ... } | provenance | | -| test_logging.rs:180:44:180:80 | ...::must_use(...) | test_logging.rs:180:36:180:81 | MacroExpr | provenance | | -| test_logging.rs:180:44:180:80 | MacroExpr | test_logging.rs:180:44:180:80 | ...::format(...) | provenance | MaD:19 | -| test_logging.rs:180:44:180:80 | { ... } | test_logging.rs:180:44:180:80 | ...::must_use(...) | provenance | MaD:20 | -| test_logging.rs:180:72:180:80 | password2 | test_logging.rs:180:44:180:80 | MacroExpr | provenance | | -| test_logging.rs:183:9:183:19 | err_result2 [Err] | test_logging.rs:184:13:184:23 | err_result2 [Err] | provenance | | -| test_logging.rs:183:47:183:68 | Err(...) [Err] | test_logging.rs:183:9:183:19 | err_result2 [Err] | provenance | | -| test_logging.rs:183:51:183:59 | password2 | test_logging.rs:183:51:183:67 | password2.clone() | provenance | MaD:15 | -| test_logging.rs:183:51:183:67 | password2.clone() | test_logging.rs:183:47:183:68 | Err(...) [Err] | provenance | | -| test_logging.rs:184:13:184:23 | err_result2 [Err] | test_logging.rs:184:25:184:34 | log_expect | provenance | MaD:4 Sink:MaD:4 | -| test_logging.rs:187:9:187:19 | err_result3 [Err] | test_logging.rs:188:13:188:23 | err_result3 [Err] | provenance | | -| test_logging.rs:187:47:187:60 | Err(...) [Err] | test_logging.rs:187:9:187:19 | err_result3 [Err] | provenance | | -| test_logging.rs:187:51:187:59 | password2 | test_logging.rs:187:47:187:60 | Err(...) [Err] | provenance | | -| test_logging.rs:188:13:188:23 | err_result3 [Err] | test_logging.rs:188:25:188:34 | log_unwrap | provenance | MaD:5 Sink:MaD:5 | -| test_logging.rs:192:12:192:37 | MacroExpr | test_logging.rs:192:5:192:10 | ...::_print | provenance | MaD:14 Sink:MaD:14 | -| test_logging.rs:192:30:192:37 | password | test_logging.rs:192:12:192:37 | MacroExpr | provenance | | -| test_logging.rs:193:14:193:37 | MacroExpr | test_logging.rs:193:5:193:12 | ...::_print | provenance | MaD:14 Sink:MaD:14 | -| test_logging.rs:193:30:193:37 | password | test_logging.rs:193:14:193:37 | MacroExpr | provenance | | -| test_logging.rs:194:13:194:38 | MacroExpr | test_logging.rs:194:5:194:11 | ...::_eprint | provenance | MaD:13 Sink:MaD:13 | -| test_logging.rs:194:31:194:38 | password | test_logging.rs:194:13:194:38 | MacroExpr | provenance | | -| test_logging.rs:195:15:195:38 | MacroExpr | test_logging.rs:195:5:195:13 | ...::_eprint | provenance | MaD:13 Sink:MaD:13 | -| test_logging.rs:195:31:195:38 | password | test_logging.rs:195:15:195:38 | MacroExpr | provenance | | -| test_logging.rs:199:20:199:43 | MacroExpr | test_logging.rs:199:13:199:18 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | -| test_logging.rs:199:36:199:43 | password | test_logging.rs:199:20:199:43 | MacroExpr | provenance | | -| test_logging.rs:202:19:202:42 | MacroExpr | test_logging.rs:202:13:202:17 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | -| test_logging.rs:202:35:202:42 | password | test_logging.rs:202:19:202:42 | MacroExpr | provenance | | -| test_logging.rs:205:28:205:51 | MacroExpr | test_logging.rs:205:13:205:26 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | -| test_logging.rs:205:44:205:51 | password | test_logging.rs:205:28:205:51 | MacroExpr | provenance | | -| test_logging.rs:208:26:208:49 | MacroExpr | test_logging.rs:208:13:208:24 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | -| test_logging.rs:208:42:208:49 | password | test_logging.rs:208:26:208:49 | MacroExpr | provenance | | -| test_logging.rs:211:28:211:51 | MacroExpr | test_logging.rs:211:13:211:19 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | -| test_logging.rs:211:44:211:51 | password | test_logging.rs:211:28:211:51 | MacroExpr | provenance | | -| test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | test_logging.rs:214:13:214:22 | ...::assert_failed | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:214:30:214:53 | MacroExpr | test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | provenance | | -| test_logging.rs:214:46:214:53 | password | test_logging.rs:214:30:214:53 | MacroExpr | provenance | | -| test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | test_logging.rs:217:13:217:22 | ...::assert_failed | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:217:30:217:53 | MacroExpr | test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | provenance | | -| test_logging.rs:217:46:217:53 | password | test_logging.rs:217:30:217:53 | MacroExpr | provenance | | -| test_logging.rs:220:34:220:57 | MacroExpr | test_logging.rs:220:13:220:25 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | -| test_logging.rs:220:50:220:57 | password | test_logging.rs:220:34:220:57 | MacroExpr | provenance | | -| test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | test_logging.rs:223:13:223:28 | ...::assert_failed | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:223:36:223:59 | MacroExpr | test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | provenance | | -| test_logging.rs:223:52:223:59 | password | test_logging.rs:223:36:223:59 | MacroExpr | provenance | | -| test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | test_logging.rs:226:13:226:28 | ...::assert_failed | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:226:36:226:59 | MacroExpr | test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | provenance | | -| test_logging.rs:226:52:226:59 | password | test_logging.rs:226:36:226:59 | MacroExpr | provenance | | -| test_logging.rs:229:30:229:62 | MacroExpr | test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | provenance | MaD:18 | -| test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | test_logging.rs:229:23:229:28 | expect | provenance | MaD:2 Sink:MaD:2 | -| test_logging.rs:229:38:229:61 | ...::format(...) | test_logging.rs:229:38:229:61 | { ... } | provenance | | -| test_logging.rs:229:38:229:61 | ...::must_use(...) | test_logging.rs:229:30:229:62 | MacroExpr | provenance | | -| test_logging.rs:229:38:229:61 | MacroExpr | test_logging.rs:229:38:229:61 | ...::format(...) | provenance | MaD:19 | -| test_logging.rs:229:38:229:61 | { ... } | test_logging.rs:229:38:229:61 | ...::must_use(...) | provenance | MaD:20 | -| test_logging.rs:229:54:229:61 | password | test_logging.rs:229:38:229:61 | MacroExpr | provenance | | -| test_logging.rs:242:16:242:50 | MacroExpr | test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref, element] | provenance | MaD:17 | -| test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref, element] | test_logging.rs:242:10:242:14 | write | provenance | MaD:7 Sink:MaD:7 Sink:MaD:7 | -| test_logging.rs:242:24:242:49 | ...::format(...) | test_logging.rs:242:24:242:49 | { ... } | provenance | | -| test_logging.rs:242:24:242:49 | ...::must_use(...) | test_logging.rs:242:16:242:50 | MacroExpr | provenance | | -| test_logging.rs:242:24:242:49 | MacroExpr | test_logging.rs:242:24:242:49 | ...::format(...) | provenance | MaD:19 | -| test_logging.rs:242:24:242:49 | { ... } | test_logging.rs:242:24:242:49 | ...::must_use(...) | provenance | MaD:20 | -| test_logging.rs:242:42:242:49 | password | test_logging.rs:242:24:242:49 | MacroExpr | provenance | | -| test_logging.rs:245:20:245:54 | MacroExpr | test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref, element] | provenance | MaD:17 | -| test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref, element] | test_logging.rs:245:10:245:18 | write_all | provenance | MaD:8 Sink:MaD:8 Sink:MaD:8 | -| test_logging.rs:245:28:245:53 | ...::format(...) | test_logging.rs:245:28:245:53 | { ... } | provenance | | -| test_logging.rs:245:28:245:53 | ...::must_use(...) | test_logging.rs:245:20:245:54 | MacroExpr | provenance | | -| test_logging.rs:245:28:245:53 | MacroExpr | test_logging.rs:245:28:245:53 | ...::format(...) | provenance | MaD:19 | -| test_logging.rs:245:28:245:53 | { ... } | test_logging.rs:245:28:245:53 | ...::must_use(...) | provenance | MaD:20 | -| test_logging.rs:245:46:245:53 | password | test_logging.rs:245:28:245:53 | MacroExpr | provenance | | -| test_logging.rs:248:15:248:49 | MacroExpr | test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref, element] | provenance | MaD:17 | -| test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref, element] | test_logging.rs:248:9:248:13 | write | provenance | MaD:7 Sink:MaD:7 Sink:MaD:7 | -| test_logging.rs:248:23:248:48 | ...::format(...) | test_logging.rs:248:23:248:48 | { ... } | provenance | | -| test_logging.rs:248:23:248:48 | ...::must_use(...) | test_logging.rs:248:15:248:49 | MacroExpr | provenance | | -| test_logging.rs:248:23:248:48 | MacroExpr | test_logging.rs:248:23:248:48 | ...::format(...) | provenance | MaD:19 | -| test_logging.rs:248:23:248:48 | { ... } | test_logging.rs:248:23:248:48 | ...::must_use(...) | provenance | MaD:20 | -| test_logging.rs:248:41:248:48 | password | test_logging.rs:248:23:248:48 | MacroExpr | provenance | | -| test_logging.rs:251:15:251:49 | MacroExpr | test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref, element] | provenance | MaD:17 | -| test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref, element] | test_logging.rs:251:9:251:13 | write | provenance | MaD:6 Sink:MaD:6 Sink:MaD:6 | -| test_logging.rs:251:23:251:48 | ...::format(...) | test_logging.rs:251:23:251:48 | { ... } | provenance | | -| test_logging.rs:251:23:251:48 | ...::must_use(...) | test_logging.rs:251:15:251:49 | MacroExpr | provenance | | -| test_logging.rs:251:23:251:48 | MacroExpr | test_logging.rs:251:23:251:48 | ...::format(...) | provenance | MaD:19 | -| test_logging.rs:251:23:251:48 | { ... } | test_logging.rs:251:23:251:48 | ...::must_use(...) | provenance | MaD:20 | -| test_logging.rs:251:41:251:48 | password | test_logging.rs:251:23:251:48 | MacroExpr | provenance | | +| test_logging.rs:48:17:48:40 | MacroExpr | test_logging.rs:48:5:48:15 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:48:33:48:40 | password | test_logging.rs:48:17:48:40 | MacroExpr | provenance | | +| test_logging.rs:53:12:53:35 | MacroExpr | test_logging.rs:53:5:53:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:53:28:53:35 | password | test_logging.rs:53:12:53:35 | MacroExpr | provenance | | +| test_logging.rs:55:12:55:48 | MacroExpr | test_logging.rs:55:5:55:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:55:41:55:48 | password | test_logging.rs:55:12:55:48 | MacroExpr | provenance | | +| test_logging.rs:57:12:57:46 | MacroExpr | test_logging.rs:57:5:57:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:57:39:57:46 | password | test_logging.rs:57:12:57:46 | MacroExpr | provenance | | +| test_logging.rs:58:12:58:33 | MacroExpr | test_logging.rs:58:5:58:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:58:24:58:31 | password | test_logging.rs:58:12:58:33 | MacroExpr | provenance | | +| test_logging.rs:59:12:59:35 | MacroExpr | test_logging.rs:59:5:59:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:59:24:59:31 | password | test_logging.rs:59:12:59:35 | MacroExpr | provenance | | +| test_logging.rs:61:30:61:53 | MacroExpr | test_logging.rs:61:5:61:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:61:46:61:53 | password | test_logging.rs:61:30:61:53 | MacroExpr | provenance | | +| test_logging.rs:62:20:62:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:62:5:62:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:62:20:62:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:62:5:62:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:62:20:62:28 | &... [&ref, tuple.0] | test_logging.rs:62:5:62:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:62:20:62:28 | &password | test_logging.rs:62:20:62:28 | TupleExpr [tuple.0] | provenance | | +| test_logging.rs:62:20:62:28 | &password [&ref] | test_logging.rs:62:20:62:28 | TupleExpr [tuple.0, &ref] | provenance | | +| test_logging.rs:62:20:62:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:62:20:62:28 | &... [&ref, tuple.0, &ref] | provenance | | +| test_logging.rs:62:20:62:28 | TupleExpr [tuple.0] | test_logging.rs:62:20:62:28 | &... [&ref, tuple.0] | provenance | | +| test_logging.rs:62:21:62:28 | password | test_logging.rs:62:20:62:28 | &password | provenance | Config | +| test_logging.rs:62:21:62:28 | password | test_logging.rs:62:20:62:28 | &password [&ref] | provenance | | +| test_logging.rs:66:24:66:47 | MacroExpr | test_logging.rs:66:5:66:8 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:66:40:66:47 | password | test_logging.rs:66:24:66:47 | MacroExpr | provenance | | +| test_logging.rs:68:42:68:65 | MacroExpr | test_logging.rs:68:5:68:8 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:68:58:68:65 | password | test_logging.rs:68:42:68:65 | MacroExpr | provenance | | +| test_logging.rs:69:18:69:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:69:5:69:8 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:69:18:69:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:69:5:69:8 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:69:18:69:26 | &... [&ref, tuple.0] | test_logging.rs:69:5:69:8 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:69:18:69:26 | &password | test_logging.rs:69:18:69:26 | TupleExpr [tuple.0] | provenance | | +| test_logging.rs:69:18:69:26 | &password [&ref] | test_logging.rs:69:18:69:26 | TupleExpr [tuple.0, &ref] | provenance | | +| test_logging.rs:69:18:69:26 | TupleExpr [tuple.0, &ref] | test_logging.rs:69:18:69:26 | &... [&ref, tuple.0, &ref] | provenance | | +| test_logging.rs:69:18:69:26 | TupleExpr [tuple.0] | test_logging.rs:69:18:69:26 | &... [&ref, tuple.0] | provenance | | +| test_logging.rs:69:19:69:26 | password | test_logging.rs:69:18:69:26 | &password | provenance | Config | +| test_logging.rs:69:19:69:26 | password | test_logging.rs:69:18:69:26 | &password [&ref] | provenance | | +| test_logging.rs:73:23:73:46 | MacroExpr | test_logging.rs:73:5:73:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:73:39:73:46 | password | test_logging.rs:73:23:73:46 | MacroExpr | provenance | | +| test_logging.rs:75:41:75:64 | MacroExpr | test_logging.rs:75:5:75:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:75:57:75:64 | password | test_logging.rs:75:41:75:64 | MacroExpr | provenance | | +| test_logging.rs:76:20:76:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:76:5:76:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:76:20:76:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:76:5:76:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:76:20:76:28 | &... [&ref, tuple.0] | test_logging.rs:76:5:76:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:76:20:76:28 | &password | test_logging.rs:76:20:76:28 | TupleExpr [tuple.0] | provenance | | +| test_logging.rs:76:20:76:28 | &password [&ref] | test_logging.rs:76:20:76:28 | TupleExpr [tuple.0, &ref] | provenance | | +| test_logging.rs:76:20:76:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:76:20:76:28 | &... [&ref, tuple.0, &ref] | provenance | | +| test_logging.rs:76:20:76:28 | TupleExpr [tuple.0] | test_logging.rs:76:20:76:28 | &... [&ref, tuple.0] | provenance | | +| test_logging.rs:76:21:76:28 | password | test_logging.rs:76:20:76:28 | &password | provenance | Config | +| test_logging.rs:76:21:76:28 | password | test_logging.rs:76:20:76:28 | &password [&ref] | provenance | | +| test_logging.rs:77:23:77:46 | MacroExpr | test_logging.rs:77:5:77:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:77:39:77:46 | password | test_logging.rs:77:23:77:46 | MacroExpr | provenance | | +| test_logging.rs:83:20:83:43 | MacroExpr | test_logging.rs:83:5:83:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:83:36:83:43 | password | test_logging.rs:83:20:83:43 | MacroExpr | provenance | | +| test_logging.rs:85:38:85:61 | MacroExpr | test_logging.rs:85:5:85:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:85:54:85:61 | password | test_logging.rs:85:38:85:61 | MacroExpr | provenance | | +| test_logging.rs:86:20:86:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:86:5:86:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:86:20:86:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:86:5:86:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:86:20:86:28 | &... [&ref, tuple.0] | test_logging.rs:86:5:86:10 | ...::log | provenance | MaD:12 Sink:MaD:12 Sink:MaD:12 | +| test_logging.rs:86:20:86:28 | &password | test_logging.rs:86:20:86:28 | TupleExpr [tuple.0] | provenance | | +| test_logging.rs:86:20:86:28 | &password [&ref] | test_logging.rs:86:20:86:28 | TupleExpr [tuple.0, &ref] | provenance | | +| test_logging.rs:86:20:86:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:86:20:86:28 | &... [&ref, tuple.0, &ref] | provenance | | +| test_logging.rs:86:20:86:28 | TupleExpr [tuple.0] | test_logging.rs:86:20:86:28 | &... [&ref, tuple.0] | provenance | | +| test_logging.rs:86:21:86:28 | password | test_logging.rs:86:20:86:28 | &password | provenance | Config | +| test_logging.rs:86:21:86:28 | password | test_logging.rs:86:20:86:28 | &password [&ref] | provenance | | +| test_logging.rs:87:20:87:43 | MacroExpr | test_logging.rs:87:5:87:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:87:36:87:43 | password | test_logging.rs:87:20:87:43 | MacroExpr | provenance | | +| test_logging.rs:94:9:94:10 | m1 | test_logging.rs:95:11:95:28 | MacroExpr | provenance | | +| test_logging.rs:94:14:94:22 | &password | test_logging.rs:94:9:94:10 | m1 | provenance | | +| test_logging.rs:94:15:94:22 | password | test_logging.rs:94:14:94:22 | &password | provenance | Config | +| test_logging.rs:95:11:95:28 | MacroExpr | test_logging.rs:95:5:95:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:97:9:97:10 | m2 | test_logging.rs:98:11:98:18 | MacroExpr | provenance | | +| test_logging.rs:97:14:97:49 | ... + ... | test_logging.rs:97:9:97:10 | m2 | provenance | | +| test_logging.rs:97:41:97:49 | &password | test_logging.rs:97:14:97:49 | ... + ... | provenance | MaD:16 | +| test_logging.rs:97:41:97:49 | &password [&ref] | test_logging.rs:97:14:97:49 | ... + ... | provenance | MaD:16 | +| test_logging.rs:97:42:97:49 | password | test_logging.rs:97:41:97:49 | &password | provenance | Config | +| test_logging.rs:97:42:97:49 | password | test_logging.rs:97:41:97:49 | &password [&ref] | provenance | | +| test_logging.rs:98:11:98:18 | MacroExpr | test_logging.rs:98:5:98:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:100:9:100:10 | m3 | test_logging.rs:101:11:101:18 | MacroExpr | provenance | | +| test_logging.rs:100:22:100:45 | ...::format(...) | test_logging.rs:100:22:100:45 | { ... } | provenance | | +| test_logging.rs:100:22:100:45 | ...::must_use(...) | test_logging.rs:100:9:100:10 | m3 | provenance | | +| test_logging.rs:100:22:100:45 | MacroExpr | test_logging.rs:100:22:100:45 | ...::format(...) | provenance | MaD:19 | +| test_logging.rs:100:22:100:45 | { ... } | test_logging.rs:100:22:100:45 | ...::must_use(...) | provenance | MaD:20 | +| test_logging.rs:100:38:100:45 | password | test_logging.rs:100:22:100:45 | MacroExpr | provenance | | +| test_logging.rs:101:11:101:18 | MacroExpr | test_logging.rs:101:5:101:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:119:12:119:41 | MacroExpr | test_logging.rs:119:5:119:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:119:28:119:41 | get_password(...) | test_logging.rs:119:12:119:41 | MacroExpr | provenance | | +| test_logging.rs:130:9:130:10 | t1 [tuple.1] | test_logging.rs:132:28:132:29 | t1 [tuple.1] | provenance | | +| test_logging.rs:130:14:130:33 | TupleExpr [tuple.1] | test_logging.rs:130:9:130:10 | t1 [tuple.1] | provenance | | +| test_logging.rs:130:25:130:32 | password | test_logging.rs:130:14:130:33 | TupleExpr [tuple.1] | provenance | | +| test_logging.rs:132:12:132:31 | MacroExpr | test_logging.rs:132:5:132:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:132:28:132:29 | t1 [tuple.1] | test_logging.rs:132:28:132:31 | t1.1 | provenance | | +| test_logging.rs:132:28:132:31 | t1.1 | test_logging.rs:132:12:132:31 | MacroExpr | provenance | | +| test_logging.rs:142:11:142:37 | MacroExpr | test_logging.rs:142:5:142:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:142:27:142:37 | s1.password | test_logging.rs:142:11:142:37 | MacroExpr | provenance | | +| test_logging.rs:152:11:152:37 | MacroExpr | test_logging.rs:152:5:152:9 | ...::log | provenance | MaD:11 Sink:MaD:11 | +| test_logging.rs:152:27:152:37 | s2.password | test_logging.rs:152:11:152:37 | MacroExpr | provenance | | +| test_logging.rs:177:33:177:79 | &... | test_logging.rs:177:22:177:31 | log_expect | provenance | MaD:1 Sink:MaD:1 | +| test_logging.rs:177:33:177:79 | &... [&ref] | test_logging.rs:177:22:177:31 | log_expect | provenance | MaD:1 Sink:MaD:1 | +| test_logging.rs:177:34:177:79 | MacroExpr | test_logging.rs:177:33:177:79 | &... | provenance | Config | +| test_logging.rs:177:34:177:79 | MacroExpr | test_logging.rs:177:33:177:79 | &... [&ref] | provenance | | +| test_logging.rs:177:42:177:78 | ...::format(...) | test_logging.rs:177:42:177:78 | { ... } | provenance | | +| test_logging.rs:177:42:177:78 | ...::must_use(...) | test_logging.rs:177:34:177:79 | MacroExpr | provenance | | +| test_logging.rs:177:42:177:78 | MacroExpr | test_logging.rs:177:42:177:78 | ...::format(...) | provenance | MaD:19 | +| test_logging.rs:177:42:177:78 | { ... } | test_logging.rs:177:42:177:78 | ...::must_use(...) | provenance | MaD:20 | +| test_logging.rs:177:70:177:78 | password2 | test_logging.rs:177:42:177:78 | MacroExpr | provenance | | +| test_logging.rs:181:35:181:81 | &... | test_logging.rs:181:24:181:33 | log_expect | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:181:35:181:81 | &... [&ref] | test_logging.rs:181:24:181:33 | log_expect | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:181:36:181:81 | MacroExpr | test_logging.rs:181:35:181:81 | &... | provenance | Config | +| test_logging.rs:181:36:181:81 | MacroExpr | test_logging.rs:181:35:181:81 | &... [&ref] | provenance | | +| test_logging.rs:181:44:181:80 | ...::format(...) | test_logging.rs:181:44:181:80 | { ... } | provenance | | +| test_logging.rs:181:44:181:80 | ...::must_use(...) | test_logging.rs:181:36:181:81 | MacroExpr | provenance | | +| test_logging.rs:181:44:181:80 | MacroExpr | test_logging.rs:181:44:181:80 | ...::format(...) | provenance | MaD:19 | +| test_logging.rs:181:44:181:80 | { ... } | test_logging.rs:181:44:181:80 | ...::must_use(...) | provenance | MaD:20 | +| test_logging.rs:181:72:181:80 | password2 | test_logging.rs:181:44:181:80 | MacroExpr | provenance | | +| test_logging.rs:184:9:184:19 | err_result2 [Err] | test_logging.rs:185:13:185:23 | err_result2 [Err] | provenance | | +| test_logging.rs:184:47:184:68 | Err(...) [Err] | test_logging.rs:184:9:184:19 | err_result2 [Err] | provenance | | +| test_logging.rs:184:51:184:59 | password2 | test_logging.rs:184:51:184:67 | password2.clone() | provenance | MaD:15 | +| test_logging.rs:184:51:184:67 | password2.clone() | test_logging.rs:184:47:184:68 | Err(...) [Err] | provenance | | +| test_logging.rs:185:13:185:23 | err_result2 [Err] | test_logging.rs:185:25:185:34 | log_expect | provenance | MaD:4 Sink:MaD:4 | +| test_logging.rs:188:9:188:19 | err_result3 [Err] | test_logging.rs:189:13:189:23 | err_result3 [Err] | provenance | | +| test_logging.rs:188:47:188:60 | Err(...) [Err] | test_logging.rs:188:9:188:19 | err_result3 [Err] | provenance | | +| test_logging.rs:188:51:188:59 | password2 | test_logging.rs:188:47:188:60 | Err(...) [Err] | provenance | | +| test_logging.rs:189:13:189:23 | err_result3 [Err] | test_logging.rs:189:25:189:34 | log_unwrap | provenance | MaD:5 Sink:MaD:5 | +| test_logging.rs:193:12:193:37 | MacroExpr | test_logging.rs:193:5:193:10 | ...::_print | provenance | MaD:14 Sink:MaD:14 | +| test_logging.rs:193:30:193:37 | password | test_logging.rs:193:12:193:37 | MacroExpr | provenance | | +| test_logging.rs:194:14:194:37 | MacroExpr | test_logging.rs:194:5:194:12 | ...::_print | provenance | MaD:14 Sink:MaD:14 | +| test_logging.rs:194:30:194:37 | password | test_logging.rs:194:14:194:37 | MacroExpr | provenance | | +| test_logging.rs:195:13:195:38 | MacroExpr | test_logging.rs:195:5:195:11 | ...::_eprint | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:195:31:195:38 | password | test_logging.rs:195:13:195:38 | MacroExpr | provenance | | +| test_logging.rs:196:15:196:38 | MacroExpr | test_logging.rs:196:5:196:13 | ...::_eprint | provenance | MaD:13 Sink:MaD:13 | +| test_logging.rs:196:31:196:38 | password | test_logging.rs:196:15:196:38 | MacroExpr | provenance | | +| test_logging.rs:200:20:200:43 | MacroExpr | test_logging.rs:200:13:200:18 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:200:36:200:43 | password | test_logging.rs:200:20:200:43 | MacroExpr | provenance | | +| test_logging.rs:203:19:203:42 | MacroExpr | test_logging.rs:203:13:203:17 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:203:35:203:42 | password | test_logging.rs:203:19:203:42 | MacroExpr | provenance | | +| test_logging.rs:206:28:206:51 | MacroExpr | test_logging.rs:206:13:206:26 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:206:44:206:51 | password | test_logging.rs:206:28:206:51 | MacroExpr | provenance | | +| test_logging.rs:209:26:209:49 | MacroExpr | test_logging.rs:209:13:209:24 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:209:42:209:49 | password | test_logging.rs:209:26:209:49 | MacroExpr | provenance | | +| test_logging.rs:212:28:212:51 | MacroExpr | test_logging.rs:212:13:212:19 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:212:44:212:51 | password | test_logging.rs:212:28:212:51 | MacroExpr | provenance | | +| test_logging.rs:215:30:215:53 | ...::Some(...) [Some] | test_logging.rs:215:13:215:22 | ...::assert_failed | provenance | MaD:9 Sink:MaD:9 | +| test_logging.rs:215:30:215:53 | MacroExpr | test_logging.rs:215:30:215:53 | ...::Some(...) [Some] | provenance | | +| test_logging.rs:215:46:215:53 | password | test_logging.rs:215:30:215:53 | MacroExpr | provenance | | +| test_logging.rs:218:30:218:53 | ...::Some(...) [Some] | test_logging.rs:218:13:218:22 | ...::assert_failed | provenance | MaD:9 Sink:MaD:9 | +| test_logging.rs:218:30:218:53 | MacroExpr | test_logging.rs:218:30:218:53 | ...::Some(...) [Some] | provenance | | +| test_logging.rs:218:46:218:53 | password | test_logging.rs:218:30:218:53 | MacroExpr | provenance | | +| test_logging.rs:221:34:221:57 | MacroExpr | test_logging.rs:221:13:221:25 | ...::panic_fmt | provenance | MaD:10 Sink:MaD:10 | +| test_logging.rs:221:50:221:57 | password | test_logging.rs:221:34:221:57 | MacroExpr | provenance | | +| test_logging.rs:224:36:224:59 | ...::Some(...) [Some] | test_logging.rs:224:13:224:28 | ...::assert_failed | provenance | MaD:9 Sink:MaD:9 | +| test_logging.rs:224:36:224:59 | MacroExpr | test_logging.rs:224:36:224:59 | ...::Some(...) [Some] | provenance | | +| test_logging.rs:224:52:224:59 | password | test_logging.rs:224:36:224:59 | MacroExpr | provenance | | +| test_logging.rs:227:36:227:59 | ...::Some(...) [Some] | test_logging.rs:227:13:227:28 | ...::assert_failed | provenance | MaD:9 Sink:MaD:9 | +| test_logging.rs:227:36:227:59 | MacroExpr | test_logging.rs:227:36:227:59 | ...::Some(...) [Some] | provenance | | +| test_logging.rs:227:52:227:59 | password | test_logging.rs:227:36:227:59 | MacroExpr | provenance | | +| test_logging.rs:230:30:230:62 | MacroExpr | test_logging.rs:230:30:230:71 | ... .as_str() [&ref] | provenance | MaD:18 | +| test_logging.rs:230:30:230:71 | ... .as_str() [&ref] | test_logging.rs:230:23:230:28 | expect | provenance | MaD:2 Sink:MaD:2 | +| test_logging.rs:230:38:230:61 | ...::format(...) | test_logging.rs:230:38:230:61 | { ... } | provenance | | +| test_logging.rs:230:38:230:61 | ...::must_use(...) | test_logging.rs:230:30:230:62 | MacroExpr | provenance | | +| test_logging.rs:230:38:230:61 | MacroExpr | test_logging.rs:230:38:230:61 | ...::format(...) | provenance | MaD:19 | +| test_logging.rs:230:38:230:61 | { ... } | test_logging.rs:230:38:230:61 | ...::must_use(...) | provenance | MaD:20 | +| test_logging.rs:230:54:230:61 | password | test_logging.rs:230:38:230:61 | MacroExpr | provenance | | +| test_logging.rs:243:16:243:50 | MacroExpr | test_logging.rs:243:16:243:61 | ... .as_bytes() [&ref, element] | provenance | MaD:17 | +| test_logging.rs:243:16:243:61 | ... .as_bytes() [&ref, element] | test_logging.rs:243:10:243:14 | write | provenance | MaD:7 Sink:MaD:7 Sink:MaD:7 | +| test_logging.rs:243:24:243:49 | ...::format(...) | test_logging.rs:243:24:243:49 | { ... } | provenance | | +| test_logging.rs:243:24:243:49 | ...::must_use(...) | test_logging.rs:243:16:243:50 | MacroExpr | provenance | | +| test_logging.rs:243:24:243:49 | MacroExpr | test_logging.rs:243:24:243:49 | ...::format(...) | provenance | MaD:19 | +| test_logging.rs:243:24:243:49 | { ... } | test_logging.rs:243:24:243:49 | ...::must_use(...) | provenance | MaD:20 | +| test_logging.rs:243:42:243:49 | password | test_logging.rs:243:24:243:49 | MacroExpr | provenance | | +| test_logging.rs:246:20:246:54 | MacroExpr | test_logging.rs:246:20:246:65 | ... .as_bytes() [&ref, element] | provenance | MaD:17 | +| test_logging.rs:246:20:246:65 | ... .as_bytes() [&ref, element] | test_logging.rs:246:10:246:18 | write_all | provenance | MaD:8 Sink:MaD:8 Sink:MaD:8 | +| test_logging.rs:246:28:246:53 | ...::format(...) | test_logging.rs:246:28:246:53 | { ... } | provenance | | +| test_logging.rs:246:28:246:53 | ...::must_use(...) | test_logging.rs:246:20:246:54 | MacroExpr | provenance | | +| test_logging.rs:246:28:246:53 | MacroExpr | test_logging.rs:246:28:246:53 | ...::format(...) | provenance | MaD:19 | +| test_logging.rs:246:28:246:53 | { ... } | test_logging.rs:246:28:246:53 | ...::must_use(...) | provenance | MaD:20 | +| test_logging.rs:246:46:246:53 | password | test_logging.rs:246:28:246:53 | MacroExpr | provenance | | +| test_logging.rs:249:15:249:49 | MacroExpr | test_logging.rs:249:15:249:60 | ... .as_bytes() [&ref, element] | provenance | MaD:17 | +| test_logging.rs:249:15:249:60 | ... .as_bytes() [&ref, element] | test_logging.rs:249:9:249:13 | write | provenance | MaD:7 Sink:MaD:7 Sink:MaD:7 | +| test_logging.rs:249:23:249:48 | ...::format(...) | test_logging.rs:249:23:249:48 | { ... } | provenance | | +| test_logging.rs:249:23:249:48 | ...::must_use(...) | test_logging.rs:249:15:249:49 | MacroExpr | provenance | | +| test_logging.rs:249:23:249:48 | MacroExpr | test_logging.rs:249:23:249:48 | ...::format(...) | provenance | MaD:19 | +| test_logging.rs:249:23:249:48 | { ... } | test_logging.rs:249:23:249:48 | ...::must_use(...) | provenance | MaD:20 | +| test_logging.rs:249:41:249:48 | password | test_logging.rs:249:23:249:48 | MacroExpr | provenance | | +| test_logging.rs:252:15:252:49 | MacroExpr | test_logging.rs:252:15:252:60 | ... .as_bytes() [&ref, element] | provenance | MaD:17 | +| test_logging.rs:252:15:252:60 | ... .as_bytes() [&ref, element] | test_logging.rs:252:9:252:13 | write | provenance | MaD:6 Sink:MaD:6 Sink:MaD:6 | +| test_logging.rs:252:23:252:48 | ...::format(...) | test_logging.rs:252:23:252:48 | { ... } | provenance | | +| test_logging.rs:252:23:252:48 | ...::must_use(...) | test_logging.rs:252:15:252:49 | MacroExpr | provenance | | +| test_logging.rs:252:23:252:48 | MacroExpr | test_logging.rs:252:23:252:48 | ...::format(...) | provenance | MaD:19 | +| test_logging.rs:252:23:252:48 | { ... } | test_logging.rs:252:23:252:48 | ...::must_use(...) | provenance | MaD:20 | +| test_logging.rs:252:41:252:48 | password | test_logging.rs:252:23:252:48 | MacroExpr | provenance | | models | 1 | Sink: ::log_expect; Argument[0]; log-injection | | 2 | Sink: ::expect; Argument[0]; log-injection | @@ -294,229 +297,232 @@ nodes | test_logging.rs:47:5:47:8 | ...::log | semmle.label | ...::log | | test_logging.rs:47:24:47:47 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:47:40:47:47 | password | semmle.label | password | -| test_logging.rs:52:5:52:10 | ...::log | semmle.label | ...::log | -| test_logging.rs:52:12:52:35 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:52:28:52:35 | password | semmle.label | password | -| test_logging.rs:54:5:54:10 | ...::log | semmle.label | ...::log | -| test_logging.rs:54:12:54:48 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:54:41:54:48 | password | semmle.label | password | -| test_logging.rs:56:5:56:10 | ...::log | semmle.label | ...::log | -| test_logging.rs:56:12:56:46 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:56:39:56:46 | password | semmle.label | password | +| test_logging.rs:48:5:48:15 | ...::log | semmle.label | ...::log | +| test_logging.rs:48:17:48:40 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:48:33:48:40 | password | semmle.label | password | +| test_logging.rs:53:5:53:10 | ...::log | semmle.label | ...::log | +| test_logging.rs:53:12:53:35 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:53:28:53:35 | password | semmle.label | password | +| test_logging.rs:55:5:55:10 | ...::log | semmle.label | ...::log | +| test_logging.rs:55:12:55:48 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:55:41:55:48 | password | semmle.label | password | | test_logging.rs:57:5:57:10 | ...::log | semmle.label | ...::log | -| test_logging.rs:57:12:57:33 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:57:24:57:31 | password | semmle.label | password | +| test_logging.rs:57:12:57:46 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:57:39:57:46 | password | semmle.label | password | | test_logging.rs:58:5:58:10 | ...::log | semmle.label | ...::log | -| test_logging.rs:58:12:58:35 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:58:12:58:33 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:58:24:58:31 | password | semmle.label | password | -| test_logging.rs:60:5:60:10 | ...::log | semmle.label | ...::log | -| test_logging.rs:60:30:60:53 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:60:46:60:53 | password | semmle.label | password | +| test_logging.rs:59:5:59:10 | ...::log | semmle.label | ...::log | +| test_logging.rs:59:12:59:35 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:59:24:59:31 | password | semmle.label | password | | test_logging.rs:61:5:61:10 | ...::log | semmle.label | ...::log | -| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | -| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | -| test_logging.rs:61:20:61:28 | &password | semmle.label | &password | -| test_logging.rs:61:20:61:28 | &password [&ref] | semmle.label | &password [&ref] | -| test_logging.rs:61:20:61:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | -| test_logging.rs:61:20:61:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| test_logging.rs:61:21:61:28 | password | semmle.label | password | -| test_logging.rs:65:5:65:8 | ...::log | semmle.label | ...::log | -| test_logging.rs:65:24:65:47 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:65:40:65:47 | password | semmle.label | password | -| test_logging.rs:67:5:67:8 | ...::log | semmle.label | ...::log | -| test_logging.rs:67:42:67:65 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:67:58:67:65 | password | semmle.label | password | +| test_logging.rs:61:30:61:53 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:61:46:61:53 | password | semmle.label | password | +| test_logging.rs:62:5:62:10 | ...::log | semmle.label | ...::log | +| test_logging.rs:62:20:62:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | +| test_logging.rs:62:20:62:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | +| test_logging.rs:62:20:62:28 | &password | semmle.label | &password | +| test_logging.rs:62:20:62:28 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:62:20:62:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | +| test_logging.rs:62:20:62:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| test_logging.rs:62:21:62:28 | password | semmle.label | password | +| test_logging.rs:66:5:66:8 | ...::log | semmle.label | ...::log | +| test_logging.rs:66:24:66:47 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:66:40:66:47 | password | semmle.label | password | | test_logging.rs:68:5:68:8 | ...::log | semmle.label | ...::log | -| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | -| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | -| test_logging.rs:68:18:68:26 | &password | semmle.label | &password | -| test_logging.rs:68:18:68:26 | &password [&ref] | semmle.label | &password [&ref] | -| test_logging.rs:68:18:68:26 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | -| test_logging.rs:68:18:68:26 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| test_logging.rs:68:19:68:26 | password | semmle.label | password | -| test_logging.rs:72:5:72:10 | ...::log | semmle.label | ...::log | -| test_logging.rs:72:23:72:46 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:72:39:72:46 | password | semmle.label | password | -| test_logging.rs:74:5:74:10 | ...::log | semmle.label | ...::log | -| test_logging.rs:74:41:74:64 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:74:57:74:64 | password | semmle.label | password | +| test_logging.rs:68:42:68:65 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:68:58:68:65 | password | semmle.label | password | +| test_logging.rs:69:5:69:8 | ...::log | semmle.label | ...::log | +| test_logging.rs:69:18:69:26 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | +| test_logging.rs:69:18:69:26 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | +| test_logging.rs:69:18:69:26 | &password | semmle.label | &password | +| test_logging.rs:69:18:69:26 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:69:18:69:26 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | +| test_logging.rs:69:18:69:26 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| test_logging.rs:69:19:69:26 | password | semmle.label | password | +| test_logging.rs:73:5:73:10 | ...::log | semmle.label | ...::log | +| test_logging.rs:73:23:73:46 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:73:39:73:46 | password | semmle.label | password | | test_logging.rs:75:5:75:10 | ...::log | semmle.label | ...::log | -| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | -| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | -| test_logging.rs:75:20:75:28 | &password | semmle.label | &password | -| test_logging.rs:75:20:75:28 | &password [&ref] | semmle.label | &password [&ref] | -| test_logging.rs:75:20:75:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | -| test_logging.rs:75:20:75:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| test_logging.rs:75:21:75:28 | password | semmle.label | password | +| test_logging.rs:75:41:75:64 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:75:57:75:64 | password | semmle.label | password | | test_logging.rs:76:5:76:10 | ...::log | semmle.label | ...::log | -| test_logging.rs:76:23:76:46 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:76:39:76:46 | password | semmle.label | password | -| test_logging.rs:82:5:82:10 | ...::log | semmle.label | ...::log | -| test_logging.rs:82:20:82:43 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:82:36:82:43 | password | semmle.label | password | -| test_logging.rs:84:5:84:10 | ...::log | semmle.label | ...::log | -| test_logging.rs:84:38:84:61 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:84:54:84:61 | password | semmle.label | password | +| test_logging.rs:76:20:76:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | +| test_logging.rs:76:20:76:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | +| test_logging.rs:76:20:76:28 | &password | semmle.label | &password | +| test_logging.rs:76:20:76:28 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:76:20:76:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | +| test_logging.rs:76:20:76:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| test_logging.rs:76:21:76:28 | password | semmle.label | password | +| test_logging.rs:77:5:77:10 | ...::log | semmle.label | ...::log | +| test_logging.rs:77:23:77:46 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:77:39:77:46 | password | semmle.label | password | +| test_logging.rs:83:5:83:10 | ...::log | semmle.label | ...::log | +| test_logging.rs:83:20:83:43 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:83:36:83:43 | password | semmle.label | password | | test_logging.rs:85:5:85:10 | ...::log | semmle.label | ...::log | -| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | -| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | -| test_logging.rs:85:20:85:28 | &password | semmle.label | &password | -| test_logging.rs:85:20:85:28 | &password [&ref] | semmle.label | &password [&ref] | -| test_logging.rs:85:20:85:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | -| test_logging.rs:85:20:85:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| test_logging.rs:85:21:85:28 | password | semmle.label | password | +| test_logging.rs:85:38:85:61 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:85:54:85:61 | password | semmle.label | password | | test_logging.rs:86:5:86:10 | ...::log | semmle.label | ...::log | -| test_logging.rs:86:20:86:43 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:86:36:86:43 | password | semmle.label | password | -| test_logging.rs:93:9:93:10 | m1 | semmle.label | m1 | -| test_logging.rs:93:14:93:22 | &password | semmle.label | &password | -| test_logging.rs:93:15:93:22 | password | semmle.label | password | -| test_logging.rs:94:5:94:9 | ...::log | semmle.label | ...::log | -| test_logging.rs:94:11:94:28 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:96:9:96:10 | m2 | semmle.label | m2 | -| test_logging.rs:96:14:96:49 | ... + ... | semmle.label | ... + ... | -| test_logging.rs:96:41:96:49 | &password | semmle.label | &password | -| test_logging.rs:96:41:96:49 | &password [&ref] | semmle.label | &password [&ref] | -| test_logging.rs:96:42:96:49 | password | semmle.label | password | -| test_logging.rs:97:5:97:9 | ...::log | semmle.label | ...::log | -| test_logging.rs:97:11:97:18 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:99:9:99:10 | m3 | semmle.label | m3 | -| test_logging.rs:99:22:99:45 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:99:22:99:45 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:99:22:99:45 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:99:22:99:45 | { ... } | semmle.label | { ... } | -| test_logging.rs:99:38:99:45 | password | semmle.label | password | -| test_logging.rs:100:5:100:9 | ...::log | semmle.label | ...::log | -| test_logging.rs:100:11:100:18 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:118:5:118:10 | ...::log | semmle.label | ...::log | -| test_logging.rs:118:12:118:41 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:118:28:118:41 | get_password(...) | semmle.label | get_password(...) | -| test_logging.rs:129:9:129:10 | t1 [tuple.1] | semmle.label | t1 [tuple.1] | -| test_logging.rs:129:14:129:33 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] | -| test_logging.rs:129:25:129:32 | password | semmle.label | password | -| test_logging.rs:131:5:131:10 | ...::log | semmle.label | ...::log | -| test_logging.rs:131:12:131:31 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:131:28:131:29 | t1 [tuple.1] | semmle.label | t1 [tuple.1] | -| test_logging.rs:131:28:131:31 | t1.1 | semmle.label | t1.1 | -| test_logging.rs:141:5:141:9 | ...::log | semmle.label | ...::log | -| test_logging.rs:141:11:141:37 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:141:27:141:37 | s1.password | semmle.label | s1.password | -| test_logging.rs:151:5:151:9 | ...::log | semmle.label | ...::log | -| test_logging.rs:151:11:151:37 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:151:27:151:37 | s2.password | semmle.label | s2.password | -| test_logging.rs:176:22:176:31 | log_expect | semmle.label | log_expect | -| test_logging.rs:176:33:176:79 | &... | semmle.label | &... | -| test_logging.rs:176:33:176:79 | &... [&ref] | semmle.label | &... [&ref] | -| test_logging.rs:176:34:176:79 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:176:42:176:78 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:176:42:176:78 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:176:42:176:78 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:176:42:176:78 | { ... } | semmle.label | { ... } | -| test_logging.rs:176:70:176:78 | password2 | semmle.label | password2 | -| test_logging.rs:180:24:180:33 | log_expect | semmle.label | log_expect | -| test_logging.rs:180:35:180:81 | &... | semmle.label | &... | -| test_logging.rs:180:35:180:81 | &... [&ref] | semmle.label | &... [&ref] | -| test_logging.rs:180:36:180:81 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:180:44:180:80 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:180:44:180:80 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:180:44:180:80 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:180:44:180:80 | { ... } | semmle.label | { ... } | -| test_logging.rs:180:72:180:80 | password2 | semmle.label | password2 | -| test_logging.rs:183:9:183:19 | err_result2 [Err] | semmle.label | err_result2 [Err] | -| test_logging.rs:183:47:183:68 | Err(...) [Err] | semmle.label | Err(...) [Err] | -| test_logging.rs:183:51:183:59 | password2 | semmle.label | password2 | -| test_logging.rs:183:51:183:67 | password2.clone() | semmle.label | password2.clone() | -| test_logging.rs:184:13:184:23 | err_result2 [Err] | semmle.label | err_result2 [Err] | -| test_logging.rs:184:25:184:34 | log_expect | semmle.label | log_expect | -| test_logging.rs:187:9:187:19 | err_result3 [Err] | semmle.label | err_result3 [Err] | -| test_logging.rs:187:47:187:60 | Err(...) [Err] | semmle.label | Err(...) [Err] | -| test_logging.rs:187:51:187:59 | password2 | semmle.label | password2 | -| test_logging.rs:188:13:188:23 | err_result3 [Err] | semmle.label | err_result3 [Err] | -| test_logging.rs:188:25:188:34 | log_unwrap | semmle.label | log_unwrap | -| test_logging.rs:192:5:192:10 | ...::_print | semmle.label | ...::_print | -| test_logging.rs:192:12:192:37 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:192:30:192:37 | password | semmle.label | password | -| test_logging.rs:193:5:193:12 | ...::_print | semmle.label | ...::_print | -| test_logging.rs:193:14:193:37 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:86:20:86:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | +| test_logging.rs:86:20:86:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | +| test_logging.rs:86:20:86:28 | &password | semmle.label | &password | +| test_logging.rs:86:20:86:28 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:86:20:86:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | +| test_logging.rs:86:20:86:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| test_logging.rs:86:21:86:28 | password | semmle.label | password | +| test_logging.rs:87:5:87:10 | ...::log | semmle.label | ...::log | +| test_logging.rs:87:20:87:43 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:87:36:87:43 | password | semmle.label | password | +| test_logging.rs:94:9:94:10 | m1 | semmle.label | m1 | +| test_logging.rs:94:14:94:22 | &password | semmle.label | &password | +| test_logging.rs:94:15:94:22 | password | semmle.label | password | +| test_logging.rs:95:5:95:9 | ...::log | semmle.label | ...::log | +| test_logging.rs:95:11:95:28 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:97:9:97:10 | m2 | semmle.label | m2 | +| test_logging.rs:97:14:97:49 | ... + ... | semmle.label | ... + ... | +| test_logging.rs:97:41:97:49 | &password | semmle.label | &password | +| test_logging.rs:97:41:97:49 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:97:42:97:49 | password | semmle.label | password | +| test_logging.rs:98:5:98:9 | ...::log | semmle.label | ...::log | +| test_logging.rs:98:11:98:18 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:100:9:100:10 | m3 | semmle.label | m3 | +| test_logging.rs:100:22:100:45 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:100:22:100:45 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:100:22:100:45 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:100:22:100:45 | { ... } | semmle.label | { ... } | +| test_logging.rs:100:38:100:45 | password | semmle.label | password | +| test_logging.rs:101:5:101:9 | ...::log | semmle.label | ...::log | +| test_logging.rs:101:11:101:18 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:119:5:119:10 | ...::log | semmle.label | ...::log | +| test_logging.rs:119:12:119:41 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:119:28:119:41 | get_password(...) | semmle.label | get_password(...) | +| test_logging.rs:130:9:130:10 | t1 [tuple.1] | semmle.label | t1 [tuple.1] | +| test_logging.rs:130:14:130:33 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] | +| test_logging.rs:130:25:130:32 | password | semmle.label | password | +| test_logging.rs:132:5:132:10 | ...::log | semmle.label | ...::log | +| test_logging.rs:132:12:132:31 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:132:28:132:29 | t1 [tuple.1] | semmle.label | t1 [tuple.1] | +| test_logging.rs:132:28:132:31 | t1.1 | semmle.label | t1.1 | +| test_logging.rs:142:5:142:9 | ...::log | semmle.label | ...::log | +| test_logging.rs:142:11:142:37 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:142:27:142:37 | s1.password | semmle.label | s1.password | +| test_logging.rs:152:5:152:9 | ...::log | semmle.label | ...::log | +| test_logging.rs:152:11:152:37 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:152:27:152:37 | s2.password | semmle.label | s2.password | +| test_logging.rs:177:22:177:31 | log_expect | semmle.label | log_expect | +| test_logging.rs:177:33:177:79 | &... | semmle.label | &... | +| test_logging.rs:177:33:177:79 | &... [&ref] | semmle.label | &... [&ref] | +| test_logging.rs:177:34:177:79 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:177:42:177:78 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:177:42:177:78 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:177:42:177:78 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:177:42:177:78 | { ... } | semmle.label | { ... } | +| test_logging.rs:177:70:177:78 | password2 | semmle.label | password2 | +| test_logging.rs:181:24:181:33 | log_expect | semmle.label | log_expect | +| test_logging.rs:181:35:181:81 | &... | semmle.label | &... | +| test_logging.rs:181:35:181:81 | &... [&ref] | semmle.label | &... [&ref] | +| test_logging.rs:181:36:181:81 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:181:44:181:80 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:181:44:181:80 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:181:44:181:80 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:181:44:181:80 | { ... } | semmle.label | { ... } | +| test_logging.rs:181:72:181:80 | password2 | semmle.label | password2 | +| test_logging.rs:184:9:184:19 | err_result2 [Err] | semmle.label | err_result2 [Err] | +| test_logging.rs:184:47:184:68 | Err(...) [Err] | semmle.label | Err(...) [Err] | +| test_logging.rs:184:51:184:59 | password2 | semmle.label | password2 | +| test_logging.rs:184:51:184:67 | password2.clone() | semmle.label | password2.clone() | +| test_logging.rs:185:13:185:23 | err_result2 [Err] | semmle.label | err_result2 [Err] | +| test_logging.rs:185:25:185:34 | log_expect | semmle.label | log_expect | +| test_logging.rs:188:9:188:19 | err_result3 [Err] | semmle.label | err_result3 [Err] | +| test_logging.rs:188:47:188:60 | Err(...) [Err] | semmle.label | Err(...) [Err] | +| test_logging.rs:188:51:188:59 | password2 | semmle.label | password2 | +| test_logging.rs:189:13:189:23 | err_result3 [Err] | semmle.label | err_result3 [Err] | +| test_logging.rs:189:25:189:34 | log_unwrap | semmle.label | log_unwrap | +| test_logging.rs:193:5:193:10 | ...::_print | semmle.label | ...::_print | +| test_logging.rs:193:12:193:37 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:193:30:193:37 | password | semmle.label | password | -| test_logging.rs:194:5:194:11 | ...::_eprint | semmle.label | ...::_eprint | -| test_logging.rs:194:13:194:38 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:194:31:194:38 | password | semmle.label | password | -| test_logging.rs:195:5:195:13 | ...::_eprint | semmle.label | ...::_eprint | -| test_logging.rs:195:15:195:38 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:194:5:194:12 | ...::_print | semmle.label | ...::_print | +| test_logging.rs:194:14:194:37 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:194:30:194:37 | password | semmle.label | password | +| test_logging.rs:195:5:195:11 | ...::_eprint | semmle.label | ...::_eprint | +| test_logging.rs:195:13:195:38 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:195:31:195:38 | password | semmle.label | password | -| test_logging.rs:199:13:199:18 | ...::panic_fmt | semmle.label | ...::panic_fmt | -| test_logging.rs:199:20:199:43 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:199:36:199:43 | password | semmle.label | password | -| test_logging.rs:202:13:202:17 | ...::panic_fmt | semmle.label | ...::panic_fmt | -| test_logging.rs:202:19:202:42 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:202:35:202:42 | password | semmle.label | password | -| test_logging.rs:205:13:205:26 | ...::panic_fmt | semmle.label | ...::panic_fmt | -| test_logging.rs:205:28:205:51 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:205:44:205:51 | password | semmle.label | password | -| test_logging.rs:208:13:208:24 | ...::panic_fmt | semmle.label | ...::panic_fmt | -| test_logging.rs:208:26:208:49 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:208:42:208:49 | password | semmle.label | password | -| test_logging.rs:211:13:211:19 | ...::panic_fmt | semmle.label | ...::panic_fmt | -| test_logging.rs:211:28:211:51 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:211:44:211:51 | password | semmle.label | password | -| test_logging.rs:214:13:214:22 | ...::assert_failed | semmle.label | ...::assert_failed | -| test_logging.rs:214:30:214:53 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | -| test_logging.rs:214:30:214:53 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:214:46:214:53 | password | semmle.label | password | -| test_logging.rs:217:13:217:22 | ...::assert_failed | semmle.label | ...::assert_failed | -| test_logging.rs:217:30:217:53 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | -| test_logging.rs:217:30:217:53 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:217:46:217:53 | password | semmle.label | password | -| test_logging.rs:220:13:220:25 | ...::panic_fmt | semmle.label | ...::panic_fmt | -| test_logging.rs:220:34:220:57 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:220:50:220:57 | password | semmle.label | password | -| test_logging.rs:223:13:223:28 | ...::assert_failed | semmle.label | ...::assert_failed | -| test_logging.rs:223:36:223:59 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | -| test_logging.rs:223:36:223:59 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:223:52:223:59 | password | semmle.label | password | -| test_logging.rs:226:13:226:28 | ...::assert_failed | semmle.label | ...::assert_failed | -| test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | -| test_logging.rs:226:36:226:59 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:226:52:226:59 | password | semmle.label | password | -| test_logging.rs:229:23:229:28 | expect | semmle.label | expect | -| test_logging.rs:229:30:229:62 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | semmle.label | ... .as_str() [&ref] | -| test_logging.rs:229:38:229:61 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:229:38:229:61 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:229:38:229:61 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:229:38:229:61 | { ... } | semmle.label | { ... } | -| test_logging.rs:229:54:229:61 | password | semmle.label | password | -| test_logging.rs:242:10:242:14 | write | semmle.label | write | -| test_logging.rs:242:16:242:50 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref, element] | semmle.label | ... .as_bytes() [&ref, element] | -| test_logging.rs:242:24:242:49 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:242:24:242:49 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:242:24:242:49 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:242:24:242:49 | { ... } | semmle.label | { ... } | -| test_logging.rs:242:42:242:49 | password | semmle.label | password | -| test_logging.rs:245:10:245:18 | write_all | semmle.label | write_all | -| test_logging.rs:245:20:245:54 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref, element] | semmle.label | ... .as_bytes() [&ref, element] | -| test_logging.rs:245:28:245:53 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:245:28:245:53 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:245:28:245:53 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:245:28:245:53 | { ... } | semmle.label | { ... } | -| test_logging.rs:245:46:245:53 | password | semmle.label | password | -| test_logging.rs:248:9:248:13 | write | semmle.label | write | -| test_logging.rs:248:15:248:49 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref, element] | semmle.label | ... .as_bytes() [&ref, element] | -| test_logging.rs:248:23:248:48 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:248:23:248:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:248:23:248:48 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:248:23:248:48 | { ... } | semmle.label | { ... } | -| test_logging.rs:248:41:248:48 | password | semmle.label | password | -| test_logging.rs:251:9:251:13 | write | semmle.label | write | -| test_logging.rs:251:15:251:49 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref, element] | semmle.label | ... .as_bytes() [&ref, element] | -| test_logging.rs:251:23:251:48 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:251:23:251:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:251:23:251:48 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:251:23:251:48 | { ... } | semmle.label | { ... } | -| test_logging.rs:251:41:251:48 | password | semmle.label | password | +| test_logging.rs:196:5:196:13 | ...::_eprint | semmle.label | ...::_eprint | +| test_logging.rs:196:15:196:38 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:196:31:196:38 | password | semmle.label | password | +| test_logging.rs:200:13:200:18 | ...::panic_fmt | semmle.label | ...::panic_fmt | +| test_logging.rs:200:20:200:43 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:200:36:200:43 | password | semmle.label | password | +| test_logging.rs:203:13:203:17 | ...::panic_fmt | semmle.label | ...::panic_fmt | +| test_logging.rs:203:19:203:42 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:203:35:203:42 | password | semmle.label | password | +| test_logging.rs:206:13:206:26 | ...::panic_fmt | semmle.label | ...::panic_fmt | +| test_logging.rs:206:28:206:51 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:206:44:206:51 | password | semmle.label | password | +| test_logging.rs:209:13:209:24 | ...::panic_fmt | semmle.label | ...::panic_fmt | +| test_logging.rs:209:26:209:49 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:209:42:209:49 | password | semmle.label | password | +| test_logging.rs:212:13:212:19 | ...::panic_fmt | semmle.label | ...::panic_fmt | +| test_logging.rs:212:28:212:51 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:212:44:212:51 | password | semmle.label | password | +| test_logging.rs:215:13:215:22 | ...::assert_failed | semmle.label | ...::assert_failed | +| test_logging.rs:215:30:215:53 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | +| test_logging.rs:215:30:215:53 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:215:46:215:53 | password | semmle.label | password | +| test_logging.rs:218:13:218:22 | ...::assert_failed | semmle.label | ...::assert_failed | +| test_logging.rs:218:30:218:53 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | +| test_logging.rs:218:30:218:53 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:218:46:218:53 | password | semmle.label | password | +| test_logging.rs:221:13:221:25 | ...::panic_fmt | semmle.label | ...::panic_fmt | +| test_logging.rs:221:34:221:57 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:221:50:221:57 | password | semmle.label | password | +| test_logging.rs:224:13:224:28 | ...::assert_failed | semmle.label | ...::assert_failed | +| test_logging.rs:224:36:224:59 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | +| test_logging.rs:224:36:224:59 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:224:52:224:59 | password | semmle.label | password | +| test_logging.rs:227:13:227:28 | ...::assert_failed | semmle.label | ...::assert_failed | +| test_logging.rs:227:36:227:59 | ...::Some(...) [Some] | semmle.label | ...::Some(...) [Some] | +| test_logging.rs:227:36:227:59 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:227:52:227:59 | password | semmle.label | password | +| test_logging.rs:230:23:230:28 | expect | semmle.label | expect | +| test_logging.rs:230:30:230:62 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:230:30:230:71 | ... .as_str() [&ref] | semmle.label | ... .as_str() [&ref] | +| test_logging.rs:230:38:230:61 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:230:38:230:61 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:230:38:230:61 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:230:38:230:61 | { ... } | semmle.label | { ... } | +| test_logging.rs:230:54:230:61 | password | semmle.label | password | +| test_logging.rs:243:10:243:14 | write | semmle.label | write | +| test_logging.rs:243:16:243:50 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:243:16:243:61 | ... .as_bytes() [&ref, element] | semmle.label | ... .as_bytes() [&ref, element] | +| test_logging.rs:243:24:243:49 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:243:24:243:49 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:243:24:243:49 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:243:24:243:49 | { ... } | semmle.label | { ... } | +| test_logging.rs:243:42:243:49 | password | semmle.label | password | +| test_logging.rs:246:10:246:18 | write_all | semmle.label | write_all | +| test_logging.rs:246:20:246:54 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:246:20:246:65 | ... .as_bytes() [&ref, element] | semmle.label | ... .as_bytes() [&ref, element] | +| test_logging.rs:246:28:246:53 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:246:28:246:53 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:246:28:246:53 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:246:28:246:53 | { ... } | semmle.label | { ... } | +| test_logging.rs:246:46:246:53 | password | semmle.label | password | +| test_logging.rs:249:9:249:13 | write | semmle.label | write | +| test_logging.rs:249:15:249:49 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:249:15:249:60 | ... .as_bytes() [&ref, element] | semmle.label | ... .as_bytes() [&ref, element] | +| test_logging.rs:249:23:249:48 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:249:23:249:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:249:23:249:48 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:249:23:249:48 | { ... } | semmle.label | { ... } | +| test_logging.rs:249:41:249:48 | password | semmle.label | password | +| test_logging.rs:252:9:252:13 | write | semmle.label | write | +| test_logging.rs:252:15:252:49 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:252:15:252:60 | ... .as_bytes() [&ref, element] | semmle.label | ... .as_bytes() [&ref, element] | +| test_logging.rs:252:23:252:48 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:252:23:252:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:252:23:252:48 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:252:23:252:48 | { ... } | semmle.label | { ... } | +| test_logging.rs:252:41:252:48 | password | semmle.label | password | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-312/options.yml b/rust/ql/test/query-tests/security/CWE-312/options.yml index ad0f41ebef45..d54a31f5fff9 100644 --- a/rust/ql/test/query-tests/security/CWE-312/options.yml +++ b/rust/ql/test/query-tests/security/CWE-312/options.yml @@ -3,6 +3,7 @@ qltest_dependencies: - log = { version = "0.4.25", features = ["kv"] } - simple_logger = { version = "5.0.0" } - log_err = { version = "1.1.1" } + - tracing = { version = "0.1.44" } - sqlx = { version = "0.8.6", features = ["mysql", "sqlite", "postgres", "runtime-async-std", "tls-native-tls"] } - futures = { version = "0.3" } - aes = { version = "0.8.4" } diff --git a/rust/ql/test/query-tests/security/CWE-312/test_logging.rs b/rust/ql/test/query-tests/security/CWE-312/test_logging.rs index 43bcd8894f3c..83c5b7763602 100644 --- a/rust/ql/test/query-tests/security/CWE-312/test_logging.rs +++ b/rust/ql/test/query-tests/security/CWE-312/test_logging.rs @@ -45,6 +45,7 @@ fn test_log(harmless: String, password: String, encrypted_password: String) { trace!("message = {}", password); // $ Alert[rust/cleartext-logging] warn!("message = {}", password); // $ Alert[rust/cleartext-logging] log!(Level::Error, "message = {}", password); // $ Alert[rust/cleartext-logging] + log::debug!("message = {}", password); // $ Alert[rust/cleartext-logging] // debug! macro, various formatting debug!("message"); @@ -251,6 +252,38 @@ fn test_std(password: String, i: i32, opt_i: Option) { err.write(format!("message = {}\n", password).as_bytes()); // $ Alert[rust/cleartext-logging] } +fn test_tracing(password: String) { + // logging-style macros + tracing::debug!("message = {}", password); // $ MISSING: Alert[rust/cleartext-logging] + tracing::error!("message = {}", password); // $ MISSING: Alert[rust/cleartext-logging] + tracing::info!("message = {}", password); // $ MISSING: Alert[rust/cleartext-logging] + tracing::trace!("message = {}", password); // $ MISSING: Alert[rust/cleartext-logging] + tracing::warn!("message = {}", password); // $ MISSING: Alert[rust/cleartext-logging] + + // span and event macros + let span = tracing::span!(tracing::Level::INFO, "span = {}", password); // $ MISSING: Alert[rust/cleartext-logging] + let _enter = span.enter(); + + tracing::event!(tracing::Level::INFO, "event = {}", password); // $ MISSING: Alert[rust/cleartext-logging] + tracing::event!(tracing::Level::INFO, user = "alice", password = password); // $ MISSING: Alert[rust/cleartext-logging] + tracing::event!(tracing::Level::INFO, user = "bob", user.password = password); // $ MISSING: Alert[rust/cleartext-logging] + + // more usage variants + tracing::info!(password); // $ MISSING: Alert[rust/cleartext-logging] + tracing::info!(%password); // $ MISSING: Alert[rust/cleartext-logging] + tracing::info!(?password); // $ MISSING: Alert[rust/cleartext-logging] + tracing::info!(password = password); // $ MISSING: Alert[rust/cleartext-logging] + tracing::info!(password = %password); // $ MISSING: Alert[rust/cleartext-logging] + tracing::info!(password = ?password); // $ MISSING: Alert[rust/cleartext-logging] + tracing::info!(target: "app", message = password); // $ MISSING: Alert[rust/cleartext-logging] + tracing::info!(target: "app", message = %password); // $ MISSING: Alert[rust/cleartext-logging] + tracing::info!(target: "app", message = ?password); // $ MISSING: Alert[rust/cleartext-logging] + + let span2 = tracing::span!(tracing::Level::INFO, "message", message = %password); // $ MISSING: Alert[rust/cleartext-logging] + let _enter2 = span2.enter(); + tracing::event!(tracing::Level::INFO, message = %password); // $ MISSING: Alert[rust/cleartext-logging] +} + fn main() { simple_logger::SimpleLogger::new().init().unwrap(); @@ -260,4 +293,5 @@ fn main() { "[encrypted]".to_string(), ); test_std("123456".to_string(), 0, None); + test_tracing("123456".to_string()); } From 683fc46e962d2f07e8dd6ccf91c884429487e5eb Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 13 Aug 2026 11:17:18 +0100 Subject: [PATCH 2/7] Rust: Add QL sink models for the "tracing" crate. --- .../security/CleartextLoggingExtensions.qll | 18 + .../CWE-312/CleartextLogging.expected | 568 ++++++++++++++++++ .../security/CWE-312/test_logging.rs | 42 +- 3 files changed, 607 insertions(+), 21 deletions(-) diff --git a/rust/ql/lib/codeql/rust/security/CleartextLoggingExtensions.qll b/rust/ql/lib/codeql/rust/security/CleartextLoggingExtensions.qll index c728d29f0155..f8b16b257780 100644 --- a/rust/ql/lib/codeql/rust/security/CleartextLoggingExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/CleartextLoggingExtensions.qll @@ -45,6 +45,24 @@ module CleartextLogging { ModelsAsDataSink() { sinkNode(this, "log-injection") } } + /** + * A sink for the logging macros of the `tracing` crate, such as + * `tracing::info!`. The underlying function calls are difficult to + * identify reliably, so we treat any expression inside the expansion + * of such a macro call as a sink. + */ + private class TracingMacroSink extends Sink { + TracingMacroSink() { + exists(Crate c, MacroRules m, MacroCall mc | + c.getName() = "tracing" and + m.getName().getText() = ["trace", "debug", "info", "warn", "error", "event", "span"] and + m.getLocation().getFile() = c.getASourceFile().getFile() and + mc.resolveMacro() = m and + this.asExpr().getParentNode*() = mc.getMacroCallExpansion() + ) + } + } + /** * A barrier for logging from model data. */ diff --git a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected index 4dfa2d591d13..214cb0a68055 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected @@ -54,6 +54,134 @@ | test_logging.rs:246:10:246:18 | write_all | test_logging.rs:246:46:246:53 | password | test_logging.rs:246:10:246:18 | write_all | This operation writes $@ to a log file. | test_logging.rs:246:46:246:53 | password | password | | test_logging.rs:249:9:249:13 | write | test_logging.rs:249:41:249:48 | password | test_logging.rs:249:9:249:13 | write | This operation writes $@ to a log file. | test_logging.rs:249:41:249:48 | password | password | | test_logging.rs:252:9:252:13 | write | test_logging.rs:252:41:252:48 | password | test_logging.rs:252:9:252:13 | write | This operation writes $@ to a log file. | test_logging.rs:252:41:252:48 | password | password | +| test_logging.rs:257:21:257:44 | &... | test_logging.rs:257:37:257:44 | password | test_logging.rs:257:21:257:44 | &... | This operation writes $@ to a log file. | test_logging.rs:257:37:257:44 | password | password | +| test_logging.rs:257:21:257:44 | &... | test_logging.rs:257:37:257:44 | password | test_logging.rs:257:21:257:44 | &... | This operation writes $@ to a log file. | test_logging.rs:257:37:257:44 | password | password | +| test_logging.rs:257:21:257:44 | ... as ... | test_logging.rs:257:37:257:44 | password | test_logging.rs:257:21:257:44 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:257:37:257:44 | password | password | +| test_logging.rs:257:21:257:44 | ... as ... | test_logging.rs:257:37:257:44 | password | test_logging.rs:257:21:257:44 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:257:37:257:44 | password | password | +| test_logging.rs:257:21:257:44 | FormatArgsExpr | test_logging.rs:257:37:257:44 | password | test_logging.rs:257:21:257:44 | FormatArgsExpr | This operation writes $@ to a log file. | test_logging.rs:257:37:257:44 | password | password | +| test_logging.rs:257:21:257:44 | FormatArgsExpr | test_logging.rs:257:37:257:44 | password | test_logging.rs:257:21:257:44 | FormatArgsExpr | This operation writes $@ to a log file. | test_logging.rs:257:37:257:44 | password | password | +| test_logging.rs:257:21:257:44 | MacroExpr | test_logging.rs:257:37:257:44 | password | test_logging.rs:257:21:257:44 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:257:37:257:44 | password | password | +| test_logging.rs:257:21:257:44 | MacroExpr | test_logging.rs:257:37:257:44 | password | test_logging.rs:257:21:257:44 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:257:37:257:44 | password | password | +| test_logging.rs:257:37:257:44 | password | test_logging.rs:257:37:257:44 | password | test_logging.rs:257:37:257:44 | password | This operation writes $@ to a log file. | test_logging.rs:257:37:257:44 | password | password | +| test_logging.rs:257:37:257:44 | password | test_logging.rs:257:37:257:44 | password | test_logging.rs:257:37:257:44 | password | This operation writes $@ to a log file. | test_logging.rs:257:37:257:44 | password | password | +| test_logging.rs:258:21:258:44 | &... | test_logging.rs:258:37:258:44 | password | test_logging.rs:258:21:258:44 | &... | This operation writes $@ to a log file. | test_logging.rs:258:37:258:44 | password | password | +| test_logging.rs:258:21:258:44 | &... | test_logging.rs:258:37:258:44 | password | test_logging.rs:258:21:258:44 | &... | This operation writes $@ to a log file. | test_logging.rs:258:37:258:44 | password | password | +| test_logging.rs:258:21:258:44 | ... as ... | test_logging.rs:258:37:258:44 | password | test_logging.rs:258:21:258:44 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:258:37:258:44 | password | password | +| test_logging.rs:258:21:258:44 | ... as ... | test_logging.rs:258:37:258:44 | password | test_logging.rs:258:21:258:44 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:258:37:258:44 | password | password | +| test_logging.rs:258:21:258:44 | FormatArgsExpr | test_logging.rs:258:37:258:44 | password | test_logging.rs:258:21:258:44 | FormatArgsExpr | This operation writes $@ to a log file. | test_logging.rs:258:37:258:44 | password | password | +| test_logging.rs:258:21:258:44 | FormatArgsExpr | test_logging.rs:258:37:258:44 | password | test_logging.rs:258:21:258:44 | FormatArgsExpr | This operation writes $@ to a log file. | test_logging.rs:258:37:258:44 | password | password | +| test_logging.rs:258:21:258:44 | MacroExpr | test_logging.rs:258:37:258:44 | password | test_logging.rs:258:21:258:44 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:258:37:258:44 | password | password | +| test_logging.rs:258:21:258:44 | MacroExpr | test_logging.rs:258:37:258:44 | password | test_logging.rs:258:21:258:44 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:258:37:258:44 | password | password | +| test_logging.rs:258:37:258:44 | password | test_logging.rs:258:37:258:44 | password | test_logging.rs:258:37:258:44 | password | This operation writes $@ to a log file. | test_logging.rs:258:37:258:44 | password | password | +| test_logging.rs:258:37:258:44 | password | test_logging.rs:258:37:258:44 | password | test_logging.rs:258:37:258:44 | password | This operation writes $@ to a log file. | test_logging.rs:258:37:258:44 | password | password | +| test_logging.rs:259:20:259:43 | &... | test_logging.rs:259:36:259:43 | password | test_logging.rs:259:20:259:43 | &... | This operation writes $@ to a log file. | test_logging.rs:259:36:259:43 | password | password | +| test_logging.rs:259:20:259:43 | &... | test_logging.rs:259:36:259:43 | password | test_logging.rs:259:20:259:43 | &... | This operation writes $@ to a log file. | test_logging.rs:259:36:259:43 | password | password | +| test_logging.rs:259:20:259:43 | ... as ... | test_logging.rs:259:36:259:43 | password | test_logging.rs:259:20:259:43 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:259:36:259:43 | password | password | +| test_logging.rs:259:20:259:43 | ... as ... | test_logging.rs:259:36:259:43 | password | test_logging.rs:259:20:259:43 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:259:36:259:43 | password | password | +| test_logging.rs:259:20:259:43 | FormatArgsExpr | test_logging.rs:259:36:259:43 | password | test_logging.rs:259:20:259:43 | FormatArgsExpr | This operation writes $@ to a log file. | test_logging.rs:259:36:259:43 | password | password | +| test_logging.rs:259:20:259:43 | FormatArgsExpr | test_logging.rs:259:36:259:43 | password | test_logging.rs:259:20:259:43 | FormatArgsExpr | This operation writes $@ to a log file. | test_logging.rs:259:36:259:43 | password | password | +| test_logging.rs:259:20:259:43 | MacroExpr | test_logging.rs:259:36:259:43 | password | test_logging.rs:259:20:259:43 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:259:36:259:43 | password | password | +| test_logging.rs:259:20:259:43 | MacroExpr | test_logging.rs:259:36:259:43 | password | test_logging.rs:259:20:259:43 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:259:36:259:43 | password | password | +| test_logging.rs:259:36:259:43 | password | test_logging.rs:259:36:259:43 | password | test_logging.rs:259:36:259:43 | password | This operation writes $@ to a log file. | test_logging.rs:259:36:259:43 | password | password | +| test_logging.rs:259:36:259:43 | password | test_logging.rs:259:36:259:43 | password | test_logging.rs:259:36:259:43 | password | This operation writes $@ to a log file. | test_logging.rs:259:36:259:43 | password | password | +| test_logging.rs:260:21:260:44 | &... | test_logging.rs:260:37:260:44 | password | test_logging.rs:260:21:260:44 | &... | This operation writes $@ to a log file. | test_logging.rs:260:37:260:44 | password | password | +| test_logging.rs:260:21:260:44 | &... | test_logging.rs:260:37:260:44 | password | test_logging.rs:260:21:260:44 | &... | This operation writes $@ to a log file. | test_logging.rs:260:37:260:44 | password | password | +| test_logging.rs:260:21:260:44 | ... as ... | test_logging.rs:260:37:260:44 | password | test_logging.rs:260:21:260:44 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:260:37:260:44 | password | password | +| test_logging.rs:260:21:260:44 | ... as ... | test_logging.rs:260:37:260:44 | password | test_logging.rs:260:21:260:44 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:260:37:260:44 | password | password | +| test_logging.rs:260:21:260:44 | FormatArgsExpr | test_logging.rs:260:37:260:44 | password | test_logging.rs:260:21:260:44 | FormatArgsExpr | This operation writes $@ to a log file. | test_logging.rs:260:37:260:44 | password | password | +| test_logging.rs:260:21:260:44 | FormatArgsExpr | test_logging.rs:260:37:260:44 | password | test_logging.rs:260:21:260:44 | FormatArgsExpr | This operation writes $@ to a log file. | test_logging.rs:260:37:260:44 | password | password | +| test_logging.rs:260:21:260:44 | MacroExpr | test_logging.rs:260:37:260:44 | password | test_logging.rs:260:21:260:44 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:260:37:260:44 | password | password | +| test_logging.rs:260:21:260:44 | MacroExpr | test_logging.rs:260:37:260:44 | password | test_logging.rs:260:21:260:44 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:260:37:260:44 | password | password | +| test_logging.rs:260:37:260:44 | password | test_logging.rs:260:37:260:44 | password | test_logging.rs:260:37:260:44 | password | This operation writes $@ to a log file. | test_logging.rs:260:37:260:44 | password | password | +| test_logging.rs:260:37:260:44 | password | test_logging.rs:260:37:260:44 | password | test_logging.rs:260:37:260:44 | password | This operation writes $@ to a log file. | test_logging.rs:260:37:260:44 | password | password | +| test_logging.rs:261:20:261:43 | &... | test_logging.rs:261:36:261:43 | password | test_logging.rs:261:20:261:43 | &... | This operation writes $@ to a log file. | test_logging.rs:261:36:261:43 | password | password | +| test_logging.rs:261:20:261:43 | &... | test_logging.rs:261:36:261:43 | password | test_logging.rs:261:20:261:43 | &... | This operation writes $@ to a log file. | test_logging.rs:261:36:261:43 | password | password | +| test_logging.rs:261:20:261:43 | ... as ... | test_logging.rs:261:36:261:43 | password | test_logging.rs:261:20:261:43 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:261:36:261:43 | password | password | +| test_logging.rs:261:20:261:43 | ... as ... | test_logging.rs:261:36:261:43 | password | test_logging.rs:261:20:261:43 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:261:36:261:43 | password | password | +| test_logging.rs:261:20:261:43 | FormatArgsExpr | test_logging.rs:261:36:261:43 | password | test_logging.rs:261:20:261:43 | FormatArgsExpr | This operation writes $@ to a log file. | test_logging.rs:261:36:261:43 | password | password | +| test_logging.rs:261:20:261:43 | FormatArgsExpr | test_logging.rs:261:36:261:43 | password | test_logging.rs:261:20:261:43 | FormatArgsExpr | This operation writes $@ to a log file. | test_logging.rs:261:36:261:43 | password | password | +| test_logging.rs:261:20:261:43 | MacroExpr | test_logging.rs:261:36:261:43 | password | test_logging.rs:261:20:261:43 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:261:36:261:43 | password | password | +| test_logging.rs:261:20:261:43 | MacroExpr | test_logging.rs:261:36:261:43 | password | test_logging.rs:261:20:261:43 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:261:36:261:43 | password | password | +| test_logging.rs:261:36:261:43 | password | test_logging.rs:261:36:261:43 | password | test_logging.rs:261:36:261:43 | password | This operation writes $@ to a log file. | test_logging.rs:261:36:261:43 | password | password | +| test_logging.rs:261:36:261:43 | password | test_logging.rs:261:36:261:43 | password | test_logging.rs:261:36:261:43 | password | This operation writes $@ to a log file. | test_logging.rs:261:36:261:43 | password | password | +| test_logging.rs:264:66:264:73 | &password | test_logging.rs:264:66:264:73 | password | test_logging.rs:264:66:264:73 | &password | This operation writes $@ to a log file. | test_logging.rs:264:66:264:73 | password | password | +| test_logging.rs:264:66:264:73 | &password | test_logging.rs:264:66:264:73 | password | test_logging.rs:264:66:264:73 | &password | This operation writes $@ to a log file. | test_logging.rs:264:66:264:73 | password | password | +| test_logging.rs:264:66:264:73 | ... as ... | test_logging.rs:264:66:264:73 | password | test_logging.rs:264:66:264:73 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:264:66:264:73 | password | password | +| test_logging.rs:264:66:264:73 | ... as ... | test_logging.rs:264:66:264:73 | password | test_logging.rs:264:66:264:73 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:264:66:264:73 | password | password | +| test_logging.rs:264:66:264:73 | password | test_logging.rs:264:66:264:73 | password | test_logging.rs:264:66:264:73 | password | This operation writes $@ to a log file. | test_logging.rs:264:66:264:73 | password | password | +| test_logging.rs:264:66:264:73 | password | test_logging.rs:264:66:264:73 | password | test_logging.rs:264:66:264:73 | password | This operation writes $@ to a log file. | test_logging.rs:264:66:264:73 | password | password | +| test_logging.rs:267:43:267:64 | &... | test_logging.rs:267:57:267:64 | password | test_logging.rs:267:43:267:64 | &... | This operation writes $@ to a log file. | test_logging.rs:267:57:267:64 | password | password | +| test_logging.rs:267:43:267:64 | &... | test_logging.rs:267:57:267:64 | password | test_logging.rs:267:43:267:64 | &... | This operation writes $@ to a log file. | test_logging.rs:267:57:267:64 | password | password | +| test_logging.rs:267:43:267:64 | ... as ... | test_logging.rs:267:57:267:64 | password | test_logging.rs:267:43:267:64 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:267:57:267:64 | password | password | +| test_logging.rs:267:43:267:64 | ... as ... | test_logging.rs:267:57:267:64 | password | test_logging.rs:267:43:267:64 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:267:57:267:64 | password | password | +| test_logging.rs:267:43:267:64 | FormatArgsExpr | test_logging.rs:267:57:267:64 | password | test_logging.rs:267:43:267:64 | FormatArgsExpr | This operation writes $@ to a log file. | test_logging.rs:267:57:267:64 | password | password | +| test_logging.rs:267:43:267:64 | FormatArgsExpr | test_logging.rs:267:57:267:64 | password | test_logging.rs:267:43:267:64 | FormatArgsExpr | This operation writes $@ to a log file. | test_logging.rs:267:57:267:64 | password | password | +| test_logging.rs:267:43:267:64 | MacroExpr | test_logging.rs:267:57:267:64 | password | test_logging.rs:267:43:267:64 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:267:57:267:64 | password | password | +| test_logging.rs:267:43:267:64 | MacroExpr | test_logging.rs:267:57:267:64 | password | test_logging.rs:267:43:267:64 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:267:57:267:64 | password | password | +| test_logging.rs:267:57:267:64 | password | test_logging.rs:267:57:267:64 | password | test_logging.rs:267:57:267:64 | password | This operation writes $@ to a log file. | test_logging.rs:267:57:267:64 | password | password | +| test_logging.rs:267:57:267:64 | password | test_logging.rs:267:57:267:64 | password | test_logging.rs:267:57:267:64 | password | This operation writes $@ to a log file. | test_logging.rs:267:57:267:64 | password | password | +| test_logging.rs:268:70:268:77 | &password | test_logging.rs:268:70:268:77 | password | test_logging.rs:268:70:268:77 | &password | This operation writes $@ to a log file. | test_logging.rs:268:70:268:77 | password | password | +| test_logging.rs:268:70:268:77 | &password | test_logging.rs:268:70:268:77 | password | test_logging.rs:268:70:268:77 | &password | This operation writes $@ to a log file. | test_logging.rs:268:70:268:77 | password | password | +| test_logging.rs:268:70:268:77 | ... as ... | test_logging.rs:268:70:268:77 | password | test_logging.rs:268:70:268:77 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:268:70:268:77 | password | password | +| test_logging.rs:268:70:268:77 | ... as ... | test_logging.rs:268:70:268:77 | password | test_logging.rs:268:70:268:77 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:268:70:268:77 | password | password | +| test_logging.rs:268:70:268:77 | password | test_logging.rs:268:70:268:77 | password | test_logging.rs:268:70:268:77 | password | This operation writes $@ to a log file. | test_logging.rs:268:70:268:77 | password | password | +| test_logging.rs:268:70:268:77 | password | test_logging.rs:268:70:268:77 | password | test_logging.rs:268:70:268:77 | password | This operation writes $@ to a log file. | test_logging.rs:268:70:268:77 | password | password | +| test_logging.rs:269:73:269:80 | &password | test_logging.rs:269:73:269:80 | password | test_logging.rs:269:73:269:80 | &password | This operation writes $@ to a log file. | test_logging.rs:269:73:269:80 | password | password | +| test_logging.rs:269:73:269:80 | &password | test_logging.rs:269:73:269:80 | password | test_logging.rs:269:73:269:80 | &password | This operation writes $@ to a log file. | test_logging.rs:269:73:269:80 | password | password | +| test_logging.rs:269:73:269:80 | ... as ... | test_logging.rs:269:73:269:80 | password | test_logging.rs:269:73:269:80 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:269:73:269:80 | password | password | +| test_logging.rs:269:73:269:80 | ... as ... | test_logging.rs:269:73:269:80 | password | test_logging.rs:269:73:269:80 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:269:73:269:80 | password | password | +| test_logging.rs:269:73:269:80 | password | test_logging.rs:269:73:269:80 | password | test_logging.rs:269:73:269:80 | password | This operation writes $@ to a log file. | test_logging.rs:269:73:269:80 | password | password | +| test_logging.rs:269:73:269:80 | password | test_logging.rs:269:73:269:80 | password | test_logging.rs:269:73:269:80 | password | This operation writes $@ to a log file. | test_logging.rs:269:73:269:80 | password | password | +| test_logging.rs:272:20:272:27 | &password | test_logging.rs:272:20:272:27 | password | test_logging.rs:272:20:272:27 | &password | This operation writes $@ to a log file. | test_logging.rs:272:20:272:27 | password | password | +| test_logging.rs:272:20:272:27 | &password | test_logging.rs:272:20:272:27 | password | test_logging.rs:272:20:272:27 | &password | This operation writes $@ to a log file. | test_logging.rs:272:20:272:27 | password | password | +| test_logging.rs:272:20:272:27 | ... as ... | test_logging.rs:272:20:272:27 | password | test_logging.rs:272:20:272:27 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:272:20:272:27 | password | password | +| test_logging.rs:272:20:272:27 | ... as ... | test_logging.rs:272:20:272:27 | password | test_logging.rs:272:20:272:27 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:272:20:272:27 | password | password | +| test_logging.rs:272:20:272:27 | password | test_logging.rs:272:20:272:27 | password | test_logging.rs:272:20:272:27 | password | This operation writes $@ to a log file. | test_logging.rs:272:20:272:27 | password | password | +| test_logging.rs:272:20:272:27 | password | test_logging.rs:272:20:272:27 | password | test_logging.rs:272:20:272:27 | password | This operation writes $@ to a log file. | test_logging.rs:272:20:272:27 | password | password | +| test_logging.rs:273:21:273:28 | &password | test_logging.rs:273:21:273:28 | password | test_logging.rs:273:21:273:28 | &password | This operation writes $@ to a log file. | test_logging.rs:273:21:273:28 | password | password | +| test_logging.rs:273:21:273:28 | &password | test_logging.rs:273:21:273:28 | password | test_logging.rs:273:21:273:28 | &password | This operation writes $@ to a log file. | test_logging.rs:273:21:273:28 | password | password | +| test_logging.rs:273:21:273:28 | password | test_logging.rs:273:21:273:28 | password | test_logging.rs:273:21:273:28 | password | This operation writes $@ to a log file. | test_logging.rs:273:21:273:28 | password | password | +| test_logging.rs:273:21:273:28 | password | test_logging.rs:273:21:273:28 | password | test_logging.rs:273:21:273:28 | password | This operation writes $@ to a log file. | test_logging.rs:273:21:273:28 | password | password | +| test_logging.rs:274:21:274:28 | &password | test_logging.rs:274:21:274:28 | password | test_logging.rs:274:21:274:28 | &password | This operation writes $@ to a log file. | test_logging.rs:274:21:274:28 | password | password | +| test_logging.rs:274:21:274:28 | &password | test_logging.rs:274:21:274:28 | password | test_logging.rs:274:21:274:28 | &password | This operation writes $@ to a log file. | test_logging.rs:274:21:274:28 | password | password | +| test_logging.rs:274:21:274:28 | password | test_logging.rs:274:21:274:28 | password | test_logging.rs:274:21:274:28 | password | This operation writes $@ to a log file. | test_logging.rs:274:21:274:28 | password | password | +| test_logging.rs:274:21:274:28 | password | test_logging.rs:274:21:274:28 | password | test_logging.rs:274:21:274:28 | password | This operation writes $@ to a log file. | test_logging.rs:274:21:274:28 | password | password | +| test_logging.rs:275:31:275:38 | &password | test_logging.rs:275:31:275:38 | password | test_logging.rs:275:31:275:38 | &password | This operation writes $@ to a log file. | test_logging.rs:275:31:275:38 | password | password | +| test_logging.rs:275:31:275:38 | &password | test_logging.rs:275:31:275:38 | password | test_logging.rs:275:31:275:38 | &password | This operation writes $@ to a log file. | test_logging.rs:275:31:275:38 | password | password | +| test_logging.rs:275:31:275:38 | ... as ... | test_logging.rs:275:31:275:38 | password | test_logging.rs:275:31:275:38 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:275:31:275:38 | password | password | +| test_logging.rs:275:31:275:38 | ... as ... | test_logging.rs:275:31:275:38 | password | test_logging.rs:275:31:275:38 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:275:31:275:38 | password | password | +| test_logging.rs:275:31:275:38 | password | test_logging.rs:275:31:275:38 | password | test_logging.rs:275:31:275:38 | password | This operation writes $@ to a log file. | test_logging.rs:275:31:275:38 | password | password | +| test_logging.rs:275:31:275:38 | password | test_logging.rs:275:31:275:38 | password | test_logging.rs:275:31:275:38 | password | This operation writes $@ to a log file. | test_logging.rs:275:31:275:38 | password | password | +| test_logging.rs:276:32:276:39 | &password | test_logging.rs:276:32:276:39 | password | test_logging.rs:276:32:276:39 | &password | This operation writes $@ to a log file. | test_logging.rs:276:32:276:39 | password | password | +| test_logging.rs:276:32:276:39 | &password | test_logging.rs:276:32:276:39 | password | test_logging.rs:276:32:276:39 | &password | This operation writes $@ to a log file. | test_logging.rs:276:32:276:39 | password | password | +| test_logging.rs:276:32:276:39 | password | test_logging.rs:276:32:276:39 | password | test_logging.rs:276:32:276:39 | password | This operation writes $@ to a log file. | test_logging.rs:276:32:276:39 | password | password | +| test_logging.rs:276:32:276:39 | password | test_logging.rs:276:32:276:39 | password | test_logging.rs:276:32:276:39 | password | This operation writes $@ to a log file. | test_logging.rs:276:32:276:39 | password | password | +| test_logging.rs:277:32:277:39 | &password | test_logging.rs:277:32:277:39 | password | test_logging.rs:277:32:277:39 | &password | This operation writes $@ to a log file. | test_logging.rs:277:32:277:39 | password | password | +| test_logging.rs:277:32:277:39 | &password | test_logging.rs:277:32:277:39 | password | test_logging.rs:277:32:277:39 | &password | This operation writes $@ to a log file. | test_logging.rs:277:32:277:39 | password | password | +| test_logging.rs:277:32:277:39 | password | test_logging.rs:277:32:277:39 | password | test_logging.rs:277:32:277:39 | password | This operation writes $@ to a log file. | test_logging.rs:277:32:277:39 | password | password | +| test_logging.rs:277:32:277:39 | password | test_logging.rs:277:32:277:39 | password | test_logging.rs:277:32:277:39 | password | This operation writes $@ to a log file. | test_logging.rs:277:32:277:39 | password | password | +| test_logging.rs:278:45:278:52 | &password | test_logging.rs:278:45:278:52 | password | test_logging.rs:278:45:278:52 | &password | This operation writes $@ to a log file. | test_logging.rs:278:45:278:52 | password | password | +| test_logging.rs:278:45:278:52 | &password | test_logging.rs:278:45:278:52 | password | test_logging.rs:278:45:278:52 | &password | This operation writes $@ to a log file. | test_logging.rs:278:45:278:52 | password | password | +| test_logging.rs:278:45:278:52 | ... as ... | test_logging.rs:278:45:278:52 | password | test_logging.rs:278:45:278:52 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:278:45:278:52 | password | password | +| test_logging.rs:278:45:278:52 | ... as ... | test_logging.rs:278:45:278:52 | password | test_logging.rs:278:45:278:52 | ... as ... | This operation writes $@ to a log file. | test_logging.rs:278:45:278:52 | password | password | +| test_logging.rs:278:45:278:52 | password | test_logging.rs:278:45:278:52 | password | test_logging.rs:278:45:278:52 | password | This operation writes $@ to a log file. | test_logging.rs:278:45:278:52 | password | password | +| test_logging.rs:278:45:278:52 | password | test_logging.rs:278:45:278:52 | password | test_logging.rs:278:45:278:52 | password | This operation writes $@ to a log file. | test_logging.rs:278:45:278:52 | password | password | +| test_logging.rs:279:46:279:53 | &password | test_logging.rs:279:46:279:53 | password | test_logging.rs:279:46:279:53 | &password | This operation writes $@ to a log file. | test_logging.rs:279:46:279:53 | password | password | +| test_logging.rs:279:46:279:53 | &password | test_logging.rs:279:46:279:53 | password | test_logging.rs:279:46:279:53 | &password | This operation writes $@ to a log file. | test_logging.rs:279:46:279:53 | password | password | +| test_logging.rs:279:46:279:53 | password | test_logging.rs:279:46:279:53 | password | test_logging.rs:279:46:279:53 | password | This operation writes $@ to a log file. | test_logging.rs:279:46:279:53 | password | password | +| test_logging.rs:279:46:279:53 | password | test_logging.rs:279:46:279:53 | password | test_logging.rs:279:46:279:53 | password | This operation writes $@ to a log file. | test_logging.rs:279:46:279:53 | password | password | +| test_logging.rs:280:46:280:53 | &password | test_logging.rs:280:46:280:53 | password | test_logging.rs:280:46:280:53 | &password | This operation writes $@ to a log file. | test_logging.rs:280:46:280:53 | password | password | +| test_logging.rs:280:46:280:53 | &password | test_logging.rs:280:46:280:53 | password | test_logging.rs:280:46:280:53 | &password | This operation writes $@ to a log file. | test_logging.rs:280:46:280:53 | password | password | +| test_logging.rs:280:46:280:53 | password | test_logging.rs:280:46:280:53 | password | test_logging.rs:280:46:280:53 | password | This operation writes $@ to a log file. | test_logging.rs:280:46:280:53 | password | password | +| test_logging.rs:280:46:280:53 | password | test_logging.rs:280:46:280:53 | password | test_logging.rs:280:46:280:53 | password | This operation writes $@ to a log file. | test_logging.rs:280:46:280:53 | password | password | +| test_logging.rs:282:76:282:83 | &password | test_logging.rs:282:76:282:83 | password | test_logging.rs:282:76:282:83 | &password | This operation writes $@ to a log file. | test_logging.rs:282:76:282:83 | password | password | +| test_logging.rs:282:76:282:83 | &password | test_logging.rs:282:76:282:83 | password | test_logging.rs:282:76:282:83 | &password | This operation writes $@ to a log file. | test_logging.rs:282:76:282:83 | password | password | +| test_logging.rs:282:76:282:83 | password | test_logging.rs:282:76:282:83 | password | test_logging.rs:282:76:282:83 | password | This operation writes $@ to a log file. | test_logging.rs:282:76:282:83 | password | password | +| test_logging.rs:282:76:282:83 | password | test_logging.rs:282:76:282:83 | password | test_logging.rs:282:76:282:83 | password | This operation writes $@ to a log file. | test_logging.rs:282:76:282:83 | password | password | +| test_logging.rs:284:54:284:61 | &password | test_logging.rs:284:54:284:61 | password | test_logging.rs:284:54:284:61 | &password | This operation writes $@ to a log file. | test_logging.rs:284:54:284:61 | password | password | +| test_logging.rs:284:54:284:61 | &password | test_logging.rs:284:54:284:61 | password | test_logging.rs:284:54:284:61 | &password | This operation writes $@ to a log file. | test_logging.rs:284:54:284:61 | password | password | +| test_logging.rs:284:54:284:61 | password | test_logging.rs:284:54:284:61 | password | test_logging.rs:284:54:284:61 | password | This operation writes $@ to a log file. | test_logging.rs:284:54:284:61 | password | password | +| test_logging.rs:284:54:284:61 | password | test_logging.rs:284:54:284:61 | password | test_logging.rs:284:54:284:61 | password | This operation writes $@ to a log file. | test_logging.rs:284:54:284:61 | password | password | edges | test_logging.rs:42:12:42:35 | MacroExpr | test_logging.rs:42:5:42:10 | ...::log | provenance | MaD:11 Sink:MaD:11 | | test_logging.rs:42:28:42:35 | password | test_logging.rs:42:12:42:35 | MacroExpr | provenance | | @@ -257,6 +385,218 @@ edges | test_logging.rs:252:23:252:48 | MacroExpr | test_logging.rs:252:23:252:48 | ...::format(...) | provenance | MaD:19 | | test_logging.rs:252:23:252:48 | { ... } | test_logging.rs:252:23:252:48 | ...::must_use(...) | provenance | MaD:20 | | test_logging.rs:252:41:252:48 | password | test_logging.rs:252:23:252:48 | MacroExpr | provenance | | +| test_logging.rs:257:21:257:44 | &... | test_logging.rs:257:21:257:44 | ... as ... | provenance | | +| test_logging.rs:257:21:257:44 | &... | test_logging.rs:257:21:257:44 | ... as ... | provenance | | +| test_logging.rs:257:21:257:44 | &... [&ref] | test_logging.rs:257:21:257:44 | ... as ... | provenance | | +| test_logging.rs:257:21:257:44 | &... [&ref] | test_logging.rs:257:21:257:44 | ... as ... | provenance | | +| test_logging.rs:257:21:257:44 | MacroExpr | test_logging.rs:257:21:257:44 | &... | provenance | | +| test_logging.rs:257:21:257:44 | MacroExpr | test_logging.rs:257:21:257:44 | &... | provenance | | +| test_logging.rs:257:21:257:44 | MacroExpr | test_logging.rs:257:21:257:44 | &... | provenance | Config | +| test_logging.rs:257:21:257:44 | MacroExpr | test_logging.rs:257:21:257:44 | &... | provenance | Config | +| test_logging.rs:257:21:257:44 | MacroExpr | test_logging.rs:257:21:257:44 | &... | provenance | Config | +| test_logging.rs:257:21:257:44 | MacroExpr | test_logging.rs:257:21:257:44 | &... | provenance | Config | +| test_logging.rs:257:21:257:44 | MacroExpr | test_logging.rs:257:21:257:44 | &... [&ref] | provenance | | +| test_logging.rs:257:21:257:44 | MacroExpr | test_logging.rs:257:21:257:44 | &... [&ref] | provenance | | +| test_logging.rs:257:37:257:44 | password | test_logging.rs:257:21:257:44 | FormatArgsExpr | provenance | | +| test_logging.rs:257:37:257:44 | password | test_logging.rs:257:21:257:44 | FormatArgsExpr | provenance | | +| test_logging.rs:257:37:257:44 | password | test_logging.rs:257:21:257:44 | MacroExpr | provenance | | +| test_logging.rs:257:37:257:44 | password | test_logging.rs:257:21:257:44 | MacroExpr | provenance | | +| test_logging.rs:257:37:257:44 | password | test_logging.rs:257:21:257:44 | MacroExpr | provenance | | +| test_logging.rs:257:37:257:44 | password | test_logging.rs:257:21:257:44 | MacroExpr | provenance | | +| test_logging.rs:258:21:258:44 | &... | test_logging.rs:258:21:258:44 | ... as ... | provenance | | +| test_logging.rs:258:21:258:44 | &... | test_logging.rs:258:21:258:44 | ... as ... | provenance | | +| test_logging.rs:258:21:258:44 | &... [&ref] | test_logging.rs:258:21:258:44 | ... as ... | provenance | | +| test_logging.rs:258:21:258:44 | &... [&ref] | test_logging.rs:258:21:258:44 | ... as ... | provenance | | +| test_logging.rs:258:21:258:44 | MacroExpr | test_logging.rs:258:21:258:44 | &... | provenance | | +| test_logging.rs:258:21:258:44 | MacroExpr | test_logging.rs:258:21:258:44 | &... | provenance | | +| test_logging.rs:258:21:258:44 | MacroExpr | test_logging.rs:258:21:258:44 | &... | provenance | Config | +| test_logging.rs:258:21:258:44 | MacroExpr | test_logging.rs:258:21:258:44 | &... | provenance | Config | +| test_logging.rs:258:21:258:44 | MacroExpr | test_logging.rs:258:21:258:44 | &... | provenance | Config | +| test_logging.rs:258:21:258:44 | MacroExpr | test_logging.rs:258:21:258:44 | &... | provenance | Config | +| test_logging.rs:258:21:258:44 | MacroExpr | test_logging.rs:258:21:258:44 | &... [&ref] | provenance | | +| test_logging.rs:258:21:258:44 | MacroExpr | test_logging.rs:258:21:258:44 | &... [&ref] | provenance | | +| test_logging.rs:258:37:258:44 | password | test_logging.rs:258:21:258:44 | FormatArgsExpr | provenance | | +| test_logging.rs:258:37:258:44 | password | test_logging.rs:258:21:258:44 | FormatArgsExpr | provenance | | +| test_logging.rs:258:37:258:44 | password | test_logging.rs:258:21:258:44 | MacroExpr | provenance | | +| test_logging.rs:258:37:258:44 | password | test_logging.rs:258:21:258:44 | MacroExpr | provenance | | +| test_logging.rs:258:37:258:44 | password | test_logging.rs:258:21:258:44 | MacroExpr | provenance | | +| test_logging.rs:258:37:258:44 | password | test_logging.rs:258:21:258:44 | MacroExpr | provenance | | +| test_logging.rs:259:20:259:43 | &... | test_logging.rs:259:20:259:43 | ... as ... | provenance | | +| test_logging.rs:259:20:259:43 | &... | test_logging.rs:259:20:259:43 | ... as ... | provenance | | +| test_logging.rs:259:20:259:43 | &... [&ref] | test_logging.rs:259:20:259:43 | ... as ... | provenance | | +| test_logging.rs:259:20:259:43 | &... [&ref] | test_logging.rs:259:20:259:43 | ... as ... | provenance | | +| test_logging.rs:259:20:259:43 | MacroExpr | test_logging.rs:259:20:259:43 | &... | provenance | | +| test_logging.rs:259:20:259:43 | MacroExpr | test_logging.rs:259:20:259:43 | &... | provenance | | +| test_logging.rs:259:20:259:43 | MacroExpr | test_logging.rs:259:20:259:43 | &... | provenance | Config | +| test_logging.rs:259:20:259:43 | MacroExpr | test_logging.rs:259:20:259:43 | &... | provenance | Config | +| test_logging.rs:259:20:259:43 | MacroExpr | test_logging.rs:259:20:259:43 | &... | provenance | Config | +| test_logging.rs:259:20:259:43 | MacroExpr | test_logging.rs:259:20:259:43 | &... | provenance | Config | +| test_logging.rs:259:20:259:43 | MacroExpr | test_logging.rs:259:20:259:43 | &... [&ref] | provenance | | +| test_logging.rs:259:20:259:43 | MacroExpr | test_logging.rs:259:20:259:43 | &... [&ref] | provenance | | +| test_logging.rs:259:36:259:43 | password | test_logging.rs:259:20:259:43 | FormatArgsExpr | provenance | | +| test_logging.rs:259:36:259:43 | password | test_logging.rs:259:20:259:43 | FormatArgsExpr | provenance | | +| test_logging.rs:259:36:259:43 | password | test_logging.rs:259:20:259:43 | MacroExpr | provenance | | +| test_logging.rs:259:36:259:43 | password | test_logging.rs:259:20:259:43 | MacroExpr | provenance | | +| test_logging.rs:259:36:259:43 | password | test_logging.rs:259:20:259:43 | MacroExpr | provenance | | +| test_logging.rs:259:36:259:43 | password | test_logging.rs:259:20:259:43 | MacroExpr | provenance | | +| test_logging.rs:260:21:260:44 | &... | test_logging.rs:260:21:260:44 | ... as ... | provenance | | +| test_logging.rs:260:21:260:44 | &... | test_logging.rs:260:21:260:44 | ... as ... | provenance | | +| test_logging.rs:260:21:260:44 | &... [&ref] | test_logging.rs:260:21:260:44 | ... as ... | provenance | | +| test_logging.rs:260:21:260:44 | &... [&ref] | test_logging.rs:260:21:260:44 | ... as ... | provenance | | +| test_logging.rs:260:21:260:44 | MacroExpr | test_logging.rs:260:21:260:44 | &... | provenance | | +| test_logging.rs:260:21:260:44 | MacroExpr | test_logging.rs:260:21:260:44 | &... | provenance | | +| test_logging.rs:260:21:260:44 | MacroExpr | test_logging.rs:260:21:260:44 | &... | provenance | Config | +| test_logging.rs:260:21:260:44 | MacroExpr | test_logging.rs:260:21:260:44 | &... | provenance | Config | +| test_logging.rs:260:21:260:44 | MacroExpr | test_logging.rs:260:21:260:44 | &... | provenance | Config | +| test_logging.rs:260:21:260:44 | MacroExpr | test_logging.rs:260:21:260:44 | &... | provenance | Config | +| test_logging.rs:260:21:260:44 | MacroExpr | test_logging.rs:260:21:260:44 | &... [&ref] | provenance | | +| test_logging.rs:260:21:260:44 | MacroExpr | test_logging.rs:260:21:260:44 | &... [&ref] | provenance | | +| test_logging.rs:260:37:260:44 | password | test_logging.rs:260:21:260:44 | FormatArgsExpr | provenance | | +| test_logging.rs:260:37:260:44 | password | test_logging.rs:260:21:260:44 | FormatArgsExpr | provenance | | +| test_logging.rs:260:37:260:44 | password | test_logging.rs:260:21:260:44 | MacroExpr | provenance | | +| test_logging.rs:260:37:260:44 | password | test_logging.rs:260:21:260:44 | MacroExpr | provenance | | +| test_logging.rs:260:37:260:44 | password | test_logging.rs:260:21:260:44 | MacroExpr | provenance | | +| test_logging.rs:260:37:260:44 | password | test_logging.rs:260:21:260:44 | MacroExpr | provenance | | +| test_logging.rs:261:20:261:43 | &... | test_logging.rs:261:20:261:43 | ... as ... | provenance | | +| test_logging.rs:261:20:261:43 | &... | test_logging.rs:261:20:261:43 | ... as ... | provenance | | +| test_logging.rs:261:20:261:43 | &... [&ref] | test_logging.rs:261:20:261:43 | ... as ... | provenance | | +| test_logging.rs:261:20:261:43 | &... [&ref] | test_logging.rs:261:20:261:43 | ... as ... | provenance | | +| test_logging.rs:261:20:261:43 | MacroExpr | test_logging.rs:261:20:261:43 | &... | provenance | | +| test_logging.rs:261:20:261:43 | MacroExpr | test_logging.rs:261:20:261:43 | &... | provenance | | +| test_logging.rs:261:20:261:43 | MacroExpr | test_logging.rs:261:20:261:43 | &... | provenance | Config | +| test_logging.rs:261:20:261:43 | MacroExpr | test_logging.rs:261:20:261:43 | &... | provenance | Config | +| test_logging.rs:261:20:261:43 | MacroExpr | test_logging.rs:261:20:261:43 | &... | provenance | Config | +| test_logging.rs:261:20:261:43 | MacroExpr | test_logging.rs:261:20:261:43 | &... | provenance | Config | +| test_logging.rs:261:20:261:43 | MacroExpr | test_logging.rs:261:20:261:43 | &... [&ref] | provenance | | +| test_logging.rs:261:20:261:43 | MacroExpr | test_logging.rs:261:20:261:43 | &... [&ref] | provenance | | +| test_logging.rs:261:36:261:43 | password | test_logging.rs:261:20:261:43 | FormatArgsExpr | provenance | | +| test_logging.rs:261:36:261:43 | password | test_logging.rs:261:20:261:43 | FormatArgsExpr | provenance | | +| test_logging.rs:261:36:261:43 | password | test_logging.rs:261:20:261:43 | MacroExpr | provenance | | +| test_logging.rs:261:36:261:43 | password | test_logging.rs:261:20:261:43 | MacroExpr | provenance | | +| test_logging.rs:261:36:261:43 | password | test_logging.rs:261:20:261:43 | MacroExpr | provenance | | +| test_logging.rs:261:36:261:43 | password | test_logging.rs:261:20:261:43 | MacroExpr | provenance | | +| test_logging.rs:264:66:264:73 | &password | test_logging.rs:264:66:264:73 | ... as ... | provenance | | +| test_logging.rs:264:66:264:73 | &password | test_logging.rs:264:66:264:73 | ... as ... | provenance | | +| test_logging.rs:264:66:264:73 | &password [&ref] | test_logging.rs:264:66:264:73 | ... as ... | provenance | | +| test_logging.rs:264:66:264:73 | &password [&ref] | test_logging.rs:264:66:264:73 | ... as ... | provenance | | +| test_logging.rs:264:66:264:73 | password | test_logging.rs:264:66:264:73 | &password | provenance | | +| test_logging.rs:264:66:264:73 | password | test_logging.rs:264:66:264:73 | &password | provenance | | +| test_logging.rs:264:66:264:73 | password | test_logging.rs:264:66:264:73 | &password | provenance | Config | +| test_logging.rs:264:66:264:73 | password | test_logging.rs:264:66:264:73 | &password | provenance | Config | +| test_logging.rs:264:66:264:73 | password | test_logging.rs:264:66:264:73 | &password | provenance | Config | +| test_logging.rs:264:66:264:73 | password | test_logging.rs:264:66:264:73 | &password | provenance | Config | +| test_logging.rs:264:66:264:73 | password | test_logging.rs:264:66:264:73 | &password [&ref] | provenance | | +| test_logging.rs:264:66:264:73 | password | test_logging.rs:264:66:264:73 | &password [&ref] | provenance | | +| test_logging.rs:267:43:267:64 | &... | test_logging.rs:267:43:267:64 | ... as ... | provenance | | +| test_logging.rs:267:43:267:64 | &... | test_logging.rs:267:43:267:64 | ... as ... | provenance | | +| test_logging.rs:267:43:267:64 | &... [&ref] | test_logging.rs:267:43:267:64 | ... as ... | provenance | | +| test_logging.rs:267:43:267:64 | &... [&ref] | test_logging.rs:267:43:267:64 | ... as ... | provenance | | +| test_logging.rs:267:43:267:64 | MacroExpr | test_logging.rs:267:43:267:64 | &... | provenance | | +| test_logging.rs:267:43:267:64 | MacroExpr | test_logging.rs:267:43:267:64 | &... | provenance | | +| test_logging.rs:267:43:267:64 | MacroExpr | test_logging.rs:267:43:267:64 | &... | provenance | Config | +| test_logging.rs:267:43:267:64 | MacroExpr | test_logging.rs:267:43:267:64 | &... | provenance | Config | +| test_logging.rs:267:43:267:64 | MacroExpr | test_logging.rs:267:43:267:64 | &... | provenance | Config | +| test_logging.rs:267:43:267:64 | MacroExpr | test_logging.rs:267:43:267:64 | &... | provenance | Config | +| test_logging.rs:267:43:267:64 | MacroExpr | test_logging.rs:267:43:267:64 | &... [&ref] | provenance | | +| test_logging.rs:267:43:267:64 | MacroExpr | test_logging.rs:267:43:267:64 | &... [&ref] | provenance | | +| test_logging.rs:267:57:267:64 | password | test_logging.rs:267:43:267:64 | FormatArgsExpr | provenance | | +| test_logging.rs:267:57:267:64 | password | test_logging.rs:267:43:267:64 | FormatArgsExpr | provenance | | +| test_logging.rs:267:57:267:64 | password | test_logging.rs:267:43:267:64 | MacroExpr | provenance | | +| test_logging.rs:267:57:267:64 | password | test_logging.rs:267:43:267:64 | MacroExpr | provenance | | +| test_logging.rs:267:57:267:64 | password | test_logging.rs:267:43:267:64 | MacroExpr | provenance | | +| test_logging.rs:267:57:267:64 | password | test_logging.rs:267:43:267:64 | MacroExpr | provenance | | +| test_logging.rs:268:70:268:77 | &password | test_logging.rs:268:70:268:77 | ... as ... | provenance | | +| test_logging.rs:268:70:268:77 | &password | test_logging.rs:268:70:268:77 | ... as ... | provenance | | +| test_logging.rs:268:70:268:77 | &password [&ref] | test_logging.rs:268:70:268:77 | ... as ... | provenance | | +| test_logging.rs:268:70:268:77 | &password [&ref] | test_logging.rs:268:70:268:77 | ... as ... | provenance | | +| test_logging.rs:268:70:268:77 | password | test_logging.rs:268:70:268:77 | &password | provenance | | +| test_logging.rs:268:70:268:77 | password | test_logging.rs:268:70:268:77 | &password | provenance | | +| test_logging.rs:268:70:268:77 | password | test_logging.rs:268:70:268:77 | &password | provenance | Config | +| test_logging.rs:268:70:268:77 | password | test_logging.rs:268:70:268:77 | &password | provenance | Config | +| test_logging.rs:268:70:268:77 | password | test_logging.rs:268:70:268:77 | &password | provenance | Config | +| test_logging.rs:268:70:268:77 | password | test_logging.rs:268:70:268:77 | &password | provenance | Config | +| test_logging.rs:268:70:268:77 | password | test_logging.rs:268:70:268:77 | &password [&ref] | provenance | | +| test_logging.rs:268:70:268:77 | password | test_logging.rs:268:70:268:77 | &password [&ref] | provenance | | +| test_logging.rs:269:73:269:80 | &password | test_logging.rs:269:73:269:80 | ... as ... | provenance | | +| test_logging.rs:269:73:269:80 | &password | test_logging.rs:269:73:269:80 | ... as ... | provenance | | +| test_logging.rs:269:73:269:80 | &password [&ref] | test_logging.rs:269:73:269:80 | ... as ... | provenance | | +| test_logging.rs:269:73:269:80 | &password [&ref] | test_logging.rs:269:73:269:80 | ... as ... | provenance | | +| test_logging.rs:269:73:269:80 | password | test_logging.rs:269:73:269:80 | &password | provenance | | +| test_logging.rs:269:73:269:80 | password | test_logging.rs:269:73:269:80 | &password | provenance | | +| test_logging.rs:269:73:269:80 | password | test_logging.rs:269:73:269:80 | &password | provenance | Config | +| test_logging.rs:269:73:269:80 | password | test_logging.rs:269:73:269:80 | &password | provenance | Config | +| test_logging.rs:269:73:269:80 | password | test_logging.rs:269:73:269:80 | &password | provenance | Config | +| test_logging.rs:269:73:269:80 | password | test_logging.rs:269:73:269:80 | &password | provenance | Config | +| test_logging.rs:269:73:269:80 | password | test_logging.rs:269:73:269:80 | &password [&ref] | provenance | | +| test_logging.rs:269:73:269:80 | password | test_logging.rs:269:73:269:80 | &password [&ref] | provenance | | +| test_logging.rs:272:20:272:27 | &password | test_logging.rs:272:20:272:27 | ... as ... | provenance | | +| test_logging.rs:272:20:272:27 | &password | test_logging.rs:272:20:272:27 | ... as ... | provenance | | +| test_logging.rs:272:20:272:27 | &password [&ref] | test_logging.rs:272:20:272:27 | ... as ... | provenance | | +| test_logging.rs:272:20:272:27 | &password [&ref] | test_logging.rs:272:20:272:27 | ... as ... | provenance | | +| test_logging.rs:272:20:272:27 | password | test_logging.rs:272:20:272:27 | &password | provenance | | +| test_logging.rs:272:20:272:27 | password | test_logging.rs:272:20:272:27 | &password | provenance | | +| test_logging.rs:272:20:272:27 | password | test_logging.rs:272:20:272:27 | &password | provenance | Config | +| test_logging.rs:272:20:272:27 | password | test_logging.rs:272:20:272:27 | &password | provenance | Config | +| test_logging.rs:272:20:272:27 | password | test_logging.rs:272:20:272:27 | &password | provenance | Config | +| test_logging.rs:272:20:272:27 | password | test_logging.rs:272:20:272:27 | &password | provenance | Config | +| test_logging.rs:272:20:272:27 | password | test_logging.rs:272:20:272:27 | &password [&ref] | provenance | | +| test_logging.rs:272:20:272:27 | password | test_logging.rs:272:20:272:27 | &password [&ref] | provenance | | +| test_logging.rs:273:21:273:28 | password | test_logging.rs:273:21:273:28 | &password | provenance | | +| test_logging.rs:273:21:273:28 | password | test_logging.rs:273:21:273:28 | &password | provenance | | +| test_logging.rs:273:21:273:28 | password | test_logging.rs:273:21:273:28 | &password | provenance | Config | +| test_logging.rs:273:21:273:28 | password | test_logging.rs:273:21:273:28 | &password | provenance | Config | +| test_logging.rs:274:21:274:28 | password | test_logging.rs:274:21:274:28 | &password | provenance | | +| test_logging.rs:274:21:274:28 | password | test_logging.rs:274:21:274:28 | &password | provenance | | +| test_logging.rs:274:21:274:28 | password | test_logging.rs:274:21:274:28 | &password | provenance | Config | +| test_logging.rs:274:21:274:28 | password | test_logging.rs:274:21:274:28 | &password | provenance | Config | +| test_logging.rs:275:31:275:38 | &password | test_logging.rs:275:31:275:38 | ... as ... | provenance | | +| test_logging.rs:275:31:275:38 | &password | test_logging.rs:275:31:275:38 | ... as ... | provenance | | +| test_logging.rs:275:31:275:38 | &password [&ref] | test_logging.rs:275:31:275:38 | ... as ... | provenance | | +| test_logging.rs:275:31:275:38 | &password [&ref] | test_logging.rs:275:31:275:38 | ... as ... | provenance | | +| test_logging.rs:275:31:275:38 | password | test_logging.rs:275:31:275:38 | &password | provenance | | +| test_logging.rs:275:31:275:38 | password | test_logging.rs:275:31:275:38 | &password | provenance | | +| test_logging.rs:275:31:275:38 | password | test_logging.rs:275:31:275:38 | &password | provenance | Config | +| test_logging.rs:275:31:275:38 | password | test_logging.rs:275:31:275:38 | &password | provenance | Config | +| test_logging.rs:275:31:275:38 | password | test_logging.rs:275:31:275:38 | &password | provenance | Config | +| test_logging.rs:275:31:275:38 | password | test_logging.rs:275:31:275:38 | &password | provenance | Config | +| test_logging.rs:275:31:275:38 | password | test_logging.rs:275:31:275:38 | &password [&ref] | provenance | | +| test_logging.rs:275:31:275:38 | password | test_logging.rs:275:31:275:38 | &password [&ref] | provenance | | +| test_logging.rs:276:32:276:39 | password | test_logging.rs:276:32:276:39 | &password | provenance | | +| test_logging.rs:276:32:276:39 | password | test_logging.rs:276:32:276:39 | &password | provenance | | +| test_logging.rs:276:32:276:39 | password | test_logging.rs:276:32:276:39 | &password | provenance | Config | +| test_logging.rs:276:32:276:39 | password | test_logging.rs:276:32:276:39 | &password | provenance | Config | +| test_logging.rs:277:32:277:39 | password | test_logging.rs:277:32:277:39 | &password | provenance | | +| test_logging.rs:277:32:277:39 | password | test_logging.rs:277:32:277:39 | &password | provenance | | +| test_logging.rs:277:32:277:39 | password | test_logging.rs:277:32:277:39 | &password | provenance | Config | +| test_logging.rs:277:32:277:39 | password | test_logging.rs:277:32:277:39 | &password | provenance | Config | +| test_logging.rs:278:45:278:52 | &password | test_logging.rs:278:45:278:52 | ... as ... | provenance | | +| test_logging.rs:278:45:278:52 | &password | test_logging.rs:278:45:278:52 | ... as ... | provenance | | +| test_logging.rs:278:45:278:52 | &password [&ref] | test_logging.rs:278:45:278:52 | ... as ... | provenance | | +| test_logging.rs:278:45:278:52 | &password [&ref] | test_logging.rs:278:45:278:52 | ... as ... | provenance | | +| test_logging.rs:278:45:278:52 | password | test_logging.rs:278:45:278:52 | &password | provenance | | +| test_logging.rs:278:45:278:52 | password | test_logging.rs:278:45:278:52 | &password | provenance | | +| test_logging.rs:278:45:278:52 | password | test_logging.rs:278:45:278:52 | &password | provenance | Config | +| test_logging.rs:278:45:278:52 | password | test_logging.rs:278:45:278:52 | &password | provenance | Config | +| test_logging.rs:278:45:278:52 | password | test_logging.rs:278:45:278:52 | &password | provenance | Config | +| test_logging.rs:278:45:278:52 | password | test_logging.rs:278:45:278:52 | &password | provenance | Config | +| test_logging.rs:278:45:278:52 | password | test_logging.rs:278:45:278:52 | &password [&ref] | provenance | | +| test_logging.rs:278:45:278:52 | password | test_logging.rs:278:45:278:52 | &password [&ref] | provenance | | +| test_logging.rs:279:46:279:53 | password | test_logging.rs:279:46:279:53 | &password | provenance | | +| test_logging.rs:279:46:279:53 | password | test_logging.rs:279:46:279:53 | &password | provenance | | +| test_logging.rs:279:46:279:53 | password | test_logging.rs:279:46:279:53 | &password | provenance | Config | +| test_logging.rs:279:46:279:53 | password | test_logging.rs:279:46:279:53 | &password | provenance | Config | +| test_logging.rs:280:46:280:53 | password | test_logging.rs:280:46:280:53 | &password | provenance | | +| test_logging.rs:280:46:280:53 | password | test_logging.rs:280:46:280:53 | &password | provenance | | +| test_logging.rs:280:46:280:53 | password | test_logging.rs:280:46:280:53 | &password | provenance | Config | +| test_logging.rs:280:46:280:53 | password | test_logging.rs:280:46:280:53 | &password | provenance | Config | +| test_logging.rs:282:76:282:83 | password | test_logging.rs:282:76:282:83 | &password | provenance | | +| test_logging.rs:282:76:282:83 | password | test_logging.rs:282:76:282:83 | &password | provenance | | +| test_logging.rs:282:76:282:83 | password | test_logging.rs:282:76:282:83 | &password | provenance | Config | +| test_logging.rs:282:76:282:83 | password | test_logging.rs:282:76:282:83 | &password | provenance | Config | +| test_logging.rs:284:54:284:61 | password | test_logging.rs:284:54:284:61 | &password | provenance | | +| test_logging.rs:284:54:284:61 | password | test_logging.rs:284:54:284:61 | &password | provenance | | +| test_logging.rs:284:54:284:61 | password | test_logging.rs:284:54:284:61 | &password | provenance | Config | +| test_logging.rs:284:54:284:61 | password | test_logging.rs:284:54:284:61 | &password | provenance | Config | models | 1 | Sink: ::log_expect; Argument[0]; log-injection | | 2 | Sink: ::expect; Argument[0]; log-injection | @@ -525,4 +865,232 @@ nodes | test_logging.rs:252:23:252:48 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:252:23:252:48 | { ... } | semmle.label | { ... } | | test_logging.rs:252:41:252:48 | password | semmle.label | password | +| test_logging.rs:257:21:257:44 | &... | semmle.label | &... | +| test_logging.rs:257:21:257:44 | &... | semmle.label | &... | +| test_logging.rs:257:21:257:44 | &... | semmle.label | &... | +| test_logging.rs:257:21:257:44 | &... | semmle.label | &... | +| test_logging.rs:257:21:257:44 | &... [&ref] | semmle.label | &... [&ref] | +| test_logging.rs:257:21:257:44 | &... [&ref] | semmle.label | &... [&ref] | +| test_logging.rs:257:21:257:44 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:257:21:257:44 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:257:21:257:44 | FormatArgsExpr | semmle.label | FormatArgsExpr | +| test_logging.rs:257:21:257:44 | FormatArgsExpr | semmle.label | FormatArgsExpr | +| test_logging.rs:257:21:257:44 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:257:21:257:44 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:257:21:257:44 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:257:21:257:44 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:257:37:257:44 | password | semmle.label | password | +| test_logging.rs:257:37:257:44 | password | semmle.label | password | +| test_logging.rs:257:37:257:44 | password | semmle.label | password | +| test_logging.rs:257:37:257:44 | password | semmle.label | password | +| test_logging.rs:258:21:258:44 | &... | semmle.label | &... | +| test_logging.rs:258:21:258:44 | &... | semmle.label | &... | +| test_logging.rs:258:21:258:44 | &... | semmle.label | &... | +| test_logging.rs:258:21:258:44 | &... | semmle.label | &... | +| test_logging.rs:258:21:258:44 | &... [&ref] | semmle.label | &... [&ref] | +| test_logging.rs:258:21:258:44 | &... [&ref] | semmle.label | &... [&ref] | +| test_logging.rs:258:21:258:44 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:258:21:258:44 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:258:21:258:44 | FormatArgsExpr | semmle.label | FormatArgsExpr | +| test_logging.rs:258:21:258:44 | FormatArgsExpr | semmle.label | FormatArgsExpr | +| test_logging.rs:258:21:258:44 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:258:21:258:44 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:258:21:258:44 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:258:21:258:44 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:258:37:258:44 | password | semmle.label | password | +| test_logging.rs:258:37:258:44 | password | semmle.label | password | +| test_logging.rs:258:37:258:44 | password | semmle.label | password | +| test_logging.rs:258:37:258:44 | password | semmle.label | password | +| test_logging.rs:259:20:259:43 | &... | semmle.label | &... | +| test_logging.rs:259:20:259:43 | &... | semmle.label | &... | +| test_logging.rs:259:20:259:43 | &... | semmle.label | &... | +| test_logging.rs:259:20:259:43 | &... | semmle.label | &... | +| test_logging.rs:259:20:259:43 | &... [&ref] | semmle.label | &... [&ref] | +| test_logging.rs:259:20:259:43 | &... [&ref] | semmle.label | &... [&ref] | +| test_logging.rs:259:20:259:43 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:259:20:259:43 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:259:20:259:43 | FormatArgsExpr | semmle.label | FormatArgsExpr | +| test_logging.rs:259:20:259:43 | FormatArgsExpr | semmle.label | FormatArgsExpr | +| test_logging.rs:259:20:259:43 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:259:20:259:43 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:259:20:259:43 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:259:20:259:43 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:259:36:259:43 | password | semmle.label | password | +| test_logging.rs:259:36:259:43 | password | semmle.label | password | +| test_logging.rs:259:36:259:43 | password | semmle.label | password | +| test_logging.rs:259:36:259:43 | password | semmle.label | password | +| test_logging.rs:260:21:260:44 | &... | semmle.label | &... | +| test_logging.rs:260:21:260:44 | &... | semmle.label | &... | +| test_logging.rs:260:21:260:44 | &... | semmle.label | &... | +| test_logging.rs:260:21:260:44 | &... | semmle.label | &... | +| test_logging.rs:260:21:260:44 | &... [&ref] | semmle.label | &... [&ref] | +| test_logging.rs:260:21:260:44 | &... [&ref] | semmle.label | &... [&ref] | +| test_logging.rs:260:21:260:44 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:260:21:260:44 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:260:21:260:44 | FormatArgsExpr | semmle.label | FormatArgsExpr | +| test_logging.rs:260:21:260:44 | FormatArgsExpr | semmle.label | FormatArgsExpr | +| test_logging.rs:260:21:260:44 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:260:21:260:44 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:260:21:260:44 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:260:21:260:44 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:260:37:260:44 | password | semmle.label | password | +| test_logging.rs:260:37:260:44 | password | semmle.label | password | +| test_logging.rs:260:37:260:44 | password | semmle.label | password | +| test_logging.rs:260:37:260:44 | password | semmle.label | password | +| test_logging.rs:261:20:261:43 | &... | semmle.label | &... | +| test_logging.rs:261:20:261:43 | &... | semmle.label | &... | +| test_logging.rs:261:20:261:43 | &... | semmle.label | &... | +| test_logging.rs:261:20:261:43 | &... | semmle.label | &... | +| test_logging.rs:261:20:261:43 | &... [&ref] | semmle.label | &... [&ref] | +| test_logging.rs:261:20:261:43 | &... [&ref] | semmle.label | &... [&ref] | +| test_logging.rs:261:20:261:43 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:261:20:261:43 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:261:20:261:43 | FormatArgsExpr | semmle.label | FormatArgsExpr | +| test_logging.rs:261:20:261:43 | FormatArgsExpr | semmle.label | FormatArgsExpr | +| test_logging.rs:261:20:261:43 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:261:20:261:43 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:261:20:261:43 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:261:20:261:43 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:261:36:261:43 | password | semmle.label | password | +| test_logging.rs:261:36:261:43 | password | semmle.label | password | +| test_logging.rs:261:36:261:43 | password | semmle.label | password | +| test_logging.rs:261:36:261:43 | password | semmle.label | password | +| test_logging.rs:264:66:264:73 | &password | semmle.label | &password | +| test_logging.rs:264:66:264:73 | &password | semmle.label | &password | +| test_logging.rs:264:66:264:73 | &password | semmle.label | &password | +| test_logging.rs:264:66:264:73 | &password | semmle.label | &password | +| test_logging.rs:264:66:264:73 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:264:66:264:73 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:264:66:264:73 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:264:66:264:73 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:264:66:264:73 | password | semmle.label | password | +| test_logging.rs:264:66:264:73 | password | semmle.label | password | +| test_logging.rs:264:66:264:73 | password | semmle.label | password | +| test_logging.rs:264:66:264:73 | password | semmle.label | password | +| test_logging.rs:267:43:267:64 | &... | semmle.label | &... | +| test_logging.rs:267:43:267:64 | &... | semmle.label | &... | +| test_logging.rs:267:43:267:64 | &... | semmle.label | &... | +| test_logging.rs:267:43:267:64 | &... | semmle.label | &... | +| test_logging.rs:267:43:267:64 | &... [&ref] | semmle.label | &... [&ref] | +| test_logging.rs:267:43:267:64 | &... [&ref] | semmle.label | &... [&ref] | +| test_logging.rs:267:43:267:64 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:267:43:267:64 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:267:43:267:64 | FormatArgsExpr | semmle.label | FormatArgsExpr | +| test_logging.rs:267:43:267:64 | FormatArgsExpr | semmle.label | FormatArgsExpr | +| test_logging.rs:267:43:267:64 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:267:43:267:64 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:267:43:267:64 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:267:43:267:64 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:267:57:267:64 | password | semmle.label | password | +| test_logging.rs:267:57:267:64 | password | semmle.label | password | +| test_logging.rs:267:57:267:64 | password | semmle.label | password | +| test_logging.rs:267:57:267:64 | password | semmle.label | password | +| test_logging.rs:268:70:268:77 | &password | semmle.label | &password | +| test_logging.rs:268:70:268:77 | &password | semmle.label | &password | +| test_logging.rs:268:70:268:77 | &password | semmle.label | &password | +| test_logging.rs:268:70:268:77 | &password | semmle.label | &password | +| test_logging.rs:268:70:268:77 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:268:70:268:77 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:268:70:268:77 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:268:70:268:77 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:268:70:268:77 | password | semmle.label | password | +| test_logging.rs:268:70:268:77 | password | semmle.label | password | +| test_logging.rs:268:70:268:77 | password | semmle.label | password | +| test_logging.rs:268:70:268:77 | password | semmle.label | password | +| test_logging.rs:269:73:269:80 | &password | semmle.label | &password | +| test_logging.rs:269:73:269:80 | &password | semmle.label | &password | +| test_logging.rs:269:73:269:80 | &password | semmle.label | &password | +| test_logging.rs:269:73:269:80 | &password | semmle.label | &password | +| test_logging.rs:269:73:269:80 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:269:73:269:80 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:269:73:269:80 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:269:73:269:80 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:269:73:269:80 | password | semmle.label | password | +| test_logging.rs:269:73:269:80 | password | semmle.label | password | +| test_logging.rs:269:73:269:80 | password | semmle.label | password | +| test_logging.rs:269:73:269:80 | password | semmle.label | password | +| test_logging.rs:272:20:272:27 | &password | semmle.label | &password | +| test_logging.rs:272:20:272:27 | &password | semmle.label | &password | +| test_logging.rs:272:20:272:27 | &password | semmle.label | &password | +| test_logging.rs:272:20:272:27 | &password | semmle.label | &password | +| test_logging.rs:272:20:272:27 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:272:20:272:27 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:272:20:272:27 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:272:20:272:27 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:272:20:272:27 | password | semmle.label | password | +| test_logging.rs:272:20:272:27 | password | semmle.label | password | +| test_logging.rs:272:20:272:27 | password | semmle.label | password | +| test_logging.rs:272:20:272:27 | password | semmle.label | password | +| test_logging.rs:273:21:273:28 | &password | semmle.label | &password | +| test_logging.rs:273:21:273:28 | &password | semmle.label | &password | +| test_logging.rs:273:21:273:28 | password | semmle.label | password | +| test_logging.rs:273:21:273:28 | password | semmle.label | password | +| test_logging.rs:273:21:273:28 | password | semmle.label | password | +| test_logging.rs:273:21:273:28 | password | semmle.label | password | +| test_logging.rs:274:21:274:28 | &password | semmle.label | &password | +| test_logging.rs:274:21:274:28 | &password | semmle.label | &password | +| test_logging.rs:274:21:274:28 | password | semmle.label | password | +| test_logging.rs:274:21:274:28 | password | semmle.label | password | +| test_logging.rs:274:21:274:28 | password | semmle.label | password | +| test_logging.rs:274:21:274:28 | password | semmle.label | password | +| test_logging.rs:275:31:275:38 | &password | semmle.label | &password | +| test_logging.rs:275:31:275:38 | &password | semmle.label | &password | +| test_logging.rs:275:31:275:38 | &password | semmle.label | &password | +| test_logging.rs:275:31:275:38 | &password | semmle.label | &password | +| test_logging.rs:275:31:275:38 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:275:31:275:38 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:275:31:275:38 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:275:31:275:38 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:275:31:275:38 | password | semmle.label | password | +| test_logging.rs:275:31:275:38 | password | semmle.label | password | +| test_logging.rs:275:31:275:38 | password | semmle.label | password | +| test_logging.rs:275:31:275:38 | password | semmle.label | password | +| test_logging.rs:276:32:276:39 | &password | semmle.label | &password | +| test_logging.rs:276:32:276:39 | &password | semmle.label | &password | +| test_logging.rs:276:32:276:39 | password | semmle.label | password | +| test_logging.rs:276:32:276:39 | password | semmle.label | password | +| test_logging.rs:276:32:276:39 | password | semmle.label | password | +| test_logging.rs:276:32:276:39 | password | semmle.label | password | +| test_logging.rs:277:32:277:39 | &password | semmle.label | &password | +| test_logging.rs:277:32:277:39 | &password | semmle.label | &password | +| test_logging.rs:277:32:277:39 | password | semmle.label | password | +| test_logging.rs:277:32:277:39 | password | semmle.label | password | +| test_logging.rs:277:32:277:39 | password | semmle.label | password | +| test_logging.rs:277:32:277:39 | password | semmle.label | password | +| test_logging.rs:278:45:278:52 | &password | semmle.label | &password | +| test_logging.rs:278:45:278:52 | &password | semmle.label | &password | +| test_logging.rs:278:45:278:52 | &password | semmle.label | &password | +| test_logging.rs:278:45:278:52 | &password | semmle.label | &password | +| test_logging.rs:278:45:278:52 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:278:45:278:52 | &password [&ref] | semmle.label | &password [&ref] | +| test_logging.rs:278:45:278:52 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:278:45:278:52 | ... as ... | semmle.label | ... as ... | +| test_logging.rs:278:45:278:52 | password | semmle.label | password | +| test_logging.rs:278:45:278:52 | password | semmle.label | password | +| test_logging.rs:278:45:278:52 | password | semmle.label | password | +| test_logging.rs:278:45:278:52 | password | semmle.label | password | +| test_logging.rs:279:46:279:53 | &password | semmle.label | &password | +| test_logging.rs:279:46:279:53 | &password | semmle.label | &password | +| test_logging.rs:279:46:279:53 | password | semmle.label | password | +| test_logging.rs:279:46:279:53 | password | semmle.label | password | +| test_logging.rs:279:46:279:53 | password | semmle.label | password | +| test_logging.rs:279:46:279:53 | password | semmle.label | password | +| test_logging.rs:280:46:280:53 | &password | semmle.label | &password | +| test_logging.rs:280:46:280:53 | &password | semmle.label | &password | +| test_logging.rs:280:46:280:53 | password | semmle.label | password | +| test_logging.rs:280:46:280:53 | password | semmle.label | password | +| test_logging.rs:280:46:280:53 | password | semmle.label | password | +| test_logging.rs:280:46:280:53 | password | semmle.label | password | +| test_logging.rs:282:76:282:83 | &password | semmle.label | &password | +| test_logging.rs:282:76:282:83 | &password | semmle.label | &password | +| test_logging.rs:282:76:282:83 | password | semmle.label | password | +| test_logging.rs:282:76:282:83 | password | semmle.label | password | +| test_logging.rs:282:76:282:83 | password | semmle.label | password | +| test_logging.rs:282:76:282:83 | password | semmle.label | password | +| test_logging.rs:284:54:284:61 | &password | semmle.label | &password | +| test_logging.rs:284:54:284:61 | &password | semmle.label | &password | +| test_logging.rs:284:54:284:61 | password | semmle.label | password | +| test_logging.rs:284:54:284:61 | password | semmle.label | password | +| test_logging.rs:284:54:284:61 | password | semmle.label | password | +| test_logging.rs:284:54:284:61 | password | semmle.label | password | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-312/test_logging.rs b/rust/ql/test/query-tests/security/CWE-312/test_logging.rs index 83c5b7763602..096728d259cc 100644 --- a/rust/ql/test/query-tests/security/CWE-312/test_logging.rs +++ b/rust/ql/test/query-tests/security/CWE-312/test_logging.rs @@ -254,34 +254,34 @@ fn test_std(password: String, i: i32, opt_i: Option) { fn test_tracing(password: String) { // logging-style macros - tracing::debug!("message = {}", password); // $ MISSING: Alert[rust/cleartext-logging] - tracing::error!("message = {}", password); // $ MISSING: Alert[rust/cleartext-logging] - tracing::info!("message = {}", password); // $ MISSING: Alert[rust/cleartext-logging] - tracing::trace!("message = {}", password); // $ MISSING: Alert[rust/cleartext-logging] - tracing::warn!("message = {}", password); // $ MISSING: Alert[rust/cleartext-logging] + tracing::debug!("message = {}", password); // $ Alert[rust/cleartext-logging] + tracing::error!("message = {}", password); // $ Alert[rust/cleartext-logging] + tracing::info!("message = {}", password); // $ Alert[rust/cleartext-logging] + tracing::trace!("message = {}", password); // $ Alert[rust/cleartext-logging] + tracing::warn!("message = {}", password); // $ Alert[rust/cleartext-logging] // span and event macros - let span = tracing::span!(tracing::Level::INFO, "span = {}", password); // $ MISSING: Alert[rust/cleartext-logging] + let span = tracing::span!(tracing::Level::INFO, "span = {}", password); // $ Alert[rust/cleartext-logging] let _enter = span.enter(); - tracing::event!(tracing::Level::INFO, "event = {}", password); // $ MISSING: Alert[rust/cleartext-logging] - tracing::event!(tracing::Level::INFO, user = "alice", password = password); // $ MISSING: Alert[rust/cleartext-logging] - tracing::event!(tracing::Level::INFO, user = "bob", user.password = password); // $ MISSING: Alert[rust/cleartext-logging] + tracing::event!(tracing::Level::INFO, "event = {}", password); // $ Alert[rust/cleartext-logging] + tracing::event!(tracing::Level::INFO, user = "alice", password = password); // $ Alert[rust/cleartext-logging] + tracing::event!(tracing::Level::INFO, user = "bob", user.password = password); // $ Alert[rust/cleartext-logging] // more usage variants - tracing::info!(password); // $ MISSING: Alert[rust/cleartext-logging] - tracing::info!(%password); // $ MISSING: Alert[rust/cleartext-logging] - tracing::info!(?password); // $ MISSING: Alert[rust/cleartext-logging] - tracing::info!(password = password); // $ MISSING: Alert[rust/cleartext-logging] - tracing::info!(password = %password); // $ MISSING: Alert[rust/cleartext-logging] - tracing::info!(password = ?password); // $ MISSING: Alert[rust/cleartext-logging] - tracing::info!(target: "app", message = password); // $ MISSING: Alert[rust/cleartext-logging] - tracing::info!(target: "app", message = %password); // $ MISSING: Alert[rust/cleartext-logging] - tracing::info!(target: "app", message = ?password); // $ MISSING: Alert[rust/cleartext-logging] - - let span2 = tracing::span!(tracing::Level::INFO, "message", message = %password); // $ MISSING: Alert[rust/cleartext-logging] + tracing::info!(password); // $ Alert[rust/cleartext-logging] + tracing::info!(%password); // $ Alert[rust/cleartext-logging] + tracing::info!(?password); // $ Alert[rust/cleartext-logging] + tracing::info!(password = password); // $ Alert[rust/cleartext-logging] + tracing::info!(password = %password); // $ Alert[rust/cleartext-logging] + tracing::info!(password = ?password); // $ Alert[rust/cleartext-logging] + tracing::info!(target: "app", message = password); // $ Alert[rust/cleartext-logging] + tracing::info!(target: "app", message = %password); // $ Alert[rust/cleartext-logging] + tracing::info!(target: "app", message = ?password); // $ Alert[rust/cleartext-logging] + + let span2 = tracing::span!(tracing::Level::INFO, "message", message = %password); // $ Alert[rust/cleartext-logging] let _enter2 = span2.enter(); - tracing::event!(tracing::Level::INFO, message = %password); // $ MISSING: Alert[rust/cleartext-logging] + tracing::event!(tracing::Level::INFO, message = %password); // $ Alert[rust/cleartext-logging] } fn main() { From d8c4e4613803e3435a5355ab517365672f1e70c9 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 13 Aug 2026 16:42:57 +0100 Subject: [PATCH 3/7] Rust: Change note. --- rust/ql/src/change-notes/2026-08-13-cleartext-logging.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 rust/ql/src/change-notes/2026-08-13-cleartext-logging.md diff --git a/rust/ql/src/change-notes/2026-08-13-cleartext-logging.md b/rust/ql/src/change-notes/2026-08-13-cleartext-logging.md new file mode 100644 index 000000000000..4e3692ce5a5d --- /dev/null +++ b/rust/ql/src/change-notes/2026-08-13-cleartext-logging.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added cleartext logging flow sink models for the "tracing" crate. This may cause additional results to be found for the "Cleartext logging of sensitive information" (`rust/cleartext-logging`) query. From 95b210c72221c30df72672dccef8a6a3d9a220f8 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 13 Aug 2026 16:51:39 +0100 Subject: [PATCH 4/7] Rust: Extend the new sinks to cover rust/log-injection as well. --- .../security/CleartextLoggingExtensions.qll | 18 +++--------------- .../rust/security/LogInjectionExtensions.qll | 18 ++++++++++++++++++ .../2026-08-13-cleartext-logging.md | 2 +- 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/rust/ql/lib/codeql/rust/security/CleartextLoggingExtensions.qll b/rust/ql/lib/codeql/rust/security/CleartextLoggingExtensions.qll index f8b16b257780..e87233b2b2e6 100644 --- a/rust/ql/lib/codeql/rust/security/CleartextLoggingExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/CleartextLoggingExtensions.qll @@ -10,6 +10,7 @@ private import codeql.rust.dataflow.FlowSink private import codeql.rust.security.SensitiveData private import codeql.rust.Concepts private import codeql.rust.security.Barriers as Barriers +private import codeql.rust.security.LogInjectionExtensions /** * Provides default sources, sinks and barriers for detecting cleartext logging @@ -46,22 +47,9 @@ module CleartextLogging { } /** - * A sink for the logging macros of the `tracing` crate, such as - * `tracing::info!`. The underlying function calls are difficult to - * identify reliably, so we treat any expression inside the expansion - * of such a macro call as a sink. + * A sink for the logging macros of the `tracing` crate. */ - private class TracingMacroSink extends Sink { - TracingMacroSink() { - exists(Crate c, MacroRules m, MacroCall mc | - c.getName() = "tracing" and - m.getName().getText() = ["trace", "debug", "info", "warn", "error", "event", "span"] and - m.getLocation().getFile() = c.getASourceFile().getFile() and - mc.resolveMacro() = m and - this.asExpr().getParentNode*() = mc.getMacroCallExpansion() - ) - } - } + private class TracingMacroSink extends Sink instanceof LogInjection::TracingMacroSink { } /** * A barrier for logging from model data. diff --git a/rust/ql/lib/codeql/rust/security/LogInjectionExtensions.qll b/rust/ql/lib/codeql/rust/security/LogInjectionExtensions.qll index e1fe3711ba6d..b1165379905f 100644 --- a/rust/ql/lib/codeql/rust/security/LogInjectionExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/LogInjectionExtensions.qll @@ -44,6 +44,24 @@ module LogInjection { ModelsAsDataSink() { sinkNode(this, "log-injection") } } + /** + * A sink for the logging macros of the `tracing` crate, such as + * `tracing::info!`. The underlying function calls are difficult to + * identify reliably, so we treat any expression inside the expansion + * of such a macro call as a sink. + */ + class TracingMacroSink extends Sink { + TracingMacroSink() { + exists(Crate c, MacroRules m, MacroCall mc | + c.getName() = "tracing" and + m.getName().getText() = ["trace", "debug", "info", "warn", "error", "event", "span"] and + m.getLocation().getFile() = c.getASourceFile().getFile() and + mc.resolveMacro() = m and + this.asExpr().getParentNode*() = mc.getMacroCallExpansion() + ) + } + } + /** * A barrier for log-injection from model data. */ diff --git a/rust/ql/src/change-notes/2026-08-13-cleartext-logging.md b/rust/ql/src/change-notes/2026-08-13-cleartext-logging.md index 4e3692ce5a5d..aa3d5120362d 100644 --- a/rust/ql/src/change-notes/2026-08-13-cleartext-logging.md +++ b/rust/ql/src/change-notes/2026-08-13-cleartext-logging.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* Added cleartext logging flow sink models for the "tracing" crate. This may cause additional results to be found for the "Cleartext logging of sensitive information" (`rust/cleartext-logging`) query. +* Added cleartext logging flow sink models for the "tracing" crate. This may cause additional results to be found for the "Cleartext logging of sensitive information" (`rust/cleartext-logging`) and "Log injection" (`rust/log-injection`) queries. From 6d1b15880541a6de66804202b527fb26d4ce0eac Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 13 Aug 2026 16:56:13 +0100 Subject: [PATCH 5/7] Rust: Add tracing to supported frameworks. --- docs/codeql/reusables/supported-frameworks.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/codeql/reusables/supported-frameworks.rst b/docs/codeql/reusables/supported-frameworks.rst index 0552a3495175..b601961bf385 100644 --- a/docs/codeql/reusables/supported-frameworks.rst +++ b/docs/codeql/reusables/supported-frameworks.rst @@ -357,6 +357,7 @@ and the CodeQL library pack ``codeql/rust-all`` (`changelog `__, Database `tokio `__, Asynchronous IO `tokio-postgres `__, Database + `tracing `__, Logging library `url `__, Utility library `warp `__, Web framework From 7f6ceb312e0978793bc8c8355677b07d2abf3ffb Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 13 Aug 2026 17:51:15 +0100 Subject: [PATCH 6/7] Rust: Add a few test cases for log injection as well. --- .../query-tests/security/CWE-117/Cargo.lock | 21 +- .../security/CWE-117/LogInjection.expected | 182 ++++++++++++++---- .../test/query-tests/security/CWE-117/main.rs | 5 + .../query-tests/security/CWE-117/options.yml | 1 + 4 files changed, 165 insertions(+), 44 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..ab34dd3a7482 100644 --- a/rust/ql/test/query-tests/security/CWE-117/Cargo.lock +++ b/rust/ql/test/query-tests/security/CWE-117/Cargo.lock @@ -1200,6 +1200,7 @@ dependencies = [ "env_logger", "log", "reqwest", + "tracing", ] [[package]] @@ -1302,20 +1303,32 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +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", +] + [[package]] name = "tracing-core" -version = "0.1.34" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", ] 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 4349f3738eb9..19655b83fd6f 100644 --- a/rust/ql/test/query-tests/security/CWE-117/LogInjection.expected +++ b/rust/ql/test/query-tests/security/CWE-117/LogInjection.expected @@ -15,9 +15,35 @@ | main.rs:115:9:115:14 | ...::log | main.rs:109:25:109:38 | ...::args | main.rs:115:9:115:14 | ...::log | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | | main.rs:116:9:116:14 | ...::log | main.rs:109:25:109:38 | ...::args | main.rs:116:9:116:14 | ...::log | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | | main.rs:119:9:119:13 | ...::log | main.rs:109:25:109:38 | ...::args | main.rs:119:9:119:13 | ...::log | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | -| main.rs:130:9:130:16 | ...::_print | main.rs:127:25:127:37 | ...::var | main.rs:130:9:130:16 | ...::_print | Log entry depends on a $@. | main.rs:127:25:127:37 | ...::var | user-provided value | -| main.rs:131:9:131:17 | ...::_eprint | main.rs:127:25:127:37 | ...::var | main.rs:131:9:131:17 | ...::_eprint | Log entry depends on a $@. | main.rs:127:25:127:37 | ...::var | user-provided value | -| main.rs:143:9:143:16 | ...::_print | main.rs:150:28:150:30 | get | main.rs:143:9:143:16 | ...::_print | Log entry depends on a $@. | main.rs:150:28:150:30 | get | user-provided value | +| main.rs:122:25:122:46 | &... | main.rs:109:25:109:38 | ...::args | main.rs:122:25:122:46 | &... | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:122:25:122:46 | &... | main.rs:109:25:109:38 | ...::args | main.rs:122:25:122:46 | &... | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:122:25:122:46 | ... as ... | main.rs:109:25:109:38 | ...::args | main.rs:122:25:122:46 | ... as ... | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:122:25:122:46 | ... as ... | main.rs:109:25:109:38 | ...::args | main.rs:122:25:122:46 | ... as ... | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:122:25:122:46 | FormatArgsExpr | main.rs:109:25:109:38 | ...::args | main.rs:122:25:122:46 | FormatArgsExpr | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:122:25:122:46 | FormatArgsExpr | main.rs:109:25:109:38 | ...::args | main.rs:122:25:122:46 | FormatArgsExpr | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:122:25:122:46 | MacroExpr | main.rs:109:25:109:38 | ...::args | main.rs:122:25:122:46 | MacroExpr | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:122:25:122:46 | MacroExpr | main.rs:109:25:109:38 | ...::args | main.rs:122:25:122:46 | MacroExpr | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:122:38:122:46 | user_data | main.rs:109:25:109:38 | ...::args | main.rs:122:38:122:46 | user_data | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:122:38:122:46 | user_data | main.rs:109:25:109:38 | ...::args | main.rs:122:38:122:46 | user_data | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:123:24:123:45 | &... | main.rs:109:25:109:38 | ...::args | main.rs:123:24:123:45 | &... | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:123:24:123:45 | &... | main.rs:109:25:109:38 | ...::args | main.rs:123:24:123:45 | &... | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:123:24:123:45 | ... as ... | main.rs:109:25:109:38 | ...::args | main.rs:123:24:123:45 | ... as ... | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:123:24:123:45 | ... as ... | main.rs:109:25:109:38 | ...::args | main.rs:123:24:123:45 | ... as ... | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:123:24:123:45 | FormatArgsExpr | main.rs:109:25:109:38 | ...::args | main.rs:123:24:123:45 | FormatArgsExpr | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:123:24:123:45 | FormatArgsExpr | main.rs:109:25:109:38 | ...::args | main.rs:123:24:123:45 | FormatArgsExpr | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:123:24:123:45 | MacroExpr | main.rs:109:25:109:38 | ...::args | main.rs:123:24:123:45 | MacroExpr | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:123:24:123:45 | MacroExpr | main.rs:109:25:109:38 | ...::args | main.rs:123:24:123:45 | MacroExpr | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:123:35:123:43 | user_data | main.rs:109:25:109:38 | ...::args | main.rs:123:35:123:43 | user_data | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:123:35:123:43 | user_data | main.rs:109:25:109:38 | ...::args | main.rs:123:35:123:43 | user_data | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:124:70:124:78 | &user_data | main.rs:109:25:109:38 | ...::args | main.rs:124:70:124:78 | &user_data | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:124:70:124:78 | &user_data | main.rs:109:25:109:38 | ...::args | main.rs:124:70:124:78 | &user_data | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:124:70:124:78 | ... as ... | main.rs:109:25:109:38 | ...::args | main.rs:124:70:124:78 | ... as ... | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:124:70:124:78 | ... as ... | main.rs:109:25:109:38 | ...::args | main.rs:124:70:124:78 | ... as ... | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:124:70:124:78 | user_data | main.rs:109:25:109:38 | ...::args | main.rs:124:70:124:78 | user_data | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:124:70:124:78 | user_data | main.rs:109:25:109:38 | ...::args | main.rs:124:70:124:78 | user_data | Log entry depends on a $@. | main.rs:109:25:109:38 | ...::args | user-provided value | +| main.rs:135:9:135:16 | ...::_print | main.rs:132:25:132:37 | ...::var | main.rs:135:9:135:16 | ...::_print | Log entry depends on a $@. | main.rs:132:25:132:37 | ...::var | user-provided value | +| main.rs:136:9:136:17 | ...::_eprint | main.rs:132:25:132:37 | ...::var | main.rs:136:9:136:17 | ...::_eprint | Log entry depends on a $@. | main.rs:132:25:132:37 | ...::var | user-provided value | +| main.rs:148:9:148:16 | ...::_print | main.rs:155:28:155:30 | get | main.rs:148:9:148:16 | ...::_print | Log entry depends on a $@. | main.rs:155:28:155:30 | get | 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:37 | ...::args | main.rs:8:29:8:39 | ...::args(...) [element] | provenance | Src:MaD:6 | @@ -78,6 +104,26 @@ edges | main.rs:109:13:109:21 | user_data | main.rs:115:16:115:37 | MacroExpr | provenance | | | main.rs:109:13:109:21 | user_data | main.rs:116:16:116:37 | MacroExpr | provenance | | | main.rs:109:13:109:21 | user_data | main.rs:119:15:119:75 | MacroExpr | provenance | | +| main.rs:109:13:109:21 | user_data | main.rs:122:25:122:46 | FormatArgsExpr | provenance | | +| main.rs:109:13:109:21 | user_data | main.rs:122:25:122:46 | FormatArgsExpr | provenance | | +| main.rs:109:13:109:21 | user_data | main.rs:122:25:122:46 | MacroExpr | provenance | | +| main.rs:109:13:109:21 | user_data | main.rs:122:25:122:46 | MacroExpr | provenance | | +| main.rs:109:13:109:21 | user_data | main.rs:122:25:122:46 | MacroExpr | provenance | | +| main.rs:109:13:109:21 | user_data | main.rs:122:25:122:46 | MacroExpr | provenance | | +| main.rs:109:13:109:21 | user_data | main.rs:122:38:122:46 | user_data | provenance | | +| main.rs:109:13:109:21 | user_data | main.rs:122:38:122:46 | user_data | provenance | | +| main.rs:109:13:109:21 | user_data | main.rs:123:24:123:45 | FormatArgsExpr | provenance | | +| main.rs:109:13:109:21 | user_data | main.rs:123:24:123:45 | FormatArgsExpr | provenance | | +| main.rs:109:13:109:21 | user_data | main.rs:123:24:123:45 | MacroExpr | provenance | | +| main.rs:109:13:109:21 | user_data | main.rs:123:24:123:45 | MacroExpr | provenance | | +| main.rs:109:13:109:21 | user_data | main.rs:123:24:123:45 | MacroExpr | provenance | | +| main.rs:109:13:109:21 | user_data | main.rs:123:24:123:45 | MacroExpr | provenance | | +| main.rs:109:13:109:21 | user_data | main.rs:123:35:123:43 | user_data | provenance | | +| main.rs:109:13:109:21 | user_data | main.rs:123:35:123:43 | user_data | provenance | | +| main.rs:109:13:109:21 | user_data | main.rs:124:70:124:78 | user_data | provenance | | +| main.rs:109:13:109:21 | user_data | main.rs:124:70:124:78 | user_data | provenance | | +| main.rs:109:13:109:21 | user_data | main.rs:124:70:124:78 | user_data | provenance | | +| main.rs:109:13:109:21 | user_data | main.rs:124:70:124:78 | user_data | provenance | | | main.rs:109:25:109:38 | ...::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:11 | | main.rs:109:25:109:47 | ... .nth(...) [Some] | main.rs:109:25:109:67 | ... .unwrap_or_default() | provenance | MaD:17 | @@ -88,23 +134,41 @@ edges | main.rs:115:16:115:37 | MacroExpr | main.rs:115:9:115:14 | ...::log | provenance | MaD:1 Sink:MaD:1 | | main.rs:116:16:116:37 | MacroExpr | main.rs:116:9:116:14 | ...::log | provenance | MaD:1 Sink:MaD:1 | | main.rs:119:15:119:75 | MacroExpr | main.rs:119:9:119:13 | ...::log | provenance | MaD:1 Sink:MaD:1 | -| main.rs:127:13:127:21 | user_data | main.rs:130:18:130:38 | MacroExpr | provenance | | -| main.rs:127:13:127:21 | user_data | main.rs:131:19:131:49 | MacroExpr | provenance | | -| main.rs:127:25:127:37 | ...::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:130:18:130:38 | MacroExpr | main.rs:130:9:130:16 | ...::_print | provenance | MaD:3 Sink:MaD:3 | -| main.rs:131:19:131:49 | MacroExpr | main.rs:131:9:131:17 | ...::_eprint | provenance | MaD:2 Sink:MaD:2 | -| 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: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:18:143:40 | MacroExpr | main.rs:143:9:143:16 | ...::_print | provenance | MaD:3 Sink:MaD:3 | -| 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 | | -| main.rs:150:28:150:30 | get | main.rs:140:32:140:59 | ...: Option::<...> | provenance | Src:MaD:4 | +| main.rs:122:25:122:46 | &... [&ref] | main.rs:122:25:122:46 | ... as ... | provenance | | +| main.rs:122:25:122:46 | &... [&ref] | main.rs:122:25:122:46 | ... as ... | provenance | | +| main.rs:122:25:122:46 | MacroExpr | main.rs:122:25:122:46 | &... | provenance | | +| main.rs:122:25:122:46 | MacroExpr | main.rs:122:25:122:46 | &... | provenance | | +| main.rs:122:25:122:46 | MacroExpr | main.rs:122:25:122:46 | &... [&ref] | provenance | | +| main.rs:122:25:122:46 | MacroExpr | main.rs:122:25:122:46 | &... [&ref] | provenance | | +| main.rs:123:24:123:45 | &... [&ref] | main.rs:123:24:123:45 | ... as ... | provenance | | +| main.rs:123:24:123:45 | &... [&ref] | main.rs:123:24:123:45 | ... as ... | provenance | | +| main.rs:123:24:123:45 | MacroExpr | main.rs:123:24:123:45 | &... | provenance | | +| main.rs:123:24:123:45 | MacroExpr | main.rs:123:24:123:45 | &... | provenance | | +| main.rs:123:24:123:45 | MacroExpr | main.rs:123:24:123:45 | &... [&ref] | provenance | | +| main.rs:123:24:123:45 | MacroExpr | main.rs:123:24:123:45 | &... [&ref] | provenance | | +| main.rs:124:70:124:78 | &user_data [&ref] | main.rs:124:70:124:78 | ... as ... | provenance | | +| main.rs:124:70:124:78 | &user_data [&ref] | main.rs:124:70:124:78 | ... as ... | provenance | | +| main.rs:124:70:124:78 | user_data | main.rs:124:70:124:78 | &user_data | provenance | | +| main.rs:124:70:124:78 | user_data | main.rs:124:70:124:78 | &user_data | provenance | | +| main.rs:124:70:124:78 | user_data | main.rs:124:70:124:78 | &user_data [&ref] | provenance | | +| main.rs:124:70:124:78 | user_data | main.rs:124:70:124:78 | &user_data [&ref] | provenance | | +| main.rs:132:13:132:21 | user_data | main.rs:135:18:135:38 | MacroExpr | provenance | | +| main.rs:132:13:132:21 | user_data | main.rs:136:19:136:49 | MacroExpr | provenance | | +| main.rs:132:25:132:37 | ...::var | main.rs:132:25:132:45 | ...::var(...) [Ok] | provenance | Src:MaD:7 | +| main.rs:132:25:132:45 | ...::var(...) [Ok] | main.rs:132:25:132:65 | ... .unwrap_or_default() | provenance | MaD:20 | +| main.rs:132:25:132:65 | ... .unwrap_or_default() | main.rs:132:13:132:21 | user_data | provenance | | +| main.rs:135:18:135:38 | MacroExpr | main.rs:135:9:135:16 | ...::_print | provenance | MaD:3 Sink:MaD:3 | +| main.rs:136:19:136:49 | MacroExpr | main.rs:136:9:136:17 | ...::_eprint | provenance | MaD:2 Sink:MaD:2 | +| main.rs:145:32:145:59 | ...: Option::<...> | main.rs:146:22:146:27 | o_path | provenance | | +| main.rs:146:13:146:18 | m_path [Some] | main.rs:148:26:148:31 | m_path [Some] | provenance | | +| main.rs:146:22:146:27 | o_path | main.rs:146:22:146:38 | o_path.map(...) [Some] | provenance | MaD:14 | +| main.rs:146:22:146:27 | o_path | main.rs:146:34:146:34 | ... | provenance | MaD:14 | +| main.rs:146:22:146:38 | o_path.map(...) [Some] | main.rs:146:13:146:18 | m_path [Some] | provenance | | +| main.rs:146:34:146:34 | ... | main.rs:146:37:146:37 | x | provenance | | +| main.rs:148:18:148:40 | MacroExpr | main.rs:148:9:148:16 | ...::_print | provenance | MaD:3 Sink:MaD:3 | +| main.rs:148:26:148:31 | m_path [Some] | main.rs:148:26:148:40 | m_path.unwrap() | provenance | MaD:15 | +| main.rs:148:26:148:40 | m_path.unwrap() | main.rs:148:18:148:40 | MacroExpr | provenance | | +| main.rs:155:28:155:30 | get | main.rs:145:32:145:59 | ...: Option::<...> | provenance | Src:MaD:4 | models | 1 | Sink: log::__private_api::log; Argument[0]; log-injection | | 2 | Sink: std::io::stdio::_eprint; Argument[0]; log-injection | @@ -202,24 +266,62 @@ nodes | main.rs:116:16:116:37 | MacroExpr | semmle.label | MacroExpr | | main.rs:119:9:119:13 | ...::log | semmle.label | ...::log | | main.rs:119:15:119:75 | MacroExpr | semmle.label | MacroExpr | -| main.rs:127:13:127:21 | user_data | semmle.label | user_data | -| main.rs:127:25:127:37 | ...::var | semmle.label | ...::var | -| main.rs:127:25:127:45 | ...::var(...) [Ok] | semmle.label | ...::var(...) [Ok] | -| main.rs:127:25:127:65 | ... .unwrap_or_default() | semmle.label | ... .unwrap_or_default() | -| main.rs:130:9:130:16 | ...::_print | semmle.label | ...::_print | -| main.rs:130:18:130:38 | MacroExpr | semmle.label | MacroExpr | -| main.rs:131:9:131:17 | ...::_eprint | semmle.label | ...::_eprint | -| main.rs:131:19:131:49 | MacroExpr | semmle.label | MacroExpr | -| main.rs:140:32:140:59 | ...: Option::<...> | semmle.label | ...: Option::<...> | -| main.rs:141:13:141:18 | m_path [Some] | semmle.label | m_path [Some] | -| main.rs:141:22:141:27 | o_path | semmle.label | o_path | -| main.rs:141:22:141:38 | o_path.map(...) [Some] | semmle.label | o_path.map(...) [Some] | -| main.rs:141:34:141:34 | ... | semmle.label | ... | -| main.rs:141:37:141:37 | x | semmle.label | x | -| main.rs:143:9:143:16 | ...::_print | semmle.label | ...::_print | -| main.rs:143:18:143:40 | MacroExpr | semmle.label | MacroExpr | -| 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:28:150:30 | get | semmle.label | get | +| main.rs:122:25:122:46 | &... | semmle.label | &... | +| main.rs:122:25:122:46 | &... | semmle.label | &... | +| main.rs:122:25:122:46 | &... [&ref] | semmle.label | &... [&ref] | +| main.rs:122:25:122:46 | &... [&ref] | semmle.label | &... [&ref] | +| main.rs:122:25:122:46 | ... as ... | semmle.label | ... as ... | +| main.rs:122:25:122:46 | ... as ... | semmle.label | ... as ... | +| main.rs:122:25:122:46 | FormatArgsExpr | semmle.label | FormatArgsExpr | +| main.rs:122:25:122:46 | FormatArgsExpr | semmle.label | FormatArgsExpr | +| main.rs:122:25:122:46 | MacroExpr | semmle.label | MacroExpr | +| main.rs:122:25:122:46 | MacroExpr | semmle.label | MacroExpr | +| main.rs:122:25:122:46 | MacroExpr | semmle.label | MacroExpr | +| main.rs:122:25:122:46 | MacroExpr | semmle.label | MacroExpr | +| main.rs:122:38:122:46 | user_data | semmle.label | user_data | +| main.rs:122:38:122:46 | user_data | semmle.label | user_data | +| main.rs:123:24:123:45 | &... | semmle.label | &... | +| main.rs:123:24:123:45 | &... | semmle.label | &... | +| main.rs:123:24:123:45 | &... [&ref] | semmle.label | &... [&ref] | +| main.rs:123:24:123:45 | &... [&ref] | semmle.label | &... [&ref] | +| main.rs:123:24:123:45 | ... as ... | semmle.label | ... as ... | +| main.rs:123:24:123:45 | ... as ... | semmle.label | ... as ... | +| main.rs:123:24:123:45 | FormatArgsExpr | semmle.label | FormatArgsExpr | +| main.rs:123:24:123:45 | FormatArgsExpr | semmle.label | FormatArgsExpr | +| main.rs:123:24:123:45 | MacroExpr | semmle.label | MacroExpr | +| main.rs:123:24:123:45 | MacroExpr | semmle.label | MacroExpr | +| main.rs:123:24:123:45 | MacroExpr | semmle.label | MacroExpr | +| main.rs:123:24:123:45 | MacroExpr | semmle.label | MacroExpr | +| main.rs:123:35:123:43 | user_data | semmle.label | user_data | +| main.rs:123:35:123:43 | user_data | semmle.label | user_data | +| main.rs:124:70:124:78 | &user_data | semmle.label | &user_data | +| main.rs:124:70:124:78 | &user_data | semmle.label | &user_data | +| main.rs:124:70:124:78 | &user_data [&ref] | semmle.label | &user_data [&ref] | +| main.rs:124:70:124:78 | &user_data [&ref] | semmle.label | &user_data [&ref] | +| main.rs:124:70:124:78 | ... as ... | semmle.label | ... as ... | +| main.rs:124:70:124:78 | ... as ... | semmle.label | ... as ... | +| main.rs:124:70:124:78 | user_data | semmle.label | user_data | +| main.rs:124:70:124:78 | user_data | semmle.label | user_data | +| main.rs:124:70:124:78 | user_data | semmle.label | user_data | +| main.rs:124:70:124:78 | user_data | semmle.label | user_data | +| main.rs:132:13:132:21 | user_data | semmle.label | user_data | +| main.rs:132:25:132:37 | ...::var | semmle.label | ...::var | +| main.rs:132:25:132:45 | ...::var(...) [Ok] | semmle.label | ...::var(...) [Ok] | +| main.rs:132:25:132:65 | ... .unwrap_or_default() | semmle.label | ... .unwrap_or_default() | +| main.rs:135:9:135:16 | ...::_print | semmle.label | ...::_print | +| main.rs:135:18:135:38 | MacroExpr | semmle.label | MacroExpr | +| main.rs:136:9:136:17 | ...::_eprint | semmle.label | ...::_eprint | +| main.rs:136:19:136:49 | MacroExpr | semmle.label | MacroExpr | +| main.rs:145:32:145:59 | ...: Option::<...> | semmle.label | ...: Option::<...> | +| main.rs:146:13:146:18 | m_path [Some] | semmle.label | m_path [Some] | +| main.rs:146:22:146:27 | o_path | semmle.label | o_path | +| main.rs:146:22:146:38 | o_path.map(...) [Some] | semmle.label | o_path.map(...) [Some] | +| main.rs:146:34:146:34 | ... | semmle.label | ... | +| main.rs:146:37:146:37 | x | semmle.label | x | +| main.rs:148:9:148:16 | ...::_print | semmle.label | ...::_print | +| main.rs:148:18:148:40 | MacroExpr | semmle.label | MacroExpr | +| main.rs:148:26:148:31 | m_path [Some] | semmle.label | m_path [Some] | +| main.rs:148:26:148:40 | m_path.unwrap() | semmle.label | m_path.unwrap() | +| main.rs:155:28:155:30 | get | semmle.label | get | 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] | +| main.rs:146:22:146:27 | o_path | main.rs:146:34:146:34 | ... | main.rs:146:37:146:37 | x | main.rs:146:22:146: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..ac739bc02d9d 100644 --- a/rust/ql/test/query-tests/security/CWE-117/main.rs +++ b/rust/ql/test/query-tests/security/CWE-117/main.rs @@ -118,6 +118,11 @@ mod additional_tests { // BAD: Complex format strings info!("User {} did action {} at time {}", user_data, "login", "now"); // $ Alert[rust/log-injection]=commandargs + // BAD: tracing macros + tracing::error!("Error: {}", user_data); // $ Alert[rust/log-injection]=commandargs + tracing::warn!("Warning: {user_data}"); // $ Alert[rust/log-injection]=commandargs + tracing::event!(tracing::Level::INFO, user = "alice", data = user_data); // $ Alert[rust/log-injection]=commandargs + // GOOD: non-sinks let _ : Vec = From::from(user_data.clone()); let _ : Box = From::from(user_data); 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..d86a2a0dff1d 100644 --- a/rust/ql/test/query-tests/security/CWE-117/options.yml +++ b/rust/ql/test/query-tests/security/CWE-117/options.yml @@ -2,5 +2,6 @@ qltest_cargo_check: true qltest_dependencies: - log = "0.4" - env_logger = "0.10" + - tracing = { version = "0.1.44" } - reqwest = { version = "0.12.9", features = ["blocking"] } - axum = { version = "0.8.7" } From a3358e404b8ec9d865fc0ab5dc791e1c1ad99064 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 13 Aug 2026 19:22:36 +0100 Subject: [PATCH 7/7] Rust: Accept consistency test changes. There's a bit of noise here. --- .../PathResolutionConsistency.expected | 21 ++- .../VariableCaptureConsistency.expected | 6 + .../PathResolutionConsistency.expected | 121 ++++++++++++++++++ .../VariableCaptureConsistency.expected | 21 +++ 4 files changed, 168 insertions(+), 1 deletion(-) create mode 100644 rust/ql/test/query-tests/security/CWE-117/CONSISTENCY/VariableCaptureConsistency.expected create mode 100644 rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/VariableCaptureConsistency.expected diff --git a/rust/ql/test/query-tests/security/CWE-117/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-117/CONSISTENCY/PathResolutionConsistency.expected index 402598911ada..ec222a5e2445 100644 --- a/rust/ql/test/query-tests/security/CWE-117/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-117/CONSISTENCY/PathResolutionConsistency.expected @@ -1,2 +1,21 @@ multipleResolvedTargets -| main.rs:123:28:123:48 | ...::from(...) | +| main.rs:128:28:128:48 | ...::from(...) | +multiplePathResolutions +| main.rs:122:9:122:23 | ...::__macro_support | +| main.rs:122:9:122:23 | ...::__macro_support | +| main.rs:122:9:122:23 | ...::__macro_support | +| main.rs:122:9:122:23 | ...::__macro_support | +| main.rs:122:9:122:23 | ...::__macro_support | +| main.rs:122:9:122:23 | ...::field | +| main.rs:123:9:123:22 | ...::__macro_support | +| main.rs:123:9:123:22 | ...::__macro_support | +| main.rs:123:9:123:22 | ...::__macro_support | +| main.rs:123:9:123:22 | ...::__macro_support | +| main.rs:123:9:123:22 | ...::__macro_support | +| main.rs:123:9:123:22 | ...::field | +| main.rs:124:9:124:23 | ...::__macro_support | +| main.rs:124:9:124:23 | ...::__macro_support | +| main.rs:124:9:124:23 | ...::__macro_support | +| main.rs:124:9:124:23 | ...::__macro_support | +| main.rs:124:9:124:23 | ...::__macro_support | +| main.rs:124:9:124:23 | ...::field | diff --git a/rust/ql/test/query-tests/security/CWE-117/CONSISTENCY/VariableCaptureConsistency.expected b/rust/ql/test/query-tests/security/CWE-117/CONSISTENCY/VariableCaptureConsistency.expected new file mode 100644 index 000000000000..789bd08baf58 --- /dev/null +++ b/rust/ql/test/query-tests/security/CWE-117/CONSISTENCY/VariableCaptureConsistency.expected @@ -0,0 +1,6 @@ +uniqueCfgNode +| main.rs:122:9:122:23 | (...) | Expr has no cfg node | +| main.rs:123:9:123:22 | (...) | Expr has no cfg node | +| main.rs:124:25:124:44 | (...) | Expr has no cfg node | +consistencyOverview +| Expr has no cfg node | 3 | diff --git a/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected index 7ab983902e0b..04d5f74ac7f9 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected @@ -1,2 +1,123 @@ multipleResolvedTargets | test_storage.rs:40:5:40:31 | combined.extend(...) | +multiplePathResolutions +| test_logging.rs:257:5:257:19 | ...::__macro_support | +| test_logging.rs:257:5:257:19 | ...::__macro_support | +| test_logging.rs:257:5:257:19 | ...::__macro_support | +| test_logging.rs:257:5:257:19 | ...::__macro_support | +| test_logging.rs:257:5:257:19 | ...::__macro_support | +| test_logging.rs:257:5:257:19 | ...::field | +| test_logging.rs:258:5:258:19 | ...::__macro_support | +| test_logging.rs:258:5:258:19 | ...::__macro_support | +| test_logging.rs:258:5:258:19 | ...::__macro_support | +| test_logging.rs:258:5:258:19 | ...::__macro_support | +| test_logging.rs:258:5:258:19 | ...::__macro_support | +| test_logging.rs:258:5:258:19 | ...::field | +| test_logging.rs:259:5:259:18 | ...::__macro_support | +| test_logging.rs:259:5:259:18 | ...::__macro_support | +| test_logging.rs:259:5:259:18 | ...::__macro_support | +| test_logging.rs:259:5:259:18 | ...::__macro_support | +| test_logging.rs:259:5:259:18 | ...::__macro_support | +| test_logging.rs:259:5:259:18 | ...::field | +| test_logging.rs:260:5:260:19 | ...::__macro_support | +| test_logging.rs:260:5:260:19 | ...::__macro_support | +| test_logging.rs:260:5:260:19 | ...::__macro_support | +| test_logging.rs:260:5:260:19 | ...::__macro_support | +| test_logging.rs:260:5:260:19 | ...::__macro_support | +| test_logging.rs:260:5:260:19 | ...::field | +| test_logging.rs:261:5:261:18 | ...::__macro_support | +| test_logging.rs:261:5:261:18 | ...::__macro_support | +| test_logging.rs:261:5:261:18 | ...::__macro_support | +| test_logging.rs:261:5:261:18 | ...::__macro_support | +| test_logging.rs:261:5:261:18 | ...::__macro_support | +| test_logging.rs:261:5:261:18 | ...::field | +| test_logging.rs:264:16:264:29 | ...::__macro_support | +| test_logging.rs:264:16:264:29 | ...::__macro_support | +| test_logging.rs:264:16:264:29 | ...::__macro_support | +| test_logging.rs:264:16:264:29 | ...::__macro_support | +| test_logging.rs:264:16:264:29 | ...::__macro_support | +| test_logging.rs:264:16:264:29 | ...::field | +| test_logging.rs:267:5:267:19 | ...::__macro_support | +| test_logging.rs:267:5:267:19 | ...::__macro_support | +| test_logging.rs:267:5:267:19 | ...::__macro_support | +| test_logging.rs:267:5:267:19 | ...::__macro_support | +| test_logging.rs:267:5:267:19 | ...::__macro_support | +| test_logging.rs:267:5:267:19 | ...::field | +| test_logging.rs:268:5:268:19 | ...::__macro_support | +| test_logging.rs:268:5:268:19 | ...::__macro_support | +| test_logging.rs:268:5:268:19 | ...::__macro_support | +| test_logging.rs:268:5:268:19 | ...::__macro_support | +| test_logging.rs:268:5:268:19 | ...::__macro_support | +| test_logging.rs:268:5:268:19 | ...::field | +| test_logging.rs:269:5:269:19 | ...::__macro_support | +| test_logging.rs:269:5:269:19 | ...::__macro_support | +| test_logging.rs:269:5:269:19 | ...::__macro_support | +| test_logging.rs:269:5:269:19 | ...::__macro_support | +| test_logging.rs:269:5:269:19 | ...::__macro_support | +| test_logging.rs:269:5:269:19 | ...::field | +| test_logging.rs:272:5:272:18 | ...::__macro_support | +| test_logging.rs:272:5:272:18 | ...::__macro_support | +| test_logging.rs:272:5:272:18 | ...::__macro_support | +| test_logging.rs:272:5:272:18 | ...::__macro_support | +| test_logging.rs:272:5:272:18 | ...::__macro_support | +| test_logging.rs:272:5:272:18 | ...::field | +| test_logging.rs:273:5:273:18 | ...::__macro_support | +| test_logging.rs:273:5:273:18 | ...::__macro_support | +| test_logging.rs:273:5:273:18 | ...::__macro_support | +| test_logging.rs:273:5:273:18 | ...::__macro_support | +| test_logging.rs:273:5:273:18 | ...::__macro_support | +| test_logging.rs:273:5:273:18 | ...::field | +| test_logging.rs:274:5:274:18 | ...::__macro_support | +| test_logging.rs:274:5:274:18 | ...::__macro_support | +| test_logging.rs:274:5:274:18 | ...::__macro_support | +| test_logging.rs:274:5:274:18 | ...::__macro_support | +| test_logging.rs:274:5:274:18 | ...::__macro_support | +| test_logging.rs:274:5:274:18 | ...::field | +| test_logging.rs:275:5:275:18 | ...::__macro_support | +| test_logging.rs:275:5:275:18 | ...::__macro_support | +| test_logging.rs:275:5:275:18 | ...::__macro_support | +| test_logging.rs:275:5:275:18 | ...::__macro_support | +| test_logging.rs:275:5:275:18 | ...::__macro_support | +| test_logging.rs:275:5:275:18 | ...::field | +| test_logging.rs:276:5:276:18 | ...::__macro_support | +| test_logging.rs:276:5:276:18 | ...::__macro_support | +| test_logging.rs:276:5:276:18 | ...::__macro_support | +| test_logging.rs:276:5:276:18 | ...::__macro_support | +| test_logging.rs:276:5:276:18 | ...::__macro_support | +| test_logging.rs:276:5:276:18 | ...::field | +| test_logging.rs:277:5:277:18 | ...::__macro_support | +| test_logging.rs:277:5:277:18 | ...::__macro_support | +| test_logging.rs:277:5:277:18 | ...::__macro_support | +| test_logging.rs:277:5:277:18 | ...::__macro_support | +| test_logging.rs:277:5:277:18 | ...::__macro_support | +| test_logging.rs:277:5:277:18 | ...::field | +| test_logging.rs:278:5:278:18 | ...::__macro_support | +| test_logging.rs:278:5:278:18 | ...::__macro_support | +| test_logging.rs:278:5:278:18 | ...::__macro_support | +| test_logging.rs:278:5:278:18 | ...::__macro_support | +| test_logging.rs:278:5:278:18 | ...::__macro_support | +| test_logging.rs:278:5:278:18 | ...::field | +| test_logging.rs:279:5:279:18 | ...::__macro_support | +| test_logging.rs:279:5:279:18 | ...::__macro_support | +| test_logging.rs:279:5:279:18 | ...::__macro_support | +| test_logging.rs:279:5:279:18 | ...::__macro_support | +| test_logging.rs:279:5:279:18 | ...::__macro_support | +| test_logging.rs:279:5:279:18 | ...::field | +| test_logging.rs:280:5:280:18 | ...::__macro_support | +| test_logging.rs:280:5:280:18 | ...::__macro_support | +| test_logging.rs:280:5:280:18 | ...::__macro_support | +| test_logging.rs:280:5:280:18 | ...::__macro_support | +| test_logging.rs:280:5:280:18 | ...::__macro_support | +| test_logging.rs:280:5:280:18 | ...::field | +| test_logging.rs:282:17:282:30 | ...::__macro_support | +| test_logging.rs:282:17:282:30 | ...::__macro_support | +| test_logging.rs:282:17:282:30 | ...::__macro_support | +| test_logging.rs:282:17:282:30 | ...::__macro_support | +| test_logging.rs:282:17:282:30 | ...::__macro_support | +| test_logging.rs:282:17:282:30 | ...::field | +| test_logging.rs:284:5:284:19 | ...::__macro_support | +| test_logging.rs:284:5:284:19 | ...::__macro_support | +| test_logging.rs:284:5:284:19 | ...::__macro_support | +| test_logging.rs:284:5:284:19 | ...::__macro_support | +| test_logging.rs:284:5:284:19 | ...::__macro_support | +| test_logging.rs:284:5:284:19 | ...::field | diff --git a/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/VariableCaptureConsistency.expected b/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/VariableCaptureConsistency.expected new file mode 100644 index 000000000000..d2fe347b66ce --- /dev/null +++ b/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/VariableCaptureConsistency.expected @@ -0,0 +1,21 @@ +uniqueCfgNode +| test_logging.rs:257:5:257:19 | (...) | Expr has no cfg node | +| test_logging.rs:258:5:258:19 | (...) | Expr has no cfg node | +| test_logging.rs:259:5:259:18 | (...) | Expr has no cfg node | +| test_logging.rs:260:5:260:19 | (...) | Expr has no cfg node | +| test_logging.rs:261:5:261:18 | (...) | Expr has no cfg node | +| test_logging.rs:267:21:267:40 | (...) | Expr has no cfg node | +| test_logging.rs:268:21:268:40 | (...) | Expr has no cfg node | +| test_logging.rs:269:21:269:40 | (...) | Expr has no cfg node | +| test_logging.rs:272:5:272:18 | (...) | Expr has no cfg node | +| test_logging.rs:273:5:273:18 | (...) | Expr has no cfg node | +| test_logging.rs:274:5:274:18 | (...) | Expr has no cfg node | +| test_logging.rs:275:5:275:18 | (...) | Expr has no cfg node | +| test_logging.rs:276:5:276:18 | (...) | Expr has no cfg node | +| test_logging.rs:277:5:277:18 | (...) | Expr has no cfg node | +| test_logging.rs:278:5:278:18 | (...) | Expr has no cfg node | +| test_logging.rs:279:5:279:18 | (...) | Expr has no cfg node | +| test_logging.rs:280:5:280:18 | (...) | Expr has no cfg node | +| test_logging.rs:284:21:284:40 | (...) | Expr has no cfg node | +consistencyOverview +| Expr has no cfg node | 18 |