Browse Source

Fix extension parsing to take the most usable data instead of just using 0 in case of parsing failure, fixes #5331, fixes #5264

Jordi Boggiano 8 years ago
parent
commit
0cca4d1a44
1 changed files with 8 additions and 2 deletions
  1. 8 2
      src/Composer/Repository/PlatformRepository.php

+ 8 - 2
src/Composer/Repository/PlatformRepository.php

@@ -94,19 +94,25 @@ class PlatformRepository extends ArrayRepository
             if (in_array($name, array('standard', 'Core'))) {
                 continue;
             }
+            $extraDescription = null;
 
             $reflExt = new \ReflectionExtension($name);
             try {
                 $prettyVersion = $reflExt->getVersion();
                 $version = $versionParser->normalize($prettyVersion);
             } catch (\UnexpectedValueException $e) {
-                $prettyVersion = '0';
+                $extraDescription = ' (actual version: '.$prettyVersion.')';
+                if (preg_match('{^(\d+\.\d+\.\d+(?:\.\d+)?)}', $prettyVersion, $match)) {
+                    $prettyVersion = $match[1];
+                } else {
+                    $prettyVersion = '0';
+                }
                 $version = $versionParser->normalize($prettyVersion);
             }
 
             $packageName = $this->buildPackageName($name);
             $ext = new CompletePackage($packageName, $version, $prettyVersion);
-            $ext->setDescription('The '.$name.' PHP extension');
+            $ext->setDescription('The '.$name.' PHP extension' . $extraDescription);
             $this->addPackage($ext);
         }