...
This noncompliant code example can result in a divide-by-zero error during the division of the signed operands sl1
and sl2
.:
Code Block | ||||
---|---|---|---|---|
| ||||
signed long sl1, sl2, result; /* Initialize sl1 and sl2 */ result = sl1 / sl2; |
...
This compliant solution tests the suspect division operation to guarantee there is no possibility of divide-by-zero errors or signed overflow.:
Code Block | ||||
---|---|---|---|---|
| ||||
signed long sl1, sl2, result; /* Initialize sl1 and sl2 */ if ( (sl2 == 0) || ( (sl1 == LONG_MIN) && (sl2 == -1) ) ) { /* Handle error condition */ } else { result = sl1 / sl2; } |
...
This noncompliant code example can result in a divide-by-zero error during the modulo operation on the signed operands sl1
and sl2
.:
Code Block | ||||
---|---|---|---|---|
| ||||
signed long sl1, sl2, result; /* Initialize sl1 and sl2 */ result = sl1 % sl2; |
...
This compliant solution tests the suspect modulo operation to guarantee there is no possibility of a divide-by-zero error or an overflow error.:
Code Block | ||||
---|---|---|---|---|
| ||||
signed long sl1, sl2, result; /* Initialize sl1 and sl2 */ if ( (sl2 == 0 ) || ( (sl1 == LONG_MIN) && (sl2 == -1) ) ) { /* Handle 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. |
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
...
[Seacord 2013] | Chapter 5, "Integer Security" |
[Warren 2002] | Chapter 2, "Basics" |
...
...