diff --git a/src/Illuminate/Validation/Concerns/ValidatesAttributes.php b/src/Illuminate/Validation/Concerns/ValidatesAttributes.php index 5f621a7bccc4..bc340ddebf72 100644 --- a/src/Illuminate/Validation/Concerns/ValidatesAttributes.php +++ b/src/Illuminate/Validation/Concerns/ValidatesAttributes.php @@ -558,7 +558,7 @@ protected function failsRatioCheck($parameters, $width, $height) [1, 1], array_filter(sscanf($parameters['ratio'], '%f/%d')) ); - $precision = 1 / max($width, $height); + $precision = 1 / (max($width, $height) + 1); return abs($numerator / $denominator - $width / $height) > $precision; } diff --git a/tests/Validation/ValidationValidatorTest.php b/tests/Validation/ValidationValidatorTest.php index c6878b17890e..d9a02a78389e 100755 --- a/tests/Validation/ValidationValidatorTest.php +++ b/tests/Validation/ValidationValidatorTest.php @@ -2798,7 +2798,7 @@ public function testValidateImageDimensions() $v = new Validator($trans, ['x' => $svgXmlUploadedFile], ['x' => 'dimensions:max_width=1,max_height=1']); $this->assertTrue($v->passes()); - $svgXmlFile = new File(__DIR__.'/fixtures/image.svg', '', 'image/svg+xml', null, null, true); + $svgXmlFile = new UploadedFile(__DIR__.'/fixtures/image.svg', '', 'image/svg+xml', null, null, true); $trans = $this->getIlluminateArrayTranslator(); $v = new Validator($trans, ['x' => $svgXmlFile], ['x' => 'dimensions:max_width=1,max_height=1']); @@ -2811,11 +2811,19 @@ public function testValidateImageDimensions() $v = new Validator($trans, ['x' => $svgUploadedFile], ['x' => 'dimensions:max_width=1,max_height=1']); $this->assertTrue($v->passes()); - $svgFile = new File(__DIR__.'/fixtures/image2.svg', '', 'image/svg', null, null, true); + $svgFile = new UploadedFile(__DIR__.'/fixtures/image2.svg', '', 'image/svg', null, null, true); $trans = $this->getIlluminateArrayTranslator(); $v = new Validator($trans, ['x' => $svgFile], ['x' => 'dimensions:max_width=1,max_height=1']); $this->assertTrue($v->passes()); + + // Knowing that demo image4.png has width = 64 and height = 65 + $uploadedFile = new UploadedFile(__DIR__.'/fixtures/image4.png', '', null, null, true); + $trans = $this->getIlluminateArrayTranslator(); + + // Ensure validation doesn't erroneously fail when ratio doesn't matches + $v = new Validator($trans, ['x' => $uploadedFile], ['x' => 'dimensions:ratio=1']); + $this->assertFalse($v->passes()); } /** diff --git a/tests/Validation/fixtures/image4.png b/tests/Validation/fixtures/image4.png new file mode 100644 index 000000000000..e7b5e4665fe6 Binary files /dev/null and b/tests/Validation/fixtures/image4.png differ