Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Enumerations in C++ come in two forms: scoped enumerations in which the underlying type is fixed and unscoped enumerations in which the underlying type may or may not be fixed. The range of values that can be represented by either form of enumeration may include enumerator values not specified by the enumeration itself. The range of valid enumeration values for an enumeration type is defined by the C++ Standard, [dcl.enum], in paragraph 8 [ISO/IEC 14882-20172020]:

 For an enumeration whose underlying type is fixed, the values of the enumeration are the values of the underlying type. Otherwise, the values of the enumeration are the values representable by a hypothetical integer type with minimal width M such that all enumerators can be represented. The width of the smallest bit-field large enough to hold all the values of the enumeration type is M. It is possible to define an enumeration that has values not defined by any of its enumerators. If the enumerator-list is empty, the values of the enumeration are as if the enumeration had a single enumerator with value 0.

...

PRQA QA-C++V1016

Tool

Version

Checker

Description

Astrée

Include Page
Astrée_V
Astrée_V

cast-integer-to-enum
Partially checked
Axivion Bauhaus Suite

Include Page
Axivion Bauhaus Suite_V
Axivion Bauhaus Suite_V

CertC++-INT50
CodeSonar
Include Page
CodeSonar_V
CodeSonar_V

LANG.CAST.COERCE

LANG.CAST.VALUE

Coercion Alters Value

Cast Alters Value

Helix QAC

Include Page
Helix QAC_V
Helix QAC_V

C++3013
Parasoft C/C++test

Include Page
Parasoft_V
Parasoft_V

CERT_CPP-INT50-a

An expression with enum underlying type shall only have values corresponding to the enumerators of the enumeration

PRQA QA-C++
PVS-Studio

Include Page

PVS-Studio_V
PVS-Studio_V

V1016
RuleChecker
Include Page
RuleChecker
PRQA QA-C++
_V
3013PVS-Studio
Include Page
PVS-Studio_VPVS-Studio_V
RuleChecker_V
cast-integer-to-enumPartially checked
Polyspace Bug Finder

Include Page
Polyspace Bug Finder_V
Polyspace Bug Finder_V

CERT C++: INT50-CPPChecks for casting to out-of-range enumeration value (rule fully covered)

Related Vulnerabilities

Search for vulnerabilities resulting from the violation of this rule on the CERT website.

...

[Becker 2009]Section 7.2, "Enumeration Declarations"
[ISO/IEC 14882-20172020]

Subclause 5.2.9, "Static Cast"
Subclause 7.2, "Enumeration Declarations"

...