From 4c692c151fec4f14b7a01c8ed705de1866f4749c Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Tue, 30 Aug 2022 14:46:34 +0200 Subject: [PATCH 1/2] Fix handling of upper-bound platform req ignores to not act on conflicts, fixes #11020 --- src/Composer/DependencyResolver/RuleSetGenerator.php | 2 +- .../IgnoreListPlatformRequirementFilter.php | 7 +++++-- ...ore-platform-package-requirement-list-upper-bounds.test | 4 +++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Composer/DependencyResolver/RuleSetGenerator.php b/src/Composer/DependencyResolver/RuleSetGenerator.php index afd735e7fb08..d415dd14e51c 100644 --- a/src/Composer/DependencyResolver/RuleSetGenerator.php +++ b/src/Composer/DependencyResolver/RuleSetGenerator.php @@ -223,7 +223,7 @@ protected function addConflictRules(PlatformRequirementFilterInterface $platform if ($platformRequirementFilter->isIgnored($link->getTarget())) { continue; } elseif ($platformRequirementFilter instanceof IgnoreListPlatformRequirementFilter) { - $constraint = $platformRequirementFilter->filterConstraint($link->getTarget(), $constraint); + $constraint = $platformRequirementFilter->filterConstraint($link->getTarget(), $constraint, false); } $conflicts = $this->pool->whatProvides($link->getTarget(), $constraint); diff --git a/src/Composer/Filter/PlatformRequirementFilter/IgnoreListPlatformRequirementFilter.php b/src/Composer/Filter/PlatformRequirementFilter/IgnoreListPlatformRequirementFilter.php index 700795832a98..5d37a1d77e8a 100644 --- a/src/Composer/Filter/PlatformRequirementFilter/IgnoreListPlatformRequirementFilter.php +++ b/src/Composer/Filter/PlatformRequirementFilter/IgnoreListPlatformRequirementFilter.php @@ -60,13 +60,16 @@ public function isIgnored(string $req): bool return Preg::isMatch($this->ignoreRegex, $req); } - public function filterConstraint(string $req, ConstraintInterface $constraint): ConstraintInterface + /** + * @param bool $allowUpperBoundOverride For conflicts we do not want the upper bound to be skipped + */ + public function filterConstraint(string $req, ConstraintInterface $constraint, bool $allowUpperBoundOverride = true): ConstraintInterface { if (!PlatformRepository::isPlatformPackage($req)) { return $constraint; } - if (!Preg::isMatch($this->ignoreUpperBoundRegex, $req)) { + if (!Preg::isMatch($this->ignoreUpperBoundRegex, $req) || !$allowUpperBoundOverride) { return $constraint; } diff --git a/tests/Composer/Test/Fixtures/installer/update-ignore-platform-package-requirement-list-upper-bounds.test b/tests/Composer/Test/Fixtures/installer/update-ignore-platform-package-requirement-list-upper-bounds.test index 0c7e776de3d3..62d8fbb4be6c 100644 --- a/tests/Composer/Test/Fixtures/installer/update-ignore-platform-package-requirement-list-upper-bounds.test +++ b/tests/Composer/Test/Fixtures/installer/update-ignore-platform-package-requirement-list-upper-bounds.test @@ -7,13 +7,15 @@ Update with ignore-platform-req list ignoring upper bound of a dependency "type": "package", "package": [ { "name": "a/a", "version": "1.0.1", "require": { "ext-foo-bar": "3.*" } }, - { "name": "b/b", "version": "1.0.1", "require": { "ext-foo-bar": "10.*" } } + { "name": "b/b", "version": "1.0.1", "require": { "ext-foo-bar": "10.*" } }, + { "name": "c/c", "version": "1.0.1", "conflict": { "ext-foo-bar": "4.0.0 - 4.0.2", "php": "3.0.*" } } ] } ], "require": { "a/a": "1.0.*", "b/b": "1.0.*", + "c/c": "1.0.*", "php": "^4.3", "ext-foo-baz": "9.0.0" }, From 0374e00561c56a2062f29adc33ff9fd0c9c8444d Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Tue, 30 Aug 2022 15:07:31 +0200 Subject: [PATCH 2/2] Optimization --- .../IgnoreListPlatformRequirementFilter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Composer/Filter/PlatformRequirementFilter/IgnoreListPlatformRequirementFilter.php b/src/Composer/Filter/PlatformRequirementFilter/IgnoreListPlatformRequirementFilter.php index 5d37a1d77e8a..43cc33469bb5 100644 --- a/src/Composer/Filter/PlatformRequirementFilter/IgnoreListPlatformRequirementFilter.php +++ b/src/Composer/Filter/PlatformRequirementFilter/IgnoreListPlatformRequirementFilter.php @@ -69,7 +69,7 @@ public function filterConstraint(string $req, ConstraintInterface $constraint, b return $constraint; } - if (!Preg::isMatch($this->ignoreUpperBoundRegex, $req) || !$allowUpperBoundOverride) { + if (!$allowUpperBoundOverride || !Preg::isMatch($this->ignoreUpperBoundRegex, $req)) { return $constraint; }