HTTP 500 is sent to browser in case of PHP error instead of blank page

This commit is contained in:
Dmitry Stogov 2007-06-15 09:20:27 +00:00
parent 1fe8fded5f
commit e1f08c8297
2 changed files with 20 additions and 7 deletions

2
NEWS
View File

@ -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.

View 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;
}