Alex Herbert created NUMBERS-212:
------------------------------------
Summary: MultidimensionalCounter does not detect modulo 2^32
overflow in the cumulative size
Key: NUMBERS-212
URL: https://issues.apache.org/jira/browse/NUMBERS-212
Project: Commons Numbers
Issue Type: Bug
Components: arrays
Affects Versions: 1.3
Reporter: Alex Herbert
The MultidimensionalCounter uses int arithmetic to accumulate the product of
the dimensions. This rejects negative values as overflow. However it can be
constructed with a product of dimensions sizes above the limit of an unsigned
integer 2^32. This wraps around to a positive value and is not detected during
construction:
{code:java}
// 65537L * 65536 % (1L << 32) == 65536
MultidimensionalCounter mdc = MultidimensionalCounter.of(65537, 65536);{code}
The resulting counter will returned incorrect index mappings as there are too
many positions to map to 2^31 values.
This can be corrected by using long arithmetic to compute the product of two
representable positive int values (which cannot overflow) and rejecting any
size greater or equal to 2^31.
Issue identified with a security scanner.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)