1
Fork 0
mirror of https://github.com/redstrate/Physis.git synced 2025-04-23 13:17:44 +00:00

Add invalid data test for MDL

This commit is contained in:
Joshua Goins 2024-04-16 22:05:39 -04:00
parent 087deb2bc8
commit a7a9a7855e
2 changed files with 13 additions and 3 deletions

View file

@ -422,9 +422,9 @@ pub struct MDL {
impl MDL {
pub fn from_existing(buffer: ByteSpan) -> Option<MDL> {
let mut cursor = Cursor::new(buffer);
let model_file_header = ModelFileHeader::read(&mut cursor).unwrap();
let model_file_header = ModelFileHeader::read(&mut cursor).ok()?;
let model = ModelData::read_args(&mut cursor, binrw::args! { file_header: &model_file_header }).unwrap();
let model = ModelData::read_args(&mut cursor, binrw::args! { file_header: &model_file_header }).ok()?;
let mut affected_bone_names = vec![];
@ -1150,4 +1150,14 @@ mod tests {
// model header
assert_eq!(mdl.model_data.header.radius, 1.5340779);
}
#[test]
fn test_invalid() {
let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
d.push("resources/tests");
d.push("random");
// Feeding it invalid data should not panic
MDL::from_existing(&read(d).unwrap());
}
}

View file

@ -67,7 +67,7 @@ pub(crate) fn vertex_element_parser(count: u16) -> BinResult<Vec<VertexDeclarati
count.into()
];
for declaration in &mut vertex_declarations {
let mut element = VertexElement::read_options(reader, endian, ()).unwrap();
let mut element = VertexElement::read_options(reader, endian, ())?;
loop {
declaration.elements.push(element);