跳到主要内容

第 20 章:错误处理

本章规定读取器、写入器和编辑器遇到不完整、损坏、未知或不兼容数据时的行为。核心原则是:不猜测权威语义,不用缓存伪造资产,不因可选表现问题丢弃有效权威数据。

20.1 读取器行为

问题类别行为
Header/Footer/Directory 无效必须拒绝整个文件
必需区段缺失、重复、越界或 CRC 失败必须拒绝资产
META/PAL0/CHIX/VOX0 语义冲突必须拒绝资产
未知必需 Tag、Codec 或 Flag必须拒绝资产
未知可选区段可忽略并记录 Warning
缓存损坏、过期或不支持必须丢弃缓存,回退权威数据
SCNE/ANM0/BORD/PRVW/THMB 失败可忽略对应区段并继续加载

读取器不得因为“画面看起来正常”而绕过 CRC32、Source Hash 或 Palette 引用错误。

20.2 资源与安全限制

实现必须为不可信文件设置上限,包括最大文件长度、Directory Entry 数量、每个 Payload 的存储和解码长度、字符串长度、Chunk 数、顶点数和预览像素数。应先验证长度和乘法,再进行内存分配。

RLE8 解码必须检测零长度 Run、累积溢出和不足。预览与 GLB 解析必须禁止不受控的外部加载。解析器不得根据文件内声明直接分配无限内存或递归处理无限层数据。

20.3 写入器行为

写入器发现输入不满足 VFP 1.3 限制时必须失败并提供可诊断原因,或执行调用方显式选择的量化/拆分策略。写入器不得输出未知 Flag、非零保留字段、引用不存在 Chunk 的缓存、或与 META Source Hash 不一致的缓存。

建议采用“临时文件 → 完整验证 → 原子替换”的保存流程。追加式保存时,写入器必须确保新 Footer 是最后写入且完整的结构。

20.4 错误传播

错误消息应包含错误代码、文件偏移(如适用)、Tag、Chunk ID、字段名、期望值和实际值。编辑器应将权威数据错误视为不可继续编辑;仅缓存错误可提示用户重建缓存或继续编辑。


本章总结

VFP 的错误处理以资产真实性优先:宁可明确拒绝无法验证的权威数据,也不能用过期缓存或猜测结果制造看似可用的资产。