Author: violetagg Date: Wed Sep 3 15:00:43 2014 New Revision: 1622277 URL: http://svn.apache.org/r1622277 Log: Merged revisions 1621725, 1621726, 1621727 from tomcat/trunk: Partial fix for https://issues.apache.org/bugzilla/show_bug.cgi?id=56900 Fix resource leaks reading property files Based on a patch by Felix Schumacher
Modified: tomcat/tc7.0.x/trunk/ (props changed) tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Propchange: tomcat/tc7.0.x/trunk/ ------------------------------------------------------------------------------ Merged /tomcat/trunk:r1621725-1621727 Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java?rev=1622277&r1=1622276&r2=1622277&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java Wed Sep 3 15:00:43 2014 @@ -50,6 +50,7 @@ import org.apache.catalina.ContainerServ import org.apache.catalina.Globals; import org.apache.catalina.security.SecurityUtil; import org.apache.catalina.util.Introspection; +import org.apache.juli.logging.Log; import org.apache.tomcat.InstanceManager; import org.apache.tomcat.util.ExceptionUtils; import org.apache.tomcat.util.res.StringManager; @@ -72,9 +73,9 @@ public class DefaultInstanceManager impl protected final ClassLoader containerClassLoader; protected boolean privileged; protected boolean ignoreAnnotations; - private final Properties restrictedFilters = new Properties(); - private final Properties restrictedListeners = new Properties(); - private final Properties restrictedServlets = new Properties(); + private final Properties restrictedFilters; + private final Properties restrictedListeners; + private final Properties restrictedServlets; private final Map<Class<?>, AnnotationCacheEntry[]> annotationCache = new WeakHashMap<Class<?>, AnnotationCacheEntry[]>(); private final Map<String, String> postConstructMethods; @@ -86,43 +87,18 @@ public class DefaultInstanceManager impl this.containerClassLoader = containerClassLoader; ignoreAnnotations = catalinaContext.getIgnoreAnnotations(); StringManager sm = StringManager.getManager(Constants.Package); - try { - InputStream is = - this.getClass().getClassLoader().getResourceAsStream - ("org/apache/catalina/core/RestrictedServlets.properties"); - if (is != null) { - restrictedServlets.load(is); - } else { - catalinaContext.getLogger().error(sm.getString("defaultInstanceManager.restrictedServletsResource")); - } - } catch (IOException e) { - catalinaContext.getLogger().error(sm.getString("defaultInstanceManager.restrictedServletsResource"), e); - } - - try { - InputStream is = - this.getClass().getClassLoader().getResourceAsStream - ("org/apache/catalina/core/RestrictedListeners.properties"); - if (is != null) { - restrictedListeners.load(is); - } else { - catalinaContext.getLogger().error(sm.getString("defaultInstanceManager.restrictedListenersResources")); - } - } catch (IOException e) { - catalinaContext.getLogger().error(sm.getString("defaultInstanceManager.restrictedListenersResources"), e); - } - try { - InputStream is = - this.getClass().getClassLoader().getResourceAsStream - ("org/apache/catalina/core/RestrictedFilters.properties"); - if (is != null) { - restrictedFilters.load(is); - } else { - catalinaContext.getLogger().error(sm.getString("defaultInstanceManager.restrictedFiltersResource")); - } - } catch (IOException e) { - catalinaContext.getLogger().error(sm.getString("defaultInstanceManager.restrictedServletsResources"), e); - } + restrictedServlets = loadProperties( + "org/apache/catalina/core/RestrictedServlets.properties", + sm.getString("defaultInstanceManager.restrictedServletsResource"), + catalinaContext.getLogger()); + restrictedListeners = loadProperties( + "org/apache/catalina/core/RestrictedListeners.properties", + "defaultInstanceManager.restrictedListenersResources", + catalinaContext.getLogger()); + restrictedFilters = loadProperties( + "org/apache/catalina/core/RestrictedFilters.properties", + "defaultInstanceManager.restrictedFiltersResource", + catalinaContext.getLogger()); this.context = context; this.injectionMap = injectionMap; this.postConstructMethods = catalinaContext.findPostConstructMethods(); @@ -641,6 +617,30 @@ public class DefaultInstanceManager impl return Introspector.decapitalize(setter.getName().substring(3)); } + private static Properties loadProperties(String resourceName, String errorString, Log log) { + Properties result = new Properties(); + ClassLoader cl = DefaultInstanceManager.class.getClassLoader(); + InputStream is = null; + try { + is = cl.getResourceAsStream(resourceName); + if (is ==null) { + log.error(errorString); + } else { + result.load(is); + } + } catch (IOException ioe) { + log.error(errorString, ioe); + } finally { + if (is != null) { + try { + is.close(); + } catch (IOException e) { + } + } + } + return result; + } + private static String normalize(String jndiName){ if(jndiName != null && jndiName.startsWith("java:comp/env/")){ return jndiName.substring(14); Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java?rev=1622277&r1=1622276&r2=1622277&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java Wed Sep 3 15:00:43 2014 @@ -143,20 +143,25 @@ public class ContextConfig implements Li static { // Load our mapping properties for the standard authenticators - InputStream is = - ContextConfig.class.getClassLoader().getResourceAsStream( + Properties props = new Properties(); + InputStream is = null; + try { + is = ContextConfig.class.getClassLoader().getResourceAsStream( "org/apache/catalina/startup/Authenticators.properties"); - Properties props = null; - props = new Properties(); - if (is != null) { - try { + if (is != null) { props.load(is); - } catch (IOException e) { - props = null; + } + } catch (IOException ioe) { + props = null; + } finally { + if (is != null) { + try { + is.close(); + } catch (IOException e) { + } } } authenticators = props; - // Load the list of JARS to skip addJarsToSkip(Constants.DEFAULT_JARS_TO_SKIP); addJarsToSkip(Constants.PLUGGABILITY_JARS_TO_SKIP); Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1622277&r1=1622276&r2=1622277&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Wed Sep 3 15:00:43 2014 @@ -107,6 +107,11 @@ when Context have been reloaded. (kkolinko) </scode> <fix> + <bug>56900</bug>: Fix some potential resource leaks when reading + property files reported by Coverity Scan. Based on patches provided by + Felix Schumacher. (markt) + </fix> + <fix> <bug>56902</bug>: Fix a potential resource leak in the Default Servlet reported by Coverity Scan. Based on a patch provided by Felix Schumacher. (markt) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org