## 不安全操作（High）

### 触发信号

- 使用未初始化的局部变量或内存（声明后未赋值即使用）
- Rust `unsafe` 块中的裸指针解引用（`*raw_ptr`、`ptr::read`）
- 分配大小由外部输入计算（`malloc(user_len)`、`new char[size]`），且未校验整数溢出
- 类型双关/重解释转换（`reinterpret_cast`、`union` 类型混淆）
- `memset`/`memcpy` 对非 POD 类型的操作

### 判定流程

1. **识别未初始化读取**：`Read` 检查局部变量声明，追踪到首次使用位置，确认是否有赋值或初始化：
   - 结构体部分初始化（只初始化了部分字段）
   - 数组声明后未填充即读取
   - 通过 `malloc` 分配后未 `memset` 即读取
2. **检查 Rust unsafe 块**：`Read` 确认 `unsafe` 块中的操作是否有安全保证：
   - 裸指针是否指向有效内存（非 null、非悬空、已对齐）
   - 是否可通过 safe API 替代 unsafe 代码
   - `unsafe` 块是否有 invariant 注释说明安全性
3. **检查整数溢出导致分配异常**：`Read` 确认分配大小的计算过程：
   - `size * count` 是否可能整数溢出（如 `size = 0x10000, count = 0x10000`）
   - 外部输入是否经过范围校验后才用于分配大小
4. **检查类型双关**：`Read` 确认 `reinterpret_cast`/union 是否违反严格别名规则

### 证据构造

确认缺陷后，输出需包含：
- 未初始化变量/unsafe 操作的位置（含文件:行号）
- 未初始化读取的值传播路径（读到的值流向了哪些操作）
- unsafe 操作的安全假设（依赖了什么不变量）
- 安全影响（信息泄露、未定义行为、崩溃）

### 排除

- 变量声明时已初始化（`int x = 0`、`std::vector` 构造）
- Rust safe 代码（unsafe 是显式标记的，safe 代码由编译器保证）
- 已用 `calloc`/`memset` 初始化的内存
- 编译器已开启 `-Wuninitialized` 且无警告
