From 980dce07bdccf43b945424739a55b66a0e5668cc Mon Sep 17 00:00:00 2001 From: sideshowcecil Date: Thu, 29 Oct 2026 15:26:33 +0100 Subject: [PATCH 1/3] (fix) cleanup ssh client connections on copy fails Ensure that client connections during SCP operations are cleaned up correctly. Thus preventing a possible memory leak when connections are not closed --- .../sshjplugin/SSHJFileCopierPlugin.java | 43 ++++++++++--------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/plugin/sshjplugin/SSHJFileCopierPlugin.java b/src/main/java/com/plugin/sshjplugin/SSHJFileCopierPlugin.java index a1b1324..5036fec 100644 --- a/src/main/java/com/plugin/sshjplugin/SSHJFileCopierPlugin.java +++ b/src/main/java/com/plugin/sshjplugin/SSHJFileCopierPlugin.java @@ -183,10 +183,10 @@ private String copyFile( StepFailureReason.ConfigurationFailure, e); } - final SSHClient client = createSshClient(); - scp.connect(client); - + SSHClient client = null; try { + client = createSshClient(); + scp.connect(client); scp.execute(client); } catch (Exception e) { throw new FileCopierException("Configuration error: " + e.getMessage(), @@ -200,13 +200,14 @@ private String copyFile( ); } } - } - - try { - client.disconnect(); - client.close(); - } catch (IOException iex) { - throw new SSHJBuilder.BuilderException(iex); + if (null != client) { + try { + client.disconnect(); + client.close(); + } catch (IOException iex) { + throw new SSHJBuilder.BuilderException(iex); + } + } } return remotefile; @@ -237,21 +238,23 @@ private String[] copyMultipleFiles( StepFailureReason.ConfigurationFailure, e); } - final SSHClient client = createSshClient(); - scp.connect(client); - + SSHClient client = null; try { + createSshClient(); + scp.connect(client); scp.execute(client); } catch (Exception e) { throw new FileCopierException("Configuration error: " + e.getMessage(), StepFailureReason.ConfigurationFailure, e); - } - - try { - client.disconnect(); - client.close(); - } catch (IOException iex) { - throw new SSHJBuilder.BuilderException(iex); + } finally { + if (null != client) { + try { + client.disconnect(); + client.close(); + } catch (IOException iex) { + throw new SSHJBuilder.BuilderException(iex); + } + } } ArrayList ret = new ArrayList<>(); From 885cdbec00681e3ec829d6c5f1d276f865dead5b Mon Sep 17 00:00:00 2001 From: sideshowcecil Date: Thu, 29 Oct 2026 15:37:12 +0100 Subject: [PATCH 2/3] (fix) variable not assigned for file copy operation --- src/main/java/com/plugin/sshjplugin/SSHJFileCopierPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/plugin/sshjplugin/SSHJFileCopierPlugin.java b/src/main/java/com/plugin/sshjplugin/SSHJFileCopierPlugin.java index 5036fec..2aa715f 100644 --- a/src/main/java/com/plugin/sshjplugin/SSHJFileCopierPlugin.java +++ b/src/main/java/com/plugin/sshjplugin/SSHJFileCopierPlugin.java @@ -240,7 +240,7 @@ private String[] copyMultipleFiles( SSHClient client = null; try { - createSshClient(); + client = createSshClient(); scp.connect(client); scp.execute(client); } catch (Exception e) { From e4f765a0420acb97178f55b8527ee3b3d522d4d7 Mon Sep 17 00:00:00 2001 From: sideshowcecil Date: Thu, 29 Oct 2026 15:48:59 +0100 Subject: [PATCH 3/3] (fix) log scp cleanup errors insted of throwing exceptions --- .../java/com/plugin/sshjplugin/SSHJFileCopierPlugin.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/plugin/sshjplugin/SSHJFileCopierPlugin.java b/src/main/java/com/plugin/sshjplugin/SSHJFileCopierPlugin.java index 2aa715f..ffeada8 100644 --- a/src/main/java/com/plugin/sshjplugin/SSHJFileCopierPlugin.java +++ b/src/main/java/com/plugin/sshjplugin/SSHJFileCopierPlugin.java @@ -205,7 +205,9 @@ private String copyFile( client.disconnect(); client.close(); } catch (IOException iex) { - throw new SSHJBuilder.BuilderException(iex); + // Log cleanup errors instead of throwing to avoid masking original exception + logger.log(Constants.WARN_LEVEL, "[sshj-scp] Error closing SSH connection: " + + iex.getMessage()); } } } @@ -252,7 +254,9 @@ private String[] copyMultipleFiles( client.disconnect(); client.close(); } catch (IOException iex) { - throw new SSHJBuilder.BuilderException(iex); + // Log cleanup errors instead of throwing to avoid masking original exception + logger.log(Constants.WARN_LEVEL, "[sshj-scp] Error closing SSH connection: " + + iex.getMessage()); } } }