From 34c12b7e615cd8810f1844092ccc961fb1917bd3 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Tue, 4 Jun 2024 07:46:00 +0200 Subject: [PATCH] do not modify a constraint during validation to not leak its context --- .../Validator/Constraints/CidrValidator.php | 8 +++++--- .../Tests/Constraints/CidrValidatorTest.php | 13 +++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Validator/Constraints/CidrValidator.php b/src/Symfony/Component/Validator/Constraints/CidrValidator.php index 4fc78a78286b0..1c6f4c0bc7597 100644 --- a/src/Symfony/Component/Validator/Constraints/CidrValidator.php +++ b/src/Symfony/Component/Validator/Constraints/CidrValidator.php @@ -71,11 +71,13 @@ public function validate($value, Constraint $constraint): void return; } - if (filter_var($ipAddress, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV4) && $constraint->netmaskMax > 32) { - $constraint->netmaskMax = 32; + $netmaskMax = $constraint->netmaskMax; + + if (filter_var($ipAddress, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV4) && $netmaskMax > 32) { + $netmaskMax = 32; } - if ($netmask < $constraint->netmaskMin || $netmask > $constraint->netmaskMax) { + if ($netmask < $constraint->netmaskMin || $netmask > $netmaskMax) { $this->context ->buildViolation($constraint->netmaskRangeViolationMessage) ->setParameter('{{ min }}', $constraint->netmaskMin) diff --git a/src/Symfony/Component/Validator/Tests/Constraints/CidrValidatorTest.php b/src/Symfony/Component/Validator/Tests/Constraints/CidrValidatorTest.php index 9274d81dad0cc..5ac5310941eb7 100644 --- a/src/Symfony/Component/Validator/Tests/Constraints/CidrValidatorTest.php +++ b/src/Symfony/Component/Validator/Tests/Constraints/CidrValidatorTest.php @@ -255,4 +255,17 @@ public static function getWithWrongVersion(): array ['2001:0db8:85a3:0000:0000:8a2e:0370:7334/13', Ip::V4], ]; } + + public function testDoesNotModifyContextBetweenValidations() + { + $constraint = new Cidr(); + + $this->validator->validate('1.2.3.4/28', $constraint); + + $this->assertNoViolation(); + + $this->validator->validate('::1/64', $constraint); + + $this->assertNoViolation(); + } } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy