Versions Compared

Key

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

Wiki Markup
C99 defines {{assert()}} to have the following behavior \[[ISO/IEC 9899-1999|AA. C References#ISO/IEC 9899-1999]\]:

The assert macro puts diagnostic tests into programs; it expands to a void expression. When it is executed, if expression (which shall have a scalar type) is false (that is, compares equal to 0), the assert macro writes information about the particular call that failed (including the text of the argument, the name of the source file, the source line number, and the name of the enclosing function — ---the latter are respectively the values of the preprocessing macros __FILE__ and __LINE__ and of the identifier __func__) on the standard error stream in an implementation-defined format. It then calls the abort function.

Because assert() calls abort(), cleanup functions registered with atexit() are not called. If the intention of the programmer is to properly cleanup clean up in the case of a failed assertion, then runtime assertions should be replaced with static assertions where possible (see DCL03-A. Use a static assertion to test the value of a constant expression). When the assertion is based on runtime data, the assert should be replaced with a runtime check that implements the adopted error strategy (see ERR00-A. Adopt and implement a consistent and comprehensive error handling policy).

...

In this compliant solution, the call to assert() is replaced with an if statement which that calls exit() to ensure that the proper termination routines are run.

...

Unsafe usage of abort() may leave files written in an inconsistent state. It may also leave sensitive temporary files on the filesystemfile system.

Recommendation

Severity

Likelihood

Remediation Cost

Priority

Level

ERR06-A

medium

unlikely

medium

P4

L3

...

Wiki Markup
\[[ISO/IEC 9899-1999|AA. C References#ISO/IEC 9899-1999]\] Section 7.2.1.1, "The {{assert}} macro,", and Section 7.20.4.1, "The {{abort}} function"

...