changeset 2995:2e7ef54df229

Give xalan/xerces access to their own internal packages. 2013-04-18 Elliott Baron <ebaron@redhat.com> * Makefile.am: (ICEDTEA_PATCHES): Add new patch. * patches/object-factory-cl-internal.patch: Patch to give xalan/xerces access to their own internal packages. * NEWS: Updated.
author Elliott Baron <ebaron@redhat.com>
date Thu, 18 Apr 2013 16:20:55 -0400
parents db270ea37a50
children b7490b3606ec
files ChangeLog Makefile.am NEWS patches/object-factory-cl-internal.patch
diffstat 4 files changed, 396 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Wed Apr 24 09:09:25 2013 +0100
+++ b/ChangeLog	Thu Apr 18 16:20:55 2013 -0400
@@ -1,3 +1,12 @@
+2013-04-18  Elliott Baron  <ebaron@redhat.com>
+
+	* Makefile.am:
+	(ICEDTEA_PATCHES): Add new patch.
+	* patches/object-factory-cl-internal.patch:
+	Patch to give xalan/xerces access to their own internal
+	packages.
+	* NEWS: Updated.
+
 2013-04-17  Andrew John Hughes  <gnu.andrew@redhat.com>
 
 	* ChangeLog:
--- a/Makefile.am	Wed Apr 24 09:09:25 2013 +0100
+++ b/Makefile.am	Thu Apr 18 16:20:55 2013 -0400
@@ -570,7 +570,8 @@
 	patches/fix_get_stack_bounds_leak.patch \
 	patches/openjdk/7197906-handle_32_bit_shifts.patch \
 	patches/aarch64.patch \
-	patches/jaxws-tempfiles-ioutils-6.patch
+	patches/jaxws-tempfiles-ioutils-6.patch \
+	patches/object-factory-cl-internal.patch
 
 if WITH_RHINO
 ICEDTEA_PATCHES += \
--- a/NEWS	Wed Apr 24 09:09:25 2013 +0100
+++ b/NEWS	Thu Apr 18 16:20:55 2013 -0400
@@ -65,6 +65,7 @@
   - PR1336: Bootstrap failure on Fedora 17/18
   - PR1319: Correct #ifdef to #if
   - PR1402: Support glibc < 2.17 with AArch64 patch
+  - Give xalan/xerces access to their own internal packages.
 
 New in release 1.12.4 (2013-03-04):
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/object-factory-cl-internal.patch	Thu Apr 18 16:20:55 2013 -0400
@@ -0,0 +1,384 @@
+diff -ru openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/lib/ObjectFactory.java openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/lib/ObjectFactory.java
+--- openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/lib/ObjectFactory.java	2013-04-18 15:31:29.843692610 -0400
++++ openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/lib/ObjectFactory.java	2013-04-18 15:24:09.491130619 -0400
+@@ -54,6 +54,8 @@
+     //
+     // Constants
+     //
++    private static final String XALAN_INTERNAL = "com.sun.org.apache.xalan.internal";
++    private static final String XERCES_INTERNAL = "com.sun.org.apache.xerces.internal";
+ 
+     // name of default properties file to look for in JDK's jre/lib directory
+     private static final String DEFAULT_PROPERTIES_FILENAME =
+@@ -482,10 +484,15 @@
+         SecurityManager security = System.getSecurityManager();
+         try{
+                 if (security != null){
+-                    final int lastDot = className.lastIndexOf(".");
+-                    String packageName = className;
+-                    if (lastDot != -1) packageName = className.substring(0, lastDot);
+-                    security.checkPackageAccess(packageName);
++                    if (className.startsWith(XALAN_INTERNAL) ||
++                            className.startsWith(XERCES_INTERNAL)) {
++                        cl = null;
++                    } else {
++                        final int lastDot = className.lastIndexOf(".");
++                        String packageName = className;
++                        if (lastDot != -1) packageName = className.substring(0, lastDot);
++                        security.checkPackageAccess(packageName);
++                    }
+                  }   
+         }catch(SecurityException e){
+             throw e;
+diff -ru openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xslt/ObjectFactory.java openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xslt/ObjectFactory.java
+--- openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xslt/ObjectFactory.java	2013-04-18 15:31:29.878692813 -0400
++++ openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xslt/ObjectFactory.java	2013-04-18 15:22:55.299696537 -0400
+@@ -54,6 +54,8 @@
+     //
+     // Constants
+     //
++    private static final String XALAN_INTERNAL = "com.sun.org.apache.xalan.internal";
++    private static final String XERCES_INTERNAL = "com.sun.org.apache.xerces.internal";
+ 
+     // name of default properties file to look for in JDK's jre/lib directory
+     private static final String DEFAULT_PROPERTIES_FILENAME =
+@@ -484,10 +486,15 @@
+         SecurityManager security = System.getSecurityManager();
+         try{
+                 if (security != null){
+-                    final int lastDot = className.lastIndexOf(".");
+-                    String packageName = className;
+-                    if (lastDot != -1) packageName = className.substring(0, lastDot);
+-                    security.checkPackageAccess(packageName);
++                    if (className.startsWith(XALAN_INTERNAL) ||
++                            className.startsWith(XERCES_INTERNAL)) {
++                        cl = null;
++                    } else {
++                        final int lastDot = className.lastIndexOf(".");
++                        String packageName = className;
++                        if (lastDot != -1) packageName = className.substring(0, lastDot);
++                        security.checkPackageAccess(packageName);
++                    }
+                  }   
+         }catch(SecurityException e){
+             throw e;
+diff -ru openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/ObjectFactory.java openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/ObjectFactory.java
+--- openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/ObjectFactory.java	2013-04-18 15:31:29.886692859 -0400
++++ openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/ObjectFactory.java	2013-04-18 15:26:22.636907700 -0400
+@@ -54,6 +54,8 @@
+     //
+     // Constants
+     //
++    private static final String XALAN_INTERNAL = "com.sun.org.apache.xalan.internal";
++    private static final String XERCES_INTERNAL = "com.sun.org.apache.xerces.internal";
+ 
+     // name of default properties file to look for in JDK's jre/lib directory
+     private static final String DEFAULT_PROPERTIES_FILENAME =
+@@ -484,10 +486,15 @@
+         SecurityManager security = System.getSecurityManager();
+         try{
+                 if (security != null){
+-                    final int lastDot = className.lastIndexOf(".");
+-                    String packageName = className;
+-                    if (lastDot != -1) packageName = className.substring(0, lastDot);
+-                    security.checkPackageAccess(packageName);
++                    if (className.startsWith(XALAN_INTERNAL) ||
++                            className.startsWith(XERCES_INTERNAL)) {
++                        cl = null;
++                    } else {
++                        final int lastDot = className.lastIndexOf(".");
++                        String packageName = className;
++                        if (lastDot != -1) packageName = className.substring(0, lastDot);
++                        security.checkPackageAccess(packageName);
++                    }
+                  }   
+         }catch(SecurityException e){
+             throw e;
+diff -ru openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ObjectFactory.java openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ObjectFactory.java
+--- openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ObjectFactory.java	2013-04-18 15:31:29.915693027 -0400
++++ openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ObjectFactory.java	2013-04-18 15:25:02.786441953 -0400
+@@ -54,6 +54,8 @@
+     //
+     // Constants
+     //
++    private static final String XALAN_INTERNAL = "com.sun.org.apache.xalan.internal";
++    private static final String XERCES_INTERNAL = "com.sun.org.apache.xerces.internal";
+ 
+     // name of default properties file to look for in JDK's jre/lib directory
+     private static final String DEFAULT_PROPERTIES_FILENAME =
+@@ -484,10 +486,15 @@
+         SecurityManager security = System.getSecurityManager();
+         try{
+                 if (security != null){
+-                    final int lastDot = className.lastIndexOf(".");
+-                    String packageName = className;
+-                    if (lastDot != -1) packageName = className.substring(0, lastDot);
+-                    security.checkPackageAccess(packageName);
++                    if (className.startsWith(XALAN_INTERNAL) ||
++                            className.startsWith(XERCES_INTERNAL)) {
++                        cl = null;
++                    } else {
++                        final int lastDot = className.lastIndexOf(".");
++                        String packageName = className;
++                        if (lastDot != -1) packageName = className.substring(0, lastDot);
++                        security.checkPackageAccess(packageName);
++                    }
+                  }   
+         }catch(SecurityException e){
+             throw e;
+diff -ru openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ObjectFactory.java openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ObjectFactory.java
+--- openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ObjectFactory.java	2013-04-18 15:31:29.965693317 -0400
++++ openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ObjectFactory.java	2013-04-18 15:27:11.820194171 -0400
+@@ -54,6 +54,8 @@
+     //
+     // Constants
+     //
++    private static final String XALAN_INTERNAL = "com.sun.org.apache.xalan.internal";
++    private static final String XERCES_INTERNAL = "com.sun.org.apache.xerces.internal";
+ 
+     // name of default properties file to look for in JDK's jre/lib directory
+     private static final String DEFAULT_PROPERTIES_FILENAME =
+@@ -483,12 +485,17 @@
+         //class. Restrict the access to the package classes as specified in java.security policy.
+         SecurityManager security = System.getSecurityManager();
+         try{
+-                if (security != null){
++            if (security != null){
++                if (className.startsWith(XALAN_INTERNAL) ||
++                        className.startsWith(XERCES_INTERNAL)) {
++                    cl = null;
++                } else {
+                     final int lastDot = className.lastIndexOf(".");
+                     String packageName = className;
+                     if (lastDot != -1) packageName = className.substring(0, lastDot);
+                     security.checkPackageAccess(packageName);
+-                 }   
++                }
++            }   
+         }catch(SecurityException e){
+             throw e;
+         }
+diff -ru openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/dom/ObjectFactory.java openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/dom/ObjectFactory.java
+--- openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/dom/ObjectFactory.java	2013-04-18 15:31:29.987693445 -0400
++++ openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/dom/ObjectFactory.java	2013-04-18 15:29:26.543977437 -0400
+@@ -54,6 +54,8 @@
+     //
+     // Constants
+     //
++    private static final String XALAN_INTERNAL = "com.sun.org.apache.xalan.internal";
++    private static final String XERCES_INTERNAL = "com.sun.org.apache.xerces.internal";
+ 
+     // name of default properties file to look for in JDK's jre/lib directory
+     private static final String DEFAULT_PROPERTIES_FILENAME =
+@@ -484,10 +486,15 @@
+         SecurityManager security = System.getSecurityManager();
+         try{
+                 if (security != null){
+-                    final int lastDot = className.lastIndexOf(".");
+-                    String packageName = className;
+-                    if (lastDot != -1) packageName = className.substring(0, lastDot);
+-                    security.checkPackageAccess(packageName);
++                    if (className.startsWith(XALAN_INTERNAL) ||
++                            className.startsWith(XERCES_INTERNAL)) {
++                        cl = null;
++                    } else {
++                        final int lastDot = className.lastIndexOf(".");
++                        String packageName = className;
++                        if (lastDot != -1) packageName = className.substring(0, lastDot);
++                        security.checkPackageAccess(packageName);
++                    }
+                  }   
+         }catch(SecurityException e){
+             throw e;
+diff -ru openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ObjectFactory.java openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ObjectFactory.java
+--- openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ObjectFactory.java	2013-04-18 15:31:30.002693531 -0400
++++ openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ObjectFactory.java	2013-04-18 15:28:18.404581537 -0400
+@@ -54,6 +54,8 @@
+     //
+     // Constants
+     //
++    private static final String XALAN_INTERNAL = "com.sun.org.apache.xalan.internal";
++    private static final String XERCES_INTERNAL = "com.sun.org.apache.xerces.internal";
+ 
+     // name of default properties file to look for in JDK's jre/lib directory
+     private static final String DEFAULT_PROPERTIES_FILENAME =
+@@ -484,10 +486,15 @@
+         SecurityManager security = System.getSecurityManager();
+         try{
+                 if (security != null){
+-                    final int lastDot = className.lastIndexOf(".");
+-                    String packageName = className;
+-                    if (lastDot != -1) packageName = className.substring(0, lastDot);
+-                    security.checkPackageAccess(packageName);
++                    if (className.startsWith(XALAN_INTERNAL) ||
++                            className.startsWith(XERCES_INTERNAL)) {
++                        cl = null;
++                    } else {
++                        final int lastDot = className.lastIndexOf(".");
++                        String packageName = className;
++                        if (lastDot != -1) packageName = className.substring(0, lastDot);
++                        security.checkPackageAccess(packageName);
++                    }
+                  }   
+         }catch(SecurityException e){
+             throw e;
+diff -ru openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/trax/ObjectFactory.java openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/trax/ObjectFactory.java
+--- openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/trax/ObjectFactory.java	2013-04-18 15:31:30.018693624 -0400
++++ openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/trax/ObjectFactory.java	2013-04-18 15:30:14.690256878 -0400
+@@ -54,6 +54,8 @@
+     //
+     // Constants
+     //
++    private static final String XALAN_INTERNAL = "com.sun.org.apache.xalan.internal";
++    private static final String XERCES_INTERNAL = "com.sun.org.apache.xerces.internal";
+ 
+     // name of default properties file to look for in JDK's jre/lib directory
+     private static final String DEFAULT_PROPERTIES_FILENAME =
+@@ -484,10 +486,15 @@
+         SecurityManager security = System.getSecurityManager();
+         try{
+                 if (security != null){
+-                    final int lastDot = className.lastIndexOf(".");
+-                    String packageName = className;
+-                    if (lastDot != -1) packageName = className.substring(0, lastDot);
+-                    security.checkPackageAccess(packageName);
++                    if (className.startsWith(XALAN_INTERNAL) ||
++                            className.startsWith(XERCES_INTERNAL)) {
++                        cl = null;
++                    } else {
++                        final int lastDot = className.lastIndexOf(".");
++                        String packageName = className;
++                        if (lastDot != -1) packageName = className.substring(0, lastDot);
++                        security.checkPackageAccess(packageName);
++                    }
+                  }   
+         }catch(SecurityException e){
+             throw e;
+diff -ru openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/dom/ObjectFactory.java openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/dom/ObjectFactory.java
+--- openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/dom/ObjectFactory.java	2013-04-18 15:31:30.067693908 -0400
++++ openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/dom/ObjectFactory.java	2013-04-18 14:42:41.980947500 -0400
+@@ -49,6 +49,8 @@
+     //
+     // Constants
+     //
++    private static final String XALAN_INTERNAL = "com.sun.org.apache.xalan.internal";
++    private static final String XERCES_INTERNAL = "com.sun.org.apache.xerces.internal";
+ 
+     // name of default properties file to look for in JDK's jre/lib directory
+     private static final String DEFAULT_PROPERTIES_FILENAME = "xerces.properties";
+@@ -376,10 +378,15 @@
+         //restrict the access to package as speicified in java.security policy
+         SecurityManager security = System.getSecurityManager();
+         if (security != null) {
+-            final int lastDot = className.lastIndexOf(".");
+-            String packageName = className;
+-            if (lastDot != -1) packageName = className.substring(0, lastDot);
+-            security.checkPackageAccess(packageName);
++            if (className.startsWith(XALAN_INTERNAL) ||
++                    className.startsWith(XERCES_INTERNAL)) {
++                cl = null;
++            } else {
++                final int lastDot = className.lastIndexOf(".");
++                String packageName = className;
++                if (lastDot != -1) packageName = className.substring(0, lastDot);
++                security.checkPackageAccess(packageName);
++            }
+         }
+         Class providerClass;
+         if (cl == null) {
+diff -ru openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/impl/dv/ObjectFactory.java openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/impl/dv/ObjectFactory.java
+--- openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/impl/dv/ObjectFactory.java	2013-04-18 15:31:30.143694349 -0400
++++ openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/impl/dv/ObjectFactory.java	2013-04-18 13:53:05.834977729 -0400
+@@ -49,6 +49,8 @@
+     //
+     // Constants
+     //
++    private static final String XALAN_INTERNAL = "com.sun.org.apache.xalan.internal";
++    private static final String XERCES_INTERNAL = "com.sun.org.apache.xerces.internal";
+ 
+     // name of default properties file to look for in JDK's jre/lib directory
+     private static final String DEFAULT_PROPERTIES_FILENAME = "xerces.properties";
+@@ -376,10 +378,15 @@
+         //restrict the access to package as speicified in java.security policy
+         SecurityManager security = System.getSecurityManager();
+         if (security != null) {
+-            final int lastDot = className.lastIndexOf(".");
+-            String packageName = className;
+-            if (lastDot != -1) packageName = className.substring(0, lastDot);
+-            security.checkPackageAccess(packageName);
++            if (className.startsWith(XALAN_INTERNAL) ||
++                    className.startsWith(XERCES_INTERNAL)) {
++                cl = null;
++            } else {
++                final int lastDot = className.lastIndexOf(".");
++                String packageName = className;
++                if (lastDot != -1) packageName = className.substring(0, lastDot);
++                security.checkPackageAccess(packageName);
++            }
+         }
+         Class providerClass;
+         if (cl == null) {
+diff -ru openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/parsers/ObjectFactory.java openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/parsers/ObjectFactory.java
+--- openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/parsers/ObjectFactory.java	2013-04-18 15:31:30.445696098 -0400
++++ openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/parsers/ObjectFactory.java	2013-04-18 13:53:05.834977729 -0400
+@@ -47,6 +47,8 @@
+     //
+     // Constants
+     //
++    private static final String XALAN_INTERNAL = "com.sun.org.apache.xalan.internal";
++    private static final String XERCES_INTERNAL = "com.sun.org.apache.xerces.internal";
+ 
+     // name of default properties file to look for in JDK's jre/lib directory
+     private static final String DEFAULT_PROPERTIES_FILENAME = "xerces.properties";
+@@ -374,10 +376,15 @@
+         //restrict the access to package as speicified in java.security policy
+         SecurityManager security = System.getSecurityManager();
+         if (security != null) {
+-            final int lastDot = className.lastIndexOf(".");
+-            String packageName = className;
+-            if (lastDot != -1) packageName = className.substring(0, lastDot);
+-            security.checkPackageAccess(packageName);
++            if (className.startsWith(XALAN_INTERNAL) ||
++                    className.startsWith(XERCES_INTERNAL)) {
++                cl = null;
++            } else {
++                final int lastDot = className.lastIndexOf(".");
++                String packageName = className;
++                if (lastDot != -1) packageName = className.substring(0, lastDot);
++                security.checkPackageAccess(packageName);
++            }
+         }
+         Class providerClass;
+         if (cl == null) {
+diff -ru openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/xinclude/ObjectFactory.java openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/xinclude/ObjectFactory.java
+--- openjdk/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/xinclude/ObjectFactory.java	2013-04-18 15:31:30.498696405 -0400
++++ openjdk.new/jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/xinclude/ObjectFactory.java	2013-04-18 14:43:31.310231085 -0400
+@@ -47,6 +47,8 @@
+     //
+     // Constants
+     //
++    private static final String XALAN_INTERNAL = "com.sun.org.apache.xalan.internal";
++    private static final String XERCES_INTERNAL = "com.sun.org.apache.xerces.internal";
+ 
+     // name of default properties file to look for in JDK's jre/lib directory
+     private static final String DEFAULT_PROPERTIES_FILENAME = "xerces.properties";
+@@ -374,10 +376,15 @@
+         //restrict the access to package as speicified in java.security policy
+         SecurityManager security = System.getSecurityManager();
+         if (security != null) {
+-            final int lastDot = className.lastIndexOf(".");
+-            String packageName = className;
+-            if (lastDot != -1) packageName = className.substring(0, lastDot);
+-            security.checkPackageAccess(packageName);
++            if (className.startsWith(XALAN_INTERNAL) ||
++                    className.startsWith(XERCES_INTERNAL)) {
++                cl = null;
++            } else {
++                final int lastDot = className.lastIndexOf(".");
++                String packageName = className;
++                if (lastDot != -1) packageName = className.substring(0, lastDot);
++                security.checkPackageAccess(packageName);
++            }
+         }
+         Class providerClass;
+         if (cl == null) {