@@ -1413,45 +1413,47 @@ ZEND_FUNCTION(trigger_error)
1413
1413
ZEND_FUNCTION (set_error_handler )
1414
1414
{
1415
1415
zval * error_handler ;
1416
- zend_bool had_orig_error_handler = 0 ;
1417
1416
char * error_handler_name = NULL ;
1418
1417
long error_type = E_ALL | E_STRICT ;
1419
1418
1420
1419
if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "z|l" , & error_handler , & error_type ) == FAILURE ) {
1421
1420
return ;
1422
1421
}
1423
1422
1424
- if (!zend_is_callable (error_handler , 0 , & error_handler_name TSRMLS_CC )) {
1425
- zend_error (E_WARNING , "%s() expects the argument (%s) to be a valid callback" ,
1426
- get_active_function_name (TSRMLS_C ), error_handler_name ?error_handler_name :"unknown" );
1423
+ if (IS_NULL != Z_TYPE_P (error_handler )) {
1424
+ zend_bool had_orig_error_handler = 0 ;
1425
+ if (!zend_is_callable (error_handler , 0 , & error_handler_name TSRMLS_CC )) {
1426
+ zend_error (E_WARNING , "%s() expects the argument (%s) to be a valid callback" ,
1427
+ get_active_function_name (TSRMLS_C ), error_handler_name ?error_handler_name :"unknown" );
1428
+ efree (error_handler_name );
1429
+ return ;
1430
+ }
1427
1431
efree (error_handler_name );
1428
- return ;
1429
- }
1430
- efree (error_handler_name );
1431
1432
1432
- if (EG (user_error_handler )) {
1433
- had_orig_error_handler = 1 ;
1434
- * return_value = * EG (user_error_handler );
1435
- zval_copy_ctor (return_value );
1436
- INIT_PZVAL (return_value );
1437
- zend_stack_push (& EG (user_error_handlers_error_reporting ), & EG (user_error_handler_error_reporting ), sizeof (EG (user_error_handler_error_reporting )));
1438
- zend_ptr_stack_push (& EG (user_error_handlers ), EG (user_error_handler ));
1439
- }
1440
- ALLOC_ZVAL (EG (user_error_handler ));
1433
+ if (EG (user_error_handler )) {
1434
+ had_orig_error_handler = 1 ;
1435
+ * return_value = * EG (user_error_handler );
1436
+ zval_copy_ctor (return_value );
1437
+ INIT_PZVAL (return_value );
1438
+ zend_stack_push (& EG (user_error_handlers_error_reporting ), & EG (user_error_handler_error_reporting ), sizeof (EG (user_error_handler_error_reporting )));
1439
+ zend_ptr_stack_push (& EG (user_error_handlers ), EG (user_error_handler ));
1440
+ }
1441
1441
1442
- if (!zend_is_true (error_handler )) { /* unset user-defined handler */
1443
- FREE_ZVAL (EG (user_error_handler ));
1444
- EG (user_error_handler ) = NULL ;
1445
- RETURN_TRUE ;
1446
- }
1442
+ ALLOC_ZVAL (EG (user_error_handler ));
1443
+ EG (user_error_handler_error_reporting ) = (int )error_type ;
1444
+ MAKE_COPY_ZVAL (& error_handler , EG (user_error_handler ));
1447
1445
1448
- EG (user_error_handler_error_reporting ) = (int )error_type ;
1449
- * EG (user_error_handler ) = * error_handler ;
1450
- zval_copy_ctor (EG (user_error_handler ));
1451
- INIT_PZVAL (EG (user_error_handler ));
1446
+ if (!had_orig_error_handler ) {
1447
+ RETURN_NULL ();
1448
+ }
1449
+ } else { /* unset user-defined handler */
1450
+ if (EG (user_error_handler )) {
1451
+ zend_stack_push (& EG (user_error_handlers_error_reporting ), & EG (user_error_handler_error_reporting ), sizeof (EG (user_error_handler_error_reporting )));
1452
+ zend_ptr_stack_push (& EG (user_error_handlers ), EG (user_error_handler ));
1453
+ }
1452
1454
1453
- if (! had_orig_error_handler ) {
1454
- RETURN_NULL () ;
1455
+ EG ( user_error_handler ) = NULL ;
1456
+ RETURN_TRUE ;
1455
1457
}
1456
1458
}
1457
1459
/* }}} */
0 commit comments