mirror of
https://github.com/openharmony/ability_ability_runtime.git
synced 2026-08-24 12:43:16 -04:00
be4a7333b8
- 删除旧的扁平 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>
4.9 KiB
4.9 KiB
逻辑正确性模式 (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 == ACTIVEreturn,后面同条件不执行)。
检测方法
- SMT 求解器验证条件可满足性。
- 数据流分析追踪变量约束。
- 符号执行验证路径可行性。
典型后果:不可达路径、逻辑错误,P1/P2。
LOG-003 条件覆盖不完整
信号特征
- 枚举类型分支遗漏(
if ACTIVE ... else if INACTIVE ...缺SUSPENDED)。 switch-case缺default分支。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)无有效枚举值)。 - 指针类型强转不对齐。
典型后果:越界、UB,P0/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 关注逻辑正确性后果。同一代码点可同时命中两者。