Bug #70315 [Com]: imagecreatefromstring() returns 500 Server Error but page full renderized

From: Date: Sun, 03 Jul 2016 22:27:01 +0000
Subject: Bug #70315 [Com]: imagecreatefromstring() returns 500 Server Error but page full renderized
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-202031@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=70315&edit=1

 ID:                 70315
 Comment by:         razzari at gmail dot com
 Reported by:        patriciotarantino at gmail dot com
 Summary:            imagecreatefromstring() returns 500 Server Error but
                     page full renderized
 Status:             Feedback
 Type:               Bug
 Package:            GD related
 Operating System:   Ubuntu
 PHP Version:        5.6.12
 Assigned To:        cmb
 Block user comment: N
 Private report:     N

 New Comment:

Here's the logs as text (Sorry, I had included them in the screenshot in the prev comment).

PHP Unknown error:  imagecreatefromstring(): gd-png: fatal libpng error: IHDR: CRC error\n in
Unknown on line 0
PHP Parse error:  imagecreatefromstring(): gd-png error: setjmp returns error condition 1\n in
/var/www/test.php on line 6
PHP Warning:  imagecreatefromstring(): Passed data is not in 'PNG' format in
/var/www/test.php on line 6
PHP Warning:  imagecreatefromstring(): Couldn't create GD Image Stream out of Data in
/var/www/test.php on line 6

I can repro this consistently.

Please let me know if I can provide further info/tests. 

This is a barebones install in Ubuntu 12.04, Apache/2.4.2, PHP 5.6.23-2+deb.sury.org~precise+1.
I've just installed this in a Vagrant box for testing. (That is, this isn't a prod server
with weird configs or a dev server wit cruft that's piled up over the years).


Previous Comments:
------------------------------------------------------------------------
[2016-07-03 22:13:59] razzari at gmail dot com

This is still happening on PHP Version 5.6.23.

Screenshot: https://i.imgur.com/p680DMk.png

Note that BOTH the test text AND the 500 status code are displayed. 

As noted by the OP, this only happens if display_errors is off. 

If I enable errors, things work as expected. The error is displayed, and the page returns with a 200
OK status.  Screenshot: https://i.imgur.com/8jyuiot.png

Compare this with standard platform behavior, where an error with display_errors off will produce a
500 error AND a blank page. It is NOT displaying the test text. Screenshot https://i.imgur.com/VCBOmun.png and sample code:

<?php
# This works as expected.
ini_set("display_errors", 0);
trigger_error("Some error.", E_USER_ERROR);
echo "This should not render";
?>

So to recap, expected behavior is:
Display errors OFF: Blank page, 500 status code. 
Display errors ON: Visible error text, some page content that worked, and 200 status code. 

Actual result in this situation is:
Display errors OFF: Some page content that worked, 500 status code.

Why this is a serious issue: site owners and visitors will believe the site is working OK. But
Google will believe it's utterly broken and won't bother crawling it.

------------------------------------------------------------------------
[2016-07-03 05:20:03] pajoye@php.net

Cmb cannot reproduce it.

Also I do not see the 500 header.

Doyou have either logs or backtrace if the 500 is due to something else?

In any case it is definitely not GD as everything goes aa expected from a gd point of view.

------------------------------------------------------------------------
[2016-07-03 04:22:20] php-bugs at lists dot php dot net

No feedback was provided. The bug is being suspended because
we assume that you are no longer experiencing the problem.
If this is not the case and you are able to provide the
information that was requested earlier, please do so and
change the status of the bug back to "Re-Opened". Thank you.

------------------------------------------------------------------------
[2016-06-27 19:22:24] razzari at gmail dot com

@cmb can repro in PHP version 5.5.35. 

@pajoye it's OK if the echo happens. The problem is that the page also includes an HTTP Error
500 header. Which is hugely wrong.

------------------------------------------------------------------------
[2016-06-22 07:19:55] pajoye@php.net

The header itself does not control the code execution.

The imagecreatefromstring returns false on error. That means the echo will happen.

It is the caller job to check the value and act accordingly. In case you expect the echo to never
happen on error, that's not the case using this piece of code.

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=70315


--
Edit this bug report at https://bugs.php.net/bug.php?id=70315&edit=1


Thread (17 messages)

« previous php.bugs (#202031) next »