CodeQL 文档

循环的退出条件不可达

ID: java/unreachable-exit-in-loop
Kind: problem
Security severity: 7.5
Severity: warning
Precision: medium
Tags:
   - security
   - external/cwe/cwe-835
Query suites:
   - java-security-extended.qls
   - java-security-and-quality.qls

单击以在 CodeQL 存储库中查看查询

循环可以包含多个退出条件,这些条件可以直接包含在循环条件中,也可以作为 breakreturn 语句周围的保护措施。如果无法满足退出条件,则代码充其量具有误导性,并且循环可能不会终止。

建议

在编写旨在终止的循环时,请确保可以满足所有必要的退出条件,并且循环终止是明确的。

示例

以下示例显示了一个潜在的无限循环,因为内部循环条件始终为真。当然,循环是否无限取决于 shouldBreak 的行为,但如果这是预期的唯一退出条件,则应重写循环以明确这一点。

for (int i=0; i<10; i++) {
    for (int j=0; i<10; j++) {
        // do stuff
        if (shouldBreak()) break;
    }
}

要修复循环,请更正条件以检查正确的变量。

for (int i=0; i<10; i++) {
    for (int j=0; j<10; j++) {
        // do stuff
        if (shouldBreak()) break;
    }
}

参考

  • ©GitHub, Inc.
  • 条款
  • 隐私