diff --git a/lib/src/crashlog.rs b/lib/src/crashlog.rs index 06e0662..175ae71 100644 --- a/lib/src/crashlog.rs +++ b/lib/src/crashlog.rs @@ -58,7 +58,7 @@ impl CrashLog { }; queue.push_front(region) } - Err(err) => log::error!("Invalid region in Box record: {err}"), + Err(err) => log::warn!("Invalid region in Box record: {err}"), } } diff --git a/lib/src/error.rs b/lib/src/error.rs index b2d15ce..d164411 100644 --- a/lib/src/error.rs +++ b/lib/src/error.rs @@ -25,6 +25,7 @@ pub enum Error { MissingDecodeDefinitions(Version), InvalidBootErrorRecordRegion, InvalidHeader, + EmptyRegion, InvalidHeaderType(u16), InvalidRecordType(u8), InvalidProductID(u32), @@ -57,6 +58,7 @@ impl fmt::Display for Error { } Error::InvalidBootErrorRecordRegion => write!(f, "Invalid Boot Error Record region"), Error::InvalidHeader => write!(f, "Invalid Crash Log Header"), + Error::EmptyRegion => write!(f, "The Crash Log Region is not populated"), Error::InvalidHeaderType(ht) => write!(f, "Invalid Crash Log Header Type: {ht}"), Error::InvalidRecordType(rt) => write!(f, "Unknown Crash Log Record Type: {rt:#x}"), Error::InvalidProductID(pid) => write!(f, "Unknown Crash Log Product ID: {pid:#x}"), diff --git a/lib/src/region.rs b/lib/src/region.rs index 7a4cd34..8aee79b 100644 --- a/lib/src/region.rs +++ b/lib/src/region.rs @@ -94,6 +94,10 @@ impl Region { cursor += record_size; } + if region.records.is_empty() { + return Err(Error::EmptyRegion); + } + Ok(region) } diff --git a/lib/tests/region.rs b/lib/tests/region.rs index 33e91a2..2e08d7b 100644 --- a/lib/tests/region.rs +++ b/lib/tests/region.rs @@ -15,3 +15,9 @@ fn from_slice() { assert!(region.is_ok()); } + +#[test] +fn empty() { + let region = Region::from_slice(&[]); + assert!(region.is_err()); +}