9个不稳定版本 (3个破坏性版本)

0.4.0 2023年7月17日
0.3.0 2023年4月7日
0.2.3 2023年4月1日
0.2.0 2023年3月22日
0.1.2 2023年3月21日

554测试 中排名

Download history 149/week @ 2024-03-11 154/week @ 2024-03-18 101/week @ 2024-03-25 122/week @ 2024-04-01 96/week @ 2024-04-08 208/week @ 2024-04-15 142/week @ 2024-04-22 185/week @ 2024-04-29 105/week @ 2024-05-06 128/week @ 2024-05-13 211/week @ 2024-05-20 81/week @ 2024-05-27 129/week @ 2024-06-03 77/week @ 2024-06-10 51/week @ 2024-06-17 115/week @ 2024-06-24

每月374次 下载
7 crates 中使用

MIT 许可证

18KB
312

tree-crasher

tree-crasher 是一个易于使用的基于语法的黑盒模糊器。它使用 tree-sitter 语法解析多个输入文件,并生成通过拼接它们的AST形成的新文件。

tree-crasher 旨在与 Gramatron、Nautilus 和 Grammarinator 等更高级的基于语法的模糊器占据不同的细分市场。它不是通过完整的、手写的语法和复杂的技巧如基于覆盖率的反馈来实现最大覆盖率和错误发现,而是通过使用现成的 tree-sitter 语法并且不需要为目标进行任何仪器(甚至不需要源代码)来实现最大易用性。简而言之,tree-crasher 希望成为基于语法的模糊器的 Radamsa

tree-crasher 使用 treereduce 自动最小化生成的测试用例。

有关更多信息,请参阅 文档

示例

阅读这些示例时,请记住模糊测试可能会引起不可预测的行为。始终在具有内存限制、无网络访问和无重要文件的虚拟机或Docker容器中进行模糊测试。

JavaScript解释器

获取一组JavaScript文件并将它们放入 corpus/ (例如,使用 此脚本)。然后这里是模糊 JerryScriptBoa 的方法

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中发现了许多bug。以下是它是如何做到的!命令行中的特殊符号@@会被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 crate。)

更多示例

更多示例,请参阅文档

发现的bug

tree-crasher使用tree-splicer生成测试用例,请在该项目README中查看发现的bug列表。

如果您使用tree-crasher发现了一个bug,请告诉我!一种很好的方法是向tree-splicer提交一个PR,将其添加到README中。

支持的语言

tree-crasher支持9+种语言,请参阅文档获取详细信息。

文档

文档可在线上./doc中找到。

依赖关系

~7–18MB
~250K SLoC