Author: markt
Date: Wed Mar 7 21:45:27 2012
New Revision: 1298140
URL: http://svn.apache.org/viewvc?rev=1298140&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=52719
Correct theoretical resource leak during Jar validation
Modified:
tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java?rev=1298140&r1=1298139&r2=1298140&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java Wed Mar
7 21:45:27 2012
@@ -3311,44 +3311,53 @@ public class WebappClassLoader
* Check the specified JAR file, and return <code>true</code> if it does
* not contain any of the trigger classes.
*
- * @param jarfile The JAR file to be checked
+ * @param file The JAR file to be checked
*
* @exception IOException if an input/output error occurs
*/
- protected boolean validateJarFile(File jarfile)
+ protected boolean validateJarFile(File file)
throws IOException {
if (triggers == null)
return (true);
- JarFile jarFile = new JarFile(jarfile);
- for (int i = 0; i < triggers.length; i++) {
- Class<?> clazz = null;
- try {
- if (parent != null) {
- clazz = parent.loadClass(triggers[i]);
- } else {
- clazz = Class.forName(triggers[i]);
+
+ JarFile jarFile = null;
+ try {
+ jarFile = new JarFile(file);
+ for (int i = 0; i < triggers.length; i++) {
+ Class<?> clazz = null;
+ try {
+ if (parent != null) {
+ clazz = parent.loadClass(triggers[i]);
+ } else {
+ clazz = Class.forName(triggers[i]);
+ }
+ } catch (Exception e) {
+ clazz = null;
+ }
+ if (clazz == null)
+ continue;
+ String name = triggers[i].replace('.', '/') + ".class";
+ if (log.isDebugEnabled())
+ log.debug(" Checking for " + name);
+ JarEntry jarEntry = jarFile.getJarEntry(name);
+ if (jarEntry != null) {
+ log.info("validateJarFile(" + file +
+ ") - jar not loaded. See Servlet Spec 2.3, "
+ + "section 9.7.2. Offending class: " + name);
+ return false;
}
- } catch (Exception e) {
- clazz = null;
}
- if (clazz == null)
- continue;
- String name = triggers[i].replace('.', '/') + ".class";
- if (log.isDebugEnabled())
- log.debug(" Checking for " + name);
- JarEntry jarEntry = jarFile.getJarEntry(name);
- if (jarEntry != null) {
- log.info("validateJarFile(" + jarfile +
- ") - jar not loaded. See Servlet Spec 2.3, "
- + "section 9.7.2. Offending class: " + name);
- jarFile.close();
- return (false);
+ return true;
+ } finally {
+ if (jarFile != null) {
+ try {
+ jarFile.close();
+ } catch (IOException ioe) {
+ // Ignore
+ }
}
}
- jarFile.close();
- return (true);
-
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]