/hg/release/icedtea6-1.11: Split 6657673-jaxp-backport-factoryfi...

ebaron at icedtea.classpath.org ebaron at icedtea.classpath.org
Mon Apr 22 14:14:11 PDT 2013


changeset a08f636892a8 in /hg/release/icedtea6-1.11
details: http://icedtea.classpath.org/hg/release/icedtea6-1.11?cmd=changeset;node=a08f636892a8
author: Elliott Baron <ebaron at redhat.com>
date: Mon Apr 22 17:13:26 2013 -0400

	Split 6657673-jaxp-backport-factoryfinder patch into two.

	2013-04-22  Elliott Baron  <ebaron at redhat.com>

	  * Makefile.am:
	  (ICEDTEA_PATCHES): Removed one patch, split it into two.
	  * patches/security/20130416/6657673-jaxp-backport-factoryfinder.patch:
	  Removed. Split into patches below.
	  * patches/openjdk/7133220-factory-finder-parser-transform-useBSClassLoader.patch:
	  First part of removed patch.
	  * patches/openjdk/6657673-factory-finder-parser-transform-internal-packages.patch:
	  Second part of removed patch.


diffstat:

 ChangeLog                                                                       |   11 +
 Makefile.am                                                                     |    3 +-
 patches/openjdk/6657673-factory-finder-parser-transform-internal-packages.patch |   54 +
 patches/openjdk/7133220-factory-finder-parser-transform-useBSClassLoader.patch  |  298 +++++++++
 patches/security/20130416/6657673-jaxp-backport-factoryfinder.patch             |  303 ----------
 5 files changed, 365 insertions(+), 304 deletions(-)

diffs (truncated from 698 to 500 lines):

diff -r 5254d96fe90f -r a08f636892a8 ChangeLog
--- a/ChangeLog	Fri Apr 19 14:38:19 2013 -0400
+++ b/ChangeLog	Mon Apr 22 17:13:26 2013 -0400
@@ -1,3 +1,14 @@
+2013-04-22  Elliott Baron  <ebaron at redhat.com>
+
+	* Makefile.am:
+	(ICEDTEA_PATCHES): Removed one patch, split it into two.
+	* patches/security/20130416/6657673-jaxp-backport-factoryfinder.patch:
+	Removed. Split into patches below.
+	* patches/openjdk/7133220-factory-finder-parser-transform-useBSClassLoader.patch:
+	First part of removed patch.
+	* patches/openjdk/6657673-factory-finder-parser-transform-internal-packages.patch:
+	Second part of removed patch.
+
 2013-04-19  Elliott Baron  <ebaron at redhat.com>
 
 	* Makefile.am:
diff -r 5254d96fe90f -r a08f636892a8 Makefile.am
--- a/Makefile.am	Fri Apr 19 14:38:19 2013 -0400
+++ b/Makefile.am	Mon Apr 22 17:13:26 2013 -0400
@@ -279,7 +279,8 @@
 	patches/openjdk/8004302-soap_test_failure.patch \
 	patches/security/20130416/6657673.patch \
 	patches/security/20130416/6657673-fixup.patch \
-	patches/security/20130416/6657673-jaxp-backport-factoryfinder.patch \
+	patches/openjdk/7133220-factory-finder-parser-transform-useBSClassLoader.patch \
+	patches/openjdk/6657673-factory-finder-parser-transform-internal-packages.patch \
 	patches/openjdk/6669869-queries_per_appcontext.patch \
 	patches/openjdk/5102804-memory_leak.patch \
 	patches/openjdk/6963811-deadlock_fix.patch \
diff -r 5254d96fe90f -r a08f636892a8 patches/openjdk/6657673-factory-finder-parser-transform-internal-packages.patch
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/6657673-factory-finder-parser-transform-internal-packages.patch	Mon Apr 22 17:13:26 2013 -0400
@@ -0,0 +1,54 @@
+diff -ur openjdk/jaxp/drop_included/jaxp_src/src/javax/xml/parsers/FactoryFinder.java openjdk.new/jaxp/drop_included/jaxp_src/src/javax/xml/parsers/FactoryFinder.java
+--- openjdk/jaxp/drop_included/jaxp_src/src/javax/xml/parsers/FactoryFinder.java	2013-04-22 12:42:32.138748378 -0400
++++ openjdk.new/jaxp/drop_included/jaxp_src/src/javax/xml/parsers/FactoryFinder.java	2013-04-22 12:41:36.033419998 -0400
+@@ -44,7 +44,7 @@
+  * @author Santiago.PericasGeertsen at sun.com
+  */
+ class FactoryFinder {
+-    
++    private static final String DEFAULT_PACKAGE = "com.sun.org.apache.xerces.internal";
+     /**
+      * Internal debug flag.
+      */
+@@ -140,6 +140,14 @@
+     static Object newInstance(String className, ClassLoader cl, boolean doFallback)
+         throws ConfigurationError
+     {
++        // make sure we have access to restricted packages
++        if (System.getSecurityManager() != null) {
++            if (className != null && className.startsWith(DEFAULT_PACKAGE)) {
++                cl = null;
++                useBSClsLoader = true;
++            }
++        }
++
+         try {
+             Class providerClass = getProviderClass(className, cl, doFallback);                        
+             Object instance = providerClass.newInstance();
+Only in openjdk.new/jaxp/drop_included/jaxp_src/src/javax/xml/parsers: FactoryFinder.java.orig
+diff -ur openjdk/jaxp/drop_included/jaxp_src/src/javax/xml/transform/FactoryFinder.java openjdk.new/jaxp/drop_included/jaxp_src/src/javax/xml/transform/FactoryFinder.java
+--- openjdk/jaxp/drop_included/jaxp_src/src/javax/xml/transform/FactoryFinder.java	2013-04-22 12:42:32.230748906 -0400
++++ openjdk.new/jaxp/drop_included/jaxp_src/src/javax/xml/transform/FactoryFinder.java	2013-04-22 12:41:41.268451218 -0400
+@@ -44,6 +44,7 @@
+  * @author Santiago.PericasGeertsen at sun.com
+  */
+ class FactoryFinder {
++    private static final String DEFAULT_PACKAGE = "com.sun.org.apache.xalan.internal.";
+     
+     /**
+      * Internal debug flag.
+@@ -140,6 +141,14 @@
+     static Object newInstance(String className, ClassLoader cl, boolean doFallback)
+         throws ConfigurationError
+     {
++        // make sure we have access to restricted packages
++        if (System.getSecurityManager() != null) {
++            if (className != null && className.startsWith(DEFAULT_PACKAGE)) {
++                cl = null;
++                useBSClsLoader = true;
++            }
++        }
++
+         try {
+             Class providerClass = getProviderClass(className, cl, doFallback);                        
+             Object instance = providerClass.newInstance();
diff -r 5254d96fe90f -r a08f636892a8 patches/openjdk/7133220-factory-finder-parser-transform-useBSClassLoader.patch
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/7133220-factory-finder-parser-transform-useBSClassLoader.patch	Mon Apr 22 17:13:26 2013 -0400
@@ -0,0 +1,298 @@
+diff -ur openjdk/jaxp/drop_included/jaxp_src/src/javax/xml/parsers/FactoryFinder.java openjdk.new/jaxp/drop_included/jaxp_src/src/javax/xml/parsers/FactoryFinder.java
+--- openjdk/jaxp/drop_included/jaxp_src/src/javax/xml/parsers/FactoryFinder.java	2013-04-22 12:37:39.305820912 -0400
++++ openjdk.new/jaxp/drop_included/jaxp_src/src/javax/xml/parsers/FactoryFinder.java	2013-04-22 12:28:52.947388255 -0400
+@@ -25,15 +25,12 @@
+ 
+ package javax.xml.parsers;
+ 
+-import java.io.File;
+-import java.io.FileInputStream;
+-
+-import java.util.Properties;
+ import java.io.BufferedReader;
++import java.io.File;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+-import java.net.URL;
++import java.util.Properties;
+ 
+ /**
+  * <p>Implements pluggable Datatypes.</p>
+@@ -42,6 +39,7 @@
+  * sync.  It is package private for secure class loading.</p>
+  *
+  * @author Santiago.PericasGeertsen at sun.com
++ * @author Huizhe.Wang at oracle.com
+  */
+ class FactoryFinder {
+     
+@@ -95,18 +93,24 @@
+      * If the class loader supplied is <code>null</code>, first try using the
+      * context class loader followed by the current (i.e. bootstrap) class
+      * loader. 
++     *
++     * Use bootstrap classLoader if cl = null and useBSClsLoader is true
+      */
+     static private Class getProviderClass(String className, ClassLoader cl,
+-            boolean doFallback) throws ClassNotFoundException 
++            boolean doFallback, boolean useBSClsLoader) throws ClassNotFoundException
+     {
+         try {
+             if (cl == null) {
+-                cl = ss.getContextClassLoader();
+-                if (cl == null) {
+-                    throw new ClassNotFoundException();
+-                }
+-                else {
+-                    return cl.loadClass(className);
++                if (useBSClsLoader) {
++                    return Class.forName(className, true, FactoryFinder.class.getClassLoader());
++                } else {
++                    cl = ss.getContextClassLoader();
++                    if (cl == null) {
++                        throw new ClassNotFoundException();
++                    }
++                    else {
++                        return cl.loadClass(className);
++                    }
+                 }
+             } 
+             else {
+@@ -131,8 +135,8 @@
+      * @param className Name of the concrete class corresponding to the
+      * service provider
+      *
+-     * @param cl ClassLoader to use to load the class, null means to use
+-     * the bootstrap ClassLoader
++     * @param cl <code>ClassLoader</code> used to load the factory class. If <code>null</code>
++     * current <code>Thread</code>'s context classLoader is used to load the factory class.
+      *
+      * @param doFallback True if the current ClassLoader should be tried as
+      * a fallback if the class is not found using cl
+@@ -140,8 +144,30 @@
+     static Object newInstance(String className, ClassLoader cl, boolean doFallback)
+         throws ConfigurationError
+     {
++        return newInstance(className, cl, doFallback, false);
++    }
++
++    /**
++     * Create an instance of a class. Delegates to method
++     * <code>getProviderClass()</code> in order to load the class.
++     *
++     * @param className Name of the concrete class corresponding to the
++     * service provider
++     *
++     * @param cl <code>ClassLoader</code> used to load the factory class. If <code>null</code>
++     * current <code>Thread</code>'s context classLoader is used to load the factory class.
++     *
++     * @param doFallback True if the current ClassLoader should be tried as
++     * a fallback if the class is not found using cl
++     *
++     * @param useBSClsLoader True if cl=null actually meant bootstrap classLoader. This parameter
++     * is needed since DocumentBuilderFactory/SAXParserFactory defined null as context classLoader.
++     */
++    static Object newInstance(String className, ClassLoader cl, boolean doFallback, boolean useBSClsLoader)
++        throws ConfigurationError
++    {
+         try {
+-            Class providerClass = getProviderClass(className, cl, doFallback);                        
++            Class providerClass = getProviderClass(className, cl, doFallback, useBSClsLoader);
+             Object instance = providerClass.newInstance();
+             if (debug) {    // Extra check to avoid computing cl strings
+                 dPrint("created new instance of " + providerClass +
+@@ -244,6 +270,7 @@
+         
+         // First try the Context ClassLoader
+         ClassLoader cl = ss.getContextClassLoader();
++        boolean useBSClsLoader = false;
+         if (cl != null) {
+             is = ss.getResourceAsStream(cl, serviceId);
+             
+@@ -251,11 +278,13 @@
+             if (is == null) {
+                 cl = FactoryFinder.class.getClassLoader();                
+                 is = ss.getResourceAsStream(cl, serviceId);
++                useBSClsLoader = true;
+             }
+         } else {
+             // No Context ClassLoader, try the current ClassLoader
+             cl = FactoryFinder.class.getClassLoader();
+             is = ss.getResourceAsStream(cl, serviceId);
++            useBSClsLoader = true;
+         }
+         
+         if (is == null) {
+@@ -293,7 +322,7 @@
+             // ClassLoader because we want to avoid the case where the
+             // resource file was found using one ClassLoader and the
+             // provider class was instantiated using a different one.
+-            return newInstance(factoryClassName, cl, false);
++            return newInstance(factoryClassName, cl, false, useBSClsLoader);
+         }
+         
+         // No provider found
+diff -ur openjdk/jaxp/drop_included/jaxp_src/src/javax/xml/transform/FactoryFinder.java openjdk.new/jaxp/drop_included/jaxp_src/src/javax/xml/transform/FactoryFinder.java
+--- openjdk/jaxp/drop_included/jaxp_src/src/javax/xml/transform/FactoryFinder.java	2013-04-22 12:37:39.312820966 -0400
++++ openjdk.new/jaxp/drop_included/jaxp_src/src/javax/xml/transform/FactoryFinder.java	2013-04-22 12:35:08.715478293 -0400
+@@ -25,15 +25,12 @@
+ 
+ package javax.xml.transform;
+ 
+-import java.io.File;
+-import java.io.FileInputStream;
+-
+-import java.util.Properties;
+ import java.io.BufferedReader;
++import java.io.File;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+-import java.net.URL;
++import java.util.Properties;
+ 
+ /**
+  * <p>Implements pluggable Datatypes.</p>
+@@ -42,6 +39,7 @@
+  * sync.  It is package private for secure class loading.</p>
+  *
+  * @author Santiago.PericasGeertsen at sun.com
++ * @author Huizhe.Wang at oracle.com
+  */
+ class FactoryFinder {
+     
+@@ -95,18 +93,24 @@
+      * If the class loader supplied is <code>null</code>, first try using the
+      * context class loader followed by the current (i.e. bootstrap) class
+      * loader. 
++     *
++     * Use bootstrap classLoader if cl = null and useBSClsLoader is true
+      */
+     static private Class getProviderClass(String className, ClassLoader cl,
+-            boolean doFallback) throws ClassNotFoundException 
++            boolean doFallback, boolean useBSClsLoader) throws ClassNotFoundException
+     {
+         try {
+             if (cl == null) {
+-                cl = ss.getContextClassLoader();
+-                if (cl == null) {
+-                    throw new ClassNotFoundException();
+-                }
+-                else {
+-                    return cl.loadClass(className);
++                if (useBSClsLoader) {
++                    return Class.forName(className, true, FactoryFinder.class.getClassLoader());
++                } else {
++                    cl = ss.getContextClassLoader();
++                    if (cl == null) {
++                        throw new ClassNotFoundException();
++                    }
++                    else {
++                        return cl.loadClass(className);
++                    }
+                 }
+             } 
+             else {
+@@ -131,8 +135,8 @@
+      * @param className Name of the concrete class corresponding to the
+      * service provider
+      *
+-     * @param cl ClassLoader to use to load the class, null means to use
+-     * the bootstrap ClassLoader
++     * @param cl <code>ClassLoader</code> used to load the factory class. If <code>null</code>
++     * current <code>Thread</code>'s context classLoader is used to load the factory class.
+      *
+      * @param doFallback True if the current ClassLoader should be tried as
+      * a fallback if the class is not found using cl
+@@ -140,8 +144,30 @@
+     static Object newInstance(String className, ClassLoader cl, boolean doFallback)
+         throws ConfigurationError
+     {
++        return newInstance(className, cl, doFallback, false);
++    }
++
++    /**
++     * Create an instance of a class. Delegates to method
++     * <code>getProviderClass()</code> in order to load the class.
++     *
++     * @param className Name of the concrete class corresponding to the
++     * service provider
++     *
++     * @param cl <code>ClassLoader</code> used to load the factory class. If <code>null</code>
++     * current <code>Thread</code>'s context classLoader is used to load the factory class.
++     *
++     * @param doFallback True if the current ClassLoader should be tried as
++     * a fallback if the class is not found using cl
++     *
++     * @param useBSClsLoader True if cl=null actually meant bootstrap classLoader. This parameter
++     * is needed since DocumentBuilderFactory/SAXParserFactory defined null as context classLoader.
++     */
++    static Object newInstance(String className, ClassLoader cl, boolean doFallback, boolean useBSClsLoader)
++        throws ConfigurationError
++    {
+         try {
+-            Class providerClass = getProviderClass(className, cl, doFallback);                        
++            Class providerClass = getProviderClass(className, cl, doFallback, useBSClsLoader);
+             Object instance = providerClass.newInstance();
+             if (debug) {    // Extra check to avoid computing cl strings
+                 dPrint("created new instance of " + providerClass +
+@@ -182,7 +208,7 @@
+             String systemProp = ss.getSystemProperty(factoryId);
+             if (systemProp != null) {                
+                 dPrint("found system property, value=" + systemProp);
+-                return newInstance(systemProp, null, true);
++                return newInstance(systemProp, null, true, false);
+             }
+         } 
+         catch (SecurityException se) {
+@@ -210,7 +236,7 @@
+ 
+             if (factoryClassName != null) {
+                 dPrint("found in $java.home/jaxp.properties, value=" + factoryClassName);
+-                return newInstance(factoryClassName, null, true);
++                return newInstance(factoryClassName, null, true, false);
+             }
+         } 
+         catch (Exception ex) {
+@@ -228,7 +254,7 @@
+         }
+ 
+         dPrint("loaded from fallback value: " + fallbackClassName);
+-        return newInstance(fallbackClassName, null, true);
++        return newInstance(fallbackClassName, null, true, false);
+     }
+     
+     /*
+@@ -244,6 +270,7 @@
+         
+         // First try the Context ClassLoader
+         ClassLoader cl = ss.getContextClassLoader();
++        boolean useBSClsLoader = false;
+         if (cl != null) {
+             is = ss.getResourceAsStream(cl, serviceId);
+             
+@@ -251,11 +278,13 @@
+             if (is == null) {
+                 cl = FactoryFinder.class.getClassLoader();                
+                 is = ss.getResourceAsStream(cl, serviceId);
+-            }
++                useBSClsLoader = true;
++           }
+         } else {
+             // No Context ClassLoader, try the current ClassLoader
+             cl = FactoryFinder.class.getClassLoader();
+             is = ss.getResourceAsStream(cl, serviceId);
++            useBSClsLoader = true;
+         }
+         
+         if (is == null) {
+@@ -293,7 +322,7 @@
+             // ClassLoader because we want to avoid the case where the
+             // resource file was found using one ClassLoader and the
+             // provider class was instantiated using a different one.
+-            return newInstance(factoryClassName, cl, false);
++            return newInstance(factoryClassName, cl, false, useBSClsLoader);
+         }
+         
+         // No provider found
diff -r 5254d96fe90f -r a08f636892a8 patches/security/20130416/6657673-jaxp-backport-factoryfinder.patch
--- a/patches/security/20130416/6657673-jaxp-backport-factoryfinder.patch	Fri Apr 19 14:38:19 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,303 +0,0 @@
-diff -ur openjdk/jaxp/drop_included/jaxp_src/src/javax/xml/parsers/FactoryFinder.java openjdk.new/jaxp/openjdk/jaxp/drop_included_included/jaxp_src/src/javax/xml/parsers/FactoryFinder.java
---- openjdk/jaxp/drop_included/jaxp_src/src/javax/xml/parsers/FactoryFinder.java	2013-04-19 12:18:45.225000000 -0400
-+++ openjdk.new/jaxp/openjdk/jaxp/drop_included_included/jaxp_src/src/javax/xml/parsers/FactoryFinder.java	2013-04-19 11:53:01.791879226 -0400
-@@ -25,15 +25,12 @@
- 
- package javax.xml.parsers;
- 
--import java.io.File;
--import java.io.FileInputStream;
--
--import java.util.Properties;
- import java.io.BufferedReader;
-+import java.io.File;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
--import java.net.URL;
-+import java.util.Properties;
- 
- /**
-  * <p>Implements pluggable Datatypes.</p>
-@@ -42,9 +39,10 @@
-  * sync.  It is package private for secure class loading.</p>
-  *
-  * @author Santiago.PericasGeertsen at sun.com
-+ * @author Huizhe.Wang at oracle.com
-  */
- class FactoryFinder {
--    
-+    private static final String DEFAULT_PACKAGE = "com.sun.org.apache.xerces.internal";
-     /**
-      * Internal debug flag.
-      */
-@@ -95,18 +93,24 @@
-      * If the class loader supplied is <code>null</code>, first try using the
-      * context class loader followed by the current (i.e. bootstrap) class
-      * loader. 
-+     *
-+     * Use bootstrap classLoader if cl = null and useBSClsLoader is true
-      */
-     static private Class getProviderClass(String className, ClassLoader cl,
--            boolean doFallback) throws ClassNotFoundException 
-+            boolean doFallback, boolean useBSClsLoader) throws ClassNotFoundException
-     {
-         try {
-             if (cl == null) {
--                cl = ss.getContextClassLoader();
--                if (cl == null) {
--                    throw new ClassNotFoundException();
--                }
--                else {
--                    return cl.loadClass(className);
-+                if (useBSClsLoader) {
-+                    return Class.forName(className, true, FactoryFinder.class.getClassLoader());
-+                } else {
-+                    cl = ss.getContextClassLoader();
-+                    if (cl == null) {
-+                        throw new ClassNotFoundException();
-+                    }
-+                    else {
-+                        return cl.loadClass(className);
-+                    }
-                 }
-             } 
-             else {
-@@ -131,8 +135,8 @@
-      * @param className Name of the concrete class corresponding to the
-      * service provider
-      *
--     * @param cl ClassLoader to use to load the class, null means to use
--     * the bootstrap ClassLoader
-+     * @param cl <code>ClassLoader</code> used to load the factory class. If <code>null</code>
-+     * current <code>Thread</code>'s context classLoader is used to load the factory class.
-      *
-      * @param doFallback True if the current ClassLoader should be tried as
-      * a fallback if the class is not found using cl
-@@ -140,8 +144,38 @@
-     static Object newInstance(String className, ClassLoader cl, boolean doFallback)
-         throws ConfigurationError
-     {
-+        return newInstance(className, cl, doFallback, false);
-+    }
-+
-+    /**
-+     * Create an instance of a class. Delegates to method
-+     * <code>getProviderClass()</code> in order to load the class.
-+     *
-+     * @param className Name of the concrete class corresponding to the
-+     * service provider
-+     *
-+     * @param cl <code>ClassLoader</code> used to load the factory class. If <code>null</code>
-+     * current <code>Thread</code>'s context classLoader is used to load the factory class.
-+     *
-+     * @param doFallback True if the current ClassLoader should be tried as
-+     * a fallback if the class is not found using cl
-+     *
-+     * @param useBSClsLoader True if cl=null actually meant bootstrap classLoader. This parameter
-+     * is needed since DocumentBuilderFactory/SAXParserFactory defined null as context classLoader.
-+     */
-+    static Object newInstance(String className, ClassLoader cl, boolean doFallback, boolean useBSClsLoader)
-+        throws ConfigurationError
-+    {
-+        // make sure we have access to restricted packages
-+        if (System.getSecurityManager() != null) {
-+            if (className != null && className.startsWith(DEFAULT_PACKAGE)) {



More information about the distro-pkg-dev mailing list