CS.NRE.FUNC.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 = boo();
                         if (flag)
                             foo(a);
                     }
 
                     private bool flag;
                     private bool flag2;
                     private bool flag3;
                 }

Klocwork 在第 18 行为变量 a 生成了一个问题报告 (CS.NRE.FUNC.CALL.MIGHT)。变量 a 已赋值给可能为 null 并由第 16 行的函数 boo 调用生成的一个值。如果此变量作为参数 1 传递给第 18 行的函数 foo(该函数可取消引用该变量),其仍可为 null。

安全培训

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