Add: windows mvp - transparent bugs not fixed
This commit is contained in:
86
skills/unsafe-checker/SKILL.md
Normal file
86
skills/unsafe-checker/SKILL.md
Normal file
@@ -0,0 +1,86 @@
|
||||
---
|
||||
name: unsafe-checker
|
||||
description: "CRITICAL: Use for unsafe Rust code review and FFI. Triggers on: unsafe, raw pointer, FFI, extern, transmute, *mut, *const, union, #[repr(C)], libc, std::ffi, MaybeUninit, NonNull, SAFETY comment, soundness, undefined behavior, UB, safe wrapper, memory layout, bindgen, cbindgen, CString, CStr, 安全抽象, 裸指针, 外部函数接口, 内存布局, 不安全代码, FFI 绑定, 未定义行为"
|
||||
globs: ["**/*.rs"]
|
||||
allowed-tools: ["Read", "Grep", "Glob"]
|
||||
---
|
||||
|
||||
Display the following ASCII art exactly as shown. Do not modify spaces or line breaks:
|
||||
```text
|
||||
⚠️ **Unsafe Rust Checker Loaded**
|
||||
|
||||
* ^ *
|
||||
/◉\_~^~_/◉\
|
||||
⚡/ o \⚡
|
||||
'_ _'
|
||||
/ '-----' \
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Unsafe Rust Checker
|
||||
|
||||
## When Unsafe is Valid
|
||||
|
||||
| Use Case | Example |
|
||||
|----------|---------|
|
||||
| FFI | Calling C functions |
|
||||
| Low-level abstractions | Implementing `Vec`, `Arc` |
|
||||
| Performance | Measured bottleneck with safe alternative too slow |
|
||||
|
||||
**NOT valid:** Escaping borrow checker without understanding why.
|
||||
|
||||
## Required Documentation
|
||||
|
||||
```rust
|
||||
// SAFETY: <why this is safe>
|
||||
unsafe { ... }
|
||||
|
||||
/// # Safety
|
||||
/// <caller requirements>
|
||||
pub unsafe fn dangerous() { ... }
|
||||
```
|
||||
|
||||
## Quick Reference
|
||||
|
||||
| Operation | Safety Requirements |
|
||||
|-----------|---------------------|
|
||||
| `*ptr` deref | Valid, aligned, initialized |
|
||||
| `&*ptr` | + No aliasing violations |
|
||||
| `transmute` | Same size, valid bit pattern |
|
||||
| `extern "C"` | Correct signature, ABI |
|
||||
| `static mut` | Synchronization guaranteed |
|
||||
| `impl Send/Sync` | Actually thread-safe |
|
||||
|
||||
## Common Errors
|
||||
|
||||
| Error | Fix |
|
||||
|-------|-----|
|
||||
| Null pointer deref | Check for null before deref |
|
||||
| Use after free | Ensure lifetime validity |
|
||||
| Data race | Add proper synchronization |
|
||||
| Alignment violation | Use `#[repr(C)]`, check alignment |
|
||||
| Invalid bit pattern | Use `MaybeUninit` |
|
||||
| Missing SAFETY comment | Add `// SAFETY:` |
|
||||
|
||||
## Deprecated → Better
|
||||
|
||||
| Deprecated | Use Instead |
|
||||
|------------|-------------|
|
||||
| `mem::uninitialized()` | `MaybeUninit<T>` |
|
||||
| `mem::zeroed()` for refs | `MaybeUninit<T>` |
|
||||
| Raw pointer arithmetic | `NonNull<T>`, `ptr::add` |
|
||||
| `CString::new().unwrap().as_ptr()` | Store `CString` first |
|
||||
| `static mut` | `AtomicT` or `Mutex` |
|
||||
| Manual extern | `bindgen` |
|
||||
|
||||
## FFI Crates
|
||||
|
||||
| Direction | Crate |
|
||||
|-----------|-------|
|
||||
| C → Rust | bindgen |
|
||||
| Rust → C | cbindgen |
|
||||
| Python | PyO3 |
|
||||
| Node.js | napi-rs |
|
||||
|
||||
Claude knows unsafe Rust. Focus on SAFETY comments and soundness.
|
||||
Reference in New Issue
Block a user