From 0818a6ed5467f5cc76f67b71eb33f2c3eb366358 Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Thu, 4 Feb 2016 00:27:20 +0000 Subject: [PATCH] Previous attempt would cause 0.9.8aa == 0.9.8b --- src/Composer/Repository/PlatformRepository.php | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Composer/Repository/PlatformRepository.php b/src/Composer/Repository/PlatformRepository.php index aa1335153..27f52aa65 100644 --- a/src/Composer/Repository/PlatformRepository.php +++ b/src/Composer/Repository/PlatformRepository.php @@ -147,16 +147,22 @@ class PlatformRepository extends ArrayRepository break; case 'openssl': - $prettyVersion = preg_replace_callback('{^(?:OpenSSL\s*)?([0-9.]+)([a-z]+).*}', function ($match) { + $prettyVersion = preg_replace_callback('{^(?:OpenSSL\s*)?([0-9.]+)([a-z]*).*}', function ($match) { if (empty($match[2])) { return $match[1]; } // OpenSSL versions add another letter when they reach Z. // e.g. OpenSSL 0.9.8zh 3 Dec 2015 - $patchVersion = array_sum(array_map(function ($letter) { - return ord($letter) - 96; - }, str_split($match[2]))); + + if (!preg_match('{^z*[a-z]$}', $match[2])) { + // 0.9.8abc is garbage + return 0; + } + + $len = strlen($match[2]); + $patchVersion = ($len - 1) * 26; // All Z + $patchVersion += ord($match[2][$len - 1]) - 96; return $match[1].'.'.$patchVersion; }, OPENSSL_VERSION_TEXT);