#parser-serializer #flash #serialization #parser #sol #amf

flash-lso

快速且安全的 SOL/AMF0/AMF3 解析。支持 serde、Adobe Flex 和循环引用

7 个版本 (4 个重大变更)

0.5.0 2021年2月8日
0.4.0 2020年11月27日
0.3.2 2020年11月3日
0.3.1 2020年8月13日
0.1.0 2020年6月24日

#1737 in 解析器实现

每月22次下载

MIT 许可证

545KB
2.5K SLoC

flash-lso

GitHub license GitHub issues

Adobe 本地共享对象 (LSO) 文件格式 (.sol)、AMF0 和 AMF3 的解析器和序列化器,100% 安全的 Rust 实现

此crate的主要目标是尽可能安全,针对格式错误和不合法的输入进行防御,并在识别到这种情况时进行干净失败。

示例

use std::fs::File;
use std::io::Read;
use flash_lso::read::Reader;
fn main() {
    let mut x = File::open(path).expect("Couldn't open file");
    let mut data = Vec::new();
    let _ = x.read_to_end(&mut data).expect("Unable to read file");
    let d = Reader::default().parse_full(&data).expect("Failed to parse lso file");
    println!("{:#?}", d);
}

Web

web 目录包含一个使用 yew 的 LSO 文件示例网络查看器。要运行,首先像这样构建到 WASM

cd web
wasm-pack build --out-name wasm --out-dir ./static --target web --release

然后像这样提供静态目录

# If needed install miniserve with `cargo install miniserve`
miniserve ./static --index index.html

开发 / 测试

该项目包含一系列集成测试,以验证其能够将 LSO 文件序列化然后反序列化,生成的输出与其输入相同。还有一个 lso-to-json 项目,可以将 LSO 文件导出到 JSON 以进行调试和测试。

特性

启用 serde 支持

flash-lso = { version = "0.2.0", features = ["serde"] }

启用 (alpha) Flex 支持

flash-lso = { version = "0.2.0", features = ["flex"] }

模糊测试

该项目使用 cargo-fuzz 确保正确处理无效数据

cargo fuzz run --release fuzz_amf3_body

许可证

该项目遵循 MIT 许可证

依赖

~3.5MB
~78K SLoC