From 117db8a9b2ac3f6c84464d81a647948031d49676 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 24 Jan 2025 17:19:33 +0000 Subject: [PATCH] Rust: Make the test runnable. --- .../CWE-312/CleartextLogging.expected | 160 +++++++++--------- .../query-tests/security/CWE-312/options.yml | 1 + .../security/CWE-312/test_logging.rs | 23 ++- 3 files changed, 96 insertions(+), 88 deletions(-) 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 0e61f2898dd6..e4feee0fd55d 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected @@ -28,9 +28,9 @@ | test_logging.rs:100:5:100:19 | ...::log | test_logging.rs:99:38:99:45 | password | test_logging.rs:100:5:100:19 | ...::log | This operation writes $@ to a log file. | test_logging.rs:99:38:99:45 | password | password | | test_logging.rs:118:5:118:42 | ...::log | test_logging.rs:118:28:118:41 | get_password(...) | test_logging.rs:118:5:118:42 | ...::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:32 | ...::log | test_logging.rs:129:25:129:32 | password | test_logging.rs:131:5:131:32 | ...::log | This operation writes $@ to a log file. | test_logging.rs:129:25:129:32 | password | password | -| test_logging.rs:152:5:152:36 | ...::_print | test_logging.rs:152:28:152:35 | password | test_logging.rs:152:5:152:36 | ...::_print | This operation writes $@ to a log file. | test_logging.rs:152:28:152:35 | password | password | +| test_logging.rs:152:5:152:38 | ...::_print | test_logging.rs:152:30:152:37 | password | test_logging.rs:152:5:152:38 | ...::_print | This operation writes $@ to a log file. | test_logging.rs:152:30:152:37 | password | password | | test_logging.rs:153:5:153:38 | ...::_print | test_logging.rs:153:30:153:37 | password | test_logging.rs:153:5:153:38 | ...::_print | This operation writes $@ to a log file. | test_logging.rs:153:30:153:37 | password | password | -| test_logging.rs:154:5:154:37 | ...::_eprint | test_logging.rs:154:29:154:36 | password | test_logging.rs:154:5:154:37 | ...::_eprint | This operation writes $@ to a log file. | test_logging.rs:154:29:154:36 | password | password | +| test_logging.rs:154:5:154:39 | ...::_eprint | test_logging.rs:154:31:154:38 | password | test_logging.rs:154:5:154:39 | ...::_eprint | This operation writes $@ to a log file. | test_logging.rs:154:31:154:38 | password | password | | test_logging.rs:155:5:155:39 | ...::_eprint | test_logging.rs:155:31:155:38 | password | test_logging.rs:155:5:155:39 | ...::_eprint | This operation writes $@ to a log file. | test_logging.rs:155:31:155:38 | password | password | | test_logging.rs:158:16:158:47 | ...::panic_fmt | test_logging.rs:158:39:158:46 | password | test_logging.rs:158:16:158:47 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:158:39:158:46 | password | password | | test_logging.rs:159:16:159:46 | ...::panic_fmt | test_logging.rs:159:38:159:45 | password | test_logging.rs:159:16:159:46 | ...::panic_fmt | This operation writes $@ to a log file. | test_logging.rs:159:38:159:45 | password | password | @@ -43,10 +43,10 @@ | test_logging.rs:166:16:166:63 | ...::assert_failed | test_logging.rs:166:55:166:62 | password | test_logging.rs:166:16:166:63 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:166:55:166:62 | password | password | | test_logging.rs:167:17:167:64 | ...::assert_failed | test_logging.rs:167:56:167:63 | password | test_logging.rs:167:17:167:64 | ...::assert_failed | This operation writes $@ to a log file. | test_logging.rs:167:56:167:63 | password | password | | test_logging.rs:168:27:168:32 | expect | test_logging.rs:168:58:168:65 | password | test_logging.rs:168:27:168:32 | expect | This operation writes $@ to a log file. | test_logging.rs:168:58:168:65 | password | password | -| test_logging.rs:174:30:174:34 | write | test_logging.rs:174:60:174:67 | password | test_logging.rs:174:30:174:34 | write | This operation writes $@ to a log file. | test_logging.rs:174:60:174:67 | password | password | -| test_logging.rs:175:30:175:38 | write_all | test_logging.rs:175:64:175:71 | password | test_logging.rs:175:30:175:38 | write_all | This operation writes $@ to a log file. | test_logging.rs:175:64:175:71 | password | password | -| test_logging.rs:178:9:178:13 | write | test_logging.rs:178:39:178:46 | password | test_logging.rs:178:9:178:13 | write | This operation writes $@ to a log file. | test_logging.rs:178:39:178:46 | password | password | -| test_logging.rs:181:9:181:13 | write | test_logging.rs:181:39:181:46 | password | test_logging.rs:181:9:181:13 | write | This operation writes $@ to a log file. | test_logging.rs:181:39:181:46 | password | password | +| test_logging.rs:174:30:174:34 | write | test_logging.rs:174:62:174:69 | password | test_logging.rs:174:30:174:34 | write | This operation writes $@ to a log file. | test_logging.rs:174:62:174:69 | password | password | +| test_logging.rs:175:30:175:38 | write_all | test_logging.rs:175:66:175:73 | password | test_logging.rs:175:30:175:38 | write_all | This operation writes $@ to a log file. | test_logging.rs:175:66:175:73 | password | password | +| test_logging.rs:178:9:178:13 | write | test_logging.rs:178:41:178:48 | password | test_logging.rs:178:9:178:13 | write | This operation writes $@ to a log file. | test_logging.rs:178:41:178:48 | password | password | +| test_logging.rs:181:9:181:13 | write | test_logging.rs:181:41:181:48 | password | test_logging.rs:181:9:181:13 | write | This operation writes $@ to a log file. | test_logging.rs:181:41:181:48 | password | password | edges | test_logging.rs:42:12:42:35 | MacroExpr | test_logging.rs:42:5:42:36 | ...::log | provenance | MaD:0 Sink:MaD:0 | | test_logging.rs:42:28:42:35 | password | test_logging.rs:42:12:42:35 | MacroExpr | provenance | | @@ -148,12 +148,12 @@ edges | test_logging.rs:131:12:131:31 | MacroExpr | test_logging.rs:131:5:131:32 | ...::log | provenance | MaD:0 Sink:MaD:0 | | 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:152:12:152:35 | MacroExpr | test_logging.rs:152:5:152:36 | ...::_print | provenance | MaD:3 Sink:MaD:3 | -| test_logging.rs:152:28:152:35 | password | test_logging.rs:152:12:152:35 | MacroExpr | provenance | | +| test_logging.rs:152:12:152:37 | MacroExpr | test_logging.rs:152:5:152:38 | ...::_print | provenance | MaD:3 Sink:MaD:3 | +| test_logging.rs:152:30:152:37 | password | test_logging.rs:152:12:152:37 | MacroExpr | provenance | | | test_logging.rs:153:14:153:37 | MacroExpr | test_logging.rs:153:5:153:38 | ...::_print | provenance | MaD:3 Sink:MaD:3 | | test_logging.rs:153:30:153:37 | password | test_logging.rs:153:14:153:37 | MacroExpr | provenance | | -| test_logging.rs:154:13:154:36 | MacroExpr | test_logging.rs:154:5:154:37 | ...::_eprint | provenance | MaD:4 Sink:MaD:4 | -| test_logging.rs:154:29:154:36 | password | test_logging.rs:154:13:154:36 | MacroExpr | provenance | | +| test_logging.rs:154:13:154:38 | MacroExpr | test_logging.rs:154:5:154:39 | ...::_eprint | provenance | MaD:4 Sink:MaD:4 | +| test_logging.rs:154:31:154:38 | password | test_logging.rs:154:13:154:38 | MacroExpr | provenance | | | test_logging.rs:155:15:155:38 | MacroExpr | test_logging.rs:155:5:155:39 | ...::_eprint | provenance | MaD:4 Sink:MaD:4 | | test_logging.rs:155:31:155:38 | password | test_logging.rs:155:15:155:38 | MacroExpr | provenance | | | test_logging.rs:158:23:158:46 | MacroExpr | test_logging.rs:158:16:158:47 | ...::panic_fmt | provenance | MaD:9 Sink:MaD:9 | @@ -188,38 +188,38 @@ edges | test_logging.rs:168:42:168:65 | MacroExpr | test_logging.rs:168:42:168:65 | ...::format(...) | provenance | MaD:48 | | test_logging.rs:168:42:168:65 | { ... } | test_logging.rs:168:42:168:65 | ...::must_use(...) | provenance | MaD:47 | | test_logging.rs:168:58:168:65 | password | test_logging.rs:168:42:168:65 | MacroExpr | provenance | | -| test_logging.rs:174:36:174:68 | MacroExpr | test_logging.rs:174:36:174:79 | ... .as_bytes(...) | provenance | MaD:46 | -| test_logging.rs:174:36:174:68 | res | test_logging.rs:174:44:174:67 | { ... } | provenance | | -| test_logging.rs:174:36:174:79 | ... .as_bytes(...) | test_logging.rs:174:30:174:34 | write | provenance | MaD:5 Sink:MaD:5 | -| test_logging.rs:174:44:174:67 | ...::format(...) | test_logging.rs:174:36:174:68 | res | provenance | | -| test_logging.rs:174:44:174:67 | ...::must_use(...) | test_logging.rs:174:36:174:68 | MacroExpr | provenance | | -| test_logging.rs:174:44:174:67 | MacroExpr | test_logging.rs:174:44:174:67 | ...::format(...) | provenance | MaD:48 | -| test_logging.rs:174:44:174:67 | { ... } | test_logging.rs:174:44:174:67 | ...::must_use(...) | provenance | MaD:47 | -| test_logging.rs:174:60:174:67 | password | test_logging.rs:174:44:174:67 | MacroExpr | provenance | | -| test_logging.rs:175:40:175:72 | MacroExpr | test_logging.rs:175:40:175:83 | ... .as_bytes(...) | provenance | MaD:46 | -| test_logging.rs:175:40:175:72 | res | test_logging.rs:175:48:175:71 | { ... } | provenance | | -| test_logging.rs:175:40:175:83 | ... .as_bytes(...) | test_logging.rs:175:30:175:38 | write_all | provenance | MaD:6 Sink:MaD:6 | -| test_logging.rs:175:48:175:71 | ...::format(...) | test_logging.rs:175:40:175:72 | res | provenance | | -| test_logging.rs:175:48:175:71 | ...::must_use(...) | test_logging.rs:175:40:175:72 | MacroExpr | provenance | | -| test_logging.rs:175:48:175:71 | MacroExpr | test_logging.rs:175:48:175:71 | ...::format(...) | provenance | MaD:48 | -| test_logging.rs:175:48:175:71 | { ... } | test_logging.rs:175:48:175:71 | ...::must_use(...) | provenance | MaD:47 | -| test_logging.rs:175:64:175:71 | password | test_logging.rs:175:48:175:71 | MacroExpr | provenance | | -| test_logging.rs:178:15:178:47 | MacroExpr | test_logging.rs:178:15:178:58 | ... .as_bytes(...) | provenance | MaD:46 | -| test_logging.rs:178:15:178:47 | res | test_logging.rs:178:23:178:46 | { ... } | provenance | | -| test_logging.rs:178:15:178:58 | ... .as_bytes(...) | test_logging.rs:178:9:178:13 | write | provenance | MaD:5 Sink:MaD:5 | -| test_logging.rs:178:23:178:46 | ...::format(...) | test_logging.rs:178:15:178:47 | res | provenance | | -| test_logging.rs:178:23:178:46 | ...::must_use(...) | test_logging.rs:178:15:178:47 | MacroExpr | provenance | | -| test_logging.rs:178:23:178:46 | MacroExpr | test_logging.rs:178:23:178:46 | ...::format(...) | provenance | MaD:48 | -| test_logging.rs:178:23:178:46 | { ... } | test_logging.rs:178:23:178:46 | ...::must_use(...) | provenance | MaD:47 | -| test_logging.rs:178:39:178:46 | password | test_logging.rs:178:23:178:46 | MacroExpr | provenance | | -| test_logging.rs:181:15:181:47 | MacroExpr | test_logging.rs:181:15:181:58 | ... .as_bytes(...) | provenance | MaD:46 | -| test_logging.rs:181:15:181:47 | res | test_logging.rs:181:23:181:46 | { ... } | provenance | | -| test_logging.rs:181:15:181:58 | ... .as_bytes(...) | test_logging.rs:181:9:181:13 | write | provenance | MaD:7 Sink:MaD:7 | -| test_logging.rs:181:23:181:46 | ...::format(...) | test_logging.rs:181:15:181:47 | res | provenance | | -| test_logging.rs:181:23:181:46 | ...::must_use(...) | test_logging.rs:181:15:181:47 | MacroExpr | provenance | | -| test_logging.rs:181:23:181:46 | MacroExpr | test_logging.rs:181:23:181:46 | ...::format(...) | provenance | MaD:48 | -| test_logging.rs:181:23:181:46 | { ... } | test_logging.rs:181:23:181:46 | ...::must_use(...) | provenance | MaD:47 | -| test_logging.rs:181:39:181:46 | password | test_logging.rs:181:23:181:46 | MacroExpr | provenance | | +| test_logging.rs:174:36:174:70 | MacroExpr | test_logging.rs:174:36:174:81 | ... .as_bytes(...) | provenance | MaD:46 | +| test_logging.rs:174:36:174:70 | res | test_logging.rs:174:44:174:69 | { ... } | provenance | | +| test_logging.rs:174:36:174:81 | ... .as_bytes(...) | test_logging.rs:174:30:174:34 | write | provenance | MaD:5 Sink:MaD:5 | +| test_logging.rs:174:44:174:69 | ...::format(...) | test_logging.rs:174:36:174:70 | res | provenance | | +| test_logging.rs:174:44:174:69 | ...::must_use(...) | test_logging.rs:174:36:174:70 | MacroExpr | provenance | | +| test_logging.rs:174:44:174:69 | MacroExpr | test_logging.rs:174:44:174:69 | ...::format(...) | provenance | MaD:48 | +| test_logging.rs:174:44:174:69 | { ... } | test_logging.rs:174:44:174:69 | ...::must_use(...) | provenance | MaD:47 | +| test_logging.rs:174:62:174:69 | password | test_logging.rs:174:44:174:69 | MacroExpr | provenance | | +| test_logging.rs:175:40:175:74 | MacroExpr | test_logging.rs:175:40:175:85 | ... .as_bytes(...) | provenance | MaD:46 | +| test_logging.rs:175:40:175:74 | res | test_logging.rs:175:48:175:73 | { ... } | provenance | | +| test_logging.rs:175:40:175:85 | ... .as_bytes(...) | test_logging.rs:175:30:175:38 | write_all | provenance | MaD:6 Sink:MaD:6 | +| test_logging.rs:175:48:175:73 | ...::format(...) | test_logging.rs:175:40:175:74 | res | provenance | | +| test_logging.rs:175:48:175:73 | ...::must_use(...) | test_logging.rs:175:40:175:74 | MacroExpr | provenance | | +| test_logging.rs:175:48:175:73 | MacroExpr | test_logging.rs:175:48:175:73 | ...::format(...) | provenance | MaD:48 | +| test_logging.rs:175:48:175:73 | { ... } | test_logging.rs:175:48:175:73 | ...::must_use(...) | provenance | MaD:47 | +| test_logging.rs:175:66:175:73 | password | test_logging.rs:175:48:175:73 | MacroExpr | provenance | | +| test_logging.rs:178:15:178:49 | MacroExpr | test_logging.rs:178:15:178:60 | ... .as_bytes(...) | provenance | MaD:46 | +| test_logging.rs:178:15:178:49 | res | test_logging.rs:178:23:178:48 | { ... } | provenance | | +| test_logging.rs:178:15:178:60 | ... .as_bytes(...) | test_logging.rs:178:9:178:13 | write | provenance | MaD:5 Sink:MaD:5 | +| test_logging.rs:178:23:178:48 | ...::format(...) | test_logging.rs:178:15:178:49 | res | provenance | | +| test_logging.rs:178:23:178:48 | ...::must_use(...) | test_logging.rs:178:15:178:49 | MacroExpr | provenance | | +| test_logging.rs:178:23:178:48 | MacroExpr | test_logging.rs:178:23:178:48 | ...::format(...) | provenance | MaD:48 | +| test_logging.rs:178:23:178:48 | { ... } | test_logging.rs:178:23:178:48 | ...::must_use(...) | provenance | MaD:47 | +| test_logging.rs:178:41:178:48 | password | test_logging.rs:178:23:178:48 | MacroExpr | provenance | | +| test_logging.rs:181:15:181:49 | MacroExpr | test_logging.rs:181:15:181:60 | ... .as_bytes(...) | provenance | MaD:46 | +| test_logging.rs:181:15:181:49 | res | test_logging.rs:181:23:181:48 | { ... } | provenance | | +| test_logging.rs:181:15:181:60 | ... .as_bytes(...) | test_logging.rs:181:9:181:13 | write | provenance | MaD:7 Sink:MaD:7 | +| test_logging.rs:181:23:181:48 | ...::format(...) | test_logging.rs:181:15:181:49 | res | provenance | | +| test_logging.rs:181:23:181:48 | ...::must_use(...) | test_logging.rs:181:15:181:49 | MacroExpr | provenance | | +| test_logging.rs:181:23:181:48 | MacroExpr | test_logging.rs:181:23:181:48 | ...::format(...) | provenance | MaD:48 | +| test_logging.rs:181:23:181:48 | { ... } | test_logging.rs:181:23:181:48 | ...::must_use(...) | provenance | MaD:47 | +| test_logging.rs:181:41:181:48 | password | test_logging.rs:181:23:181:48 | MacroExpr | provenance | | nodes | test_logging.rs:42:5:42:36 | ...::log | semmle.label | ...::log | | test_logging.rs:42:12:42:35 | MacroExpr | semmle.label | MacroExpr | @@ -342,15 +342,15 @@ nodes | 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:152:5:152:36 | ...::_print | semmle.label | ...::_print | -| test_logging.rs:152:12:152:35 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:152:28:152:35 | password | semmle.label | password | +| test_logging.rs:152:5:152:38 | ...::_print | semmle.label | ...::_print | +| test_logging.rs:152:12:152:37 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:152:30:152:37 | password | semmle.label | password | | test_logging.rs:153:5:153:38 | ...::_print | semmle.label | ...::_print | | test_logging.rs:153:14:153:37 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:153:30:153:37 | password | semmle.label | password | -| test_logging.rs:154:5:154:37 | ...::_eprint | semmle.label | ...::_eprint | -| test_logging.rs:154:13:154:36 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:154:29:154:36 | password | semmle.label | password | +| test_logging.rs:154:5:154:39 | ...::_eprint | semmle.label | ...::_eprint | +| test_logging.rs:154:13:154:38 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:154:31:154:38 | password | semmle.label | password | | test_logging.rs:155:5:155:39 | ...::_eprint | semmle.label | ...::_eprint | | test_logging.rs:155:15:155:38 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:155:31:155:38 | password | semmle.label | password | @@ -398,39 +398,39 @@ nodes | test_logging.rs:168:42:168:65 | { ... } | semmle.label | { ... } | | test_logging.rs:168:58:168:65 | password | semmle.label | password | | test_logging.rs:174:30:174:34 | write | semmle.label | write | -| test_logging.rs:174:36:174:68 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:174:36:174:68 | res | semmle.label | res | -| test_logging.rs:174:36:174:79 | ... .as_bytes(...) | semmle.label | ... .as_bytes(...) | -| test_logging.rs:174:44:174:67 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:174:44:174:67 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:174:44:174:67 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:174:44:174:67 | { ... } | semmle.label | { ... } | -| test_logging.rs:174:60:174:67 | password | semmle.label | password | +| test_logging.rs:174:36:174:70 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:174:36:174:70 | res | semmle.label | res | +| test_logging.rs:174:36:174:81 | ... .as_bytes(...) | semmle.label | ... .as_bytes(...) | +| test_logging.rs:174:44:174:69 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:174:44:174:69 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:174:44:174:69 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:174:44:174:69 | { ... } | semmle.label | { ... } | +| test_logging.rs:174:62:174:69 | password | semmle.label | password | | test_logging.rs:175:30:175:38 | write_all | semmle.label | write_all | -| test_logging.rs:175:40:175:72 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:175:40:175:72 | res | semmle.label | res | -| test_logging.rs:175:40:175:83 | ... .as_bytes(...) | semmle.label | ... .as_bytes(...) | -| test_logging.rs:175:48:175:71 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:175:48:175:71 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:175:48:175:71 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:175:48:175:71 | { ... } | semmle.label | { ... } | -| test_logging.rs:175:64:175:71 | password | semmle.label | password | +| test_logging.rs:175:40:175:74 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:175:40:175:74 | res | semmle.label | res | +| test_logging.rs:175:40:175:85 | ... .as_bytes(...) | semmle.label | ... .as_bytes(...) | +| test_logging.rs:175:48:175:73 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:175:48:175:73 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:175:48:175:73 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:175:48:175:73 | { ... } | semmle.label | { ... } | +| test_logging.rs:175:66:175:73 | password | semmle.label | password | | test_logging.rs:178:9:178:13 | write | semmle.label | write | -| test_logging.rs:178:15:178:47 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:178:15:178:47 | res | semmle.label | res | -| test_logging.rs:178:15:178:58 | ... .as_bytes(...) | semmle.label | ... .as_bytes(...) | -| test_logging.rs:178:23:178:46 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:178:23:178:46 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:178:23:178:46 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:178:23:178:46 | { ... } | semmle.label | { ... } | -| test_logging.rs:178:39:178:46 | password | semmle.label | password | +| test_logging.rs:178:15:178:49 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:178:15:178:49 | res | semmle.label | res | +| test_logging.rs:178:15:178:60 | ... .as_bytes(...) | semmle.label | ... .as_bytes(...) | +| test_logging.rs:178:23:178:48 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:178:23:178:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:178:23:178:48 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:178:23:178:48 | { ... } | semmle.label | { ... } | +| test_logging.rs:178:41:178:48 | password | semmle.label | password | | test_logging.rs:181:9:181:13 | write | semmle.label | write | -| test_logging.rs:181:15:181:47 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:181:15:181:47 | res | semmle.label | res | -| test_logging.rs:181:15:181:58 | ... .as_bytes(...) | semmle.label | ... .as_bytes(...) | -| test_logging.rs:181:23:181:46 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:181:23:181:46 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:181:23:181:46 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:181:23:181:46 | { ... } | semmle.label | { ... } | -| test_logging.rs:181:39:181:46 | password | semmle.label | password | +| test_logging.rs:181:15:181:49 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:181:15:181:49 | res | semmle.label | res | +| test_logging.rs:181:15:181:60 | ... .as_bytes(...) | semmle.label | ... .as_bytes(...) | +| test_logging.rs:181:23:181:48 | ...::format(...) | semmle.label | ...::format(...) | +| test_logging.rs:181:23:181:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | +| test_logging.rs:181:23:181:48 | MacroExpr | semmle.label | MacroExpr | +| test_logging.rs:181:23:181:48 | { ... } | semmle.label | { ... } | +| test_logging.rs:181:41:181: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 26180d858d8e..439af840b902 100644 --- a/rust/ql/test/query-tests/security/CWE-312/options.yml +++ b/rust/ql/test/query-tests/security/CWE-312/options.yml @@ -1,3 +1,4 @@ qltest_cargo_check: true qltest_dependencies: - log = { version = "0.4.25", features = ["kv"] } + - simple_logger = { version = "5.0.0" } 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 15ab6c9179bd..a850e38dc09f 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 @@ -149,9 +149,9 @@ fn test_log(harmless: String, password: String, encrypted_password: String) { } fn test_std(password: String, i: i32, opt_i: Option) { - print!("message = {}", password); // $ Source Alert[rust/cleartext-logging] + print!("message = {}\n", password); // $ Source Alert[rust/cleartext-logging] println!("message = {}", password); // $ Source Alert[rust/cleartext-logging] - eprint!("message = {}", password); // $ Source Alert[rust/cleartext-logging] + eprint!("message = {}\n", password); // $ Source Alert[rust/cleartext-logging] eprintln!("message = {}", password); // $ Source Alert[rust/cleartext-logging] match i { @@ -169,14 +169,21 @@ fn test_std(password: String, i: i32, opt_i: Option) { _ => {} } - std::io::stdout().lock().write_fmt(format_args!("message = {}", password)); // $ MISSING: Alert[rust/cleartext-logging] - std::io::stderr().lock().write_fmt(format_args!("message = {}", password)); // $ MISSING: Alert[rust/cleartext-logging] - std::io::stdout().lock().write(format!("message = {}", password).as_bytes()); // $ Source Alert[rust/cleartext-logging] - std::io::stdout().lock().write_all(format!("message = {}", password).as_bytes()); // $ Source Alert[rust/cleartext-logging] + std::io::stdout().lock().write_fmt(format_args!("message = {}\n", password)); // $ MISSING: Alert[rust/cleartext-logging] + std::io::stderr().lock().write_fmt(format_args!("message = {}\n", password)); // $ MISSING: Alert[rust/cleartext-logging] + std::io::stdout().lock().write(format!("message = {}\n", password).as_bytes()); // $ Source Alert[rust/cleartext-logging] + std::io::stdout().lock().write_all(format!("message = {}\n", password).as_bytes()); // $ Source Alert[rust/cleartext-logging] let mut out = std::io::stdout().lock(); - out.write(format!("message = {}", password).as_bytes()); // $ Source Alert[rust/cleartext-logging] + out.write(format!("message = {}\n", password).as_bytes()); // $ Source Alert[rust/cleartext-logging] let mut err = std::io::stderr().lock(); - err.write(format!("message = {}", password).as_bytes()); // $ Source Alert[rust/cleartext-logging] + err.write(format!("message = {}\n", password).as_bytes()); // $ Source Alert[rust/cleartext-logging] +} + +fn main() { + simple_logger::SimpleLogger::new().init().unwrap(); + + test_log("harmless".to_string(), "123456".to_string(), "[encrypted]".to_string()); + test_std("123456".to_string(), 0, None); }