From c6bcf0528793de3bd9cedec85a5b280f1f6af86a Mon Sep 17 00:00:00 2001 From: Daniel Wehner Date: Tue, 16 Dec 2014 13:46:26 +0100 Subject: [PATCH] add a limit and a test to FlattenExceptionTest. --- .../Debug/Exception/FlattenException.php | 7 ++++-- .../Tests/Exception/FlattenExceptionTest.php | 22 +++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Debug/Exception/FlattenException.php b/src/Symfony/Component/Debug/Exception/FlattenException.php index 7e2f5f67d0..e12404a61c 100644 --- a/src/Symfony/Component/Debug/Exception/FlattenException.php +++ b/src/Symfony/Component/Debug/Exception/FlattenException.php @@ -239,17 +239,20 @@ class FlattenException } } - private function flattenArgs($args, $level = 0) + private function flattenArgs($args, $level = 0, &$count = 0) { $result = array(); foreach ($args as $key => $value) { + if (++$count > 1e4) { + return array('array', '*SKIPPED over 10000 entries*'); + } if (is_object($value)) { $result[$key] = array('object', get_class($value)); } elseif (is_array($value)) { if ($level > 10) { $result[$key] = array('array', '*DEEP NESTED ARRAY*'); } else { - $result[$key] = array('array', $this->flattenArgs($value, $level + 1)); + $result[$key] = array('array', $this->flattenArgs($value, $level + 1, $count)); } } elseif (null === $value) { $result[$key] = array('null', null); diff --git a/src/Symfony/Component/Debug/Tests/Exception/FlattenExceptionTest.php b/src/Symfony/Component/Debug/Tests/Exception/FlattenExceptionTest.php index 6c234166ee..e62b360289 100644 --- a/src/Symfony/Component/Debug/Tests/Exception/FlattenExceptionTest.php +++ b/src/Symfony/Component/Debug/Tests/Exception/FlattenExceptionTest.php @@ -186,6 +186,28 @@ class FlattenExceptionTest extends \PHPUnit_Framework_TestCase $this->assertContains('*DEEP NESTED ARRAY*', serialize($trace)); } + public function testTooBigArray() + { + $a = array(); + for ($i = 0; $i < 20; $i++) { + for ($j = 0; $j < 50; $j++) { + for ($k = 0; $k < 10; $k++) { + $a[$i][$j][$k] = 'value'; + } + } + } + $a[20] = 'value'; + $a[21] = 'value1'; + $exception = $this->createException($a); + + $flattened = FlattenException::create($exception); + $trace = $flattened->getTrace(); + $serialize_trace = serialize($trace); + + $this->assertContains('*SKIPPED over 10000 entries*', $serialize_trace); + $this->assertNotContains('*value1*', $serialize_trace); + } + private function createException($foo) { return new \Exception();