CodeQL 文档

取消引用的变量可能为 null

ID: java/dereferenced-value-may-be-null
Kind: problem
Security severity: 
Severity: warning
Precision: high
Tags:
   - reliability
   - correctness
   - exceptions
   - external/cwe/cwe-476
   - non-local
Query suites:
   - java-security-and-quality.qls

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

如果取消引用变量,并且该变量在导致取消引用的某些执行路径上可能具有 null 值,则取消引用可能会导致 NullPointerException

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

建议

确保变量在取消引用时不具有 null 值。

示例

在以下示例中,由于整数文字的类型为 int,因此使用条件运算符会导致隐式拆箱。如果参数 p 曾经为 null,则会发生 NullPointerException

public Integer f(Integer p) {
	return true ? p : 5;
}

如果隐式拆箱不是故意的,可以通过确保条件运算符的两个分支具有相同的类型来防止它。

参考

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