JD.FINRET

当 finally 块中出现 return 语句时,出现 JD.FINRET。

漏洞与风险

finally 块中的 return 语句会导致可能出现在 try 块中的任何异常被丢弃,并会导致原本要通过该方法返回的所有值替换为 finally 块中返回的值。

缓解与预防

finally 块应仅包含结束代码。关于返回值的所有逻辑和重新引发的预期都不应位于 finally 块中。

示例 1

复制
      int foo2(String name) {
         try {
             return Integer.parseInt(name);
         } catch (NumberFormatException e) {
             throw e;
         } finally {
             return -1;
         }
     }

在第 15 行报告 JD.FINRET:finally 块中的“return”会导致易被忽略的异常。

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。