From 43273c43667ddde999da7d72b469cd244e302181 Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Tue, 31 May 2016 19:19:14 +0100 Subject: [PATCH] Fix plugin bootstrapping to ignore SSL Exceptions, fixes #5388 --- src/Composer/Console/Application.php | 16 +++++++++++----- src/Composer/Exception/NoSslException.php | 20 ++++++++++++++++++++ src/Composer/Factory.php | 2 +- 3 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 src/Composer/Exception/NoSslException.php diff --git a/src/Composer/Console/Application.php b/src/Composer/Console/Application.php index f3743c2f6..051e087a6 100644 --- a/src/Composer/Console/Application.php +++ b/src/Composer/Console/Application.php @@ -27,6 +27,7 @@ use Composer\IO\IOInterface; use Composer\IO\ConsoleIO; use Composer\Json\JsonValidationException; use Composer\Util\ErrorHandler; +use Composer\Exception\NoSslException; /** * The console application that handles the commands @@ -126,13 +127,18 @@ class Application extends BaseApplication } if (!$input->hasParameterOption('--no-plugins') && !$this->hasPluginCommands && 'global' !== $commandName) { - foreach ($this->getPluginCommands() as $command) { - if ($this->has($command->getName())) { - $io->writeError('Plugin command '.$command->getName().' ('.get_class($command).') would override a Composer command and has been skipped'); - } else { - $this->add($command); + try { + foreach ($this->getPluginCommands() as $command) { + if ($this->has($command->getName())) { + $io->writeError('Plugin command '.$command->getName().' ('.get_class($command).') would override a Composer command and has been skipped'); + } else { + $this->add($command); + } } + } catch (NoSslException $e) { + // suppress these as they are not relevant at this point } + $this->hasPluginCommands = true; } diff --git a/src/Composer/Exception/NoSslException.php b/src/Composer/Exception/NoSslException.php new file mode 100644 index 000000000..017cac382 --- /dev/null +++ b/src/Composer/Exception/NoSslException.php @@ -0,0 +1,20 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Exception; + +/** + * @author Jordi Boggiano + */ +class NoSslException extends \RuntimeException +{ +} diff --git a/src/Composer/Factory.php b/src/Composer/Factory.php index 1e594900c..8d847840c 100644 --- a/src/Composer/Factory.php +++ b/src/Composer/Factory.php @@ -569,7 +569,7 @@ class Factory $warned = true; $disableTls = true; } elseif (!extension_loaded('openssl')) { - throw new \RuntimeException('The openssl extension is required for SSL/TLS protection but is not available. ' + throw new Exception\NoSslException('The openssl extension is required for SSL/TLS protection but is not available. ' . 'If you can not enable the openssl extension, you can disable this error, at your own risk, by setting the \'disable-tls\' option to true.'); } $remoteFilesystemOptions = array();