Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: REM Cost Reform

If one definition affects another, a relation exists between constants, you should encode the relationship in the definition; do definitions. Do not give two independent definitions. A corollary of this recommendation is not to encode transitory relationships in definitions, because a maintainer may fail to preserve that relationship when modifying the code. As a corollary, do not encode an impermanent or false relationship between constants, because future modifications may result in an incorrect definition for the dependent constant.

Noncompliant Code Example

In this noncompliant code example, the definition for OUT_STR_LEN must always be two greater than the definition of IN_STR_LEN. The following definitions fail to embody this relationship:

Code Block
bgColor#FFcccc
langc

enum { IN_STR_LEN=18, OUT_STR_LEN=20 };

A programmer performing maintenance on this program would need to identify the relationship and modify both definitions accordingly. While Although this sort of error appears relatively benign, it can easily lead to serious security vulnerabilities, such as buffer overflows.

...

The declaration in this compliant solution embodies the relationship between the two definitions.:

Code Block
bgColor#ccccff
langc

enum { IN_STR_LEN=18, OUT_STR_LEN=IN_STR_LEN+2 };

...

In this noncompliant code example, a relationship is established between two constants where none exists.:

Code Block
bgColor#FFcccc
langc

enum { ADULT_AGE=18 };

/* misleading,Misleading; relationship established when none exists */
enum { ALCOHOL_AGE=ADULT_AGE+3 };

...

This compliant solution does not assume a relationship when where none exists:

Code Block
bgColor#ccccff
langc

enum { ADULT_AGE=18 };
enum { ALCOHOL_AGE=21 };

Risk Assessment

Failing to properly encode relationships in constant definitions may lead to the introduction of defects during maintenance. These defects could potentially result in vulnerabilities, for example, if the affected constants were used for allocating or accessing memory.

Recommendation

Severity

Likelihood

Remediation Cost

Detectable

Repairable

Priority

Level

DCL08-C

Low

low

Unlikely

unlikely

No

high

No

P1

L3

Automated Detection

Tool

Version

Checker

Description

Related Vulnerabilities

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

Related Guidelines

...

...

...

Java Secure Coding Standard: DCL03-J. Properly encode relationships in constant definitions.

...