Skip to content

Commit 19d499d

Browse files
authored
Fix underflow when input is shorter than one sector (#141)
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 19d499d

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)