Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 62b1a3e

Browse files
committed
Add corrupted images validation
1 parent caae21c commit 62b1a3e

File tree

4 files changed

+133
-1
lines changed

4 files changed

+133
-1
lines changed

src/Symfony/Component/Validator/Constraints/Image.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class Image extends File
3030
const SQUARE_NOT_ALLOWED_ERROR = '5d41425b-facb-47f7-a55a-de9fbe45cb46';
3131
const LANDSCAPE_NOT_ALLOWED_ERROR = '6f895685-7cf2-4d65-b3da-9029c5581d88';
3232
const PORTRAIT_NOT_ALLOWED_ERROR = '65608156-77da-4c79-a88c-02ef6d18c782';
33+
const CORRUPTED_IMAGE_ERROR = '5d4163f3-648f-4e39-87fd-cc5ea7aad2d1';
3334

3435
// Include the mapping from the base class
3536

@@ -49,6 +50,7 @@ class Image extends File
4950
self::SQUARE_NOT_ALLOWED_ERROR => 'SQUARE_NOT_ALLOWED_ERROR',
5051
self::LANDSCAPE_NOT_ALLOWED_ERROR => 'LANDSCAPE_NOT_ALLOWED_ERROR',
5152
self::PORTRAIT_NOT_ALLOWED_ERROR => 'PORTRAIT_NOT_ALLOWED_ERROR',
53+
self::CORRUPTED_IMAGE_ERROR => 'CORRUPTED_IMAGE_ERROR',
5254
);
5355

5456
public $mimeTypes = 'image/*';
@@ -61,6 +63,7 @@ class Image extends File
6163
public $allowSquare = true;
6264
public $allowLandscape = true;
6365
public $allowPortrait = true;
66+
public $detectCorrupted = false;
6467

6568
// The constant for a wrong MIME type is taken from the parent class.
6669
public $mimeTypesMessage = 'This file is not a valid image.';
@@ -74,4 +77,5 @@ class Image extends File
7477
public $allowSquareMessage = 'The image is square ({{ width }}x{{ height }}px). Square images are not allowed.';
7578
public $allowLandscapeMessage = 'The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.';
7679
public $allowPortraitMessage = 'The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.';
80+
public $corruptedMessage = 'The image file is corrupted.';
7781
}

src/Symfony/Component/Validator/Constraints/ImageValidator.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
use Symfony\Component\Validator\Constraint;
1515
use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
16+
use Symfony\Component\Validator\Exception\RuntimeException;
1617
use Symfony\Component\Validator\Exception\UnexpectedTypeException;
1718

1819
/**
@@ -178,5 +179,23 @@ public function validate($value, Constraint $constraint)
178179
->setCode(Image::PORTRAIT_NOT_ALLOWED_ERROR)
179180
->addViolation();
180181
}
182+
183+
if ($constraint->detectCorrupted) {
184+
if (!function_exists('imagecreatefromstring')) {
185+
throw new RuntimeException('Strict image validation requires installed and enabled GD extension');
186+
}
187+
188+
$resource = @imagecreatefromstring(file_get_contents($value));
189+
190+
if (false === $resource) {
191+
$this->context->buildViolation($constraint->corruptedMessage)
192+
->setCode(Image::CORRUPTED_IMAGE_ERROR)
193+
->addViolation();
194+
195+
return;
196+
}
197+
198+
imagedestroy($resource);
199+
}
181200
}
182201
}

0 commit comments

Comments
 (0)