CS.NRE.CHECK.CALL.MUST
已主动进行 null 检查的对象引用值将显式取消引用,或通过调用可取消引用该值而无需检查 null 的函数来取消引用。
漏洞与风险
取消引用 null 对象引用是一个严重的运行时问题,该问题将导致一些操作系统的应用程序崩溃,并引发另一些操作系统出现运行时异常。
示例 1
复制
public class A {
public void abc() {}
public void foo(A a) {
if (flag2)
return;
a.abc();
}
public A boo() {
if (flag3)
return new A();
return null;
}
public void var() {
A a = new A();
if (a != null) {
DoSomething();
}
foo(a);
}
private void DoSomething() {}
private bool flag;
private bool flag2;
private bool flag3;
}
Klocwork 在第 20 行为变量 a 生成了一个问题报告 (CS.NRE.CHECK.CALL.MUST)。变量 a 与第 17 行的 null 值进行了比较,因此,如果将其作为参数 1 传递给第 20 行的函数 foo(可对其取消引用),仍可预计该变量为 null。