Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Parasoft C/C++test 2023.1

Wiki MarkupImmutable objects should be {{const}}\-qualified. Enforcing object immutability using {{const}}\- qualification helps ensure the correctness and security of applications. ISO/IEC TR 24772, for example, recommends labeling parameters as constant to avoid the unintentional modification of function arguments \[ [ISO/IEC TR 24772|AA. Bibliography#ISO/ISO/IEC DTR 24772]\]. See recommendation [STR05-C. Use pointers to const when referring to string literals] describes a specialized case of this recommendation.

Adding const qualification may propagate through a program; as you add const, qualifiers become still more become necessary. This phenomenon is sometimes called const poisoning, which can frequently lead to violations of recommendation EXP05-C. Do not cast away a const qualification. While Although const qualification is a good idea, the costs may outweigh the value in the remediation of existing code.

Macros, A macro or an enumeration constant , may also be used instead of a const-qualified object. Reocmmendation DCL06-C. Use meaningful symbolic constants to represent literal values describes the relative merits of using const-qualified objects, enumeration constants, and object-like macros. However, adding a const qualifier to an existing variable is a better first step than replacing the variable with an enumeration constant or macro because the compiler will issue warnings on any code that changes your const-qualified variable. Once you have verified that a const-qualified variable is not changed by any code, you may consider changing it to an enumeration constant or macro, as best fits your design.

...

Code Block
bgColor#FFCCCC
langc

float pi = 3.14159f;
float degrees;
float radians;
/* ... */
radians = degrees * pi / 180;

...

In this compliant solution, pi is declared as a const-qualified object.:

Code Block
bgColor#ccccff
langc

const float pi = 3.14159f;
float degrees;
float radians;
/* ... */
radians = degrees * pi / 180;

Exceptions

DCL00-EX1: It is acceptable to define valueless macros to serve as 'inclusion guards'. That is, the macro serves to control the multiple inclusion of header files, as in the following example:

Code Block
#ifndef SOME_HEADER_H
#define SOME_HEADER_H
...  // content of header file
#endif

...

Risk Assessment

Failing to const-qualify immutable objects can result in a constant being modified at runtime.

Recommendation

Severity

Likelihood

Remediation Cost

Priority

Level

DCL00-C

low

Low

unlikely

Unlikely

high

High

P1

L3

Automated Detection

Tool

Version

Checker

Description

section

Astrée
Include Page
Astrée_V
Astrée_V
parameter-missing-constPartially checked
Axivion Bauhaus Suite

Include Page
Axivion Bauhaus Suite_V
Axivion Bauhaus Suite_V

CertC-DCL00
CodeSonar
Include Page
CodeSonar_V
CodeSonar_V

LANG.CAST.PC.CRCQ

LANG.TYPE.VCBC

LANG.STRUCT.RPNTC

Cast removes const qualifier

Variable Could Be const

Returned Pointer Not Treated as const

Compass/ROSE

 

 

 




ECLAIR

Include Page
ECLAIR_V
ECLAIR_V

CC2.DCL00

Partially implemented

Helix QAC

Include Page
Helix QAC_V
Helix QAC_V

C3204, C3227, C3232, C3673, C3677

section


LDRA tool suite
Include Page
c:
LDRA_V
c:
LDRA_V
Section

78 D
93 D
200 S

SectionFully Implemented

Fully implemented

Parasoft C/C++test
Include Page
Parasoft_V
Parasoft_V

CERT_C-DCL00-a
CERT_C-DCL00-b

Declare local variable as const whenever possible
Declare parameters as const whenever possible

PC-lint Plus

Include Page
PC-lint Plus_V
PC-lint Plus_V

953

Fully supported

Polyspace Bug Finder

Include Page
Polyspace Bug Finder_V
Polyspace Bug Finder_V

CERT C: DCL00-CChecks for unmodified variable not const-qualified (rule fully covered).
RuleChecker
Include Page
RuleChecker_V
RuleChecker_V
parameter-missing-constPartially checked

Related Vulnerabilities

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

Related Guidelines

...

...

ISO/IEC 9899:1999 Section 6.7.3, "Type qualifiers"

Bibliography

Wiki Markup
\[[Dewhurst 2002|AA. Bibliography#Dewhurst 02]\] Gotcha #25, "#define Literals"
\[[Saks 2000|AA. Bibliography#Saks 00]\]

 Bibliography

[Dewhurst 2002]Gotcha #25, "#define Literals"
[Saks 2000]


...

Image Added Image Added 02. Declarations and Initialization (DCL)      02. Declarations and Initialization (DCL)      Image Modified