@@ -74,6 +74,7 @@ final class ErrorHandler
7474 private ExcludeList $ excludeList ;
7575 private bool $ enabled = false ;
7676 private ?int $ originalErrorReportingLevel = null ;
77+ private bool $ isForwarding = false ;
7778
7879 /**
7980 * @var ?callable
@@ -291,8 +292,14 @@ public function handleNonTestCaseIssue(int $errorNumber, string $errorString, st
291292
292293 if ($ errorString === '' || $ errorFile === '' || $ errorLine < 1 ) {
293294 // @codeCoverageIgnoreStart
294- if ($ this ->previousNonTestCaseErrorHandler !== null ) {
295- ($ this ->previousNonTestCaseErrorHandler )($ errorNumber , $ errorString , $ errorFile , $ errorLine );
295+ if ($ this ->previousNonTestCaseErrorHandler !== null && !$ this ->isForwarding ) {
296+ $ this ->isForwarding = true ;
297+
298+ try {
299+ ($ this ->previousNonTestCaseErrorHandler )($ errorNumber , $ errorString , $ errorFile , $ errorLine );
300+ } finally {
301+ $ this ->isForwarding = false ;
302+ }
296303 }
297304
298305 return true ;
@@ -306,8 +313,14 @@ public function handleNonTestCaseIssue(int $errorNumber, string $errorString, st
306313 *
307314 * @see https://github.com/sebastianbergmann/phpunit/issues/6817
308315 */
309- if ($ this ->previousNonTestCaseErrorHandler !== null ) {
310- ($ this ->previousNonTestCaseErrorHandler )($ errorNumber , $ errorString , $ errorFile , $ errorLine );
316+ if ($ this ->previousNonTestCaseErrorHandler !== null && !$ this ->isForwarding ) {
317+ $ this ->isForwarding = true ;
318+
319+ try {
320+ ($ this ->previousNonTestCaseErrorHandler )($ errorNumber , $ errorString , $ errorFile , $ errorLine );
321+ } finally {
322+ $ this ->isForwarding = false ;
323+ }
311324 }
312325
313326 /**
@@ -1002,7 +1015,7 @@ private function deprecationIgnoredByTest(TestMethod $test, string $message): bo
10021015
10031016 private function forwardToPreviousErrorHandler (int $ errorNumber , string $ errorString , string $ errorFile , int $ errorLine ): bool
10041017 {
1005- if ($ this ->previousErrorHandler === null ) {
1018+ if ($ this ->previousErrorHandler === null || $ this -> isForwarding ) {
10061019 return false ;
10071020 }
10081021
@@ -1026,9 +1039,13 @@ private function forwardToPreviousErrorHandler(int $errorNumber, string $errorSt
10261039 $ restoreRequired = true ;
10271040 }
10281041
1042+ $ this ->isForwarding = true ;
1043+
10291044 try {
10301045 return (bool ) ($ this ->previousErrorHandler )($ errorNumber , $ errorString , $ errorFile , $ errorLine );
10311046 } finally {
1047+ $ this ->isForwarding = false ;
1048+
10321049 if ($ restoreRequired ) {
10331050 error_reporting ($ errorReportingLevel );
10341051 }
0 commit comments