Java


JAVA.STRUCT.EXCP.GEH : Generic Exception Handler (Java)

Summary

An exception handler is used for a very generic exception type.

This checker controls if exception handlers might be incorrect. For instance, an exception handler with an empty body might be an unfinished snippet of code; an exception handler for a very generic exception type might end up catching too many exceptions, also some that were not meant to be caught there.

Properties

Class Name Generic Exception Handler (Java)
Significance reliability
Mnemonic JAVA.STRUCT.EXCP.GEH
Categories
CWE CWE:396 Declaration of Catch for Generic Exception
CERT-Java CERT-Java:ERR08-J Do not catch NullPointerException or any of its ancestors
Availability Available for Java only.
Enabling Checks for this warning class are enabled by default. To disable them, add the following WARNING_FILTER rule to the project configuration file.
WARNING_FILTER += discard class="Generic Exception Handler (Java)"

Example

// Main.java 
import java.io.FileWriter;

public class Main {
  public static void main(String args[]) {
    FileWriter fw = null;
    try {
      fw = new FileWriter(args[0]);
      fw.close();
    }
    catch (IndexOutOfBoundsException e) {} // Empty Exception Handler (Java) warning issued here
    catch (Exception e) {                  // Generic Exception Handler (Java) warning issued here
      System.out.println("unusual");
    }
  }
}

These issues can be resolved as follows.

// Main.java, after modification 
import java.io.FileWriter;

public class Main {
  public static void main(String args[]) {
    FileWriter fw = null;
    try {
      fw = new FileWriter(args[0]);
      fw.close();
    }
    catch (IndexOutOfBoundsException e) {
      System.out.println("usage: Main filename");
    }
    catch (IOException e) {
      System.out.println("I/O error");
    }
  }
}

Resolution

Add a body to the exception handler, or narrow to the exception types.

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.