4 个版本 (2 个重大更新)
0.5.1 | 2023 年 10 月 31 日 |
---|---|
0.5.0 | 2023 年 10 月 22 日 |
0.4.0 | 2023 年 10 月 17 日 |
0.3.2 | 2023 年 10 月 8 日 |
#223 在 图像 中
每月 4,014 次下载
145KB
3K SLoC
webpsan
Rust WebP 格式 "净化器"。
该净化器目前仅检查 WebP 文件输入的有效性,以避免将格式错误的文件传递给不安全的解析器。
使用方法
净化器的主要入口点是 sanitize
,它接受一个 Read
+ Skip
输入。 Skip
特征代表 Seek
特征的一个子集;一个可以向前跳过的输入流,但不一定能随机定位。
let example_input = b"RIFF\x14\0\0\0WEBPVP8L\x08\0\0\0\x2f\0\0\0\0\x88\x88\x08";
webpsan::sanitize(std::io::Cursor::new(example_input)).unwrap();
parse
模块还包含一个不太稳定且未记录的 API,可用于解析单个 WebP 块类型。
贡献错误报告
GitHub 是项目的错误跟踪器。请在 提交新问题 之前先 搜索类似现有的问题。
测试
可以使用 webpsan-test/libwebp
功能启用基于 libwebp
的 webpsan 测试。 libwebp
是静态链接的,因此测试不需要安装。
test_data
集成测试在私有 test-data
子模块中的样本数据文件上运行。如果您可以访问此存储库,您可以手动检出子模块。
$ git submodule update --init --checkout
模糊测试
支持通过cargo afl
和cargo fuzz
进行模糊测试。有关详细信息,请参阅Rust Fuzz 书籍。要运行基于AFL的模糊测试
$ cargo install cargo-afl
$ cd fuzz-afl
$ ./fuzz $num_cpus
要运行基于libFuzzer的模糊测试
$ cargo +nightly install cargo-fuzz
$ cargo +nightly fuzz run sanitize -- -dict=fuzz/webp.dict -seed_inputs=fuzz/input/smallest-possible.webp
OSS-Fuzz
通过OSS-Fuzz也提供了持续模糊测试。
许可证
许可协议为MIT。
依赖项
约2.1-3MB
约59K SLoC