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”会导致易被忽略的异常。