mirror of
https://github.com/php/php-src.git
synced 2024-11-24 10:24:11 +08:00
fix crash with display_startup_errors=1
This commit is contained in:
parent
0116466974
commit
bfccc4ed58
@ -85,6 +85,18 @@ static inline void php_output_init_globals(zend_output_globals *G)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ stderr writer if not PHP_OUTPUT_ACTIVATED */
|
||||
static int php_output_stderr(const char *str, size_t str_len)
|
||||
{
|
||||
fwrite(str, 1, str_len, stderr);
|
||||
/* See http://support.microsoft.com/kb/190351 */
|
||||
#ifdef PHP_WIN32
|
||||
fflush(stderr);
|
||||
#endif
|
||||
return str_len;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ void php_output_startup(void)
|
||||
* Set up module globals and initalize the conflict and reverse conflict hash tables */
|
||||
PHPAPI void php_output_startup(void)
|
||||
@ -117,6 +129,7 @@ PHPAPI int php_output_activate(TSRMLS_D)
|
||||
#endif
|
||||
|
||||
zend_stack_init(&OG(handlers));
|
||||
OG(flags) |= PHP_OUTPUT_ACTIVATED;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
@ -139,6 +152,8 @@ PHPAPI void php_output_deactivate(TSRMLS_D)
|
||||
}
|
||||
zend_stack_destroy(&OG(handlers));
|
||||
}
|
||||
|
||||
OG(flags) ^= PHP_OUTPUT_ACTIVATED;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
@ -174,9 +189,11 @@ PHPAPI void php_output_set_status(int status TSRMLS_DC)
|
||||
* Get output control status */
|
||||
PHPAPI int php_output_get_status(TSRMLS_D)
|
||||
{
|
||||
return OG(flags)
|
||||
| (OG(active) ? PHP_OUTPUT_ACTIVE : 0)
|
||||
| (OG(running)? PHP_OUTPUT_LOCKED : 0);
|
||||
return (
|
||||
OG(flags)
|
||||
| (OG(active) ? PHP_OUTPUT_ACTIVE : 0)
|
||||
| (OG(running)? PHP_OUTPUT_LOCKED : 0)
|
||||
) & 0xff;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
@ -187,7 +204,10 @@ PHPAPI int php_output_write_unbuffered(const char *str, size_t len TSRMLS_DC)
|
||||
if (OG(flags) & PHP_OUTPUT_DISABLED) {
|
||||
return 0;
|
||||
}
|
||||
return sapi_module.ub_write(str, len TSRMLS_CC);
|
||||
if (OG(flags) & PHP_OUTPUT_ACTIVATED) {
|
||||
return sapi_module.ub_write(str, len TSRMLS_CC);
|
||||
}
|
||||
return php_output_stderr(str, len);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
@ -198,8 +218,11 @@ PHPAPI int php_output_write(const char *str, size_t len TSRMLS_DC)
|
||||
if (OG(flags) & PHP_OUTPUT_DISABLED) {
|
||||
return 0;
|
||||
}
|
||||
php_output_op(PHP_OUTPUT_HANDLER_WRITE, str, len TSRMLS_CC);
|
||||
return (int) len;
|
||||
if (OG(flags) & PHP_OUTPUT_ACTIVATED) {
|
||||
php_output_op(PHP_OUTPUT_HANDLER_WRITE, str, len TSRMLS_CC);
|
||||
return (int) len;
|
||||
}
|
||||
return php_output_stderr(str, len);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
@ -67,6 +67,8 @@ typedef enum _php_output_handler_status_t {
|
||||
/* supplementary flags for php_output_get_status() */
|
||||
#define PHP_OUTPUT_ACTIVE 0x10
|
||||
#define PHP_OUTPUT_LOCKED 0x20
|
||||
/* output layer is ready to use */
|
||||
#define PHP_OUTPUT_ACTIVATED 0x100000
|
||||
|
||||
/* handler hooks */
|
||||
typedef enum _php_output_handler_hook_t {
|
||||
|
Loading…
Reference in New Issue
Block a user