From 99333f3306f258cd22e05b9bc37a6480d0fb526c Mon Sep 17 00:00:00 2001 From: Tilmann Date: Sun, 21 Jun 2026 18:41:00 +0200 Subject: [PATCH 1/4] Fix LegacyJava --- api/src/main/java/javax/jdo/LegacyJava.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/javax/jdo/LegacyJava.java b/api/src/main/java/javax/jdo/LegacyJava.java index a708acbdb..6a16b2654 100644 --- a/api/src/main/java/javax/jdo/LegacyJava.java +++ b/api/src/main/java/javax/jdo/LegacyJava.java @@ -109,7 +109,7 @@ public static class SecurityManager { public void checkPermission(JDOPermission permission) { try { - checkPermissionMethod.invoke(null, permission); + checkPermissionMethod.invoke(sm, permission); } catch (IllegalAccessException | InvocationTargetException e) { throw new JDOFatalInternalException(e.getMessage()); } From 61043e4e19efcf512f3c58cdbdd5dde171831ceb Mon Sep 17 00:00:00 2001 From: Tilmann Date: Sun, 28 Jun 2026 17:08:48 +0200 Subject: [PATCH 2/4] Fix LegacyJava and add test --- api/src/main/java/javax/jdo/LegacyJava.java | 4 +- .../test/java/javax/jdo/LegacyJavaTest.java | 66 +++++++++++++++++++ 2 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 api/src/test/java/javax/jdo/LegacyJavaTest.java diff --git a/api/src/main/java/javax/jdo/LegacyJava.java b/api/src/main/java/javax/jdo/LegacyJava.java index 6a16b2654..bec99cf2b 100644 --- a/api/src/main/java/javax/jdo/LegacyJava.java +++ b/api/src/main/java/javax/jdo/LegacyJava.java @@ -134,8 +134,8 @@ public void updateSecurityManager(Object sm) { */ private static boolean initIsSecurityDeprecated() { try { - Method getSecurityManager = System.class.getMethod("getSecurityManager"); - return getSecurityManager.isAnnotationPresent(Deprecated.class); + System.class.getMethod("getSecurityManager"); + return false; } catch (NoSuchMethodException e) { return true; } diff --git a/api/src/test/java/javax/jdo/LegacyJavaTest.java b/api/src/test/java/javax/jdo/LegacyJavaTest.java new file mode 100644 index 000000000..0c744bccb --- /dev/null +++ b/api/src/test/java/javax/jdo/LegacyJavaTest.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package javax.jdo; + +import static org.junit.jupiter.api.Assertions.*; + +import java.security.Permission; +import javax.jdo.spi.JDOImplHelper; +import javax.jdo.spi.JDOPermission; +import org.junit.jupiter.api.Test; + +public class LegacyJavaTest { + + @Test + public void testJDOImplHelper() { + // Try without security manager + assertNotNull(JDOImplHelper.getInstance()); + + if (LegacyJava.isSecurityManagerDeprecated()) { + return; + } + SecurityManager oldSecMgr = System.getSecurityManager(); + try { + System.setSecurityManager(new MySecurityManager(JDOPermission.GET_METADATA)); + } catch (UnsupportedOperationException e) { + // Running 24, SecurityManager is present but disabled by default. + return; + } + + try { + // Try with security manager + assertThrows(JDOFatalInternalException.class, JDOImplHelper::getInstance); + } finally { + System.setSecurityManager(oldSecMgr); + } + } + + public class MySecurityManager extends SecurityManager { + private final Permission invalidPermission; + + public MySecurityManager(JDOPermission invalidPermission) { + this.invalidPermission = invalidPermission; + } + + @Override + public void checkPermission(Permission perm) { + if (perm == invalidPermission) + throw new SecurityException("Permission not given: " + perm.getName()); + } + } +} From a17f5304c2b949e6feaebc78e0877f77c4eb0d67 Mon Sep 17 00:00:00 2001 From: Tilmann Date: Sun, 28 Jun 2026 18:54:03 +0200 Subject: [PATCH 3/4] Fix LegacyJava and add test --- .../CloseWithoutPermissionThrowsSecurityException.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tck/src/main/java/org/apache/jdo/tck/api/persistencemanagerfactory/CloseWithoutPermissionThrowsSecurityException.java b/tck/src/main/java/org/apache/jdo/tck/api/persistencemanagerfactory/CloseWithoutPermissionThrowsSecurityException.java index d88c1c0dc..fb9c3bf43 100644 --- a/tck/src/main/java/org/apache/jdo/tck/api/persistencemanagerfactory/CloseWithoutPermissionThrowsSecurityException.java +++ b/tck/src/main/java/org/apache/jdo/tck/api/persistencemanagerfactory/CloseWithoutPermissionThrowsSecurityException.java @@ -59,8 +59,9 @@ private void closeWithMySecurityManager(PersistenceManagerFactory pmf) { SecurityManager oldSecMgr = System.getSecurityManager(); try { System.setSecurityManager(new MySecurityManager()); - } catch (SecurityException se) { - // running with the TCK SecurityManager; don't run this test + } catch (SecurityException | UnsupportedOperationException se) { + // SecurityException: running with the TCK SecurityManager; don't run this test + // UnsupportedOperationException: running Java 24, SecurityManager is present but disabled return; } From 7fbbfd759fbf86cbdb1fd42c1c5699f18b3fb10b Mon Sep 17 00:00:00 2001 From: Tilmann Date: Sun, 28 Jun 2026 18:55:03 +0200 Subject: [PATCH 4/4] Fix LegacyJava and add test --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 9ae457580..6a8ca091a 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ lib query.ser datanucleus.txt tck.txt +*.claude