V759. Violated order of exception handlers. Exception caught by handler for base class.

The analyzer detected multiple exception handlers arranged in a wrong order. The handler for base-class exceptions is placed before the handler for derived-class exceptions; therefore, every exception that must be caught by the derived-class handler will be caught by the base-class handler.

Consider the following example:

class Exception { .... };
class DerivedException : public Exception { ... };
void foo()
{
  throw DerivedException;
}
void bar()
{
  try
  {
    foo();
  }
  catch (Exception&)
  {
    // Every exception of type DerivedException will get here
  }
  catch (DerivedException&)
  {
    // Code of this handler will never execute
  }
}

Since 'Exception' is the base class for the 'DerivedException' class, all exceptions thrown by the 'foo()' function are caught by the first handler.

To fix this error, we need to swap the handlers:

void bar()
{
  try
  {
    foo();
  }
  catch (DerivedException&)
  {
    // Catches exceptions of type DerivedException
  }
  catch (Exception&)
  {
    // Catches exceptions of type Exception
  }
}

With this fix, each handler will catch only those exceptions it was meant to.

According to Common Weakness Enumeration, potential errors found by using this diagnostic are classified as CWE-703.


Bugs Found

Checked Projects
410
Collected Errors
14 111
This website uses cookies and other technology to provide you a more personalized experience. By continuing the view of our web-pages you accept the terms of using these files. If you don't want your personal data to be processed, please, leave this site. Learn More →
Accept