瀏覽代碼

Handle depth to avoid cases where an exception has many too many previous exceptions, fixes #1726

Jordi Boggiano 3 年之前
父節點
當前提交
83db4b3f81
共有 2 個文件被更改,包括 10 次插入0 次删除
  1. 6 0
      src/Monolog/Formatter/LineFormatter.php
  2. 4 0
      src/Monolog/Formatter/NormalizerFormatter.php

+ 6 - 0
src/Monolog/Formatter/LineFormatter.php

@@ -153,6 +153,12 @@ class LineFormatter extends NormalizerFormatter
 
         if ($previous = $e->getPrevious()) {
             do {
+                $depth++;
+                if ($depth > $this->maxNormalizeDepth) {
+                    $str .= '\n[previous exception] Over ' . $this->maxNormalizeDepth . ' levels deep, aborting normalization';
+                    break;
+                }
+
                 $str .= "\n[previous exception] " . $this->formatException($previous);
             } while ($previous = $previous->getPrevious());
         }

+ 4 - 0
src/Monolog/Formatter/NormalizerFormatter.php

@@ -198,6 +198,10 @@ class NormalizerFormatter implements FormatterInterface
      */
     protected function normalizeException(Throwable $e, int $depth = 0)
     {
+        if ($depth > $this->maxNormalizeDepth) {
+            return ['Over ' . $this->maxNormalizeDepth . ' levels deep, aborting normalization'];
+        }
+
         if ($e instanceof \JsonSerializable) {
             return (array) $e->jsonSerialize();
         }