for 循环方向不一致¶
ID: js/inconsistent-loop-direction
Kind: problem
Security severity:
Severity: error
Precision: very-high
Tags:
- correctness
- external/cwe/cwe-835
Query suites:
- javascript-security-and-quality.qls
大多数for
循环要么增加变量直到达到上限,要么减少变量直到达到下限。如果变量是增加的,但检查的是下限,或者变量是减少的,但检查的是上限,那么循环要么立即终止并且永远不会执行其主体,要么它将无限期地迭代。这两种情况都不可能是故意的,很可能是由于打字错误造成的。
建议¶
仔细检查循环,以查看其测试表达式或更新表达式是否有错误。
示例¶
在下面的示例中,使用两个循环将数组 a
中所有位于范围 lower
..upper
之外的元素设置为零。但是,第二个循环包含一个打字错误:循环变量 i
是递减的而不是递增的,所以 i
从 upper+1
向下计数到 0
、-1
、-2
,依此类推。
// zero out everything below index `lower`
for (i=lower-1; i>=0; --i)
a[i] = 0;
// zero out everything above index `upper`
for (i=upper+1; i<a.length; --i)
a[i] = 0;
要解决此问题,请将第二个循环更改为增加其循环变量。
// zero out everything below index `lower`
for (i=lower-1; i>=0; --i)
a[i] = 0;
// zero out everything above index `upper`
for (i=upper+1; i<a.length; ++i)
a[i] = 0;