Skip to content

Commit

Permalink
Merge pull request #10129 from Nitamet/10084-incorrect-version-checking
Browse files Browse the repository at this point in the history
  • Loading branch information
weirdan authored Aug 18, 2023
2 parents bf8e150 + 005eed3 commit 0922fa1
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 3 deletions.
16 changes: 14 additions & 2 deletions src/Psalm/Internal/Analyzer/ProjectAnalyzer.php
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,10 @@ class ProjectAnalyzer
UnnecessaryVarAnnotation::class,
];

private const PHP_VERSION_REGEX = '^(0|[1-9]\d*)\.(0|[1-9]\d*)(?:\..*)?$';

private const PHP_SUPPORTED_VERSIONS_REGEX = '^(5\.[456]|7\.[01234]|8\.[0123])(\..*)?$';

/**
* @param array<ReportOptions> $generated_report_options
*/
Expand Down Expand Up @@ -1179,8 +1183,16 @@ public function refactorCodeAfterCompletion(array $to_refactor): void
*/
public function setPhpVersion(string $version, string $source): void
{
if (!preg_match('/^(5\.[456]|7\.[01234]|8\.[012])(\..*)?$/', $version)) {
throw new UnexpectedValueException('Expecting a version number in the format x.y');
if (!preg_match('/' . self::PHP_VERSION_REGEX . '/', $version)) {
throw new UnexpectedValueException('Expecting a version number in the format x.y or x.y.z');
}

if (!preg_match('/' . self::PHP_SUPPORTED_VERSIONS_REGEX . '/', $version)) {
throw new UnexpectedValueException(
'Psalm supports PHP version ">=5.4". The specified version '
. $version
. " is either not supported or doesn't exist.",
);
}

[$php_major_version, $php_minor_version] = explode('.', $version);
Expand Down
11 changes: 10 additions & 1 deletion src/Psalm/Internal/CliUtils.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
use Psalm\Internal\Analyzer\ProjectAnalyzer;
use Psalm\Report;
use RuntimeException;
use UnexpectedValueException;

use function array_filter;
use function array_key_exists;
Expand Down Expand Up @@ -485,7 +486,15 @@ public static function initPhpVersion(array $options, Config $config, ProjectAna
}

if ($version !== null && $source !== null) {
$project_analyzer->setPhpVersion($version, $source);
try {
$project_analyzer->setPhpVersion($version, $source);
} catch (UnexpectedValueException $e) {
fwrite(
STDERR,
$e->getMessage() . PHP_EOL,
);
exit(2);
}
}
}

Expand Down

0 comments on commit 0922fa1

Please sign in to comment.