RFR: 8314236: Overflow in Collections.rotate
Nikita Sakharin
duke at openjdk.org
Mon Aug 14 21:07:43 UTC 2023
`Collections.rotate` method contains a bug. This method throws IndexOutOfBoundsException on arrays larger than $2^{30}$ elements. The way to reproduce:
final int size = (1 << 30) + 1;
final List<Byte> list = new ArrayList<>(size);
for (int i = 0; i < size; ++i)
list.add((byte) 0);
Collections.rotate(list, size - 1);
Output:
```Exception in thread "main" java.lang.IndexOutOfBoundsException: Index -2147483648 out of bounds for length 1073741825```
In that case private method `Collections.rotate1` will be called. And the line:
`i += distance;`
will cause overflow. I fixed this method and wrote a test for it.
I've signed the Oracle Contributor Agreement, but I don't have permission to raise a bug in the JDK Bug System.
Kindly ask you to raise a bug.
-------------
Commit messages:
- 83141345: fix overflow in Collections.rotate
Changes: https://git.openjdk.org/jdk/pull/15270/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=15270&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8314236
Stats: 52 lines in 2 files changed: 45 ins; 1 del; 6 mod
Patch: https://git.openjdk.org/jdk/pull/15270.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/15270/head:pull/15270
PR: https://git.openjdk.org/jdk/pull/15270
More information about the core-libs-dev
mailing list