diff --git a/src/Composer/Package/Version/VersionParser.php b/src/Composer/Package/Version/VersionParser.php index a6a53fcfb..cbae7939d 100644 --- a/src/Composer/Package/Version/VersionParser.php +++ b/src/Composer/Package/Version/VersionParser.php @@ -317,33 +317,21 @@ class VersionParser // match wildcard constraints if (preg_match('{^(\d+)(?:\.(\d+))?(?:\.(\d+))?\.[x*]$}', $constraint, $matches)) { - if (isset($matches[3])) { - $highVersion = $matches[1] . '.' . $matches[2] . '.' . $matches[3] . '.9999999'; - if ($matches[3] === '0') { - $lowVersion = $matches[1] . '.' . ($matches[2] - 1) . '.9999999.9999999'; - } else { - $lowVersion = $matches[1] . '.' . $matches[2] . '.' . ($matches[3] - 1). '.9999999'; - } - } elseif (isset($matches[2])) { - $highVersion = $matches[1] . '.' . $matches[2] . '.9999999.9999999'; - if ($matches[2] === '0') { - $lowVersion = ($matches[1] - 1) . '.9999999.9999999.9999999'; - } else { - $lowVersion = $matches[1] . '.' . ($matches[2] - 1) . '.9999999.9999999'; - } + if (isset($matches[3]) && '' !== $matches[3]) $position = 3; + else if (isset($matches[2]) && '' !== $matches[2]) $position = 2; + else $position = 1; + + $highVersion = $this->manipulateVersionString($matches,$position,0,'9999999'); + $lowVersion = $this->manipulateVersionString($matches,$position,-1,'9999999'); + + if($lowVersion === null) { + return array(new VersionConstraint('<', $highVersion)); } else { - $highVersion = $matches[1] . '.9999999.9999999.9999999'; - if ($matches[1] === '0') { - return array(new VersionConstraint('<', $highVersion)); - } else { - $lowVersion = ($matches[1] - 1) . '.9999999.9999999.9999999'; - } + return array( + new VersionConstraint('>', $lowVersion), + new VersionConstraint('<', $highVersion), + ); } - - return array( - new VersionConstraint('>', $lowVersion), - new VersionConstraint('<', $highVersion), - ); } // match operators constraints @@ -392,6 +380,9 @@ class VersionParser if($matches[$i] < 0) { $matches[$i] = $pad; $position--; + + // Return null on a carry overflow + if($i == 1) return null; } } }