CodeQL 文档

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

点击查看 CodeQL 代码库中的查询

大多数for循环要么增加变量直到达到上限,要么减少变量直到达到下限。如果变量是增加的,但检查的是下限,或者变量是减少的,但检查的是上限,那么循环要么立即终止并且永远不会执行其主体,要么它将无限期地迭代。这两种情况都不可能是故意的,很可能是由于打字错误造成的。

建议

仔细检查循环,以查看其测试表达式或更新表达式是否有错误。

示例

在下面的示例中,使用两个循环将数组 a 中所有位于范围 lower..upper 之外的元素设置为零。但是,第二个循环包含一个打字错误:循环变量 i 是递减的而不是递增的,所以 iupper+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;

参考

  • Mozilla 开发者网络:for.

  • 通用弱点枚举:CWE-835.

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