php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #45799 imagepng() crashes on empty image
Submitted: 2008-08-12 13:29 UTC Modified: 2009-03-14 16:34 UTC
From: amelek32 at gmail dot com Assigned: pajoye (profile)
Status: Closed Package: GD related
PHP Version: 5.2.8, 5.3CVS, 6CVS (2008-12-09) OS: *
Private report: No CVE-ID: None
 [2008-08-12 13:29 UTC] amelek32 at gmail dot com
Description:
------------
imagepng *crashes* when no color was alocated.

I see no point in rendering blank images, but this functions behavior is buggy. 

All other functions (imagejpeg, imagegif) AND imagepng on true scale images return black image. This is most likely expected result.

Instead, this function flushes some part of header and then crashes with warnings when trying to convert non existing color palette.

GD Version  bundled (2.0.34 compatible)  

Reproduce code:
---------------
<?
$img = imagecreate(500,500);
//header("Content-type: image/png"); // skip this to see the problem, else browser will ignore corrupted image.
imagepng($img);
imagedestroy($img);
?>

Expected result:
----------------
blank black image (like other image* functions) or E_WARNING without junk.

Actual result:
--------------
?PNG  IHDR???M?
Warning: imagepng() [function.imagepng]: gd-png: fatal libpng error: Invalid number of colors in palette in C:\usr\apache\httpd\html\draw.php on line 21

Warning: imagepng() [function.imagepng]: gd-png error: setjmp returns error condition in C:\usr\apache\httpd\html\draw.php on line 21

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2008-08-12 13:37 UTC] [email protected]
That's libpng behaviors. A PNG palette image must have colors to be saved.

By the way, warnings are not crashes.
 [2008-08-12 13:45 UTC] amelek32 at gmail dot com
shouldn't it return warning without putting part of header to output?
 [2008-08-12 14:25 UTC] [email protected]
> shouldn't it return warning without putting part of header to output?

Hm, good point. I may add a check before calling the png function and avoid to much troubles later. I will do it for 5.3+
 [2008-11-30 22:52 UTC] [email protected]
Well, after a 2nd look, the warning will remain anyway. Whether it is raised by libgd or php does not change anything > won't fix
 [2008-12-01 11:00 UTC] amelek32 at gmail dot com
then

<?
$img = imagecreate(500,500);
@imagepng($img);
imagedestroy($img);
?>

should return empty page..

However, it do not ;)
 [2008-12-01 11:02 UTC] [email protected]
My bad, you are right!
 [2009-03-10 11:25 UTC] mmcnicklebugs at googlemail dot com
[PATCH]

A to see if there are any colors associated with the image before outputting the image header.

http://whompbox.com/patches/php/libgd.patch
 [2009-03-14 16:34 UTC] [email protected]
This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.

Thanks for your patch, from which I made a fix in 5.3 and 6CVS.
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Wed Jun 11 10:01:26 2025 UTC