diff options
author | Nils Adermann <naderman@naderman.de> | 2016-06-22 14:36:16 +0200 |
---|---|---|
committer | Nils Adermann <naderman@naderman.de> | 2016-06-22 14:36:16 +0200 |
commit | 50232e7bb40ebd02293a8fd815b45d4c0eaf1aed (patch) | |
tree | b8aa2d4ff41c50239720714149438dd83e20b1e9 /src | |
parent | c582a6e7918e20d9ebcc30e8aa35bb74f8b5cc3b (diff) | |
download | monolog-50232e7bb40ebd02293a8fd815b45d4c0eaf1aed.zip monolog-50232e7bb40ebd02293a8fd815b45d4c0eaf1aed.tar.gz monolog-50232e7bb40ebd02293a8fd815b45d4c0eaf1aed.tar.bz2 |
Introduce a depth parameter for normalization to limit stack nesting
Diffstat (limited to 'src')
-rw-r--r-- | src/Monolog/Formatter/JsonFormatter.php | 8 | ||||
-rw-r--r-- | src/Monolog/Formatter/NormalizerFormatter.php | 8 | ||||
-rw-r--r-- | src/Monolog/Formatter/WildfireFormatter.php | 4 |
3 files changed, 14 insertions, 6 deletions
diff --git a/src/Monolog/Formatter/JsonFormatter.php b/src/Monolog/Formatter/JsonFormatter.php index 06e9d13..b0f1795 100644 --- a/src/Monolog/Formatter/JsonFormatter.php +++ b/src/Monolog/Formatter/JsonFormatter.php @@ -135,8 +135,12 @@ class JsonFormatter extends NormalizerFormatter * * @return mixed */ - protected function normalize($data) + protected function normalize($data, $depth = 0) { + if ($depth > 9) { + return 'Over 9 levels deep, aborting normalization'; + } + if (is_array($data) || $data instanceof \Traversable) { $normalized = array(); @@ -146,7 +150,7 @@ class JsonFormatter extends NormalizerFormatter $normalized['...'] = 'Over 1000 items, aborting normalization'; break; } - $normalized[$key] = $this->normalize($value); + $normalized[$key] = $this->normalize($value, $depth+1); } return $normalized; diff --git a/src/Monolog/Formatter/NormalizerFormatter.php b/src/Monolog/Formatter/NormalizerFormatter.php index a76e2ae..801231e 100644 --- a/src/Monolog/Formatter/NormalizerFormatter.php +++ b/src/Monolog/Formatter/NormalizerFormatter.php @@ -55,8 +55,12 @@ class NormalizerFormatter implements FormatterInterface return $records; } - protected function normalize($data) + protected function normalize($data, $depth = 0) { + if ($depth > 9) { + return 'Over 9 levels deep, aborting normalization'; + } + if (null === $data || is_scalar($data)) { if (is_float($data)) { if (is_infinite($data)) { @@ -79,7 +83,7 @@ class NormalizerFormatter implements FormatterInterface $normalized['...'] = 'Over 1000 items, aborting normalization'; break; } - $normalized[$key] = $this->normalize($value); + $normalized[$key] = $this->normalize($value, $depth+1); } return $normalized; diff --git a/src/Monolog/Formatter/WildfireFormatter.php b/src/Monolog/Formatter/WildfireFormatter.php index 654710a..65dba99 100644 --- a/src/Monolog/Formatter/WildfireFormatter.php +++ b/src/Monolog/Formatter/WildfireFormatter.php @@ -102,12 +102,12 @@ class WildfireFormatter extends NormalizerFormatter throw new \BadMethodCallException('Batch formatting does not make sense for the WildfireFormatter'); } - protected function normalize($data) + protected function normalize($data, $depth = 0) { if (is_object($data) && !$data instanceof \DateTime) { return $data; } - return parent::normalize($data); + return parent::normalize($data, $depth); } } |