File tree Expand file tree Collapse file tree 4 files changed +86
-5
lines changed Expand file tree Collapse file tree 4 files changed +86
-5
lines changed Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ Bug #63206 Fully support error_handler stacking, even inside the error_handler
3
+ --FILE--
4
+ <?php
5
+
6
+ set_error_handler (function () {
7
+ echo 'First handler ' . PHP_EOL ;
8
+ });
9
+
10
+ set_error_handler (function () {
11
+ echo 'Second handler ' . PHP_EOL ;
12
+
13
+ set_error_handler (function () {
14
+ echo 'Internal handler ' . PHP_EOL ;
15
+ });
16
+
17
+ $ triggerInternalNotice ++; // warnings while handling the error should go into internal handler
18
+
19
+ restore_error_handler ();
20
+ });
21
+
22
+ $ triggerNotice1 ++;
23
+ $ triggerNotice2 ++;
24
+ ?>
25
+ --EXPECTF--
26
+ Second handler
27
+ Internal handler
28
+ Second handler
29
+ Internal handler
Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ Bug #63206 Fully support error_handler stacking, even with null
3
+ --FILE--
4
+ <?php
5
+
6
+ set_error_handler (function () {
7
+ echo 'First handler ' . PHP_EOL ;
8
+ });
9
+
10
+ set_error_handler (function () {
11
+ echo 'Second handler ' . PHP_EOL ;
12
+ });
13
+
14
+ set_error_handler (null );
15
+
16
+ set_error_handler (function () {
17
+ echo 'Fourth handler ' . PHP_EOL ;
18
+ });
19
+
20
+ restore_error_handler ();
21
+ restore_error_handler ();
22
+
23
+ $ triggerNotice ++;
24
+ ?>
25
+ --EXPECTF--
26
+ Second handler
Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ Bug #63206 Fully support exception_handler stacking, even with null
3
+ --FILE--
4
+ <?php
5
+
6
+ set_exception_handler (function () {
7
+ echo 'First handler ' . PHP_EOL ;
8
+ });
9
+
10
+ set_exception_handler (function () {
11
+ echo 'Second handler ' . PHP_EOL ;
12
+ });
13
+
14
+ set_exception_handler (null );
15
+
16
+ set_exception_handler (function () {
17
+ echo 'Fourth handler ' . PHP_EOL ;
18
+ });
19
+
20
+ restore_exception_handler ();
21
+ restore_exception_handler ();
22
+
23
+ throw new Exception ();
24
+ ?>
25
+ --EXPECTF--
26
+ Second handler
Original file line number Diff line number Diff line change @@ -1396,11 +1396,11 @@ ZEND_FUNCTION(set_error_handler)
1396
1396
1397
1397
if (Z_TYPE (EG (user_error_handler )) != IS_UNDEF ) {
1398
1398
ZVAL_COPY (return_value , & EG (user_error_handler ));
1399
-
1400
- zend_stack_push (& EG (user_error_handlers_error_reporting ), & EG (user_error_handler_error_reporting ));
1401
- zend_stack_push (& EG (user_error_handlers ), & EG (user_error_handler ));
1402
1399
}
1403
1400
1401
+ zend_stack_push (& EG (user_error_handlers_error_reporting ), & EG (user_error_handler_error_reporting ));
1402
+ zend_stack_push (& EG (user_error_handlers ), & EG (user_error_handler ));
1403
+
1404
1404
if (Z_TYPE_P (error_handler ) == IS_NULL ) { /* unset user-defined handler */
1405
1405
ZVAL_UNDEF (& EG (user_error_handler ));
1406
1406
return ;
@@ -1460,10 +1460,10 @@ ZEND_FUNCTION(set_exception_handler)
1460
1460
1461
1461
if (Z_TYPE (EG (user_exception_handler )) != IS_UNDEF ) {
1462
1462
ZVAL_COPY (return_value , & EG (user_exception_handler ));
1463
-
1464
- zend_stack_push (& EG (user_exception_handlers ), & EG (user_exception_handler ));
1465
1463
}
1466
1464
1465
+ zend_stack_push (& EG (user_exception_handlers ), & EG (user_exception_handler ));
1466
+
1467
1467
if (Z_TYPE_P (exception_handler ) == IS_NULL ) { /* unset user-defined handler */
1468
1468
ZVAL_UNDEF (& EG (user_exception_handler ));
1469
1469
return ;
You can’t perform that action at this time.
0 commit comments