#panic #analyzer #inspector #ci #search #rust

已撤销 panic-free-analyzer

一款用于扫描您的crate或工作区的审计工具,用于在代码库中寻找潜在的panic点

1 个不稳定版本

0.1.0 2024年1月10日

#25 in #inspector

MIT 许可证

9KB
123 代码行

Rust Panic Free Analyzer

概述

Rust Panic Free Analyzer 是一款审计工具,旨在扫描您的Rust crate或工作区。其主要功能是识别代码库中的潜在panic点,帮助您开发尽可能接近“无panic”的二进制文件和库。

ℹ️ 目前,它仅搜索您开发的crates,而不搜索crates的依赖项。

它是如何工作的?

关键识别模式

工具会在Rust代码中搜索一些与panic点相关的关键模式。这些包括

  • panic!:直接调用 panic! 宏,导致程序立即终止并提供错误信息。
  • unwrap:调用 .unwrap() 方法,通常用于 OptionResult 类型,如果值为 NoneErr,则会引发panic。
  • expect:类似于 unwrap,但允许指定自定义错误信息。
  • Array Indexing:直接对数组进行索引(例如,arr[index]),而不进行边界检查,如果索引超出范围,则可能引发panic。(一种更安全的索引方法是 .get()
  • unreachable!:指示永远不会到达的代码;如果执行,则会引发panic。
  • todo!unimplemented!:表示不完整或不实现代码的宏,如果达到,则会引发panic。

安装

要开始使用它,您首先需要安装。

cargo install panic-free-analyzer

使用方法

安装后,您可以在您的crate或整个工作区上运行分析器。使用以下命令

cargo panic-analyzer

如果您希望在分析过程中排除特定crate,请设置 `IGNORED_CRATES` 环境变量。传递您要排除的crate的名称,用逗号分隔

IGNORED_CRATES=tests,benches cargo panic-analyzer

审计结果示例 👇

以下是Rust Panic Free Analyzer生成的审计结果示例

🚨 Rust Panic Audit:检测到141个潜在panic点 🚨

crate: vrl

📊 总使用次数:37

  • 🔎 expect 使用次数:1
  • 🎁 unwrap 使用次数:32
  • 🚨 panic 使用次数:1
  • 🔢 array_index 使用次数:3

模块:jwt_auth

📊 总使用次数:31

  • 🎁 unwrap 使用次数:29
  • 🔢 array_index 使用次数:2

模块:config

📊 总使用次数:14

  • 🚨 panic 使用次数:3
  • 🔎 expect 使用次数:3
  • 🎁 unwrap 使用次数:8

📌 预期注解

模块:common

📊 预期总使用次数:1

  • 原因: "我们需要这个"
  • 代码: panic!("退出进程!")
  • 位置: ./libs/common/src/lib.rs:18

依赖项

~3–11MB
~114K SLoC