...
| Code Block | ||||
|---|---|---|---|---|
| ||||
signed long sl1, sl2, result;
/* Initialize sl1 and sl2 */
if ( (sl2 == 0) || ( (sl1 == LONG_MIN) && (sl2 == -1) ) ) {
/* handleHandle error condition */
}
else {
result = sl1 / sl2;
}
|
...
| Code Block | ||||
|---|---|---|---|---|
| ||||
signed long sl1, sl2, result;
/* Initialize sl1 and sl2 */
if ( (sl2 == 0 ) || ( (sl1 == LONG_MIN) && (sl2 == -1) ) ) {
/* handleHandle error condition */
}
else {
result = sl1 % sl2;
}
|
...
Tool | Version | Checker | Description | ||||||
|---|---|---|---|---|---|---|---|---|---|
Compass/ROSE | Can detect some violations of this rule. In particular, it ensures that all operations involving division or modulo are preceded by a check ensuring that the second operand is nonzero. | ||||||||
| Coverity | 6.5 | DIVIDE_BY_ZERO | Fully Implemented. | ||||||
| Fortify SCA | 5.0 | Can detect violations of this rule with CERT C Rule Pack. | |||||||
| 43 D | Partially implemented. | |||||||
| PRQA QA-C |
| 2830 (C) | Fully implemented. |
...
Bibliography
| [Seacord 20052013] | Chapter 5, "IntegersInteger Security" |
| [Warren 2002] | Chapter 2, "Basics" |
...