Limited Use of "others" in Aggregates (RPP03)
Level \(\rightarrow\) Advisory
- Category
- Safety:
\(\checkmark\)
- Cyber:
\(\checkmark\)
- Goal
- Maintainability:
\(\checkmark\)
- Reliability:
\(\checkmark\)
- Portability:
\(\checkmark\)
- Performance:
- Security:
Remediation \(\rightarrow\) Low
Verification Method \(\rightarrow\) GNATcheck rule:
OTHERS_In_Aggregates (builtin rule)
Reference
Similar to RPP01
Description
Do not use an others choice in an extension aggregate. In record
and array aggregates,
do not use an others choice unless it is used either
to refer to all components, or to all but one component.
This guideline prevents accidental provision of a general value for a
record component or array
component, when a specific value was intended. This
possibility includes the case in which new components are added to an existing
composite type.
Applicable Vulnerability within ISO TR 24772-2
6.5 Enumerator issues [CCB]
6.27 Switch statements and static analysis [CLL]
Applicable Common Weakness Enumeration
Noncompliant Code Example
type Record_T is record
Field1 : Integer := 1;
Field2 : Boolean := False;
Field3 : Character := ' ';
end record;
type Array_T is array (Character) of Boolean;
Rec : Record_T := (Field1 => 1,
Field3 => '2',
others => <>);
Arr : Array_T := ('0' .. '9' => True,
others => False);
Compliant Code Example
type Record_T is record
Field1 : Integer := 1;
Field2 : Boolean := False;
Field3 : Character := ' ';
end record;
type Array_T is array (Character) of Boolean;
Rec : Record_T := (Field1 => 1,
others => <>);
Arr : Array_T := (others => False);
Notes
N/A