C#


CSHARP.STRUCT.EXCP.GEH : Generic Exception Handler (C#)

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 (C#)
Significance reliability
Mnemonic CSHARP.STRUCT.EXCP.GEH
Categories
CWE CWE:396 Declaration of Catch for Generic Exception
Availability Available for C# 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 (C#)"

Example

using System;
using System.IO;


namespace DocumentationExamples
{

    public class ExceptionHandlers
    {
        public static void Main(string[] args)
        {
            StreamWriter fw = null;
            try
            {
                fw = new StreamWriter(args[0]);
                fw.Dispose();
            }
            catch (IndexOutOfRangeException e) { }  // Empty Exception Handler (C#) warning issued here
            catch (Exception e)                     // Generic Exception Handler (C#) warning issued here
            {
                Console.WriteLine("unusual");
            }
        }
    }
}

The programmer could resolve these warnings as follows.

public static void Main(string[] args)
{
    StreamWriter fw = null;
    try
    {
        fw = new StreamWriter(args[0]);
        fw.Dispose();
    }
    catch (IndexOutOfRangeException e) {         // resolve "Empty Exception Handler (C#)" warning by printing a message to the user
        Console.WriteLine("usage: Main filename");
    } 
    catch (IOException e)                        // resolve "Generic Exception Handler (C#)" warning by catching IOException instead of Exception
    {
        Console.WriteLine("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.