EN JP CN

CS.NRE.CHECK.CALL.MIGHT

CS.NRE.CHECK.CALL.MIGHT

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     if (flag) {
21       foo(a);
22     }
23    }
24    
25    private void DoSomething() {}
26
27    private bool flag;
28    private bool flag2;
29    private bool flag3;
30 }

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