diff --git a/src/skeleton.rs b/src/skeleton.rs index 82bfb20..36aa786 100644 --- a/src/skeleton.rs +++ b/src/skeleton.rs @@ -78,7 +78,7 @@ impl Skeleton { pub fn from_existing(buffer: ByteSpan) -> Option { let mut cursor = Cursor::new(buffer); - let sklb = SKLB::read(&mut cursor).unwrap(); + let sklb = SKLB::read(&mut cursor).ok()?; let root = HavokBinaryTagFileReader::read(&sklb.raw_data); let raw_animation_container = root.find_object_by_type("hkaAnimationContainer"); @@ -101,3 +101,21 @@ impl Skeleton { Some(skeleton) } } + +#[cfg(test)] +mod tests { + use std::fs::read; + use std::path::PathBuf; + + use super::*; + + #[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 + Skeleton::from_existing(&read(d).unwrap()); + } +}