The C Standard identifies the following condition under which division and remainder operations result in undefined behavior (UB):
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 | Detectable |
|---|
Repairable | Priority | Level | |
|---|---|---|---|
INT33-C | Low | Likely | No |
Yes | P6 | L2 |
Automated Detection
Tool | Version | Checker | Description | ||||||
|---|---|---|---|---|---|---|---|---|---|
| Astrée |
| int-division-by-zero int-modulo-by-zero | Fully checked | ||||||
| Axivion Bauhaus Suite |
| CertC-INT33 | |||||||
| 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 |
Not detected for division by struct member / array element / pointer data that is 0
Detected when there is unsafe division by variable before/after test if variable is zero
| Cppcheck Premium |
| zerodiv premium-cert-int33-c | |||||||
| Helix QAC |
| C2830 C++2830 DF2831, DF2832, DF2833 | |||||||
| Klocwork |
| DBZ.CONST |
DBZ.ITERATOR.CALL | |||||||||
| LDRA tool suite |
| 43 D, 127 D, 248 S, 629 S, 80 X | Partially implemented | ||||||
| Parasoft C/C++test |
| CERT_C-INT33-a | Avoid division by zero |
| Parasoft Insure++ |
| Runtime analysis | |||||||
| Polyspace Bug Finder |
|
| Checks for:
|
|
|
Dividing integer number by zero
Division / operands from an unsecure source
Remainder % operands are from an unsecure source
Rule fully covered. | ||||||||
| Security Reviewer - Static Reviewer |
| CPP_02 |
2831 (D)
2832 (A)
2833 (S)
2834 (P)
Fully implemented | ||||||||
| SonarQube C/C++ Plugin |
| S3518 |
| PVS-Studio |
| V609 | |||||||
| TrustInSoft Analyzer |
| division_by_zero | Exhaustively verified (see one compliant and one non-compliant example). |
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
Related Guidelines
Key here (explains table format and definitions)
Taxonomy | Taxonomy item | Relationship |
|---|---|---|
| CERT C |
| INT32-C. Ensure that operations on signed integers do not result in overflow |
| Prior to 2018-01-12: CERT: Unspecified Relationship | ||
| CERT Oracle Secure Coding Standard for Java | NUM02-J. Ensure that division and remainder operations do not result in divide-by-zero errors | Prior to 2018-01-12: CERT: Unspecified Relationship |
| ISO/IEC TS 17961 | Integer division errors [diverr] |
| Prior to 2018-01-12: CERT: Unspecified Relationship | ||
| CWE 2.11 | CWE-369, Divide By Zero | 2017-07-07: CERT: Exact |
CERT-CWE Mapping Notes
Key here for mapping notes
CWE-682 and INT33-C
CWE-682 = Union( INT33-C, list) where list =
- Incorrect calculations that do not involve division by zero
Bibliography
| [Seacord 2013b] | Chapter 5, "Integer Security" |
| [Warren 2002] | Chapter 2, "Basics" |
...
...