...
Code Block | ||||
---|---|---|---|---|
| ||||
int *p; /* ... */ (*p)++; |
Another possibility is that p
is being used to reference a memory-mapped device. In this case, the variable p
should be declared as volatile
.
...
The presence of code that has no effect or is never executed can indicate logic errors that may result in unexpected behavior and vulnerabilities. Such code can be introduced into programs in a variety of ways and eliminating it can require significant analysis.
Recommendation | Severity | Likelihood | Remediation Cost | Priority | Level |
---|---|---|---|---|---|
MSC12-C | Low | Unlikely | Medium | P2 | L3 |
Automated Detection
Tool | Version | Checker | Description | ||||||
---|---|---|---|---|---|---|---|---|---|
Astrée |
| unreachable-code statement-sideeffect | Partially checked | ||||||
CodeSonar |
| DIAG.UNEX.* | Code not exercised by analysis | ||||||
| NO_EFFECT DEADCODE
UNREACHABLE | Finds statements or expressions that do not accomplish anything or statements that perform an unintended action. Can detect the specific instance where code can never be reached because of a logical contradiction or a dead "default" in Can detect the instances where code block is unreachable because of the syntactic structure of the code | |||||||
| CC2.MSC12 | Partially implemented | |||||||
GCC | 3.0 | Options detect unused local variables, nonconstant static variables and unused function parameters, or unreachable code respectively. | |||||||
Klocwork |
| CWARN.NOEFFECT.SELF_ASSIGN |
LDRA tool suite |
| Partially implemented | |||||||
Parasoft C/C++test |
|
|
| MISRA2008-0_1_{a,b,c,d,e,f,g}, BD-PB-SWITCH |
Polyspace Bug Finder | R2016a | Code does not execute Default case is missing and may be reached Size argument of function in | |||||||
PRQA QA-C |
| 3426, 3427, 3307, 3110, 3112, 3404, 1501, 1503, 2008, 2880, 2881, 2882, 2883, 2877, 3196, 3202, 3203, 3205, 3206, 3207, 3210, 3219, 3229, 3404, 3422, 3423, 3425, 3470, 2980, 2981, 2982, 2983, 2984, 2985, 2986 | Partially implemented | ||||||
RuleChecker |
| statement-sideeffect | Partially checked | ||||||
SonarQube C/C++ Plugin |
| S1764, S2589, S2583, S1116, S1172, S1763, S1862, S1065, S1656, S2754, S1751 |
Splint |
| | The default mode checks for unreachable code. | ||||||
PVS-Studio | 6.22 | V551, V606, V649, V779 | General analysis rule set |
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
CVE-2014-1266 results from a violation of this rule. There is a spurious goto fail
statement on line 631 of sslKeyExchange.c. This goto
statement gets executed unconditionally, even though it is indented as if it were part of the preceding if
statement. As a result, the call to sslRawVerify()
(which would perform the actual signature verification) becomes dead code [ImperialViolet 2014].
Related Guidelines
SEI CERT C++ Coding Standard | VOID MSC12-CPP. Detect and remove code that has no effect |
ISO/IEC TR 24772 | Unspecified Functionality [BVQ] Likely Incorrect Expressions [KOA] Dead and Deactivated Code [XYQ] |
MISRA C:2012 | Rule 2.2 (required) |
Bibliography
[Fortify 2006] | Code Quality, "Dead Code" |
[Coverity 2007] |
...
...