RFR: 8264976: Minor numeric bug in AbstractSplittableWithBrineGenerator.makeSplitsSpliterator

Aleksey Shipilev shade at openjdk.java.net
Fri Apr 9 09:48:36 UTC 2021


SonarCloud reports:
  Cast one of the operands of this subtraction operation to a "long".

Here:
        Spliterator<SplittableGenerator> makeSplitsSpliterator(long index, long fence, SplittableGenerator source) {
            ...
            long multiplier = (1 << SALT_SHIFT) - 1; // <---- here

The shift is integer, and the cast to long is too late. `SALT_SHIFT` is currently 4, so this is not the problem. But it would become a problem if `SALT_SHIFT` ever becomes 32 or larger. The shift operand should be `1L` for safety. Observe:

jshell> Long.toHexString((1 << 31) - 1)
$2 ==> "7fffffff"

jshell> Long.toHexString((1 << 32) - 1)
$3 ==> "0"

jshell> Long.toHexString((1L << 32) - 1)
$4 ==> "ffffffff"

Additional testing: 
 - [x] Linux x86_64 fastdebug, `jdk/utils/Random`

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

Commit messages:
 - 8264976: Minor numeric bug in AbstractSplittableWithBrineGenerator.makeSplitsSpliterator

Changes: https://git.openjdk.java.net/jdk/pull/3409/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=3409&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8264976
  Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
  Patch: https://git.openjdk.java.net/jdk/pull/3409.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/3409/head:pull/3409

PR: https://git.openjdk.java.net/jdk/pull/3409


More information about the core-libs-dev mailing list