[BUGFIX] Don't modify variables in tree view 50/27850/3
authorJigal van Hemert <jigal.van.hemert@typo3.org>
Tue, 25 Feb 2014 20:08:44 +0000 (21:08 +0100)
committerWouter Wolters <typo3@wouterwolters.nl>
Tue, 25 Feb 2014 22:06:54 +0000 (23:06 +0100)
The lowlevel array browser tries to modify the array that
is displayed if it's an object.
Now that TYPO3_LOADED_EXT is a simulated array (an object
which implements array access) modifying the data leads to
a fatal error. Instead the iterated value is now modified.

Releases: 6.2
Resolves: #54449
Change-Id: Ib1d3eb5cc76a4180ea0891d88c16191cd16f36e2
Reviewed-on: https://review.typo3.org/27850
Reviewed-by: Markus Klein
Tested-by: Markus Klein
Reviewed-by: Wouter Wolters
Tested-by: Wouter Wolters
typo3/sysext/lowlevel/Classes/Utility/ArrayBrowser.php

index 9405d1d..85f3d1f 100644 (file)
@@ -107,12 +107,11 @@ class ArrayBrowser {
                        $a++;
                        $depth = $depth_in . $key;
                        $goto = 'a' . substr(md5($depth), 0, 6);
-                       if (is_object($arr[$key])) {
-                               $arr[$key] = (array) $arr[$key];
+                       if (is_object($value) && !$value instanceof \Traversable) {
+                               $value = (array)$value;
                        }
-                       $isArray = is_array($arr[$key]);
+                       $isArray = is_array($value) || $value instanceof \Traversable;
                        $deeper = $isArray && ($this->depthKeys[$depth] || $this->expAll);
-                       $PM = 'join';
                        $LN = $a == $c ? 'blank' : 'line';
                        $BTM = $a == $c ? 'bottom' : '';
                        $PM = $isArray ? ($deeper ? 'minus' : 'plus') : 'join';
@@ -124,9 +123,9 @@ class ArrayBrowser {
                                $HTML .= ($this->expAll ? '' : '<a id="' . $goto . '" href="' . htmlspecialchars((\TYPO3\CMS\Backend\Utility\BackendUtility::getModuleUrl(\TYPO3\CMS\Core\Utility\GeneralUtility::_GP('M')) . '&node[' . $depth . ']=' . ($deeper ? 0 : 1) . '#' . $goto)) . '">') . $theIcon . ($this->expAll ? '' : '</a>');
                        }
                        $label = $key;
-                       $HTML .= $this->wrapArrayKey($label, $depth, !$isArray ? $arr[$key] : '');
+                       $HTML .= $this->wrapArrayKey($label, $depth, !$isArray ? $value : '');
                        if (!$isArray) {
-                               $theValue = $arr[$key];
+                               $theValue = $value;
                                if ($this->fixedLgd) {
                                        $imgBlocks = ceil(1 + strlen($depthData) / 77);
                                        $lgdChars = 68 - ceil(strlen(('[' . $key . ']')) * 0.8) - $imgBlocks * 3;
@@ -140,7 +139,7 @@ class ArrayBrowser {
                        }
                        $HTML .= '<br />';
                        if ($deeper) {
-                               $HTML .= $this->tree($arr[$key], $depth, $depthData . '<img' . \TYPO3\CMS\Backend\Utility\IconUtility::skinImg($GLOBALS['BACK_PATH'], ('gfx/ol/' . $LN . '.gif'), 'width="18" height="16"') . ' align="top" alt="" />');
+                               $HTML .= $this->tree($value, $depth, $depthData . '<img' . \TYPO3\CMS\Backend\Utility\IconUtility::skinImg($GLOBALS['BACK_PATH'], ('gfx/ol/' . $LN . '.gif'), 'width="18" height="16"') . ' align="top" alt="" />');
                        }
                }
                return $HTML;