From 0a96bfe84fcb0b77b07f8ea4d9efe882d9e2c477 Mon Sep 17 00:00:00 2001 From: Tilmann Date: Sun, 21 Jun 2026 19:05:21 +0200 Subject: [PATCH 1/2] Fix IntIdentity/LongIdentity comparison overflow --- .../main/java/javax/jdo/identity/IntIdentity.java | 2 +- .../java/javax/jdo/identity/LongIdentity.java | 15 +-------------- .../java/javax/jdo/identity/IntIdentityTest.java | 6 ++++++ .../java/javax/jdo/identity/LongIdentityTest.java | 8 +++++++- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/api/src/main/java/javax/jdo/identity/IntIdentity.java b/api/src/main/java/javax/jdo/identity/IntIdentity.java index f95d6e164..36df37743 100644 --- a/api/src/main/java/javax/jdo/identity/IntIdentity.java +++ b/api/src/main/java/javax/jdo/identity/IntIdentity.java @@ -128,7 +128,7 @@ public int compareTo(IntIdentity o) { throw new ClassCastException("object is null"); } int result = super.compare(o); - return (result == 0) ? (key - o.key) : result; + return (result == 0) ? Integer.compare(key, o.key) : result; } /** diff --git a/api/src/main/java/javax/jdo/identity/LongIdentity.java b/api/src/main/java/javax/jdo/identity/LongIdentity.java index 4ceff16cb..273ec313a 100644 --- a/api/src/main/java/javax/jdo/identity/LongIdentity.java +++ b/api/src/main/java/javax/jdo/identity/LongIdentity.java @@ -129,20 +129,7 @@ public int compareTo(LongIdentity o) { throw new ClassCastException("object is null"); } int result = super.compare(o); - if (result == 0) { - long diff = key - o.key; - if (diff == 0) { - return 0; - } else { - if (diff < 0) { - return -1; - } else { - return 1; - } - } - } else { - return result; - } + return (result == 0) ? Long.compare(key, o.key) : result; } /** diff --git a/api/src/test/java/javax/jdo/identity/IntIdentityTest.java b/api/src/test/java/javax/jdo/identity/IntIdentityTest.java index e0c05a3cf..f9b3f66bc 100644 --- a/api/src/test/java/javax/jdo/identity/IntIdentityTest.java +++ b/api/src/test/java/javax/jdo/identity/IntIdentityTest.java @@ -131,6 +131,8 @@ void testCompareTo() { IntIdentity c2 = new IntIdentity(Object.class, 1); IntIdentity c3 = new IntIdentity(Object.class, 2); IntIdentity c4 = new IntIdentity(Class.class, 1); + IntIdentity c6 = new IntIdentity(Object.class, Integer.MIN_VALUE); + IntIdentity c7 = new IntIdentity(Object.class, Integer.MAX_VALUE); Assertions.assertEquals(0, c1.compareTo(c2), "Equal IntIdentity instances compare not equal."); Assertions.assertTrue( c1.compareTo(c3) < 0, "Not equal IntIdentity instances have wrong compareTo result"); @@ -138,5 +140,9 @@ void testCompareTo() { c3.compareTo(c1) > 0, "Not equal IntIdentity instances have wrong compareTo result"); Assertions.assertTrue( c1.compareTo(c4) > 0, "Not equal IntIdentity instances have wrong compareTo result"); + Assertions.assertTrue( + c6.compareTo(c7) < 0, "Not equal LongIdentity instances have wrong compareTo result"); + Assertions.assertTrue( + c7.compareTo(c6) > 0, "Not equal LongIdentity instances have wrong compareTo result"); } } diff --git a/api/src/test/java/javax/jdo/identity/LongIdentityTest.java b/api/src/test/java/javax/jdo/identity/LongIdentityTest.java index bd83dd860..6a25667e9 100644 --- a/api/src/test/java/javax/jdo/identity/LongIdentityTest.java +++ b/api/src/test/java/javax/jdo/identity/LongIdentityTest.java @@ -134,6 +134,8 @@ void testCompareTo() { LongIdentity c3 = new LongIdentity(Object.class, 2); LongIdentity c4 = new LongIdentity(Class.class, 1); LongIdentity c5 = new LongIdentity(Object.class, 0x100000001L); + LongIdentity c6 = new LongIdentity(Object.class, Long.MIN_VALUE); + LongIdentity c7 = new LongIdentity(Object.class, Long.MAX_VALUE); Assertions.assertEquals(0, c1.compareTo(c2), "Equal LongIdentity instances compare not equal."); Assertions.assertTrue( c1.compareTo(c3) < 0, "Not equal LongIdentity instances have wrong compareTo result"); @@ -142,6 +144,10 @@ void testCompareTo() { Assertions.assertTrue( c1.compareTo(c4) > 0, "Not equal LongIdentity instances have wrong compareTo result"); Assertions.assertTrue( - c5.compareTo(c1) > 0, "Not equal LongIdentity instances have wrong compareTo result"); + c5.compareTo(c1) > 0, "Not equal LongIdentity instances have wrong compareTo result"); + Assertions.assertTrue( + c6.compareTo(c7) < 0, "Not equal LongIdentity instances have wrong compareTo result"); + Assertions.assertTrue( + c7.compareTo(c6) > 0, "Not equal LongIdentity instances have wrong compareTo result"); } } From 91a26a0ea36f15a7aa52ed8886e0a03c1cd42e21 Mon Sep 17 00:00:00 2001 From: Tilmann Date: Tue, 30 Jun 2026 20:22:17 +0200 Subject: [PATCH 2/2] Fix formatting. --- api/src/test/java/javax/jdo/identity/IntIdentityTest.java | 4 ++-- api/src/test/java/javax/jdo/identity/LongIdentityTest.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/src/test/java/javax/jdo/identity/IntIdentityTest.java b/api/src/test/java/javax/jdo/identity/IntIdentityTest.java index f9b3f66bc..5d6eb4eec 100644 --- a/api/src/test/java/javax/jdo/identity/IntIdentityTest.java +++ b/api/src/test/java/javax/jdo/identity/IntIdentityTest.java @@ -141,8 +141,8 @@ void testCompareTo() { Assertions.assertTrue( c1.compareTo(c4) > 0, "Not equal IntIdentity instances have wrong compareTo result"); Assertions.assertTrue( - c6.compareTo(c7) < 0, "Not equal LongIdentity instances have wrong compareTo result"); + c6.compareTo(c7) < 0, "Not equal LongIdentity instances have wrong compareTo result"); Assertions.assertTrue( - c7.compareTo(c6) > 0, "Not equal LongIdentity instances have wrong compareTo result"); + c7.compareTo(c6) > 0, "Not equal LongIdentity instances have wrong compareTo result"); } } diff --git a/api/src/test/java/javax/jdo/identity/LongIdentityTest.java b/api/src/test/java/javax/jdo/identity/LongIdentityTest.java index 6a25667e9..d5b98dfc1 100644 --- a/api/src/test/java/javax/jdo/identity/LongIdentityTest.java +++ b/api/src/test/java/javax/jdo/identity/LongIdentityTest.java @@ -144,10 +144,10 @@ void testCompareTo() { Assertions.assertTrue( c1.compareTo(c4) > 0, "Not equal LongIdentity instances have wrong compareTo result"); Assertions.assertTrue( - c5.compareTo(c1) > 0, "Not equal LongIdentity instances have wrong compareTo result"); + c5.compareTo(c1) > 0, "Not equal LongIdentity instances have wrong compareTo result"); Assertions.assertTrue( - c6.compareTo(c7) < 0, "Not equal LongIdentity instances have wrong compareTo result"); + c6.compareTo(c7) < 0, "Not equal LongIdentity instances have wrong compareTo result"); Assertions.assertTrue( - c7.compareTo(c6) > 0, "Not equal LongIdentity instances have wrong compareTo result"); + c7.compareTo(c6) > 0, "Not equal LongIdentity instances have wrong compareTo result"); } }