...
Code Block | ||||
---|---|---|---|---|
| ||||
#include <cstdlib> void throwing_func() noexcept(false); void f() { // Not invoked by the program except as an exit handler. throwing_func(); } int main() { if (0 != std::atexit(f)) { // Handle error } // ... } |
Compliant Solution
In this compliant solution, f()
handles all exceptions thrown by throwing_func()
and does not rethrow:
Code Block | ||||
---|---|---|---|---|
| ||||
#include <cstdlib> void throwing_func() noexcept(false); void f() { // Not invoked by the program except as an exit handler. try { throwing_func(); } catch (...) { // Handle error } } int main() { if (0 != std::atexit(f)) { // Handle error } // ... } |
Exceptions
ERR50-CPP-EX1: It is acceptable, after indicating the nature of the problem to the operator, to explicitly call std::abort()
, std::_Exit()
, or std::terminate()
in response to a critical program error for which no recovery is possible, as in this example:
...
Note that the assert()
macro is permissible under this exception because failed assertions will notify the operator on the standard error stream in an implementation-defined manner before calling std::abort()
.
Risk Assessment
Allowing the application to abnormally terminate can lead to resources not being freed, closed, and so on. It is frequently a vector for denial-of-service attacks.
Rule | Severity | Likelihood | Remediation Cost | Priority | Level |
---|---|---|---|---|---|
ERR50-CPP | Low | Probable | Medium | P4 | L3 |
Automated Detection
Tool | Version | Checker | Description | ||||||
---|---|---|---|---|---|---|---|---|---|
LDRA tool suite |
| 122 S | Enhanced Enforcement | ||||||
| 4037, 4038, 4636, 4637 |
Related Vulnerabilities
Search for other vulnerabilities resulting from the violation of this rule on the CERT website.
Related Guidelines
Bibliography
[ISO/IEC 9899:1999] | Subclause 7.20.4.1, "The abort Function"Subclause 7.20.4.4, "The _Exit Function" |
[ISO/IEC 14882-2014] | Subclause 15.5.1, "The |
[MISRA 08] | Rule 15-3-2 (Advisory) Rule 15-3-4 (Required) |
...