EXC.BROADTHROWS

一个方法应引发相应抽象层次的异常。如果一个方法引发的异常太过通用,如 Exception 和 Throwable,调用方将难以正确处理错误并进行适当的错误恢复。

漏洞与风险

如果方法引发的异常太过通用,调用方必须调查所发生问题的类型,以便正确处理该问题。此外,如果方法代码更改且引发新类型的异常,则使所有调用方正确处理该问题将变得更加困难。

缓解与预防

一个方法应引发相应抽象层次的异常。必要时,低级异常可使用高级异常来覆盖。

示例 1

复制
    public void processFile(String fileName) throws Exception {
      InputStream is = new FileInputStream(fileName);
      // do something
    }
    public int calculateSum(Collection data) throws Throwable {
      int sum = 0;
      for (Iterator it = data.iterator(); it.hasNext();) {
        String element = (String) it.next();
        int i = Integer.parseInt(element);
        sum += i;
      }
      return sum;
    }

针对第 15 行的方法 processFile 声明报告 EXC.BROADTHROWS:“processFile”方法引发了通用异常“java.lang.Exception”。

针对第 19 行的方法 calculateSum 声明报告 EXC.BROADTHROWS:“calculateSum”方法引发了通用异常“java.lang.Throwable”。

安全培训

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