|
|
|
@ -1512,7 +1512,6 @@ 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; |
|
|
|
|
|
|
|
@ -1520,37 +1519,40 @@ ZEND_FUNCTION(set_error_handler) |
|
|
|
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"); |
|
|
|
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; |
|
|
|
} |
|
|
|
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)); |
|
|
|
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)); |
|
|
|
} |
|
|
|
|
|
|
|
if (!zend_is_true(error_handler)) { /* unset user-defined handler */ |
|
|
|
FREE_ZVAL(EG(user_error_handler)); |
|
|
|
EG(user_error_handler) = NULL; |
|
|
|
RETURN_TRUE; |
|
|
|
} |
|
|
|
ALLOC_ZVAL(EG(user_error_handler)); |
|
|
|
EG(user_error_handler_error_reporting) = (int)error_type; |
|
|
|
MAKE_COPY_ZVAL(&error_handler, EG(user_error_handler)); |
|
|
|
|
|
|
|
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(); |
|
|
|
} |
|
|
|
} 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 (!had_orig_error_handler) { |
|
|
|
RETURN_NULL(); |
|
|
|
EG(user_error_handler) = NULL; |
|
|
|
RETURN_TRUE; |
|
|
|
} |
|
|
|
} |
|
|
|
/* }}} */ |
|
|
|
|