CS.NRE.CHECK.CALL.MIGHT

已主动进行 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();
     }
     if (flag) {
       foo(a);
     }
    }
    
    private void DoSomething() {}

    private bool flag;
    private bool flag2;
    private bool flag3;
 }

Klocwork 在第 21 行为变量 a 生成了一个问题报告 (CS.NRE.CHECK.CALL.MIGHT)。变量 a 与第 17 行的 null 值进行了比较,因此,如果将其作为参数 1 传递给第 21 行的函数 foo(可对其取消引用),仍可预计该变量为 null。

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。