]> granicus.if.org Git - php/commitdiff
HTTP 500 is sent to browser in case of PHP error instead of blank page
authorDmitry Stogov <dmitry@php.net>
Fri, 15 Jun 2007 09:20:27 +0000 (09:20 +0000)
committerDmitry Stogov <dmitry@php.net>
Fri, 15 Jun 2007 09:20:27 +0000 (09:20 +0000)
NEWS
main/main.c

diff --git a/NEWS b/NEWS
index ef88ccec8e640edfd75c0eafaf0a81864474c705..f9bb8671bda8eae1f0e7d9d74f4ba63746f745b1 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,8 @@
 PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? 2007, PHP 5.2.4
+- HTTP 500 is sent to browser in case of PHP error instead of blank page.
+  (Dmitry, Andrei Nigmatulin)
 - Improved fix for MOPB-03-2007. (Ilia)
 - Corrected fix for CVE-2007-2872. (Ilia)
 - Enabled statement cache for non-persistent OCI8 connections. 
index 472ea8d5b0c515008976cd2a8b1a2178fb991fc3..290dabea6e24c5864ac86af37a560971f557839a 100644 (file)
@@ -834,17 +834,28 @@ static void php_error_cb(int type, const char *error_filename, const uint error_
                /* no break - intentionally */
                case E_ERROR:
                case E_RECOVERABLE_ERROR:
-               /* case E_PARSE: the parser would return 1 (failure), we can bail out nicely */
+               case E_PARSE:
                case E_COMPILE_ERROR:
                case E_USER_ERROR:
                        EG(exit_status) = 255;
                        if (module_initialized) {
-                               /* restore memory limit */
-                               zend_set_memory_limit(PG(memory_limit));
-                               efree(buffer);
-                               zend_objects_store_mark_destructed(&EG(objects_store) TSRMLS_CC);
-                               zend_bailout();
-                               return;
+                               if (!SG(headers_sent) &&
+                                   SG(sapi_headers).http_response_code == 200) {
+                                       sapi_header_line ctr = {0};
+       
+                                       ctr.line = "HTTP/1.0 500 Internal Server Error";
+                                       ctr.line_len = strlen(ctr.line);
+                                       sapi_header_op(SAPI_HEADER_REPLACE, &ctr TSRMLS_CC);
+                               }
+                               /* the parser would return 1 (failure), we can bail out nicely */
+                               if (type != E_PARSE) {
+                                       /* restore memory limit */
+                                       zend_set_memory_limit(PG(memory_limit));
+                                       efree(buffer);
+                                       zend_objects_store_mark_destructed(&EG(objects_store) TSRMLS_CC);
+                                       zend_bailout();
+                                       return;
+                               }
                        }
                        break;
        }