remote_server: Remove unnecessary Box, prevent time-of-check time-of-use bug (#24730)

The MultiWrite struct is defined in the function scope and is allowed to
have a concrete type, which means we can throw away the extra Box.
PathBuf::exists is known to be prone to invalid usage. It doesn't take
into account permissions errors and just returns false, additionally it
introduces a time-of-check time-of-use bug. While extremely unlikely,
why not fix it anyway.

Release Notes:

- remove unnecessary Box
- prevent time-of-check time-of-use bug
This commit is contained in:
tidely 2025-02-13 05:55:22 +02:00 committed by GitHub
parent 21a1541a70
commit 5d634245a2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -59,7 +59,7 @@ fn init_logging_proxy() {
fn init_logging_server(log_file_path: PathBuf) -> Result<Receiver<Vec<u8>>> {
struct MultiWrite {
file: Box<dyn std::io::Write + Send + 'static>,
file: std::fs::File,
channel: Sender<Vec<u8>>,
buffer: Vec<u8>,
}
@ -80,14 +80,11 @@ fn init_logging_server(log_file_path: PathBuf) -> Result<Receiver<Vec<u8>>> {
}
}
let log_file = Box::new(if log_file_path.exists() {
std::fs::OpenOptions::new()
.append(true)
.open(&log_file_path)
.context("Failed to open log file in append mode")?
} else {
std::fs::File::create(&log_file_path).context("Failed to create log file")?
});
let log_file = std::fs::OpenOptions::new()
.create(true)
.append(true)
.open(&log_file_path)
.context("Failed to open log file in append mode")?;
let (tx, rx) = smol::channel::unbounded();