Skip to content

Commit

Permalink
[Debug] Fix populating error_get_last() for handled silent errors
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolas-grekas committed May 11, 2018
1 parent 07d2570 commit d7e612d
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 3 deletions.
8 changes: 5 additions & 3 deletions src/Symfony/Component/Debug/ErrorHandler.php
Expand Up @@ -377,13 +377,15 @@ private function reRegister($prev)
*/
public function handleError($type, $message, $file, $line)
{
$level = error_reporting() | E_RECOVERABLE_ERROR | E_USER_ERROR | E_DEPRECATED | E_USER_DEPRECATED;
$level = error_reporting();
$silenced = 0 === ($level & $type);
$level |= E_RECOVERABLE_ERROR | E_USER_ERROR | E_DEPRECATED | E_USER_DEPRECATED;
$log = $this->loggedErrors & $type;
$throw = $this->thrownErrors & $type & $level;
$type &= $level | $this->screamedErrors;

if (!$type || (!$log && !$throw)) {
return $type && $log;
return !$silenced && $type && $log;
}
$scope = $this->scopedErrors & $type;

Expand Down Expand Up @@ -479,7 +481,7 @@ public function handleError($type, $message, $file, $line)
}
}

return $type && $log;
return !$silenced && $type && $log;
}

/**
Expand Down
24 changes: 24 additions & 0 deletions src/Symfony/Component/Debug/Tests/ErrorHandlerTest.php
Expand Up @@ -64,6 +64,30 @@ public function testRegister()
}
}

public function testErrorGetLast()
{
$handler = ErrorHandler::register();
$logger = $this->getMockBuilder('Psr\Log\LoggerInterface')->getMock();
$handler->setDefaultLogger($logger);
$handler->screamAt(E_ALL);

try {
@trigger_error('Hello', E_USER_WARNING);
$expected = array(
'type' => E_USER_WARNING,
'message' => 'Hello',
'file' => __FILE__,
'line' => __LINE__ - 5,
);
$this->assertSame($expected, error_get_last());
} catch (\Exception $e) {
restore_error_handler();
restore_exception_handler();

throw $e;
}
}

public function testNotice()
{
ErrorHandler::register();
Expand Down

0 comments on commit d7e612d

Please sign in to comment.