...
Code Block | ||||
---|---|---|---|---|
| ||||
#include <exception> void report(const char *msg) noexcept; [[noreturn]] void fast_fail(const char *msg) { // Report error message to operator. report(msg); // Terminate std::terminate(); } void critical_function_that_fails() noexcept(false); void f() { try { critical_function_that_fails(); } catch (...) { fast_fail("Critical function failure"); } } |
Note that the assert()
macro is permissible under this exception, as failed assertions will notify the operator on the standard error stream in an implementation-defined manner prior to calling std::abort()
.
Risk Assessment
Allowing the application to abnormally terminate can lead to resources not being freed, closed, etc. It is frequently a vector for denial-of-service attacks.
...