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' があると、例外が無視される可能性があります。