mirror of
https://github.com/Yuyi-Oak/BlueArchiveToolkit.git
synced 2026-09-18 10:04:55 +08:00
fix(unityfs): 加固基础容器解析校验
补充 UnityFS 总大小、block/directory 计数、目录路径、重复项和边界校验,覆盖 LZMA 数据块与损坏输入回归。新增隔离真实 UnityPy bundle 测试入口,并用 /tmp 中的 char_118_yuki.ab 完成实际回归。复杂对象解析与发布级重打包继续保留在 G-005 后续范围。 Fixes #3
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
use bat_assetbundle::UnityFsParser;
|
||||
use std::path::PathBuf;
|
||||
|
||||
#[test]
|
||||
#[ignore = "requires BAT_REAL_UNITYFS_BUNDLE pointing at an isolated real UnityFS bundle"]
|
||||
fn parses_isolated_real_unityfs_bundle() {
|
||||
let path = PathBuf::from(
|
||||
std::env::var("BAT_REAL_UNITYFS_BUNDLE").expect("BAT_REAL_UNITYFS_BUNDLE must be set"),
|
||||
);
|
||||
let data = std::fs::read(&path).expect("read isolated real UnityFS bundle");
|
||||
let parsed = UnityFsParser::new()
|
||||
.parse_bytes(&data)
|
||||
.expect("parse isolated real UnityFS bundle");
|
||||
|
||||
assert_eq!(parsed.header.total_size, data.len() as u64);
|
||||
assert!(!parsed.header.unity_version.is_empty());
|
||||
assert!(!parsed.blocks.is_empty());
|
||||
assert!(!parsed.directories.is_empty());
|
||||
assert_eq!(parsed.files.len(), parsed.directories.len());
|
||||
assert_eq!(
|
||||
parsed.uncompressed_data_size,
|
||||
parsed.files.iter().map(|file| file.size).sum::<u64>()
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user