Unsafe Checker - Section Definitions
Section Overview
| # | Section | Prefix | Level | Count | Impact |
|---|---|---|---|---|---|
| 1 | General Principles | general- | CRITICAL | 3 | Foundational unsafe usage guidance |
| 2 | Safety Abstraction | safety- | CRITICAL | 11 | Building sound safe APIs |
| 3 | Raw Pointers | ptr- | HIGH | 6 | Pointer manipulation safety |
| 4 | Union | union- | HIGH | 2 | Union type safety |
| 5 | Memory Layout | mem- | HIGH | 6 | Data representation correctness |
| 6 | FFI | ffi- | CRITICAL | 18 | C interoperability safety |
| 7 | I/O Safety | io- | MEDIUM | 1 | Handle/resource safety |
Section Details
1. General Principles (general-)
Focus: When and why to use unsafe
- P.UNS.01: Don't abuse unsafe to escape borrow checker
- P.UNS.02: Don't use unsafe blindly for performance
- G.UNS.01: Don't create aliases for "unsafe" named items
2. Safety Abstraction (safety-)
Focus: Building sound safe abstractions over unsafe code
Key invariants:
- Panic safety
- Memory initialization
- Send/Sync correctness
- API soundness
3. Raw Pointers (ptr-)
Focus: Safe pointer manipulation patterns
- Aliasing rules
- Alignment requirements
- Null/dangling prevention
- Type casting
4. Union (union-)
Focus: Safe union usage (primarily for C interop)
- Initialization rules
- Lifetime considerations
- Type punning dangers
5. Memory Layout (mem-)
Focus: Correct data representation
#[repr(C)]usage- Alignment and padding
- Uninitialized memory
- Cross-process memory
6. FFI (ffi-)
Focus: Safe C interoperability
Subcategories:
- String handling (CString, CStr)
- Type compatibility
- Error handling across FFI
- Thread safety
- Resource management
7. I/O Safety (io-)
Focus: Handle and resource ownership
- Raw file descriptor safety
- Handle validity guarantees
你可能感兴趣的文章
Do Not Expose Raw Pointers in Public APIs
Unsafe Code Authors Must Verify Safety Invariants
Ensure Consistent Data Layout for Custom Types
Add Safety Section in Docs for Public Unsafe Functions
Do Not Use Union Variants Across Different Lifetimes
Use MaybeUninit
Ensure C-ABI Compatibility for Strings Between Rust and C
Do Not Dereference Pointers Cast to Misaligned Types
Use Dedicated Opaque Type Pointers Instead of c_void for C Opaque Types