RFR: 8314236: Overflow in Collections.rotate [v9]

Aleksey Shipilev shade at openjdk.org
Fri Sep 15 14:40:43 UTC 2023


On Tue, 29 Aug 2023 20:00:49 GMT, Nikita Sakharin <duke at openjdk.org> wrote:

>> `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.
>
> Nikita Sakharin has updated the pull request incrementally with one additional commit since the last revision:
> 
>   8314236: add comment for test

I would like to push this early next week.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/15270#issuecomment-1721389082


More information about the core-libs-dev mailing list