CS.RNRE

如果某一 null 对象引用取消引用,然后与 null 进行比较,并且取消引用与检查之间的痕迹没有任何对象引用变更,在这种情况下,将报告此警告。因此,很有可能在取消引用时,该对象引用可能为 null,或 null 检查不当。

漏洞与风险

确定以下三种情况之一:

  • 可设计为 null 的一个指针取消引用而未进行恰当检查,这将导致运行时错误。
  • 错误写入一个条件,因此该代码将不会按预期运行。
  • 存在冗余检查;将生成不需要的代码。

示例

复制
                  public class A {
                      public void foo() {
                          A a = null;
                          a.foo();
                          if (a == null)
                              a = new A();
                      }
                  }

Klocwork 在第 4 行为变量 a 生成了一个问题报告 (CS.RNRE)。“a”变量通过调用方法“foo”在第 4 行取消引用,然后在第 5 行通过 if 语句使用 null 检查该变量。

安全培训

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