Versions Compared

Key

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

...

Use of an identifier (within one translational unit) classified as both internally and externally linked causes undefined behavior. A translational unit includes the source file together with its headers, and all source files included via the preprocessing directive #include.

Non-Compliant Code Example

The first declaration of the identifier x is externally linked, while the second declaration is internally linked. Future use of this identifier results in undefined behavior.

Code Block
bgColor#FFCCCC
int x; /* externally linked */

int main(void) {
   static int x; /* internally linked */
   /* use of identifier x results in undefined behavior */
}

Compliant Solution

More descriptive identifier names are used, avoiding any conflicts.

Code Block
bgColor#ccccff
int external_x; /* externally linked */
int main(void) {
  static int internal_x; /* internally linked */
  /* we're good to go */
}

Risk Assessment

Use of an identifier classified as both internally and externally linked causes undefined behavior. However, it would be highly unlikely that an attacker could exploit this behavior to run arbitrary code.

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

DCL05 DCL07-A

1 (low)

2 (probable)

3 (low)

P6

L2

Examples of vulnerabilities resulting from the violation of this rule can be found on the CERT website.

References

Wiki Markup
\[ISO/IEC 9899-1999\] Section 6.2.2, "Linkages of identifiers"