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 解析器实现

Download history 3/week @ 2024-03-26 32/week @ 2024-04-02 2/week @ 2024-04-09 4/week @ 2024-04-16 1/week @ 2024-05-21 15/week @ 2024-05-28 2/week @ 2024-06-11 2/week @ 2024-06-18 53/week @ 2024-07-02

每月57次下载
swf-emitter 中使用

AGPL-3.0-or-later

185KB
4.5K SLoC

Open Flash logo

SWF 解析器 (Rust)

GitHub repository crates.io crate Rust checks status docs.rs/swf-parser

使用 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