fix(ext4): review fixes — bounds checks, delete safety, blocks_count, multi-extent dirs
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user