6 个版本
0.4.0 | 2023年7月17日 |
---|---|
0.3.0 | 2023年4月7日 |
0.2.3 | 2023年4月1日 |
0.2.0 | 2023年3月22日 |
#850 在 测试 中排名
每月 26 次下载
26KB
318 行
tree-crasher
tree-crasher 是一个易于使用的基于语法的黑盒模糊器。它使用 tree-sitter 语法解析多个输入文件,并生成由其 AST(抽象语法树)拼接而成的新文件。
tree-crasher 旨在与 Gramatron、Nautilus 和 Grammarinator 等更高级的基于语法的模糊器占据不同的细分市场。它不通过完整的、手写的语法和基于覆盖率的反馈等复杂技术来实现最大覆盖率,而是通过使用现成的 tree-sitter 语法,并无需为目标程序进行任何检测(甚至无需源代码)来实现最大程度的易用性。简而言之,tree-crasher 希望成为基于语法的模糊器的 Radamsa。
tree-crasher 使用 treereduce 自动最小化生成的测试用例。
有关更多信息,请参阅 文档。
示例
在阅读这些示例时,请记住模糊测试可能导致不可预测的行为。始终在具有内存限制的 VM 或 Docker 容器中运行模糊测试,不提供网络访问权限,也不包含重要文件。
JavaScript 解释器
获取一组 JavaScript 文件,并将它们放入 corpus/
中(例如,使用 此脚本)。然后这里是模糊测试 JerryScript 和 Boa 的方法
tree-crasher-javascript corpus/ jerry
tree-crasher-javascript corpus/ boa
(默认情况下,tree-crasher 通过 stdin 将输入传递给目标。)
Python 的正则表达式引擎
编写 rx.py
如下
import re
import sys
try:
s = sys.stdin.read()
r = re.compile(s)
print(r.match(s))
except:
pass
将一些示例正则表达式放入 corpus/
。然后
tree-crasher-regex corpus/ -- python3 $PWD/rx.py
rustc
tree-crasher 在 rustc 中发现了许多错误。以下是它是如何做到的!命令行中的特殊 @@
符号将被 tree-crasher 生成的文件替换。
tree-crasher-rust \
--interesting-stderr "(?m)^error: internal compiler error:" \
corpus \
-- \
rustc +nightly --crate-type=lib --emit=mir -Zmir-opt-level=4 @@.rs
(正则表达式语法与 regex 包 相同。)
更多示例
请参阅文档获取更多示例。
发现的问题
tree-crasher使用tree-splicer生成测试用例,请参阅该项目README中发现的错误列表。
如果您发现tree-crasher的错误,请告知我!一个很好的方法是将它提交到tree-splicer的PR中,添加到README中。
支持的语言
tree-crasher支持9+种语言,详细信息请参阅文档。
文档
文档可在网上或本地./doc
找到。
依赖项
约32-46MB
约1M 行代码(SLoC)