Files
zexin_c be4a7333b8 重构 codecheck 三层架构并统一报告格式到门禁模板
- 删除旧的扁平 skill 目录(api-audit/codecheck-orchestrator/deep-scan/external-input-audit/high-impact-bug-audit/logic_analyzer/security-review)
- 新增三层架构:patterns/(缺陷模式知识库)+ scanners/(4 个薄层扫描器)+ orchestrator/(调度+refute+合并)
- 新增 conventions.md 作为操作规程(§5-§13),从摘要升级为可执行规范
- Path B 统一:单 scanner 直接调用时除原始发现清单外,必须额外生成符合 codecheck_report_TEMPLATE.md 的统一报告(双产出)
- 严重等级归一化:security 五档/logic emoji/api ⚠️ 统一映射到 P0–P3
- 必检维度自检:单 scanner 查路径特征→必检维度表,缺失则 insufficient
- Refute:单 scanner 场景仅 P0 必须做 refute,P1/P2/P3 跳过

Signed-off-by: zexin_c <chenzexin14@huawei.com>

AI[100%] Human Fixed[0%] Human[0%] AI Adopted[100%]
Co-authored-by: opencode (glm-5.2) <ai@local>
2026-08-03 19:07:47 +08:00

4.9 KiB
Raw Permalink Blame History

逻辑正确性模式 (Logic Correctness)

所有 scanner 共享的逻辑正确性缺陷模式词典。


LOG-001 死代码 (Dead Code)

信号特征

  • 永不为真的条件(if (false) / if (constexpr_value_total_false))。
  • return/break 后的不可达代码。
  • 重复的条件分支(前面已 return,后面同条件永远不执行)。

检测方法

  • 分析条件表达式的常量性。
  • 构建控制流图(CFG)检测不可达节点。
  • 检查 return/break 后的代码。

典型后果:维护性降低、隐藏未测试逻辑,P2/P3。


LOG-002 逻辑矛盾 (Logic Contradiction)

信号特征

  • 互斥条件同时为真(x > 10 && x < 5)。
  • 冗余条件检查(if (value != nullptr) { if (value != nullptr) {...} })。
  • 条件覆盖矛盾(前面 state == ACTIVE return,后面同条件不执行)。

检测方法

  • SMT 求解器验证条件可满足性。
  • 数据流分析追踪变量约束。
  • 符号执行验证路径可行性。

典型后果:不可达路径、逻辑错误,P1/P2。


LOG-003 条件覆盖不完整

信号特征

  • 枚举类型分支遗漏(if ACTIVE ... else if INACTIVE ...SUSPENDED)。
  • switch-casedefault 分支。
  • if-else 链不完整。

检测方法

  • 枚举类型完整性检查。
  • switch-case 分支完整性检查。

典型后果:未处理状态导致逻辑错误,P1。


LOG-004 数据污染 (Data Tainting)

信号特征

  • 外部数据未验证直接使用。
  • 污染数据传播到敏感操作(system 调用、文件操作、SQL 执行)。

检测方法

  • 污点分析追踪外部数据。
  • 识别 sink points。
  • 验证 sanitization 点。

典型后果:注入攻击,P0。


LOG-005 类型不匹配

信号特征

  • 有符号/无符号比较(int count = -1; if (count < vector.size()) → 巨大无符号)。
  • 枚举类型混用(int value = 2; Type type = static_cast<Type>(value) 无有效枚举值)。
  • 指针类型强转不对齐。

典型后果:越界、UBP0/P1。


LOG-006 非法状态转换

信号特征

  • 状态机允许任意转换(currentState_ = newState 无校验),包括跳过中间状态。
  • CREATED → DEACTIVATING(跳过 ACTIVATING/ACTIVE)。
  • ACTIVE → CREATED(跳过 DEACTIVATING)。

检测方法

  • 构建状态转换图,验证所有转换合法性。
  • 检查是否遗漏中间状态。

典型后果:状态机完整性破坏、数据不一致,P0/P1。


LOG-007 状态不一致

信号特征

  • 多个状态变量不同步(state_isActive_ 更新不同步)。
  • 状态读取点返回旧值。
  • 单一状态源应优先(避免多变量同步问题)。

典型后果:行为不一致,P1。


LOG-008 状态机死锁(无法到达终态)

信号特征

  • 状态机循环无超时/错误恢复,永远停留(WAITING 无数据且无超时)。
  • 失败后回 WAITING 形成无法到达 DONE 的循环。

检测方法

  • 构建状态转换图检查强连通分量。
  • 验证是否存在无法到达终态的循环。
  • 检查超时和错误恢复机制。

典型后果:系统挂起,P0/P1。


LOG-009 遗漏错误路径

信号特征

  • 不检查返回值(fopen 后直接 fread)。
  • 部分错误处理(database_->Insert(info) 后未检查即 WriteToFile)。
  • 错误路径未回滚已完成副作用。

检测方法

  • 识别所有可能失败的函数调用。
  • 检查调用点是否有错误处理。
  • 验证错误处理完整性。

典型后果:数据不一致、部分失败,P1。


LOG-010 不变性破坏 (Invariant Violation)

信号特征

  • 操作后未维护类/模块不变性(accounts_.size() <= maxAccounts_ 未检查即 Add)。
  • 约束条件违反(优先队列 Add 后忘调整堆结构)。

检测方法

  • 识别类/模块的不变性。
  • 检查每个操作后是否保持不变性。
  • 验证构造函数是否建立不变性。

典型后果:数据损坏、逻辑错误,P0/P1。


LOG-011 契约违反 (Contract Violation)

信号特征

  • 前置条件未验证(Divide(a, b) 未检查 b != 0)。
  • 后置条件不保证(GetNextId() 溢出返回已使用 ID)。

检测方法

  • 识别函数的前置/后置条件。
  • 检查前置条件验证。
  • 验证后置条件保证。

典型后果UB、逻辑错误,P1。


LOG-012 整数溢出(逻辑层)

信号特征

  • 加法溢出(count * itemSize)。
  • 索引计算溢出为负数转巨大无符号。
  • 循环计数器溢出(count == INT_MAX)。

检测方法

  • 识别所有算术运算。
  • 边界值分析。
  • 检查溢出前的条件验证。

典型后果:越界、逻辑错误,P0/P1。

注:与 MEM-004 侧重不同——MEM-004 关注内存安全后果,LOG-012 关注逻辑正确性后果。同一代码点可同时命中两者。