Versions Compared

Key

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

Wiki Markup
Immutable objects should be {{const}}\-qualified.  Enforcing object immutability using {{const}}\-qualification helps ensure the correctness and security of applications.  ISO/IEC DTR 24772, for example, recommends labeling parameters as constant to avoid the unintentional modification of function arguments \[[ISO/IEC DTR 24772|AA. Bibliography#ISO/ISO/IEC DTR 24772]\]. See guideline [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, still more become necessary. This phenomenon is sometimes called const poisoning, which can frequently lead to violations of guideline EXP05-C. Do not cast away a const qualification. While const qualification is a good idea, the costs may outweigh the value in the remediation of existing code.

Macros, or an enumeration constant, may also be used instead of a const-qualified object. Guideline 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
#ifndef SOME_HEADER_H
#define SOME_HEADER_H
...  // content of header file
#endif

See guideline PRE06-C. Enclose header files in an inclusion guard for more information on inclusion guards.

...

Recommendation

Severity

Likelihood

Remediation Cost

Priority

Level

DCL00-C

low

unlikely

high

P1

L3

Automated Detection

Tool

Version

Checker

Description

Section

Compass/ROSE

...

 

 

 

Related Vulnerabilities

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

Other Languages

Related Guidelines

This rule appears in the C++ Secure Coding Standard as : DCL00-CPP. Const-qualify immutable objects.

This rule appears in the Java Secure Coding Standard as DCL04-J. Declare mathematical constants as static and final

Bibliography

Wiki Markup
\[[Dewhurst 022002|AA. Bibliography#Dewhurst 02]\] Gotcha #25, "#define Literals"
\[[ISO/IEC 9899:1999|AA. Bibliography#ISO/IEC 9899-1999]\] Section 6.7.3, "Type qualifiers"
\[[Saks 002000|AA. Bibliography#Saks 00]\]

...