...
In this noncompliant code example, an exception of type S
is thrown from in f()
. However, because S
has a std::string
data member, and the copy constructor for std::string
is not declared noexcept
, the implicitly-defined copy constructor for S
is also not declared to be noexcept
. In low-memory situations, the copy constructor for std::string
may be unable to allocate sufficient memory to complete the copy operation, resulting in a std::bad_alloc
exception being thrown.
...
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 |
---|---|---|---|---|---|
ERR60-CPP | Low | Probable | Medium | P4 | L3 |
Automated Detection
Tool | Version | Checker | Description | ||||||
---|---|---|---|---|---|---|---|---|---|
Clang |
| cert-err60-cpp | Checked by clang-tidy | ||||||
PRQA QA-C++ |
| 3508 |
Related Vulnerabilities
Search for other vulnerabilities resulting from the violation of this rule on the CERT website.
Related Guidelines
SEI CERT C++ Coding Standard | ERR50-CPP. Do not abruptly terminate the program |
Bibliography
[Hinnant 2015] |
[ISO/IEC 14882-2014] | Subclause 15.1, "Throwing an Exception" |
...
...