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图像

Download history 926/week @ 2024-04-23 1023/week @ 2024-04-30 472/week @ 2024-05-07 1272/week @ 2024-05-14 1094/week @ 2024-05-21 782/week @ 2024-05-28 867/week @ 2024-06-04 746/week @ 2024-06-11 949/week @ 2024-06-18 849/week @ 2024-06-25 406/week @ 2024-07-02 1105/week @ 2024-07-09 776/week @ 2024-07-16 913/week @ 2024-07-23 930/week @ 2024-07-30 1249/week @ 2024-08-06

每月 4,014 次下载

MIT 许可证

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 块类型。

API 文档
私有文档

贡献错误报告

GitHub 是项目的错误跟踪器。请在 提交新问题 之前先 搜索类似现有的问题

测试

可以使用 webpsan-test/libwebp 功能启用基于 libwebp 的 webpsan 测试。 libwebp 是静态链接的,因此测试不需要安装。

test_data 集成测试在私有 test-data 子模块中的样本数据文件上运行。如果您可以访问此存储库,您可以手动检出子模块。

$ git submodule update --init --checkout

模糊测试

支持通过cargo aflcargo 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