CodeQL 文档

解除引用的变量始终为 null

ID: java/dereferenced-value-is-always-null
Kind: problem
Security severity: 
Severity: error
Precision: very-high
Tags:
   - reliability
   - correctness
   - exceptions
   - external/cwe/cwe-476
Query suites:
   - java-security-and-quality.qls

单击以在 CodeQL 存储库中查看查询

如果解除变量的引用,并且该变量在导致解除引用的所有可能的执行路径上具有 null 值,则解除引用必定会导致 NullPointerException

如果变量的类型是装箱基本类型,并且变量出现在发生隐式拆箱的上下文中,则该变量也可能会被隐式解除引用。请注意,条件运算符在其第二个和第三个操作数之一为基本类型而另一个为相应装箱类型时,会拆箱其第二个和第三个操作数。

建议

确保在解除变量引用时,该变量没有 null 值。

示例

在以下示例中,条件 !dir.exists() 仅在 dirnull 时才执行。第二个示例通过使用 && 而不是 || 来正确保护表达式。

public void createDir(File dir) {
	if (dir != null || !dir.exists()) // BAD
		dir.mkdir();
}

public void createDir(File dir) {
	if (dir != null && !dir.exists()) // GOOD
		dir.mkdir();
}

参考

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