diff --git a/src/Intervention/Image/Gd/Decoder.php b/src/Intervention/Image/Gd/Decoder.php index 13fb8f3b..5525b4dd 100644 --- a/src/Intervention/Image/Gd/Decoder.php +++ b/src/Intervention/Image/Gd/Decoder.php @@ -25,18 +25,15 @@ class Decoder extends \Intervention\Image\AbstractDecoder // define core switch ($info[2]) { case IMAGETYPE_PNG: - $core = imagecreatefrompng($path); - $this->gdResourceToTruecolor($core); + $core = @imagecreatefrompng($path); break; case IMAGETYPE_JPEG: - $core = imagecreatefromjpeg($path); - $this->gdResourceToTruecolor($core); + $core = @imagecreatefromjpeg($path); break; case IMAGETYPE_GIF: - $core = imagecreatefromgif($path); - $this->gdResourceToTruecolor($core); + $core = @imagecreatefromgif($path); break; default: @@ -45,6 +42,14 @@ class Decoder extends \Intervention\Image\AbstractDecoder ); } + if ($core === false) { + throw new \Intervention\Image\Exception\NotReadableException( + "Unable to read image from file ({$path})." + ); + } + + $this->gdResourceToTruecolor($core); + // build image $image = $this->initFromGdResource($core); $image->mime = $info['mime']; diff --git a/tests/GdSystemTest.php b/tests/GdSystemTest.php index 5fdcd339..318a6446 100644 --- a/tests/GdSystemTest.php +++ b/tests/GdSystemTest.php @@ -20,6 +20,14 @@ class GdSystemTest extends PHPUnit_Framework_TestCase $this->assertEquals('image/png', $img->mime); } + /** + * @expectedException \Intervention\Image\Exception\NotReadableException + */ + public function testMakeFromPathBroken() + { + $this->manager()->make('tests/images/broken.png'); + } + public function testMakeFromString() { $str = file_get_contents('tests/images/circle.png'); diff --git a/tests/images/broken.png b/tests/images/broken.png new file mode 100644 index 00000000..eaecd5c6 Binary files /dev/null and b/tests/images/broken.png differ