CodeQL 文档

控制语句后的误导性缩进

ID: js/misleading-indentation-after-control-statement
Kind: problem
Security severity: 
Severity: warning
Precision: very-high
Tags:
   - correctness
   - statistical
   - non-attributable
   - external/cwe/cwe-483
Query suites:
   - javascript-security-and-quality.qls

单击以在 CodeQL 代码库中查看查询

循环体和 if 语句的“then”和“else”分支可以是使用大括号分隔的块语句,也可以是简单语句。在后一种情况下,必须特别注意正确缩进语句以指示它们是否属于循环体或 if 语句。特别地,循环或 if 语句后的直接语句不应与主体缩进相同,以避免对控制流结构的误解。

建议

使用额外的缩进将循环体和 then/else 分支区分开来,但对在语句序列中彼此相继的语句使用相同的缩进量。

示例

在这个例子中,if 语句的“then”分支包含单个语句 scream();。缩进使其看起来好像语句 runAway(); 也属于“then”分支,但实际上并非如此:它只是 if 后的下一条语句,无论条件 afraid() 是否评估为真都会执行。

if (afraid())
	scream();
	runAway();

如果两个语句都打算作为“then”分支的一部分,则应将它们包含在类似这样的语句块中

if (afraid()) {
	scream();
	runAway();
}

如果第二个语句在逻辑上不属于“then”分支,则应减少其缩进,如下所示

if (afraid())
	scream();
runAway();

参考资料

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