CS.NRE.CHECK.CALL.MUST

An object reference value that is positively checked for null will be dereferenced either explicitly, or through a call to a function that can dereference it, without checking for null.

Vulnerability and risk

Dereferencing a null object reference is a critical runtime problem that will crash the application on some operating systems and throw a runtime exception on others.

Example 1

1  public class A {
2    public void abc() {}
3     public void foo(A a) {
4      if (flag2)
5        return;
6      a.abc();
7     }
8  
9    public A boo() {
10     if (flag3)
11       return new A();
12     return null;
13   }
14 
15    public void var() {
16     A a = new A();
17     if (a != null) {
18       DoSomething();
19     }
20     foo(a);
21    }
22
23    private void DoSomething() {}
24 
25    private bool flag;
26    private bool flag2;
27    private bool flag3;
28 }

Klocwork produces an issue report (CS.NRE.CHECK.CALL.MUST) at line 20 for variable 'a'. Variable 'a' is compared with null value at line 17, and therefore can be expected to be null when it is passed as argument 1 to function 'foo' at line 20, which may dereference it.

Security training

Application security training materials provided by Secure Code Warrior.