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

xiaoyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git


The following commit(s) were added to refs/heads/master by this push:
     new 77f925def4 [fix] resource leak risk (#6085)
77f925def4 is described below

commit 77f925def4a267ce5f0851ff7898e2f0747f4099
Author: Jast <[email protected]>
AuthorDate: Wed Aug 6 13:47:34 2025 +0800

    [fix] resource leak risk (#6085)
    
    * fix: prevent resource leak by using try-with-resources for CA cert stream
    
    * fix: prevent resource leak by using try-with-resources for database 
connection
    
    ---------
    
    Co-authored-by: aias00 <[email protected]>
---
 .../admin/config/KubernetesConfiguration.java      |  4 +-
 .../shenyu/admin/spring/LocalDataSourceLoader.java | 49 +++++++++++-----------
 2 files changed, 27 insertions(+), 26 deletions(-)

diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/config/KubernetesConfiguration.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/config/KubernetesConfiguration.java
index a856c9f22b..21059a6a34 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/config/KubernetesConfiguration.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/config/KubernetesConfiguration.java
@@ -55,7 +55,9 @@ public class KubernetesConfiguration {
                     deploymentProperties.getToken(),
                     false
             );
-            client.setSslCaCert(new 
FileInputStream(deploymentProperties.getCaCertPath()));
+            try (FileInputStream caCertStream = new 
FileInputStream(deploymentProperties.getCaCertPath())) {
+                client.setSslCaCert(caCertStream);
+            }
             return new AppsV1Api(client);
 
         } catch (IOException e) {
diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/spring/LocalDataSourceLoader.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/spring/LocalDataSourceLoader.java
index de6ca53672..2929c7f6c6 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/spring/LocalDataSourceLoader.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/spring/LocalDataSourceLoader.java
@@ -71,8 +71,9 @@ public class LocalDataSourceLoader implements 
InstantiationAwareBeanPostProcesso
             // because the shenyu database does not need to be specified when 
executing the SQL file,
             // otherwise the shenyu database will be disconnected when the 
shenyu database does not exist
             String jdbcUrl = StringUtils.replace(properties.getUrl(), 
"/shenyu?", "?");
-            Connection connection = DriverManager.getConnection(jdbcUrl, 
properties.getUsername(), properties.getPassword());
-            this.execute(connection, dataBaseProperties.getInitScript());
+            try (Connection connection = DriverManager.getConnection(jdbcUrl, 
properties.getUsername(), properties.getPassword())) {
+                this.execute(connection, dataBaseProperties.getInitScript());
+            }
         } catch (Exception e) {
             LOG.error("Datasource init error.", e);
             throw new ShenyuException(e.getMessage());
@@ -81,32 +82,30 @@ public class LocalDataSourceLoader implements 
InstantiationAwareBeanPostProcesso
 
     protected void execute(final Connection conn, final String script) throws 
Exception {
         ScriptRunner runner = new ScriptRunner(conn);
-        try {
-            // doesn't print logger
-            runner.setLogWriter(null);
-            runner.setAutoCommit(true);
-            runner.setFullLineDelimiter(false);
-            runner.setSendFullScript(false);
-            runner.setStopOnError(false);
-            Resources.setCharset(StandardCharsets.UTF_8);
-            List<String> initScripts = Splitter.on(";").splitToList(script);
-            for (String sqlScript : initScripts) {
-                if (sqlScript.startsWith(PRE_FIX)) {
-                    String sqlFile = sqlScript.substring(PRE_FIX.length());
-                    try (Reader fileReader = getResourceAsReader(sqlFile)) {
-                        LOG.info("execute shenyu schema sql: {}", sqlFile);
-                        runner.runScript(fileReader);
-                    }
-                } else {
-                    try (Reader fileReader = 
Resources.getResourceAsReader(sqlScript)) {
-                        LOG.info("execute shenyu schema sql: {}", sqlScript);
-                        runner.runScript(fileReader);
-                    }
+        // doesn't print logger
+        runner.setLogWriter(null);
+        runner.setAutoCommit(true);
+        runner.setFullLineDelimiter(false);
+        runner.setSendFullScript(false);
+        runner.setStopOnError(false);
+        Resources.setCharset(StandardCharsets.UTF_8);
+        List<String> initScripts = Splitter.on(";").splitToList(script);
+        for (String sqlScript : initScripts) {
+            if (sqlScript.startsWith(PRE_FIX)) {
+                String sqlFile = sqlScript.substring(PRE_FIX.length());
+                try (Reader fileReader = getResourceAsReader(sqlFile)) {
+                    LOG.info("execute shenyu schema sql: {}", sqlFile);
+                    runner.runScript(fileReader);
+                }
+            } else {
+                try (Reader fileReader = 
Resources.getResourceAsReader(sqlScript)) {
+                    LOG.info("execute shenyu schema sql: {}", sqlScript);
+                    runner.runScript(fileReader);
                 }
             }
-        } finally {
-            runner.closeConnection();
         }
+        // Note: Connection will be automatically closed by try-with-resources 
in init() method
+        // No need to call runner.closeConnection() here to avoid double 
closing
     }
 
     private static Reader getResourceAsReader(final String resource) throws 
IOException {

Reply via email to