fix(user): replace Math.abs(hashCode()) with Math.floorMod in computeColor
Math.abs(Integer.MIN_VALUE) overflows back to Integer.MIN_VALUE (negative), making the old pattern unsafe for any palette size that doesn't evenly divide MIN_VALUE. Math.floorMod always returns a non-negative residue in [0, n-1], eliminating the overflow edge case entirely. Fixes SpotBugs RV_ABSOLUTE_VALUE_OF_HASHCODE (priority 1, CORRECTNESS). Closes #471 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit was merged in pull request #490.
This commit is contained in:
@@ -88,7 +88,8 @@ public class AppUser {
|
||||
};
|
||||
|
||||
public static String computeColor(UUID id) {
|
||||
return PALETTE[Math.abs(id.hashCode()) % PALETTE.length];
|
||||
// Math.floorMod avoids the Integer.MIN_VALUE overflow trap in Math.abs(hashCode())
|
||||
return PALETTE[Math.floorMod(id.hashCode(), PALETTE.length)];
|
||||
}
|
||||
|
||||
@PrePersist
|
||||
|
||||
Reference in New Issue
Block a user