[ https://issues.apache.org/jira/browse/OAK-6164?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Matt Ryan updated OAK-6164: --------------------------- Attachment: OAK-6164.patch.1 Attached patch with a fix, and with unit test for IOUtils.nextPowerOf2(). > IOUtils.nextPowerOf2() returns lower power of 2 for very high int values > ------------------------------------------------------------------------ > > Key: OAK-6164 > URL: https://issues.apache.org/jira/browse/OAK-6164 > Project: Jackrabbit Oak > Issue Type: Bug > Reporter: Matt Ryan > Priority: Minor > Attachments: OAK-6164.patch.1 > > > In the IOUtils.nextPowerOf2() method, all int values are accepted as input. > However, there are valid signed integer values that this method accepts as > input, but for which a lower power of 2 value is returned. > This occurs for values that are valid signed integer values that are greater > than the highest possible power of two value in the signed integer range. > Signed integer values have the maximum value of 0x7FFFFFFF, but the maximum > possible power of two in the signed integer range is 0x40000000. (The > current implementation incorrectly identifies the maximum possible power of > two as 0x3FFFFFFF, due to how it is computed by doing integer division of > 0x7FFFFFFF / 2.) > In the current implementation any input in the range of [0x40000000, > 0x7FFFFFFF] is a valid signed integer input, but the method will return > 0x3FFFFFFF as the next valid max power of 2. > Two minor things need to be fixed: > * If the input is 0x40000000, the return value needs to be 0x40000000, > instead of 0x3FFFFFFF which is not a valid power of 2. > * If the input is in the range [0x40000001, 0x7FFFFFFF] I propose the method > should instead throw an IllegalArgumentException and indicate that it is not > possible to compute a next power of 2 for a number in that range. -- This message was sent by Atlassian JIRA (v6.3.15#6346)