No Enumeration Ranges in Case Constructs (RPP02)
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:
Enumeration_Ranges_In_CASE_Statements
Reference
Similar to RPP01
Description
A range of enumeration literals must not be used as a choice in a
case
statement or a case
expression. This includes explicit ranges (A .. B),
subtypes, and the
'Range
attribute. Much like the use of others
in
case
statement alternatives, the use of ranges makes it possible for a new
enumeration value to be added but not handled with a specific alternative, when
a specific alternative was intended.
Applicable Vulnerability within ISO TR 24772-2
6.5 Enumerator issues [CCB]
Noncompliant Code Example
case Digit_T (C) is
when '0' | '9' =>
C := Character'succ (C);
when '1' .. '8' =>
C := Character'pred (C);
end case;
Compliant Code Example
case Digit_T (C) is
when '0' | '9' =>
C := Character'succ (C);
when '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' =>
C := Character'pred (C);
end case;
Notes
N/A