Skip to content

Commit 0d78388

Browse files
committed
enforce supported version bounds
1 parent 554132a commit 0d78388

File tree

4 files changed

+19
-8
lines changed

4 files changed

+19
-8
lines changed
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
\PHPStan\Testing\assertType('int<80100, max>', PHP_VERSION_ID);
4-
\PHPStan\Testing\assertType('int<8, max>', PHP_MAJOR_VERSION);
5-
\PHPStan\Testing\assertType('int<0, max>', PHP_MINOR_VERSION);
3+
\PHPStan\Testing\assertType('int<80100, 80499>', PHP_VERSION_ID);
4+
\PHPStan\Testing\assertType('8', PHP_MAJOR_VERSION);
5+
\PHPStan\Testing\assertType('int<1, 4>', PHP_MINOR_VERSION);
66
\PHPStan\Testing\assertType('int<0, max>', PHP_RELEASE_VERSION);

e2e/composer-min-version/test.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
\PHPStan\Testing\assertType('int<80100, 90000>', PHP_VERSION_ID);
4-
\PHPStan\Testing\assertType('int<8, 9>', PHP_MAJOR_VERSION);
5-
\PHPStan\Testing\assertType('int<0, max>', PHP_MINOR_VERSION);
3+
\PHPStan\Testing\assertType('int<80100, 80499>', PHP_VERSION_ID);
4+
\PHPStan\Testing\assertType('8', PHP_MAJOR_VERSION);
5+
\PHPStan\Testing\assertType('int<1, 4>', PHP_MINOR_VERSION);
66
\PHPStan\Testing\assertType('int<0, max>', PHP_RELEASE_VERSION);

src/Php/ComposerPhpVersionFactory.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
use function is_file;
1616
use function is_int;
1717
use function is_string;
18+
use function max;
19+
use function min;
1820
use function sprintf;
1921

2022
final class ComposerPhpVersionFactory
@@ -58,6 +60,9 @@ private function initVersions(): void
5860
return;
5961
}
6062

63+
$this->minVersion = new PhpVersion(PhpVersionFactory::MIN_PHP_VERSION);
64+
$this->maxVersion = new PhpVersion(PhpVersionFactory::MAX_PHP_VERSION);
65+
6166
// fallback to composer.json based php-version constraint
6267
$composerPhpVersion = $this->getComposerRequireVersion();
6368
if ($composerPhpVersion === null) {
@@ -140,6 +145,9 @@ private function buildVersion(string $minVersion): ?PhpVersion
140145
$patch = $matches[3] ?? 0;
141146
$versionId = (int) sprintf('%d%02d%02d', $major, $minor, $patch);
142147

148+
$versionId = max($versionId, PhpVersionFactory::MIN_PHP_VERSION);
149+
$versionId = min($versionId, PhpVersionFactory::MAX_PHP_VERSION);
150+
143151
return new PhpVersion($versionId);
144152
}
145153

src/Php/PhpVersionFactory.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
final class PhpVersionFactory
1111
{
1212

13+
public const MIN_PHP_VERSION = 70100;
14+
public const MAX_PHP_VERSION = 80499;
15+
1316
public function __construct(
1417
private ?int $versionId,
1518
private ?string $composerPhpVersion,
@@ -25,8 +28,8 @@ public function create(): PhpVersion
2528
} elseif ($this->composerPhpVersion !== null) {
2629
$parts = explode('.', $this->composerPhpVersion);
2730
$tmp = (int) $parts[0] * 10000 + (int) ($parts[1] ?? 0) * 100 + (int) ($parts[2] ?? 0);
28-
$tmp = max($tmp, 70100);
29-
$versionId = min($tmp, 80499);
31+
$tmp = max($tmp, self::MIN_PHP_VERSION);
32+
$versionId = min($tmp, self::MAX_PHP_VERSION);
3033
$source = PhpVersion::SOURCE_COMPOSER_PLATFORM_PHP;
3134
} else {
3235
$versionId = PHP_VERSION_ID;

0 commit comments

Comments
 (0)