If control reaches the closing curly brace (}) of a non-void function without evaluating a return statement, using the return value of the function call is undefined behavior. (See undefined behavior 8886.)
Noncompliant Code Example
...
MSC37-C-EX1: According to the C Standard, 5.1.2.23.34, paragraph 1 [ISO/IEC 9899:20112024], "Reaching the } that terminates the main function returns a value of 0." As a result, it is permissible for control to reach the end of the main() function without executing a return statement.
...
Using the return value from a non-void function where control reaches the end of the function without evaluating a return statement can lead to buffer overflow vulnerabilities as well as other unexpected program behaviors.
Rule | Severity | Likelihood |
|---|
Detectable | Repairable | Priority | Level |
|---|---|---|---|
MSC37-C | High | Unlikely |
Yes | No |
P6 | L2 |
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
Automated Detection
| Tool | Version | Checker | Description | ||||||
|---|---|---|---|---|---|---|---|---|---|
| Astrée |
| return-implicit | Fully checked | ||||||
| Axivion Bauhaus Suite |
| CertC-MSC37 | |||||||
| CodeSonar |
| LANG.STRUCT.MRS | Missing return statement | ||||||
| Coverity |
| MISSING_RETURN | Implemented | ||||||
| Cppcheck |
| missingReturn | |||||||
| Cppcheck Premium |
| missingReturn | |||||||
| Helix QAC |
| C++4022 DF2888 | |||||||
| Klocwork |
| FUNCRET.GEN |
| FUNCRET.IMPLICIT |
| LDRA tool suite |
| 2 D, 36 S, 66 S | Fully implemented | ||||||
| Parasoft C/C++test |
|
|
|
CERT_C- |
MSC37- |
Function does not return value though return type is not void
a | All exit paths from a function, except main(), with non-void return type shall have an explicit return statement with an expression | ||||||||
| PC-lint Plus |
| 533 | Fully supported | ||||||
| Polyspace Bug Finder |
| CERT C: Rule MSC37-C | Checks for missing return statement (rule fully covered) |
| RuleChecker |
| return-implicit | Fully checked | ||||||
| Security Reviewer - Static Reviewer |
| RTOS_09 | Fully implemented | ||||||
| SonarQube C/C++ Plugin |
| S935 |
| TrustInSoft Analyzer |
| Body of function falls-through | Exhaustively verified. |
Related Guidelines
Key here (explains table format and definitions)
Taxonomy | Taxonomy item | Relationship |
|---|---|---|
| CERT C Secure Coding Standard | MSC01-C. Strive for logical completeness | Prior to 2018-01-12: CERT: Unspecified Relationship |
| CWE 2.11 | CWE-758 | 2017-07-07: CERT: Rule subset of CWE |
CERT-CWE Mapping Notes
Key here for mapping notes
...
Undefined behavior that results from anything other than failing to return a value from a function that expects one
Bibliography
...
...