Skip to content
This repository was archived by the owner on Jan 29, 2020. It is now read-only.

Commit a307b56

Browse files
committed
Merge pull request #404 from adrium/hotfix/404
Register only one error handler in `swallowDeprecationNotices()`
2 parents d6be3ee + 910792d commit a307b56

File tree

2 files changed

+14
-18
lines changed

2 files changed

+14
-18
lines changed

src/Application.php

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -677,24 +677,16 @@ private function checkForDuplicateRoute($path, $methods = null)
677677
*/
678678
private function swallowDeprecationNotices()
679679
{
680-
$handler = function ($errno, $errstr) {
681-
if ($errno !== E_USER_DEPRECATED) {
682-
return false;
680+
$handler = function ($errno, $errstr, $errfile, $errline, $errcontext) use (&$previous) {
681+
$swallow = $errno === E_USER_DEPRECATED && false !== strstr($errstr, 'error middleware is deprecated');
682+
683+
if ($swallow || $previous === null) {
684+
return $swallow;
683685
}
684-
return false !== strstr($errstr, 'error middleware is deprecated');
686+
687+
$previous($errno, $errstr, $errfile, $errline, $errcontext);
685688
};
686689

687690
$previous = set_error_handler($handler);
688-
if (! $previous) {
689-
return;
690-
}
691-
692-
set_error_handler(function ($errno, $errstr, $errfile, $errline, $errcontext) use ($handler, $previous) {
693-
if ($handler($errno, $errstr)) {
694-
return true;
695-
}
696-
697-
return $previous($errno, $errstr, $errfile, $errline, $errcontext);
698-
});
699691
}
700692
}

test/IntegrationTest.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,9 @@ public function testInjectedFinalHandlerCanEmitA404WhenNoMiddlewareMatches()
8484
*/
8585
public function testErrorMiddlewareDeprecationErrorHandlerWillNotOverridePreviouslyRegisteredErrorHandler()
8686
{
87-
$triggered = false;
87+
$triggered = 0;
8888
$this->errorHandler = set_error_handler(function ($errno, $errstr) use (&$triggered) {
89-
$triggered = true;
89+
$triggered++;
9090
return true;
9191
});
9292

@@ -104,6 +104,10 @@ public function testErrorMiddlewareDeprecationErrorHandlerWillNotOverridePreviou
104104

105105
$app->run($request, $response);
106106

107-
$this->assertTrue($triggered);
107+
trigger_error('Triggered', E_USER_NOTICE);
108+
109+
restore_error_handler();
110+
111+
$this->assertSame(2, $triggered);
108112
}
109113
}

0 commit comments

Comments
 (0)