1 个不稳定版本
0.1.0 | 2024年1月10日 |
---|
#25 in #inspector
9KB
123 代码行
Rust Panic Free Analyzer
概述
Rust Panic Free Analyzer 是一款审计工具,旨在扫描您的Rust crate或工作区。其主要功能是识别代码库中的潜在panic点,帮助您开发尽可能接近“无panic”的二进制文件和库。
ℹ️ 目前,它仅搜索您开发的crates,而不搜索crates的依赖项。
它是如何工作的?
关键识别模式
工具会在Rust代码中搜索一些与panic点相关的关键模式。这些包括
panic!
:直接调用panic!
宏,导致程序立即终止并提供错误信息。unwrap
:调用.unwrap()
方法,通常用于Option
或Result
类型,如果值为None
或Err
,则会引发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