[TASK] Clean up DebuggerUtility 92/50092/2
authorNicole Cordes <typo3@cordes.co>
Tue, 7 Jun 2016 07:38:06 +0000 (09:38 +0200)
committerChristian Kuhn <lolli@schwarzbu.ch>
Thu, 27 Oct 2016 13:00:30 +0000 (15:00 +0200)
This patch cleans up the DebuggerUtility and fixing two issues:

* removes possible XSS
* makes it more readable

Resolves: #76478
Releases: master, 7.6, 6.2
Change-Id: If1a68489cd97521e90f8d76cc2810649f9642cd1
Reviewed-on: https://review.typo3.org/50092
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Patricia Tiedemann <pixelaeffchen@googlemail.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
typo3/sysext/extbase/Classes/Utility/DebuggerUtility.php

index b7df3a6..94880cd 100644 (file)
@@ -237,39 +237,41 @@ class DebuggerUtility
         } else {
             $dump .= '<span class="extbase-debug-type">' . $className . '</span>';
         }
-        if ($object instanceof \TYPO3\CMS\Core\SingletonInterface) {
-            $scope = 'singleton';
-        } else {
-            $scope = 'prototype';
-        }
-        if ($plainText) {
-            $dump .= ' ' . self::ansiEscapeWrap($scope, '44;37', $ansiColors);
-        } else {
-            $dump .= $scope ? '<span class="extbase-debug-scope">' . $scope . '</span>' : '';
-        }
-        if ($object instanceof \TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject) {
-            if ($object->_isDirty()) {
+        if (! $object instanceof \Closure) {
+            if ($object instanceof \TYPO3\CMS\Core\SingletonInterface) {
+                $scope = 'singleton';
+            } else {
+                $scope = 'prototype';
+            }
+            if ($plainText) {
+                $dump .= ' ' . self::ansiEscapeWrap($scope, '44;37', $ansiColors);
+            } else {
+                $dump .= $scope ? '<span class="extbase-debug-scope">' . $scope . '</span>' : '';
+            }
+            if ($object instanceof \TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject) {
+                if ($object->_isDirty()) {
+                    $persistenceType = 'modified';
+                } elseif ($object->_isNew()) {
+                    $persistenceType = 'transient';
+                } else {
+                    $persistenceType = 'persistent';
+                }
+            }
+            if ($object instanceof \TYPO3\CMS\Extbase\Persistence\ObjectStorage && $object->_isDirty()) {
                 $persistenceType = 'modified';
-            } elseif ($object->_isNew()) {
-                $persistenceType = 'transient';
+            }
+            if ($object instanceof \TYPO3\CMS\Extbase\DomainObject\AbstractEntity) {
+                $domainObjectType = 'entity';
+            } elseif ($object instanceof \TYPO3\CMS\Extbase\DomainObject\AbstractValueObject) {
+                $domainObjectType = 'valueobject';
             } else {
-                $persistenceType = 'persistent';
+                $domainObjectType = 'object';
+            }
+            if ($plainText) {
+                $dump .= ' ' . self::ansiEscapeWrap(($persistenceType ? $persistenceType . ' ' : '') . $domainObjectType, '42;30', $ansiColors);
+            } else {
+                $dump .= '<span class="extbase-debug-ptype">' . ($persistenceType ? $persistenceType . ' ' : '') . $domainObjectType . '</span>';
             }
-        }
-        if ($object instanceof \TYPO3\CMS\Extbase\Persistence\ObjectStorage && $object->_isDirty()) {
-            $persistenceType = 'modified';
-        }
-        if ($object instanceof \TYPO3\CMS\Extbase\DomainObject\AbstractEntity) {
-            $domainObjectType = 'entity';
-        } elseif ($object instanceof \TYPO3\CMS\Extbase\DomainObject\AbstractValueObject) {
-            $domainObjectType = 'valueobject';
-        } else {
-            $domainObjectType = 'object';
-        }
-        if ($plainText) {
-            $dump .= ' ' . self::ansiEscapeWrap(($persistenceType ? $persistenceType . ' ' : '') . $domainObjectType, '42;30', $ansiColors);
-        } else {
-            $dump .= '<span class="extbase-debug-ptype">' . ($persistenceType ? $persistenceType . ' ' : '') . $domainObjectType . '</span>';
         }
         if (strpos(implode('|', self::$blacklistedClassNames), get_class($object)) > 0) {
             if ($plainText) {
@@ -333,7 +335,14 @@ class DebuggerUtility
                 if (self::isBlacklisted($property)) {
                     continue;
                 }
-                $dump .= PHP_EOL . str_repeat(self::PLAINTEXT_INDENT, $level) . ($plainText ? '' : '<span class="extbase-debug-property">') . self::ansiEscapeWrap($property->getName(), '37', $ansiColors) . ($plainText ? '' : '</span>') . ' => ';
+                $dump .= PHP_EOL . str_repeat(self::PLAINTEXT_INDENT, $level);
+                if ($plainText) {
+                    $dump .= self::ansiEscapeWrap($property->getName(), '37', $ansiColors);
+                } else {
+                    $dump .= '<span class="extbase-debug-property">' .
+                        htmlspecialchars($property->getName()) . '</span>';
+                }
+                $dump .= ' => ';
                 $property->setAccessible(true);
                 $dump .= self::renderDump($property->getValue($object), $level, $plainText, $ansiColors);
                 if ($object instanceof \TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject && !$object->_isNew() && $object->_isDirty($property->getName())) {