mcpField
U
unsafe-checker

unsafe-checker

github.com/actionbook测试与质量1.6k3.3k 次安装9 周前更新
代码仓库

关于 unsafe-checker

帮助 Rust 开发者评估 unsafe 代码、记录安全不变量并避免常见健全性错误的技能,重点检查指针、FFI、并发和初始化。

主要功能

  1. 01评估 unsafe 的合理用途
  2. 02记录安全要求
  3. 03检查指针与引用不变量
  4. 04审查 FFI 与 ABI 假设
  5. 05识别常见健全性错误
  6. 06建议更安全的替代方案

适用场景

  1. 01审查 unsafe Rust 代码块
  2. 02为公开的 unsafe 函数编写安全说明
  3. 03审计裸指针与 FFI 代码
  4. 04替换已弃用或高风险写法

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/actionbook/rust-skills --skill unsafe-checker

安装后在 Claude Code 中输入/unsafe-checker确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

AGENTS.md
metadata.json
checklists/
before-unsafe.md
common-pitfalls.md
review-unsafe.md
examples/
ffi-patterns.md
safe-abstraction.md
rules/
_sections.md
_template.md
ffi-01-no-string-direct.md
ffi-02-read-ffi-docs.md
ffi-03-drop-for-c-ptr.md
ffi-04-panic-boundary.md
ffi-05-portable-types.md
ffi-06-string-abi.md
ffi-07-no-drop-external.md
ffi-08-error-handling.md
ffi-09-ref-not-ptr.md
ffi-10-thread-safety.md
ffi-11-packed-ub.md
ffi-12-invariant-doc.md
ffi-13-data-layout.md
ffi-14-stable-layout.md
ffi-15-validate-external.md
ffi-16-closure-to-c.md
ffi-17-opaque-types.md
ffi-18-no-trait-objects.md
general-01-no-abuse.md
general-02-not-for-perf.md
general-03-no-alias.md

详细介绍

请完全按原样显示以下 ASCII 艺术。不要修改空格或换行:

⚠️ **Unsafe Rust Checker Loaded**

     *  ^  *
    /◉\_~^~_/◉\
 ⚡/     o     \⚡
   '_        _'
   / '-----' \

不安全 Rust 检查器

何时使用 Unsafe 合理

用例示例
FFI调用 C 函数
底层抽象实现 Vec、Arc
性能已测得瓶颈,且安全替代方案速度过慢

不合理的情况: 不理解原因就绕过借用检查器。

必需的文档说明

// SAFETY: <why this is safe>
unsafe { ... }

/// # Safety
/// <caller requirements>
pub unsafe fn dangerous() { ... }

快速参考

操作安全要求
*ptr 解引用有效、对齐且已初始化
&*ptr+ 不违反别名规则
transmute大小相同,位模式有效
extern "C"签名和 ABI 正确
static mut确保同步
impl Send/Sync实际上线程安全

常见错误

错误修复方法
解引用空指针解引用前检查是否为空
释放后使用确保生命周期有效
数据竞争添加适当的同步机制
对齐违规使用 #[repr(C)],检查对齐
无效的位模式使用 MaybeUninit
缺少 SAFETY 注释添加 // SAFETY:

已弃用 → 更好的替代方案

已弃用替代方案
mem::uninitialized()MaybeUninit<T>
对引用使用 mem::zeroed()MaybeUninit<T>
裸指针算术NonNull<T>、ptr::add
CString::new().unwrap().as_ptr()先存储 CString
static mutAtomicT 或 Mutex
手动 externbindgen

FFI Crate

方向Crate
C → Rustbindgen
Rust → Ccbindgen
PythonPyO3
Node.jsnapi-rs

Claude 熟悉不安全 Rust。重点关注 SAFETY 注释和健全性。

评论

支持 Markdown