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
(builtin rule)
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]
Applicable Common Weakness Enumeration
N/A
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