Author: markt Date: Sat Nov 4 13:21:07 2006 New Revision: 471263 URL: http://svn.apache.org/viewvc?view=rev&rev=471263 Log: Port fix bug 37458. Remove the possibility of some NPE and IAE issues. Note for Remy - you had some ideas to improve this patch.
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java?view=diff&rev=471263&r1=471262&r2=471263 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java Sat Nov 4 13:21:07 2006 @@ -1758,63 +1758,58 @@ if (clazz != null) return clazz; - synchronized (this) { + synchronized (entry) { if (entry.binaryContent == null && entry.loadedClass == null) throw new ClassNotFoundException(name); - } - // Looking up the package - String packageName = null; - int pos = name.lastIndexOf('.'); - if (pos != -1) - packageName = name.substring(0, pos); - - Package pkg = null; - - if (packageName != null) { - - pkg = getPackage(packageName); - - // Define the package (if null) - if (pkg == null) { - if (entry.manifest == null) { - definePackage(packageName, null, null, null, null, null, - null, null); - } else { - definePackage(packageName, entry.manifest, entry.codeBase); + // Looking up the package + String packageName = null; + int pos = name.lastIndexOf('.'); + if (pos != -1) + packageName = name.substring(0, pos); + + Package pkg = null; + + if (packageName != null) { + synchronized (this) { + pkg = getPackage(packageName); + + // Define the package (if null) + if (pkg == null) { + if (entry.manifest == null) { + definePackage(packageName, null, null, null, null, + null, null, null); + } else { + definePackage(packageName, entry.manifest, + entry.codeBase); + } + } } } + + if (securityManager != null) { - } - - // Create the code source object - CodeSource codeSource = - new CodeSource(entry.codeBase, entry.certificates); - - if (securityManager != null) { - - // Checking sealing - if (pkg != null) { - boolean sealCheck = true; - if (pkg.isSealed()) { - sealCheck = pkg.isSealed(entry.codeBase); - } else { - sealCheck = (entry.manifest == null) - || !isPackageSealed(packageName, entry.manifest); + // Checking sealing + if (pkg != null) { + boolean sealCheck = true; + if (pkg.isSealed()) { + sealCheck = pkg.isSealed(entry.codeBase); + } else { + sealCheck = (entry.manifest == null) + || !isPackageSealed(packageName, entry.manifest); + } + if (!sealCheck) + throw new SecurityException + ("Sealing violation loading " + name + " : Package " + + packageName + " is sealed."); } - if (!sealCheck) - throw new SecurityException - ("Sealing violation loading " + name + " : Package " - + packageName + " is sealed."); + } - } - - synchronized (this) { if (entry.loadedClass == null) { clazz = defineClass(name, entry.binaryContent, 0, entry.binaryContent.length, - codeSource); + new CodeSource(entry.codeBase, entry.certificates)); entry.loadedClass = clazz; entry.binaryContent = null; entry.source = null; --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]