fix(ext4): review fixes — bounds checks, delete safety, blocks_count, multi-extent dirs

This commit is contained in:
2026-10-18 23:28:34 +02:00
parent 73661e925d
commit 9be67e403b
2 changed files with 85 additions and 69 deletions

View File

@@ -562,3 +562,36 @@ fn open_directory_as_file_returns_none() {
assert!(fs.mkdir(b"adir"));
assert!(fs.open(b"adir").is_none());
}
#[test]
fn invalid_handle_does_not_panic() {
let mut fs = Ext4::mount(format_ext4_disk()).unwrap();
let bad = crate::filesystem::FileHandle::new(99);
assert!(fs.read(bad, &mut [0u8; 16]).is_none());
assert!(fs.write(bad, b"x").is_none());
assert!(fs.file_size(bad).is_none());
fs.close(bad);
}
#[test]
fn delete_open_file_invalidates_handle() {
let mut fs = Ext4::mount(format_ext4_disk()).unwrap();
let h = fs.create(b"victim").unwrap();
fs.write(h, b"data").unwrap();
fs.close(h);
let h = fs.open(b"victim").unwrap();
assert!(fs.delete(b"victim"));
assert!(fs.read(h, &mut [0u8; 16]).is_none());
}
#[test]
fn delete_nonempty_dir_returns_false() {
let mut fs = Ext4::mount(format_ext4_disk()).unwrap();
assert!(fs.mkdir(b"parent"));
let h = fs.create(b"parent/child").unwrap();
fs.close(h);
assert!(!fs.delete(b"parent"));
let mut entries = [DirEntry::empty(); 8];
let count = fs.list_dir(b"parent", &mut entries).unwrap();
assert_eq!(count, 1);
}