mirror of
https://github.com/php/php-src.git
synced 2026-03-27 09:42:22 +01:00
Revert "Implemented FR #60738 (Allow 'set_error_handler' to handle NULL)"
This reverts commit fcae164ea6.
This commit is contained in:
2
NEWS
2
NEWS
@@ -23,8 +23,6 @@ PHP NEWS
|
||||
. Fixed bug #60825 (Segfault when running symfony 2 tests).
|
||||
(Dmitry, Laruence)
|
||||
. Fixed bug #60801 (strpbrk() mishandles NUL byte). (Adam)
|
||||
. Implemented FR #60738 (Allow 'set_error_handler' to handle NULL).
|
||||
(Laruence, Nikita Popov)
|
||||
. Fixed bug #60569 (Nullbyte truncates Exception $message). (Ilia)
|
||||
. Fixed bug #60227 (header() cannot detect the multi-line header with CR).
|
||||
(rui, Gustavo)
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
--TEST--
|
||||
Bug #60738 Allow 'set_error_handler' to handle NULL
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
set_error_handler(function() { echo 'Intercepted error!', "\n"; });
|
||||
|
||||
trigger_error('Error!');
|
||||
|
||||
set_error_handler(null);
|
||||
|
||||
trigger_error('Error!');
|
||||
?>
|
||||
--EXPECTF--
|
||||
Intercepted error!
|
||||
|
||||
Notice: Error! in %s on line %d
|
||||
@@ -1413,6 +1413,7 @@ ZEND_FUNCTION(trigger_error)
|
||||
ZEND_FUNCTION(set_error_handler)
|
||||
{
|
||||
zval *error_handler;
|
||||
zend_bool had_orig_error_handler=0;
|
||||
char *error_handler_name = NULL;
|
||||
long error_type = E_ALL | E_STRICT;
|
||||
|
||||
@@ -1420,41 +1421,38 @@ ZEND_FUNCTION(set_error_handler)
|
||||
return;
|
||||
}
|
||||
|
||||
if (IS_NULL != Z_TYPE_P(error_handler)) {
|
||||
zend_bool had_orig_error_handler = 0;
|
||||
if (!zend_is_callable(error_handler, 0, &error_handler_name TSRMLS_CC)) {
|
||||
zend_error(E_WARNING, "%s() expects the argument (%s) to be a valid callback",
|
||||
get_active_function_name(TSRMLS_C), error_handler_name?error_handler_name:"unknown");
|
||||
efree(error_handler_name);
|
||||
return;
|
||||
}
|
||||
if (!zend_is_callable(error_handler, 0, &error_handler_name TSRMLS_CC)) {
|
||||
zend_error(E_WARNING, "%s() expects the argument (%s) to be a valid callback",
|
||||
get_active_function_name(TSRMLS_C), error_handler_name?error_handler_name:"unknown");
|
||||
efree(error_handler_name);
|
||||
return;
|
||||
}
|
||||
efree(error_handler_name);
|
||||
|
||||
if (EG(user_error_handler)) {
|
||||
had_orig_error_handler = 1;
|
||||
*return_value = *EG(user_error_handler);
|
||||
zval_copy_ctor(return_value);
|
||||
INIT_PZVAL(return_value);
|
||||
zend_stack_push(&EG(user_error_handlers_error_reporting), &EG(user_error_handler_error_reporting), sizeof(EG(user_error_handler_error_reporting)));
|
||||
zend_ptr_stack_push(&EG(user_error_handlers), EG(user_error_handler));
|
||||
}
|
||||
|
||||
ALLOC_ZVAL(EG(user_error_handler));
|
||||
EG(user_error_handler_error_reporting) = (int)error_type;
|
||||
MAKE_COPY_ZVAL(&error_handler, EG(user_error_handler));
|
||||
|
||||
if (!had_orig_error_handler) {
|
||||
RETURN_NULL();
|
||||
}
|
||||
} else { /* unset user-defined handler */
|
||||
if (EG(user_error_handler)) {
|
||||
zend_stack_push(&EG(user_error_handlers_error_reporting), &EG(user_error_handler_error_reporting), sizeof(EG(user_error_handler_error_reporting)));
|
||||
zend_ptr_stack_push(&EG(user_error_handlers), EG(user_error_handler));
|
||||
}
|
||||
if (EG(user_error_handler)) {
|
||||
had_orig_error_handler = 1;
|
||||
*return_value = *EG(user_error_handler);
|
||||
zval_copy_ctor(return_value);
|
||||
INIT_PZVAL(return_value);
|
||||
zend_stack_push(&EG(user_error_handlers_error_reporting), &EG(user_error_handler_error_reporting), sizeof(EG(user_error_handler_error_reporting)));
|
||||
zend_ptr_stack_push(&EG(user_error_handlers), EG(user_error_handler));
|
||||
}
|
||||
ALLOC_ZVAL(EG(user_error_handler));
|
||||
|
||||
if (!zend_is_true(error_handler)) { /* unset user-defined handler */
|
||||
FREE_ZVAL(EG(user_error_handler));
|
||||
EG(user_error_handler) = NULL;
|
||||
RETURN_TRUE;
|
||||
}
|
||||
|
||||
EG(user_error_handler_error_reporting) = (int)error_type;
|
||||
*EG(user_error_handler) = *error_handler;
|
||||
zval_copy_ctor(EG(user_error_handler));
|
||||
INIT_PZVAL(EG(user_error_handler));
|
||||
|
||||
if (!had_orig_error_handler) {
|
||||
RETURN_NULL();
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user