Do Not Raise Language-Defined Exceptions (EXU01)

Level \(\rightarrow\) Required

Category
Safety:

\(\checkmark\)

Cyber:

\(\checkmark\)

Goal
Maintainability:

\(\checkmark\)

Reliability:

\(\checkmark\)

Portability:

\(\checkmark\)

Performance:

Security:

Remediation \(\rightarrow\) Low

Verification Method \(\rightarrow\) GNATcheck rule: Raising_Predefined_Exceptions

Reference

[SEI-Java] ERR07-J

Description

In no case should the application explicitly raise a language-defined exception.

The Ada language-defined exceptions are raised implicitly in specific circumstances defined by the language standard. Explicitly raising these exceptions would be confusing to application developers. The potential for confusion increases as the exception is propagated up the dynamic call chain, away from the point of the raise statement, because this increases the number of paths and thus corresponding language-defined checks that could have been the cause.

Applicable Vulnerability within ISO TR 24772-2

N/A

Noncompliant Code Example

procedure Noncompliant (X : in out Integer) is
begin
   if X < Integer'last / 2
   then
      X := X * 2;
   else
      raise Constraint_Error;
   end if;
end Noncompliant;

Compliant Code Example

procedure Compliant (X : in out Integer) is
begin
   if X < Integer'last / 2
   then
      X := X * 2;
   else
      raise Math_Overflow;
   end if;
end Compliant;

Notes

N/A