CodeQL 文档

冲突变量初始化

ID: js/variable-initialization-conflict
Kind: problem
Security severity: 
Severity: error
Precision: very-high
Tags:
   - reliability
   - correctness
   - external/cwe/cwe-563
Query suites:
   - javascript-security-and-quality.qls

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

如果在一个变量声明语句中声明并初始化两次变量,第二次初始化会立即覆盖第一次初始化。这在最好的情况下令人困惑,并且可能表明存在底层错误。

建议

重命名第二个变量声明以避免冲突。对于变量的每次使用,检查它以找出它指的是第一个声明还是第二个声明。如果它指的是第二个声明,请重命名使用方式。

示例

在以下示例中,变量声明语句声明并初始化变量 key 两次,一次为 iter[0],另一次为 iter[1]。第二次初始化覆盖了第一次初始化,因此 key 最终被设置为 iter[1]

for (var iter in Iterator(aExtraHeaders)) {
    var key = iter[0], key = iter[1];
    xhr.setRequestHeader(key, value);
}

从上下文来看,很明显第二个声明是拼写错误:它应该声明并初始化变量 value,该变量在下一行中被引用。

for (var iter in Iterator(aExtraHeaders)) {
    var key = iter[0], value = iter[1];
    xhr.setRequestHeader(key, value);
}

参考

  • Ecma International,ECMAScript 语言定义,第 5.1 版,第 12.2 节。ECMA,2011 年。

  • 常见漏洞枚举:CWE-563.

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