summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNils Adermann <naderman@naderman.de>2016-06-22 14:36:16 +0200
committerNils Adermann <naderman@naderman.de>2016-06-22 14:36:16 +0200
commit50232e7bb40ebd02293a8fd815b45d4c0eaf1aed (patch)
treeb8aa2d4ff41c50239720714149438dd83e20b1e9 /src
parentc582a6e7918e20d9ebcc30e8aa35bb74f8b5cc3b (diff)
downloadmonolog-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.php8
-rw-r--r--src/Monolog/Formatter/NormalizerFormatter.php8
-rw-r--r--src/Monolog/Formatter/WildfireFormatter.php4
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);
}
}