...
Failing to account for all possibilities within a logic statement can lead to a corrupted running state, potentially resulting in unintentional information disclosure or abnormal termination.
Recommendation | Severity | Likelihood | Remediation Cost | Priority | Level |
---|---|---|---|---|---|
MSC01-C | Medium | Probable | Medium | P8 | L2 |
Automated Detection
Tool | Version | Checker | Description | ||||||
---|---|---|---|---|---|---|---|---|---|
Astrée |
| missing-else switch-default | Partially checked | ||||||
Compass/ROSE |
Can detect some violations of this recommendation. In particular, it flags switch statements that do not have a default clause. ROSE should detect "fake switches" as well (that is, a chain of if (x > 0) {
/* ... */
} else if (x < 0) {
/* ... */
} else if (x == 0) {
/* ... */
}
| |||||||
GCC |
|
Can detect some violations of this recommendation when the | ||||||||
Klocwork |
| CWARN.EMPTY.LABEL LA_UNUSED MISRA.IF.NO_ELSE MISRA.SWITCH.WELL_FORMED.DEFAULT.2012 INFINITE_LOOP.GLOBAL INFINITE_LOOP.LOCAL INFINITE_LOOP.MACRO |
LDRA tool suite |
| 48 S, 59 S | Fully implemented | ||||||
Parasoft C/C++test |
|
|
| MISRA2012-RULE-15_7, MISRA2004-15_3 |
Polyspace Bug Finder | R2016a | Code does not execute Default case is missing and may be reached Code following control-flow statements | |||||||
PRQA QA-C |
| 0597 2000 | Fully implemented | ||||||
RuleChecker |
| missing-else switch-default | Partially checked | ||||||
SonarQube C/C++ Plugin |
|
PVS-Studio | 3.62.1 | V517 | The use of 'if (A) {...} else if (A) {...}' pattern was detected. There is a probability of logical error presence. |
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
Related Guidelines
SEI CERT C++ Coding Standard | VOID MSC01-CPP. Strive for logical completeness |
ISO/IEC TS 17961 | Use of an implied default in a switch statement [swtchdflt] |
ISO/IEC TR 24772 | Switch Statements and Static Analysis [CLL] |
Bibliography
[Hatton 1995] | Section 2.7.2, "Errors of Omission and Addition" |
[Viega 2005] | Section 5.2.17, "Failure to Account for Default Case in Switch" |
[Zadegan 2009] | "A Lesson on Infinite Loops" |
...
...