This is an automated email from the ASF dual-hosted git repository.

markt-asf pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/main by this push:
     new 2a3a07dff7 Fix another potential fd leak
2a3a07dff7 is described below

commit 2a3a07dff73f399d39264b7247c2718e034efc7d
Author: Mark Thomas <[email protected]>
AuthorDate: Tue Jun 30 20:17:57 2026 +0100

    Fix another potential fd leak
---
 .../catalina/ssi/SSIServletExternalResolver.java   | 25 ++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/java/org/apache/catalina/ssi/SSIServletExternalResolver.java 
b/java/org/apache/catalina/ssi/SSIServletExternalResolver.java
index c39f338016..56ccefc9ce 100644
--- a/java/org/apache/catalina/ssi/SSIServletExternalResolver.java
+++ b/java/org/apache/catalina/ssi/SSIServletExternalResolver.java
@@ -36,6 +36,7 @@ import jakarta.servlet.http.HttpServletResponse;
 
 import org.apache.catalina.connector.Connector;
 import org.apache.catalina.connector.Request;
+import org.apache.tomcat.util.ExceptionUtils;
 import org.apache.tomcat.util.buf.B2CConverter;
 import org.apache.tomcat.util.buf.UDecoder;
 import org.apache.tomcat.util.http.Method;
@@ -600,11 +601,21 @@ public class SSIServletExternalResolver implements 
SSIExternalResolver {
     @Override
     public long getFileLastModified(String path, boolean virtual) throws 
IOException {
         long lastModified = 0;
+        URLConnection urlConnection = null;
         try {
-            URLConnection urlConnection = getURLConnection(path, virtual);
+            urlConnection = getURLConnection(path, virtual);
             lastModified = urlConnection.getLastModified();
         } catch (IOException ignore) {
             // Ignore this. It will always fail for non-file based includes
+        } finally {
+            if (urlConnection != null) {
+                try {
+                    urlConnection.getInputStream().close();
+                } catch (IOException ioe) {
+                    ExceptionUtils.handleThrowable(ioe);
+                    lastModified = 0;
+                }
+            }
         }
         return lastModified;
     }
@@ -623,11 +634,21 @@ public class SSIServletExternalResolver implements 
SSIExternalResolver {
     @Override
     public long getFileSize(String path, boolean virtual) throws IOException {
         long fileSize = -1;
+        URLConnection urlConnection = null;
         try {
-            URLConnection urlConnection = getURLConnection(path, virtual);
+            urlConnection = getURLConnection(path, virtual);
             fileSize = urlConnection.getContentLengthLong();
         } catch (IOException ignore) {
             // Ignore this. It will always fail for non-file based includes
+        } finally {
+            if (urlConnection != null) {
+                try {
+                    urlConnection.getInputStream().close();
+                } catch (IOException ioe) {
+                    ExceptionUtils.handleThrowable(ioe);
+                    fileSize = -1;
+                }
+            }
         }
         return fileSize;
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to