image_index.rs: verify header magic/version
This commit is contained in:
parent
44b3f62b42
commit
a360f6fa2d
@ -51,13 +51,22 @@ impl <'a> ImageIndexReader<'a> {
|
|||||||
let header_size = std::mem::size_of::<ImageIndexHeader>();
|
let header_size = std::mem::size_of::<ImageIndexHeader>();
|
||||||
|
|
||||||
// todo: use static assertion when available in rust
|
// todo: use static assertion when available in rust
|
||||||
if header_size != 4096 { panic!("got unexpected header size"); }
|
if header_size != 4096 { bail!("got unexpected header size for {:?}", path); }
|
||||||
|
|
||||||
let mut buffer = vec![0u8; header_size];
|
let mut buffer = vec![0u8; header_size];
|
||||||
file.read_exact(&mut buffer)?;
|
file.read_exact(&mut buffer)?;
|
||||||
|
|
||||||
let header = unsafe { &mut * (buffer.as_ptr() as *mut ImageIndexHeader) };
|
let header = unsafe { &mut * (buffer.as_ptr() as *mut ImageIndexHeader) };
|
||||||
|
|
||||||
|
if header.magic != *b"PROXMOX-IIDX" {
|
||||||
|
bail!("got unknown magic number for {:?}", path);
|
||||||
|
}
|
||||||
|
|
||||||
|
let version = u32::from_be(header.version);
|
||||||
|
if version != 1 {
|
||||||
|
bail!("got unsupported version number ({})", version);
|
||||||
|
}
|
||||||
|
|
||||||
let size = u64::from_be(header.size) as usize;
|
let size = u64::from_be(header.size) as usize;
|
||||||
let ctime = u64::from_be(header.ctime);
|
let ctime = u64::from_be(header.ctime);
|
||||||
let chunk_size = u64::from_be(header.chunk_size) as usize;
|
let chunk_size = u64::from_be(header.chunk_size) as usize;
|
||||||
|
Loading…
Reference in New Issue
Block a user