You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by py...@apache.org on 2007/03/20 12:21:50 UTC
svn commit: r520360 - in /harmony/enhanced/classlib/trunk/modules:
archive/src/main/java/java/util/jar/JarVerifier.java
luni/src/main/java/java/net/URLClassLoader.java
luni/src/test/java/org/apache/harmony/luni/tests/java/lang/ClassTest.java
Author: pyang
Date: Tue Mar 20 04:21:49 2007
New Revision: 520360
URL: http://svn.apache.org/viewvc?view=rev&rev=520360
Log:
Apply patch for HARMONY-3332 ([classlib][luni]URLClassLoader throws NullPointerException while load an implementation class of a security provider in a jar which is signed.)
Modified:
harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/JarVerifier.java
harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/URLClassLoader.java
harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/java/lang/ClassTest.java
Modified: harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/JarVerifier.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/JarVerifier.java?view=diff&rev=520360&r1=520359&r2=520360
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/JarVerifier.java (original)
+++ harmony/enhanced/classlib/trunk/modules/archive/src/main/java/java/util/jar/JarVerifier.java Tue Mar 20 04:21:49 2007
@@ -273,6 +273,13 @@
Certificate[] signerCertChain = JarUtils.verifySignature(
new ByteArrayInputStream(sfBytes),
new ByteArrayInputStream(sBlockBytes));
+ /*
+ * Recursive call in loading security provider related class which
+ * is in a signed jar.
+ */
+ if (null == metaEntries) {
+ return;
+ }
if (signerCertChain != null) {
certificates.put(signatureFile, signerCertChain);
}
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/URLClassLoader.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/URLClassLoader.java?view=diff&rev=520360&r1=520359&r2=520360
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/URLClassLoader.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/URLClassLoader.java Tue Mar 20 04:21:49 2007
@@ -1086,6 +1086,16 @@
if (entry != null) {
readAvailable = true;
is = jf.getInputStream(entry);
+ /**
+ * Avoid recursive load class, especially the class
+ * is an implementation class of security provider
+ * and the jar is signed.
+ */
+ Class loadedClass = findLoadedClass(clsName);
+ if (null != loadedClass) {
+ is.close();
+ return loadedClass;
+ }
manifest = jf.getManifest();
}
} else if (protocol.equals("file")) { //$NON-NLS-1$
Modified: harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/java/lang/ClassTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/java/lang/ClassTest.java?view=diff&rev=520360&r1=520359&r2=520360
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/java/lang/ClassTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/java/lang/ClassTest.java Tue Mar 20 04:21:49 2007
@@ -36,6 +36,7 @@
import java.security.Permission;
import java.security.PrivilegedAction;
import java.security.ProtectionDomain;
+import java.security.Security;
import java.util.Arrays;
import java.util.List;
import java.util.Vector;
@@ -158,6 +159,14 @@
fail("should throw ClassNotFoundException.");
} catch (ClassNotFoundException e) {
}
+
+ //Regression Test for HARMONY-3332
+ String securityProviderClassName;
+ int count = 1;
+ while ((securityProviderClassName = Security
+ .getProperty("security.provider." + count++)) != null) {
+ Class.forName(securityProviderClassName);
+ }
}
/**