You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by vi...@apache.org on 2014/09/03 17:00:43 UTC

svn commit: r1622277 - in /tomcat/tc7.0.x/trunk: ./ java/org/apache/catalina/core/DefaultInstanceManager.java java/org/apache/catalina/startup/ContextConfig.java webapps/docs/changelog.xml

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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org