The C Standard identifies the following condition under which division and remainder operations result in undefined behavior (UB):
UB | Description |
The value of the second operand of the |
Ensure that division and remainder operations do not result in divide-by-zero errors.
...
A divide-by-zero error can result in abnormal program termination and denial of service.
Rule | Severity | Likelihood | Remediation Cost | Priority | Level |
---|---|---|---|---|---|
INT33-C | Low | Likely | Medium | P6 | L2 |
Automated Detection
Tool | Version | Checker | Description | ||||||
---|---|---|---|---|---|---|---|---|---|
Astrée |
| int-division-by-zero int-modulo-by-zero | Fully checked | ||||||
CodeSonar |
| LANG.ARITH.DIVZERO LANG.ARITH.FDIVZERO | Division by zero Float Division By Zero | ||||||
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 |
| DIVIDE_BY_ZERO | Fully implemented | ||||||
Cppcheck |
| zerodiv zerodivcond | Context sensitive analysis of division by zero | ||||||
Klocwork |
| DBZ.CONST DBZ.CONST.CALL DBZ.GENERAL DBZ.ITERATOR |
LDRA tool suite |
| 43 D, 127 D, 248 S, 629 S, 80 X | Partially implemented | ||||||
Parasoft C/C++test | 9.5 | BD-PB-ZERO | Fully implemented | ||||||
Parasoft Insure++ |
Runtime detection | |||||||||
Polyspace Bug Finder | R2016a | Integer division by zero, Tainted division operand, Tainted modulo operand | Dividing integer number by zero Division Remainder | ||||||
PRQA QA-C |
| 2830 (C) | Fully implemented | ||||||
PRQA QA-C++ |
| 2831, 2832, 2833, 2834 |
SonarQube C/C++ Plugin |
| S3518 |
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
Related Guidelines
Bibliography
[Seacord 2013b] | Chapter 5, "Integer Security" |
[Warren 2002] | Chapter 2, "Basics" |
...
...