Skip to content

Commit

Permalink
[2.7] Fixed flatten exception recursion with errors
Browse files Browse the repository at this point in the history
  • Loading branch information
GrahamCampbell authored and fabpot committed Dec 26, 2015
1 parent 021ab8a commit 2b0721d
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 2 deletions.
9 changes: 7 additions & 2 deletions src/Symfony/Component/Debug/Exception/FlattenException.php
Expand Up @@ -94,8 +94,13 @@ public static function create(\Exception $exception, $statusCode = null, array $
$e->setClass(get_class($exception));
$e->setFile($exception->getFile());
$e->setLine($exception->getLine());
if ($exception->getPrevious()) {
$e->setPrevious(static::create($exception->getPrevious()));

$previous = $exception->getPrevious();

if ($previous instanceof \Exception) {
$e->setPrevious(static::create($previous));
} elseif ($previous instanceof \Throwable) {
$e->setPrevious(static::create(new FatalThrowableError($previous)));
}

return $e;
Expand Down
Expand Up @@ -131,6 +131,20 @@ public function testPrevious(\Exception $exception, $statusCode)
$this->assertSame(array($flattened2), $flattened->getAllPrevious());
}

/**
* @requires PHP 7.0
*/
public function testPreviousError()
{
$exception = new \Exception('test', 123, new \ParseError('Oh noes!', 42));

$flattened = FlattenException::create($exception)->getPrevious();

$this->assertEquals($flattened->getMessage(), 'Parse error: Oh noes!', 'The message is copied from the original exception.');
$this->assertEquals($flattened->getCode(), 42, 'The code is copied from the original exception.');
$this->assertEquals($flattened->getClass(), 'Symfony\Component\Debug\Exception\FatalThrowableError', 'The class is set to the class of the original exception');
}

/**
* @dataProvider flattenDataProvider
*/
Expand Down

0 comments on commit 2b0721d

Please sign in to comment.