JD.FINRET
JD.FINRET は、return 文が finally ブロックに存在する場合に検出されます。
脆弱性とリスク
finally ブロック内に return 文がある場合には、try ブロック内でスローされる可能性のある例外が破棄され、このメソッドの当初予定されていた戻り値が finally ブロックで返される値に置き換えられることになります。
軽減と防止
finally ブロックにはファイナライズコードのみが含まれるようにしてください。戻り値に関するロジックや再スローされる例外は、finally ブロックに置かないでください。
例 1
コピー
int foo2(String name) {
try {
return Integer.parseInt(name);
} catch (NumberFormatException e) {
throw e;
} finally {
return -1;
}
}
JD.FINRET が 15 行目に対して報告されています。finally ブロックに 'return' があると、例外が無視される可能性があります。
外部参考資料
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。