21 个版本 (11 个破坏性更新)
0.14.0 | 2022年5月8日 |
---|---|
0.13.0 | 2021年7月23日 |
0.12.0 | 2020年9月5日 |
0.11.0 | 2020年2月5日 |
0.0.1 | 2017年7月31日 |
#992 in 解析器实现
每月57次下载
在 swf-emitter 中使用
185KB
4.5K SLoC
SWF 解析器 (Rust)
使用 Rust 实现的 SWF 解析器。将字节转换为 swf-types
电影。
使用方法
use swf_parser::parse_swf;
use swf_types::Movie;
fn main() {
let swf_bytes: Vec<u8> = ::std::fs::read("movie.swf").expect("Failed to read movie");
let movie: Movie = parse_swf(&swf_bytes).expect("Failed to parse SWF");
}
特性
以下特性提供了 SWF 解压缩,默认启用
deflate
:启用对CompressionMethod::Deflate
的支持,使用inflate
包。lzma
:启用对CompressionMethod::Lzma
的支持,使用lzma-rs
包。
禁用这些特性会导致在传递相应的 CompressionMethod
时 SWF 解析函数失败。
贡献
此仓库使用 Git 子模块进行测试样本
# Clone with submodules
git clone --recurse-submodules git://github.com/open-flash/swf-parser.git
# Update submodules for an already-cloned repo
git submodule update --init --recursive --remote
此库是标准的 Cargo 项目。您可以使用 cargo test
测试您的更改。 必须从 rs
目录运行这些命令。
模糊测试
Rust 实现支持模糊测试
# Make sure that you have `cargo-fuzz`
cargo install cargo-fuzz
# Fuzz the `swf` parser
cargo fuzz run swf
在提交 PR 时,请优先选择非 master
分支,以便在需要时可以对您的更改进行重新合并。所有提交都必须基于 master
(快进合并)。CI 必须通过才能接受更改。
依赖关系
~1.3–1.8MB
~37K SLoC