A division (/
) or remainder operation (%
) by zero indicates a bug or logical error. This is because in Java, a division
or remainder operation where the denominator is zero and not a floating point value always results in an ArithmeticException
being
thrown.
When working with double
or float
values, no exception will be thrown, but the operation will result in special floating
point values representing either positive infinity, negative infinity, or NaN
. Unless these special values are explicitly handled by a
program, zero denominators should be avoided in floating point operations, too. Otherwise, the application might produce unexpected results.
What is the potential impact?
Issues of this type interrupt the normal execution of a program, causing it to crash or putting it into an inconsistent state. Therefore, this
issue might impact the availability and reliability of your application, or even result in data loss.
If the computation of the denominator is tied to user input data, this issue can potentially even be exploited by attackers to disrupt your
application.
Noncompliant code example
void test_divide() {
int z = 0;
if (unknown()) {
// ..
z = 3;
} else {
// ..
}
z = 1 / z; // Noncompliant, possible division by zero
}
Compliant solution
void test_divide() {
int z = 0;
if (unknown()) {
// ..
z = 3;
} else {
// ..
z = 1;
}
z = 1 / z;
}