EN JP CN

JD.FINRET

JD.FINRET

JD.FINRET は、return 文が finally ブロックに存在する場合に検出されます。

脆弱性とリスク

finally ブロック内に return 文がある場合には、try ブロック内でスローされる可能性のある例外が破棄され、このメソッドの当初予定されていた戻り値が finally ブロックで返される値に置き換えられることになります。

軽減と防止

finally ブロックにはファイナライズコードのみが含まれるようにしてください。戻り値に関するロジックや再スローされる例外は、finally ブロックに置かないでください。

例 1

9      int foo2(String name) {
10         try {
11             return Integer.parseInt(name);
12         } catch (NumberFormatException e) {
13             throw e;
14         } finally {
15             return -1;
16         }
17     }

JD.FINRET が 15 行目に対して報告されています。finally ブロックに 'return' があると、例外が無視される可能性があります。

セキュリティガイドライン