EN JP CN

CS.NRE.CHECK.CALL.MUST

CS.NRE.CHECK.CALL.MUST

null について適切にチェックされたオブジェクト参照値は、明示的に、またはそれを null についてチェックせずに逆参照する可能性がある関数を呼び出すことによって、逆参照されます。

脆弱性とリスク

null オブジェクト参照の逆参照は、一部のオペレーティングシステムでのアプリケーションのクラッシュや実行時例外のスローを引き起こす実行時の重大な問題です。

例 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 }

変数 'a' では、Klocwork は 20 行目で指摘レポート (CS.NRE.CHECK.CALL.MUST) を生成します。変数 'a' は 17 行目で null 値と比較されるため、20 行目で引数 1 として (この変数が逆参照する可能性がある) 関数 'foo' に渡されたときでも、null であることが想定される可能性があります。