我的模糊测试器在做什么? - 博客 - 第二场高尔夫赛

主要观点:模糊测试很有用但存在黑箱问题,文中通过cargo llvm-covcargo fuzz来获取代码覆盖信息,探讨了好的语料库对模糊测试的重要性,以及如何生成覆盖报告和处理错误分支等。
关键信息

  • cargo llvm-cov可用于确定测试套件对代码基某些部分的覆盖情况,但其不支持从模糊器获取覆盖信息。
  • cargo fuzz命令可用于获取模糊器的覆盖信息,通过运行模糊目标处理语料库中的文件并存储覆盖数据。
  • 好的语料库能引导模糊器生成更有趣的输入,如使用Arbitrary trait和自定义语料库(如compression-corpus)。
  • 生成覆盖报告需使用llvm-cov命令,注意相关配置和依赖。
  • 模糊器中的错误处理代码可能未被覆盖,可通过返回特定类型值来告知模糊器保留输入以报告错误路径。
  • 在 CI 中使用cargo fuzzllvm-cov来跟踪和可视化模糊测试的覆盖情况,且仅在 CI 运行中短时间运行模糊器以确保语料库的重要性。
    重要细节
  • 文中以zlib-rsuncompress模糊器为例,展示了如何获取覆盖信息和处理相关问题。
  • 介绍了在inflate.rs中使用不同语料库的覆盖情况对比,自定义压缩语料库效果显著。
  • 感谢 Ameer Ghani 和 Sergey "Shnatsel" Davidoff 在模糊测试相关工作中的贡献。
阅读 12
0 条评论