From cb58d3e66cfa3a25c808fa6bdbcf561b36bd4f89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Cobucci?= Date: Thu, 21 Apr 2022 11:31:58 +0200 Subject: [PATCH 1/2] Remove dead code This path can never be executed. --- src/PhpseclibV3/SftpConnectionProvider.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/PhpseclibV3/SftpConnectionProvider.php b/src/PhpseclibV3/SftpConnectionProvider.php index 082e6d3fb..82c1b422f 100644 --- a/src/PhpseclibV3/SftpConnectionProvider.php +++ b/src/PhpseclibV3/SftpConnectionProvider.php @@ -9,7 +9,6 @@ use phpseclib3\Exception\NoKeyLoadedException; use phpseclib3\Net\SFTP; use phpseclib3\System\SSH\Agent; -use RuntimeException; use Throwable; use function base64_decode; @@ -229,8 +228,6 @@ private function loadPrivateKey(): AsymmetricKey } catch (NoKeyLoadedException $exception) { throw new UnableToLoadPrivateKey(); } - - throw new RuntimeException(); } private function authenticateWithAgent(SFTP $connection): void From b0b5a52d0728b75b3190cb5e3e4454721cd8c469 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Cobucci?= Date: Thu, 21 Apr 2022 11:34:07 +0200 Subject: [PATCH 2/2] Fix SFTP retry mechanism As of phpseclib v3 `RuntimeException` objects are thrown, causing the whole retry logic to be bypassed. This makes sure to re-attempt to connect when timeout or connection issues happen. --- src/PhpseclibV3/SftpConnectionProvider.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/PhpseclibV3/SftpConnectionProvider.php b/src/PhpseclibV3/SftpConnectionProvider.php index 82c1b422f..995f6a7d1 100644 --- a/src/PhpseclibV3/SftpConnectionProvider.php +++ b/src/PhpseclibV3/SftpConnectionProvider.php @@ -4,6 +4,7 @@ namespace League\Flysystem\PhpseclibV3; +use League\Flysystem\FilesystemException; use phpseclib3\Crypt\Common\AsymmetricKey; use phpseclib3\Crypt\PublicKeyLoader; use phpseclib3\Exception\NoKeyLoadedException; @@ -137,7 +138,10 @@ private function setupConnection(): SFTP $this->authenticate($connection); } catch (Throwable $exception) { $connection->disconnect(); - throw $exception; + + if ($exception instanceof FilesystemException) { + throw $exception; + } } return $connection;