Skip to content

Commit 35423c2

Browse files
committed
Rust: Accept fixes for rust/cleartext-logging.
1 parent 846666e commit 35423c2

2 files changed

Lines changed: 56 additions & 35 deletions

File tree

rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected

Lines changed: 49 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
| test_logging.rs:94:11:94:28 | MacroExpr | test_logging.rs:93:15:93:22 | password | test_logging.rs:94:11:94:28 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:93:15:93:22 | password | password |
2727
| test_logging.rs:97:11:97:18 | MacroExpr | test_logging.rs:96:42:96:49 | password | test_logging.rs:97:11:97:18 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:96:42:96:49 | password | password |
2828
| test_logging.rs:100:11:100:18 | MacroExpr | test_logging.rs:99:38:99:45 | password | test_logging.rs:100:11:100:18 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:99:38:99:45 | password | password |
29+
| test_logging.rs:104:11:104:18 | MacroExpr | test_logging.rs:103:37:103:44 | password | test_logging.rs:104:11:104:18 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:103:37:103:44 | password | password |
30+
| test_logging.rs:108:11:108:18 | MacroExpr | test_logging.rs:107:39:107:46 | password | test_logging.rs:108:11:108:18 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:107:39:107:46 | password | password |
2931
| test_logging.rs:118:12:118:41 | MacroExpr | test_logging.rs:118:28:118:41 | get_password(...) | test_logging.rs:118:12:118:41 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:118:28:118:41 | get_password(...) | get_password(...) |
3032
| test_logging.rs:131:12:131:31 | MacroExpr | test_logging.rs:129:25:129:32 | password | test_logging.rs:131:12:131:31 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:129:25:129:32 | password | password |
3133
| test_logging.rs:141:11:141:37 | MacroExpr | test_logging.rs:141:27:141:37 | s1.password | test_logging.rs:141:11:141:37 | MacroExpr | This operation writes $@ to a log file. | test_logging.rs:141:27:141:37 | s1.password | s1.password |
@@ -115,16 +117,24 @@ edges
115117
| test_logging.rs:93:15:93:22 | password | test_logging.rs:93:14:93:22 | &password | provenance | Config |
116118
| test_logging.rs:96:9:96:10 | m2 | test_logging.rs:97:11:97:18 | MacroExpr | provenance | Sink:MaD:11 |
117119
| test_logging.rs:96:14:96:49 | ... + ... | test_logging.rs:96:9:96:10 | m2 | provenance | |
118-
| test_logging.rs:96:41:96:49 | &password | test_logging.rs:96:14:96:49 | ... + ... | provenance | MaD:16 |
119-
| test_logging.rs:96:41:96:49 | &password [&ref] | test_logging.rs:96:14:96:49 | ... + ... | provenance | MaD:16 |
120+
| test_logging.rs:96:41:96:49 | &password | test_logging.rs:96:14:96:49 | ... + ... | provenance | MaD:17 |
121+
| test_logging.rs:96:41:96:49 | &password [&ref] | test_logging.rs:96:14:96:49 | ... + ... | provenance | MaD:17 |
120122
| test_logging.rs:96:42:96:49 | password | test_logging.rs:96:41:96:49 | &password | provenance | Config |
121123
| test_logging.rs:96:42:96:49 | password | test_logging.rs:96:41:96:49 | &password [&ref] | provenance | |
122124
| test_logging.rs:99:9:99:10 | m3 | test_logging.rs:100:11:100:18 | MacroExpr | provenance | Sink:MaD:11 |
123125
| test_logging.rs:99:22:99:45 | ...::format(...) | test_logging.rs:99:22:99:45 | { ... } | provenance | |
124126
| test_logging.rs:99:22:99:45 | ...::must_use(...) | test_logging.rs:99:9:99:10 | m3 | provenance | |
125-
| test_logging.rs:99:22:99:45 | MacroExpr | test_logging.rs:99:22:99:45 | ...::format(...) | provenance | MaD:19 |
126-
| test_logging.rs:99:22:99:45 | { ... } | test_logging.rs:99:22:99:45 | ...::must_use(...) | provenance | MaD:20 |
127+
| test_logging.rs:99:22:99:45 | MacroExpr | test_logging.rs:99:22:99:45 | ...::format(...) | provenance | MaD:20 |
128+
| test_logging.rs:99:22:99:45 | { ... } | test_logging.rs:99:22:99:45 | ...::must_use(...) | provenance | MaD:21 |
127129
| test_logging.rs:99:38:99:45 | password | test_logging.rs:99:22:99:45 | MacroExpr | provenance | |
130+
| test_logging.rs:103:12:103:18 | [post] &mut m4 [&ref] | test_logging.rs:103:17:103:18 | [post] m4 | provenance | |
131+
| test_logging.rs:103:17:103:18 | [post] m4 | test_logging.rs:104:11:104:18 | MacroExpr | provenance | Sink:MaD:11 |
132+
| test_logging.rs:103:21:103:44 | MacroExpr | test_logging.rs:103:12:103:18 | [post] &mut m4 [&ref] | provenance | MaD:16 |
133+
| test_logging.rs:103:37:103:44 | password | test_logging.rs:103:21:103:44 | MacroExpr | provenance | |
134+
| test_logging.rs:107:14:107:20 | [post] &mut m5 [&ref] | test_logging.rs:107:19:107:20 | [post] m5 | provenance | |
135+
| test_logging.rs:107:19:107:20 | [post] m5 | test_logging.rs:108:11:108:18 | MacroExpr | provenance | Sink:MaD:11 |
136+
| test_logging.rs:107:23:107:46 | MacroExpr | test_logging.rs:107:14:107:20 | [post] &mut m5 [&ref] | provenance | MaD:16 |
137+
| test_logging.rs:107:39:107:46 | password | test_logging.rs:107:23:107:46 | MacroExpr | provenance | |
128138
| test_logging.rs:118:28:118:41 | get_password(...) | test_logging.rs:118:12:118:41 | MacroExpr | provenance | Sink:MaD:11 |
129139
| test_logging.rs:129:9:129:10 | t1 [tuple.1] | test_logging.rs:131:28:131:29 | t1 [tuple.1] | provenance | |
130140
| test_logging.rs:129:14:129:33 | TupleExpr [tuple.1] | test_logging.rs:129:9:129:10 | t1 [tuple.1] | provenance | |
@@ -139,17 +149,17 @@ edges
139149
| test_logging.rs:176:34:176:79 | MacroExpr | test_logging.rs:176:33:176:79 | &... [&ref] | provenance | |
140150
| test_logging.rs:176:42:176:78 | ...::format(...) | test_logging.rs:176:42:176:78 | { ... } | provenance | |
141151
| test_logging.rs:176:42:176:78 | ...::must_use(...) | test_logging.rs:176:34:176:79 | MacroExpr | provenance | |
142-
| test_logging.rs:176:42:176:78 | MacroExpr | test_logging.rs:176:42:176:78 | ...::format(...) | provenance | MaD:19 |
143-
| test_logging.rs:176:42:176:78 | { ... } | test_logging.rs:176:42:176:78 | ...::must_use(...) | provenance | MaD:20 |
152+
| test_logging.rs:176:42:176:78 | MacroExpr | test_logging.rs:176:42:176:78 | ...::format(...) | provenance | MaD:20 |
153+
| test_logging.rs:176:42:176:78 | { ... } | test_logging.rs:176:42:176:78 | ...::must_use(...) | provenance | MaD:21 |
144154
| test_logging.rs:176:70:176:78 | password2 | test_logging.rs:176:42:176:78 | MacroExpr | provenance | |
145155
| test_logging.rs:180:35:180:81 | &... | test_logging.rs:180:35:180:81 | &... | provenance | Sink:MaD:3 |
146156
| test_logging.rs:180:35:180:81 | &... [&ref] | test_logging.rs:180:35:180:81 | &... | provenance | Sink:MaD:3 |
147157
| test_logging.rs:180:36:180:81 | MacroExpr | test_logging.rs:180:35:180:81 | &... | provenance | Config |
148158
| test_logging.rs:180:36:180:81 | MacroExpr | test_logging.rs:180:35:180:81 | &... [&ref] | provenance | |
149159
| test_logging.rs:180:44:180:80 | ...::format(...) | test_logging.rs:180:44:180:80 | { ... } | provenance | |
150160
| test_logging.rs:180:44:180:80 | ...::must_use(...) | test_logging.rs:180:36:180:81 | MacroExpr | provenance | |
151-
| test_logging.rs:180:44:180:80 | MacroExpr | test_logging.rs:180:44:180:80 | ...::format(...) | provenance | MaD:19 |
152-
| test_logging.rs:180:44:180:80 | { ... } | test_logging.rs:180:44:180:80 | ...::must_use(...) | provenance | MaD:20 |
161+
| test_logging.rs:180:44:180:80 | MacroExpr | test_logging.rs:180:44:180:80 | ...::format(...) | provenance | MaD:20 |
162+
| test_logging.rs:180:44:180:80 | { ... } | test_logging.rs:180:44:180:80 | ...::must_use(...) | provenance | MaD:21 |
153163
| test_logging.rs:180:72:180:80 | password2 | test_logging.rs:180:44:180:80 | MacroExpr | provenance | |
154164
| test_logging.rs:183:9:183:19 | err_result2 [Err] | test_logging.rs:184:13:184:23 | err_result2 | provenance | Sink:MaD:4 |
155165
| test_logging.rs:183:47:183:68 | Err(...) [Err] | test_logging.rs:183:9:183:19 | err_result2 [Err] | provenance | |
@@ -180,40 +190,40 @@ edges
180190
| test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | test_logging.rs:226:36:226:59 | ...::Some(...) | provenance | Sink:MaD:9 |
181191
| test_logging.rs:226:36:226:59 | MacroExpr | test_logging.rs:226:36:226:59 | ...::Some(...) [Some] | provenance | |
182192
| test_logging.rs:226:52:226:59 | password | test_logging.rs:226:36:226:59 | MacroExpr | provenance | |
183-
| test_logging.rs:229:30:229:62 | MacroExpr | test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | provenance | MaD:18 |
193+
| test_logging.rs:229:30:229:62 | MacroExpr | test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | provenance | MaD:19 |
184194
| test_logging.rs:229:30:229:71 | ... .as_str() [&ref] | test_logging.rs:229:30:229:71 | ... .as_str() | provenance | Sink:MaD:2 |
185195
| test_logging.rs:229:38:229:61 | ...::format(...) | test_logging.rs:229:38:229:61 | { ... } | provenance | |
186196
| test_logging.rs:229:38:229:61 | ...::must_use(...) | test_logging.rs:229:30:229:62 | MacroExpr | provenance | |
187-
| test_logging.rs:229:38:229:61 | MacroExpr | test_logging.rs:229:38:229:61 | ...::format(...) | provenance | MaD:19 |
188-
| test_logging.rs:229:38:229:61 | { ... } | test_logging.rs:229:38:229:61 | ...::must_use(...) | provenance | MaD:20 |
197+
| test_logging.rs:229:38:229:61 | MacroExpr | test_logging.rs:229:38:229:61 | ...::format(...) | provenance | MaD:20 |
198+
| test_logging.rs:229:38:229:61 | { ... } | test_logging.rs:229:38:229:61 | ...::must_use(...) | provenance | MaD:21 |
189199
| test_logging.rs:229:54:229:61 | password | test_logging.rs:229:38:229:61 | MacroExpr | provenance | |
190-
| test_logging.rs:242:16:242:50 | MacroExpr | test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref, element] | provenance | MaD:17 |
200+
| test_logging.rs:242:16:242:50 | MacroExpr | test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref, element] | provenance | MaD:18 |
191201
| test_logging.rs:242:16:242:61 | ... .as_bytes() [&ref, element] | test_logging.rs:242:16:242:61 | ... .as_bytes() | provenance | Sink:MaD:7 Sink:MaD:7 |
192202
| test_logging.rs:242:24:242:49 | ...::format(...) | test_logging.rs:242:24:242:49 | { ... } | provenance | |
193203
| test_logging.rs:242:24:242:49 | ...::must_use(...) | test_logging.rs:242:16:242:50 | MacroExpr | provenance | |
194-
| test_logging.rs:242:24:242:49 | MacroExpr | test_logging.rs:242:24:242:49 | ...::format(...) | provenance | MaD:19 |
195-
| test_logging.rs:242:24:242:49 | { ... } | test_logging.rs:242:24:242:49 | ...::must_use(...) | provenance | MaD:20 |
204+
| test_logging.rs:242:24:242:49 | MacroExpr | test_logging.rs:242:24:242:49 | ...::format(...) | provenance | MaD:20 |
205+
| test_logging.rs:242:24:242:49 | { ... } | test_logging.rs:242:24:242:49 | ...::must_use(...) | provenance | MaD:21 |
196206
| test_logging.rs:242:42:242:49 | password | test_logging.rs:242:24:242:49 | MacroExpr | provenance | |
197-
| test_logging.rs:245:20:245:54 | MacroExpr | test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref, element] | provenance | MaD:17 |
207+
| test_logging.rs:245:20:245:54 | MacroExpr | test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref, element] | provenance | MaD:18 |
198208
| test_logging.rs:245:20:245:65 | ... .as_bytes() [&ref, element] | test_logging.rs:245:20:245:65 | ... .as_bytes() | provenance | Sink:MaD:8 Sink:MaD:8 |
199209
| test_logging.rs:245:28:245:53 | ...::format(...) | test_logging.rs:245:28:245:53 | { ... } | provenance | |
200210
| test_logging.rs:245:28:245:53 | ...::must_use(...) | test_logging.rs:245:20:245:54 | MacroExpr | provenance | |
201-
| test_logging.rs:245:28:245:53 | MacroExpr | test_logging.rs:245:28:245:53 | ...::format(...) | provenance | MaD:19 |
202-
| test_logging.rs:245:28:245:53 | { ... } | test_logging.rs:245:28:245:53 | ...::must_use(...) | provenance | MaD:20 |
211+
| test_logging.rs:245:28:245:53 | MacroExpr | test_logging.rs:245:28:245:53 | ...::format(...) | provenance | MaD:20 |
212+
| test_logging.rs:245:28:245:53 | { ... } | test_logging.rs:245:28:245:53 | ...::must_use(...) | provenance | MaD:21 |
203213
| test_logging.rs:245:46:245:53 | password | test_logging.rs:245:28:245:53 | MacroExpr | provenance | |
204-
| test_logging.rs:248:15:248:49 | MacroExpr | test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref, element] | provenance | MaD:17 |
214+
| test_logging.rs:248:15:248:49 | MacroExpr | test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref, element] | provenance | MaD:18 |
205215
| test_logging.rs:248:15:248:60 | ... .as_bytes() [&ref, element] | test_logging.rs:248:15:248:60 | ... .as_bytes() | provenance | Sink:MaD:7 Sink:MaD:7 |
206216
| test_logging.rs:248:23:248:48 | ...::format(...) | test_logging.rs:248:23:248:48 | { ... } | provenance | |
207217
| test_logging.rs:248:23:248:48 | ...::must_use(...) | test_logging.rs:248:15:248:49 | MacroExpr | provenance | |
208-
| test_logging.rs:248:23:248:48 | MacroExpr | test_logging.rs:248:23:248:48 | ...::format(...) | provenance | MaD:19 |
209-
| test_logging.rs:248:23:248:48 | { ... } | test_logging.rs:248:23:248:48 | ...::must_use(...) | provenance | MaD:20 |
218+
| test_logging.rs:248:23:248:48 | MacroExpr | test_logging.rs:248:23:248:48 | ...::format(...) | provenance | MaD:20 |
219+
| test_logging.rs:248:23:248:48 | { ... } | test_logging.rs:248:23:248:48 | ...::must_use(...) | provenance | MaD:21 |
210220
| test_logging.rs:248:41:248:48 | password | test_logging.rs:248:23:248:48 | MacroExpr | provenance | |
211-
| test_logging.rs:251:15:251:49 | MacroExpr | test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref, element] | provenance | MaD:17 |
221+
| test_logging.rs:251:15:251:49 | MacroExpr | test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref, element] | provenance | MaD:18 |
212222
| test_logging.rs:251:15:251:60 | ... .as_bytes() [&ref, element] | test_logging.rs:251:15:251:60 | ... .as_bytes() | provenance | Sink:MaD:6 Sink:MaD:6 |
213223
| test_logging.rs:251:23:251:48 | ...::format(...) | test_logging.rs:251:23:251:48 | { ... } | provenance | |
214224
| test_logging.rs:251:23:251:48 | ...::must_use(...) | test_logging.rs:251:15:251:49 | MacroExpr | provenance | |
215-
| test_logging.rs:251:23:251:48 | MacroExpr | test_logging.rs:251:23:251:48 | ...::format(...) | provenance | MaD:19 |
216-
| test_logging.rs:251:23:251:48 | { ... } | test_logging.rs:251:23:251:48 | ...::must_use(...) | provenance | MaD:20 |
225+
| test_logging.rs:251:23:251:48 | MacroExpr | test_logging.rs:251:23:251:48 | ...::format(...) | provenance | MaD:20 |
226+
| test_logging.rs:251:23:251:48 | { ... } | test_logging.rs:251:23:251:48 | ...::must_use(...) | provenance | MaD:21 |
217227
| test_logging.rs:251:41:251:48 | password | test_logging.rs:251:23:251:48 | MacroExpr | provenance | |
218228
models
219229
| 1 | Sink: <core::option::Option as log_err::LogErrOption>::log_expect; Argument[0]; log-injection |
@@ -231,11 +241,12 @@ models
231241
| 13 | Sink: std::io::stdio::_eprint; Argument[0]; log-injection |
232242
| 14 | Sink: std::io::stdio::_print; Argument[0]; log-injection |
233243
| 15 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value |
234-
| 16 | Summary: <alloc::string::String as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint |
235-
| 17 | Summary: <alloc::string::String>::as_bytes; Argument[self].Reference; ReturnValue.Reference.Element; taint |
236-
| 18 | Summary: <alloc::string::String>::as_str; Argument[self].Reference; ReturnValue.Reference; taint |
237-
| 19 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint |
238-
| 20 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value |
244+
| 16 | Summary: <_ as core::fmt::Write>::write_fmt; Argument[0]; Argument[self].Reference; taint |
245+
| 17 | Summary: <alloc::string::String as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint |
246+
| 18 | Summary: <alloc::string::String>::as_bytes; Argument[self].Reference; ReturnValue.Reference.Element; taint |
247+
| 19 | Summary: <alloc::string::String>::as_str; Argument[self].Reference; ReturnValue.Reference; taint |
248+
| 20 | Summary: alloc::fmt::format; Argument[0]; ReturnValue; taint |
249+
| 21 | Summary: core::hint::must_use; Argument[0]; ReturnValue; value |
239250
nodes
240251
| test_logging.rs:42:12:42:35 | MacroExpr | semmle.label | MacroExpr |
241252
| test_logging.rs:42:28:42:35 | password | semmle.label | password |
@@ -326,6 +337,16 @@ nodes
326337
| test_logging.rs:99:22:99:45 | { ... } | semmle.label | { ... } |
327338
| test_logging.rs:99:38:99:45 | password | semmle.label | password |
328339
| test_logging.rs:100:11:100:18 | MacroExpr | semmle.label | MacroExpr |
340+
| test_logging.rs:103:12:103:18 | [post] &mut m4 [&ref] | semmle.label | [post] &mut m4 [&ref] |
341+
| test_logging.rs:103:17:103:18 | [post] m4 | semmle.label | [post] m4 |
342+
| test_logging.rs:103:21:103:44 | MacroExpr | semmle.label | MacroExpr |
343+
| test_logging.rs:103:37:103:44 | password | semmle.label | password |
344+
| test_logging.rs:104:11:104:18 | MacroExpr | semmle.label | MacroExpr |
345+
| test_logging.rs:107:14:107:20 | [post] &mut m5 [&ref] | semmle.label | [post] &mut m5 [&ref] |
346+
| test_logging.rs:107:19:107:20 | [post] m5 | semmle.label | [post] m5 |
347+
| test_logging.rs:107:23:107:46 | MacroExpr | semmle.label | MacroExpr |
348+
| test_logging.rs:107:39:107:46 | password | semmle.label | password |
349+
| test_logging.rs:108:11:108:18 | MacroExpr | semmle.label | MacroExpr |
329350
| test_logging.rs:118:12:118:41 | MacroExpr | semmle.label | MacroExpr |
330351
| test_logging.rs:118:28:118:41 | get_password(...) | semmle.label | get_password(...) |
331352
| test_logging.rs:129:9:129:10 | t1 [tuple.1] | semmle.label | t1 [tuple.1] |

rust/ql/test/query-tests/security/CWE-312/test_logging.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,15 +100,15 @@ fn test_log(harmless: String, password: String, encrypted_password: String) {
100100
info!("{}", m3); // $ Alert[rust/cleartext-logging]=m3
101101

102102
let mut m4 = String::new();
103-
write!(&mut m4, "message = {}", password); // $ MISSING: Source=m4
104-
info!("{}", m4); // $ MISSING: Alert[rust/cleartext-logging]=m4
103+
write!(&mut m4, "message = {}", password); // $ Source[rust/cleartext-logging]=m4
104+
info!("{}", m4); // $ Alert[rust/cleartext-logging]=m4
105105

106106
let mut m5 = String::new();
107-
writeln!(&mut m5, "message = {}", password); // $ MISSING: Source=m5
108-
info!("{}", m5); // $ MISSING: Alert[rust/cleartext-logging]=m5
107+
writeln!(&mut m5, "message = {}", password); // $ Source[rust/cleartext-logging]=m5
108+
info!("{}", m5); // $ Alert[rust/cleartext-logging]=m5
109109

110110
let mut m6 = Vec::new();
111-
write!(&mut m6, "message = {}", password); // $ MISSING: Source=m6
111+
write!(&mut m6, "message = {}", password); // $ MISSING: Source[rust/cleartext-logging]=m6
112112
info!("{}", std::str::from_utf8(&m6).unwrap()); // $ MISSING: Alert[rust/cleartext-logging]=m6
113113
unsafe {
114114
info!("{}", std::str::from_utf8_unchecked(&m6)); // $ MISSING: Alert[rust/cleartext-logging]=m6
@@ -135,7 +135,7 @@ fn test_log(harmless: String, password: String, encrypted_password: String) {
135135
// logging from a struct
136136
let s1 = MyStruct1 {
137137
harmless: "foo".to_string(),
138-
password: "123456".to_string(), // $ MISSING: Source=s1
138+
password: "123456".to_string(), // $ MISSING: Source[rust/cleartext-logging]=s1
139139
};
140140
warn!("message = {}", s1.harmless);
141141
warn!("message = {}", s1.password); // $ Alert[rust/cleartext-logging]
@@ -145,7 +145,7 @@ fn test_log(harmless: String, password: String, encrypted_password: String) {
145145

146146
let s2 = MyStruct2 {
147147
harmless: "foo".to_string(),
148-
password: "123456".to_string(), // $ MISSING: Source=s2
148+
password: "123456".to_string(), // $ MISSING: Source[rust/cleartext-logging]=s2
149149
};
150150
warn!("message = {}", s2.harmless);
151151
warn!("message = {}", s2.password); // $ Alert[rust/cleartext-logging]

0 commit comments

Comments
 (0)