diff --git a/src/Symfony/Component/Validator/Constraints/ImageValidator.php b/src/Symfony/Component/Validator/Constraints/ImageValidator.php index aa087bdc6f4e3..f199f1d177d30 100644 --- a/src/Symfony/Component/Validator/Constraints/ImageValidator.php +++ b/src/Symfony/Component/Validator/Constraints/ImageValidator.php @@ -169,10 +169,10 @@ public function validate($value, Constraint $constraint) throw new ConstraintDefinitionException(sprintf('"%s" is not a valid minimum ratio.', $constraint->minRatio)); } - if ($ratio < $constraint->minRatio) { + if ($ratio < round($constraint->minRatio, 2)) { $this->context->buildViolation($constraint->minRatioMessage) ->setParameter('{{ ratio }}', $ratio) - ->setParameter('{{ min_ratio }}', $constraint->minRatio) + ->setParameter('{{ min_ratio }}', round($constraint->minRatio, 2)) ->setCode(Image::RATIO_TOO_SMALL_ERROR) ->addViolation(); } @@ -183,10 +183,10 @@ public function validate($value, Constraint $constraint) throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum ratio.', $constraint->maxRatio)); } - if ($ratio > $constraint->maxRatio) { + if ($ratio > round($constraint->maxRatio, 2)) { $this->context->buildViolation($constraint->maxRatioMessage) ->setParameter('{{ ratio }}', $ratio) - ->setParameter('{{ max_ratio }}', $constraint->maxRatio) + ->setParameter('{{ max_ratio }}', round($constraint->maxRatio, 2)) ->setCode(Image::RATIO_TOO_BIG_ERROR) ->addViolation(); } diff --git a/src/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_16by9.gif b/src/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_16by9.gif new file mode 100644 index 0000000000000..dab14ec1a0224 Binary files /dev/null and b/src/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_16by9.gif differ diff --git a/src/Symfony/Component/Validator/Tests/Constraints/ImageValidatorTest.php b/src/Symfony/Component/Validator/Tests/Constraints/ImageValidatorTest.php index 5ae1e035225c9..81ba1224bbfe5 100644 --- a/src/Symfony/Component/Validator/Tests/Constraints/ImageValidatorTest.php +++ b/src/Symfony/Component/Validator/Tests/Constraints/ImageValidatorTest.php @@ -48,6 +48,7 @@ protected function setUp(): void $this->imageLandscape = __DIR__.'/Fixtures/test_landscape.gif'; $this->imagePortrait = __DIR__.'/Fixtures/test_portrait.gif'; $this->image4By3 = __DIR__.'/Fixtures/test_4by3.gif'; + $this->image16By9 = __DIR__.'/Fixtures/test_16by9.gif'; $this->imageCorrupted = __DIR__.'/Fixtures/test_corrupted.gif'; } @@ -304,6 +305,28 @@ public function testMaxRatioUsesTwoDecimalsOnly() $this->assertNoViolation(); } + public function testMinRatioUsesInputMoreDecimals() + { + $constraint = new Image([ + 'minRatio' => 4 / 3, + ]); + + $this->validator->validate($this->image4By3, $constraint); + + $this->assertNoViolation(); + } + + public function testMaxRatioUsesInputMoreDecimals() + { + $constraint = new Image([ + 'maxRatio' => 16 / 9, + ]); + + $this->validator->validate($this->image16By9, $constraint); + + $this->assertNoViolation(); + } + public function testInvalidMinRatio() { $this->expectException(ConstraintDefinitionException::class);