You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 35 Next »

Use type definitions (typedef) to improve code readability.

Noncompliant Code Example

The following declaration of the signal() function is difficult to read and comprehend.

void (*signal(int, void (*)(int)))(int);

Compliant Solution

This compliant solution makes use of type definitions to specify the same type as in the noncompliant code example.

typedef void (*SighandlerType)(int signum);
extern SighandlerType signal(
  int signum, 
  SighandlerType handler
);

Risk Assessment

Code readability is important for discovering and eliminating vulnerabilities.

Recommendation

Severity

Likelihood

Remediation Cost

Priority

Level

DCL05-C

low

unlikely

medium

P2

L3

Automated Detection

The LDRA tool suite V 7.6.0 can detect violations of this recommendation.

Compass/ROSE could detect violations of this recommendation...typedefs are well represented in ROSE's AST. To detect violations, we first have to rigorously define what constitutes a 'too complicated type'. Most could concede that a pointer to a simple type is not too complicated, but a function type is. The algorithm we will employ to flag declarations that warrant a typedef is as follows:

  • Any pointer is worth 1 point
  • Any function type is worth 2 points (1 for the function and 1 for the customary pointer to function)
  • Any variable declaration with 5 or more points warrants a typedef.

Related Vulnerabilities

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

Other Languages

This rule appears in the C++ Secure Coding Standard as DCL05-CPP. Use typedefs to improve code readability.

References

[[ISO/IEC 9899:1999]] Section 6.7.7, "Type definitions"
[[ISO/IEC PDTR 24772]] "BRS Leveraging human experience"


      02. Declarations and Initialization (DCL)       DCL06-C. Use meaningful symbolic constants to represent literal values in program logic

  • No labels