You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ro...@apache.org on 2020/06/08 13:16:11 UTC

[james-project] 17/30: JAMES-3179 Fix UrlResource InputStream leaks

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

rouazana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 95373094887123570f0b209882055ba26de3d319
Author: Gautier DI FOLCO <gd...@linagora.com>
AuthorDate: Tue May 12 15:56:31 2020 +0200

    JAMES-3179 Fix UrlResource InputStream leaks
---
 .../configuration/FileConfigurationProvider.java   |  5 ++++
 .../mailrepository/jdbc/JDBCMailRepository.java    | 31 ++++++++++------------
 .../james/jmap/draft/crypto/SecurityKeyLoader.java |  8 +++---
 3 files changed, 24 insertions(+), 20 deletions(-)

diff --git a/server/container/core/src/main/java/org/apache/james/server/core/configuration/FileConfigurationProvider.java b/server/container/core/src/main/java/org/apache/james/server/core/configuration/FileConfigurationProvider.java
index 48b965b..0297774 100644
--- a/server/container/core/src/main/java/org/apache/james/server/core/configuration/FileConfigurationProvider.java
+++ b/server/container/core/src/main/java/org/apache/james/server/core/configuration/FileConfigurationProvider.java
@@ -57,6 +57,11 @@ public class FileConfigurationProvider implements ConfigurationProvider {
         XMLConfiguration xmlConfiguration = builder.getConfiguration();
         FileHandler fileHandler = new FileHandler(xmlConfiguration);
         fileHandler.load(configStream);
+        try {
+            configStream.close();
+        } catch (IOException ignored) {
+            // Ignored
+        }
 
         return xmlConfiguration;
     }
diff --git a/server/data/data-jdbc/src/main/java/org/apache/james/mailrepository/jdbc/JDBCMailRepository.java b/server/data/data-jdbc/src/main/java/org/apache/james/mailrepository/jdbc/JDBCMailRepository.java
index ac64737..344c4c3 100644
--- a/server/data/data-jdbc/src/main/java/org/apache/james/mailrepository/jdbc/JDBCMailRepository.java
+++ b/server/data/data-jdbc/src/main/java/org/apache/james/mailrepository/jdbc/JDBCMailRepository.java
@@ -263,28 +263,25 @@ public class JDBCMailRepository implements MailRepository, Configurable, Initial
 
         try (Connection conn = datasource.getConnection()) {
             // Initialise the sql strings.
-            InputStream sqlFile;
-            try {
-                sqlFile = fileSystem.getResource(sqlFileName);
+            try (InputStream sqlFile = fileSystem.getResource(sqlFileName)) {
+                LOGGER.debug("Reading SQL resources from file: {}, section {}.", sqlFileName, getClass().getName());
+
+                // Build the statement parameters
+                Map<String, String> sqlParameters = new HashMap<>();
+                if (tableName != null) {
+                    sqlParameters.put("table", tableName);
+                }
+                if (repositoryName != null) {
+                    sqlParameters.put("repository", repositoryName);
+                }
+
+                sqlQueries = new SqlResources();
+                sqlQueries.init(sqlFile, this.getClass().getName(), conn, sqlParameters);
             } catch (Exception e) {
                 LOGGER.error(e.getMessage(), e);
                 throw e;
             }
 
-            LOGGER.debug("Reading SQL resources from file: {}, section {}.", sqlFileName, getClass().getName());
-
-            // Build the statement parameters
-            Map<String, String> sqlParameters = new HashMap<>();
-            if (tableName != null) {
-                sqlParameters.put("table", tableName);
-            }
-            if (repositoryName != null) {
-                sqlParameters.put("repository", repositoryName);
-            }
-
-            sqlQueries = new SqlResources();
-            sqlQueries.init(sqlFile, this.getClass().getName(), conn, sqlParameters);
-
             // Check if the required table exists. If not, create it.
             DatabaseMetaData dbMetaData = conn.getMetaData();
             // Need to ask in the case that identifiers are stored, ask the
diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/crypto/SecurityKeyLoader.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/crypto/SecurityKeyLoader.java
index 38da9c4..6b208ca 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/crypto/SecurityKeyLoader.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/crypto/SecurityKeyLoader.java
@@ -55,9 +55,11 @@ public class SecurityKeyLoader {
         Preconditions.checkState(jmapDraftConfiguration.isEnabled(), "JMAP is not enabled");
 
         KeyStore keystore = KeyStore.getInstance(JKS);
-        InputStream fis = fileSystem.getResource(jmapDraftConfiguration.getKeystore());
-        char[] secret = jmapDraftConfiguration.getSecret().toCharArray();
-        keystore.load(fis, secret);
+        char[] secret;
+        try (InputStream fis = fileSystem.getResource(jmapDraftConfiguration.getKeystore())) {
+            secret = jmapDraftConfiguration.getSecret().toCharArray();
+            keystore.load(fis, secret);
+        }
         Certificate aliasCertificate = Optional
                 .ofNullable(keystore.getCertificate(ALIAS))
                 .orElseThrow(() -> new KeyStoreException("Alias '" + ALIAS + "' keystore can't be found"));


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org