refactor(sidecar): inline Record construction for safer logging

- Build Record inline so fmt::Arguments temporary only lives through writer.write, avoiding dropped-temporary borrow.
- Add explicit 'static annotation on leaked string before reboxing for clarity.
This commit is contained in:
Slinetrac
2025-10-09 18:41:09 +08:00
parent fe7eb59f18
commit 58bd2032f3

View File

@@ -64,16 +64,17 @@ fn write_sidecar_log(
message: String,
) -> String {
let boxed = message.into_boxed_str();
let leaked = Box::leak(boxed);
let leaked: &'static mut str = Box::leak(boxed);
let leaked_ptr = leaked as *mut str;
let args = format_args!("{}", leaked);
{
let record = Record::builder()
.args(args)
.level(level)
.target("sidecar")
.build();
let _ = writer.write(now, &record);
let _ = writer.write(
now,
&Record::builder()
.args(format_args!("{}", &*leaked))
.level(level)
.target("sidecar")
.build(),
);
}
// SAFETY: `leaked` originated from `Box::leak` above; reboxing frees it immediately after use.
unsafe { String::from(Box::from_raw(leaked_ptr)) }