Skip to content

Commit 027f9eb

Browse files
committed
Fix underflow when input is shorter than one sector
This also changes the error to InvalidSignature when the input is too short (it used to be ReadError in release mode and panic in debug mode).
1 parent b282043 commit 027f9eb

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

src/lib.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -729,6 +729,10 @@ impl GPT {
729729
reader.seek(SeekFrom::Start(sector_size))?;
730730
let header = GPTHeader::read_from(&mut reader).or_else(|primary_err| {
731731
let len = reader.seek(SeekFrom::End(0))?;
732+
if len < sector_size {
733+
return Err(InvalidSignature);
734+
}
735+
732736
reader.seek(SeekFrom::Start((len / sector_size - 1) * sector_size))?;
733737

734738
GPTHeader::read_from(&mut reader).map_err(|backup_err| {
@@ -1427,6 +1431,15 @@ mod test {
14271431
assert!(GPT::find_from(&mut fs::File::open(DISK2).unwrap()).is_ok());
14281432
}
14291433

1434+
#[test]
1435+
fn input_too_short() {
1436+
let mut empty = io::Cursor::new(vec![1; 5]);
1437+
assert!(matches!(
1438+
GPT::read_from(&mut empty, 512).expect_err("Should fail on short input"),
1439+
Error::InvalidSignature
1440+
));
1441+
}
1442+
14301443
#[test]
14311444
fn find_backup() {
14321445
fn test(path: &str, ss: u64) {

0 commit comments

Comments
 (0)