#binary-encoding #serialization #testing #framework #generic #flexible #musli

无 std bin+lib musli-tests

Müsli 是一个灵活且通用的二进制序列化框架

26 个版本

0.0.26 2023 年 10 月 15 日
0.0.25 2023 年 10 月 15 日
0.0.3 2023 年 5 月 18 日

#1947 in 编码

Download history 2/week @ 2024-03-09 121/week @ 2024-03-30 27/week @ 2024-04-06

170 每月下载量

MIT/Apache

1.5MB
30K SLoC

musli-tests

github crates.io docs.rs build status

确保 musli 安全使用并按预期行为的一组辅助工具。

这包括一个相当复杂的基准测试套件。


基准测试

现在这包括 extra 分类,它需要 model_minimal。这并不完全公平,因为它比较的是为模拟其他无法实现的数据而设计的序列化格式。

可以通过比较功能 model_fullmodel_minimal 来查看确切的权衡。

cargo bench --no-default-features --features musli,full,extra,model_minimal,simdutf8

要运行支持所有功能的序列化套件的基准测试,请

cargo bench --features full

模糊测试

这包括一个名为 fuzz 的二进制文件,可以执行以下操作。

长时间对大量随机数据进行序列化。既有 miri,也有没有 miri 的情况。当与 miri 一起运行时,数据集的大小会大幅减少。

cargo run --bin fuzz
cargo +nightly miri run --bin fuzz

对随机生成的字节进行反序列化。既有 miri,也有没有 miri 的情况。当与 miri 一起运行时,数据集的大小会大幅减少。

cargo run --bin fuzz -- --random
cargo +nightly miri run --bin fuzz -- --random

注意 您可以通过启用相应的功能来运行可选的 crate,例如 --features bincode


此 crate 发现的潜在安全问题

  • dlhn:根据不可信的输入分配和初始化大型数组(DoS):dlhn#11.

大小比较

进行一次性的大小比较

cargo run --bin fuzz -- --size

现在这只会取给定类型的第一个生成的字段,对其进行序列化,并打印出其大小。将来它将在整个集合上执行平均值,并提供更多统计数据。

依赖关系

~2–4MB
~81K SLoC