CS.NRE.FUNC.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 = boo(); 17 if (flag) 18 foo(a); 19 } 20 21 private bool flag; 22 private bool flag2; 23 private bool flag3; 24 }
変数 'a' では、Klocwork は 18 行目で指摘レポート (CS.NRE.FUNC.CALL.MIGHT) を生成します。変数 'a' は、null になる可能性がある値、および 16 行目で関数 'boo' の呼び出しによって返される値に割り当てられます。この変数は、18 行目で引数 1 として (逆参照する可能性がある) 関数 'foo' に渡される場合も、まだ null である可能性があります。
外部参考資料
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。