循环的退出条件不可达¶
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
循环可以包含多个退出条件,这些条件可以直接包含在循环条件中,也可以作为 break
或 return
语句周围的保护措施。如果无法满足退出条件,则代码充其量具有误导性,并且循环可能不会终止。
建议¶
在编写旨在终止的循环时,请确保可以满足所有必要的退出条件,并且循环终止是明确的。
示例¶
以下示例显示了一个潜在的无限循环,因为内部循环条件始终为真。当然,循环是否无限取决于 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;
}
}