Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

The C Standard identifies the following condition under which division and remainder operations result in undefined behavior (UB):

UBDescription

45

The value of the second operand of the / or % operator is zero (6.5.5).

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
Include Page
Astrée_V
Astrée_V

int-division-by-zero

int-modulo-by-zero

Fully checked
CodeSonar
Include Page
CodeSonar_V
CodeSonar_V
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
Include Page
Coverity_V
Coverity_V

DIVIDE_BY_ZERO

Fully implemented
Cppcheck
Include Page
Cppcheck_V
Cppcheck_V
zerodiv
zerodivcond

Context sensitive analysis of division by zero
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

Klocwork
Include Page
Klocwork_V
Klocwork_V
DBZ.CONST
DBZ.CONST.CALL
DBZ.GENERAL
DBZ.ITERATOR
 

LDRA tool suite
Include Page
LDRA_V
LDRA_V

43 D, 127 D, 248 S, 629 S, 80 X

Partially implemented
Parasoft C/C++test9.5BD-PB-ZEROFully implemented
Parasoft Insure++
  


Runtime detection
Polyspace Bug FinderR2016a

Integer division by zero, Tainted division operand, Tainted modulo operand

Dividing integer number by zero

Division / operands from an unsecure source

Remainder % operands are from an unsecure source

PRQA QA-C
Include Page
PRQA QA-C_v
PRQA QA-C_v

2830 (C)
2831 (D)
2832 (A)
2833 (S)
2834 (P)

Fully implemented
PRQA QA-C++
Include Page
cplusplus:PRQA QA-C++_V
cplusplus:PRQA QA-C++_V
2831, 2832, 2833, 2834
 

SonarQube C/C++ Plugin
Include Page
SonarQube C/C++ Plugin_V
SonarQube C/C++ Plugin_V
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"

...


...