Skip to content

Commit

Permalink
Bug 1893406 - Always provide a valid installation time in WER crash r…
Browse files Browse the repository at this point in the history
  • Loading branch information
Ponchale committed Jun 21, 2024
1 parent c123138 commit 7f3729d
Showing 1 changed file with 23 additions and 5 deletions.
28 changes: 23 additions & 5 deletions toolkit/crashreporter/mozwer-rust/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
use serde_json::ser::to_writer;
use std::convert::TryInto;
use std::ffi::OsString;
use std::fs::{read_to_string, DirBuilder, File};
use std::fs::{read_to_string, DirBuilder, File, OpenOptions};
use std::io::{BufRead, BufReader, Write};
use std::mem::{size_of, transmute, zeroed};
use std::os::windows::ffi::{OsStrExt, OsStringExt};
Expand Down Expand Up @@ -442,8 +442,7 @@
let install_time = ApplicationInformation::get_install_time(
&crash_reports_dir,
&application_data.build_id,
)
.unwrap_or("0".to_string());
);

Ok(ApplicationInformation {
install_path,
Expand Down Expand Up @@ -514,10 +513,29 @@
}
}

fn get_install_time(crash_reports_path: &Path, build_id: &str) -> Result<String, ()> {
fn get_install_time(crash_reports_path: &Path, build_id: &str) -> String {
let file_name = "InstallTime".to_owned() + build_id;
let file_path = crash_reports_path.join(file_name);
read_to_string(file_path).map_err(|_e| ())

// If the file isn't present we'll attempt to atomically create it and
// populate it. This code essentially matches the corresponding code in
// nsExceptionHandler.cpp SetupExtraData().
if let Ok(mut file) = OpenOptions::new()
.create_new(true)
.write(true)
.open(&file_path)
{
// SAFETY: No risks in calling `time()` with a null pointer.
let _ = write!(&mut file, "{}", unsafe { time(null_mut()) }.to_string());
}

// As a last resort, if we can't read the file we fall back to the
// current time. This might cause us to overstate the number of users
// affected by a crash, but given it's very unlikely to hit this particular
// path it won't be a problem.
//
// SAFETY: No risks in calling `time()` with a null pointer.
read_to_string(&file_path).unwrap_or(unsafe { time(null_mut()) }.to_string())
}
}

Expand Down

0 comments on commit 7f3729d

Please sign in to comment.