From adb73680e7b863897bb21efca37a96ed203da17c Mon Sep 17 00:00:00 2001 From: Wolfgang Klinger <wolfgang@wazum.com> Date: Thu, 14 Dec 2017 11:33:53 +0100 Subject: [PATCH] [BUGFIX] Make sure that foreach loops are applied to arrays only Fix some foreach loops so as not to run into potentially empty elements. Use the ?? operator to accomplish that. Change-Id: Id6306cea0546dfd4a20ba98c170335966cc2ae40 Resolves: #83322 Releases: master, 8.7 Reviewed-on: https://review.typo3.org/55066 Tested-by: TYPO3com <no-reply@typo3.com> Reviewed-by: Markus Klein <markus.klein@typo3.org> Tested-by: Markus Klein <markus.klein@typo3.org> Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch> Tested-by: Christian Kuhn <lolli@schwarzbu.ch> --- .../backend/Classes/Form/AbstractNode.php | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/typo3/sysext/backend/Classes/Form/AbstractNode.php b/typo3/sysext/backend/Classes/Form/AbstractNode.php index 67bea6c13fc8..6fd004abbb75 100644 --- a/typo3/sysext/backend/Classes/Form/AbstractNode.php +++ b/typo3/sysext/backend/Classes/Form/AbstractNode.php @@ -108,7 +108,9 @@ abstract class AbstractNode implements NodeInterface, LoggerAwareInterface } /** - * Merge existing data with a child return array + * Merge existing data with a child return array. + * The incoming $childReturn array should be initialized + * using initializeResultArray() beforehand. * * @param array $existing Currently merged array * @param array $childReturn Array returned by child @@ -120,27 +122,23 @@ abstract class AbstractNode implements NodeInterface, LoggerAwareInterface if ($mergeHtml && !empty($childReturn['html'])) { $existing['html'] .= LF . $childReturn['html']; } - foreach ($childReturn['additionalJavaScriptPost'] as $value) { + foreach ($childReturn['additionalJavaScriptPost'] ?? [] as $value) { $existing['additionalJavaScriptPost'][] = $value; } - foreach ($childReturn['additionalJavaScriptSubmit'] as $value) { + foreach ($childReturn['additionalJavaScriptSubmit'] ?? [] as $value) { $existing['additionalJavaScriptSubmit'][] = $value; } - foreach ($childReturn['additionalHiddenFields'] as $value) { + foreach ($childReturn['additionalHiddenFields'] ?? [] as $value) { $existing['additionalHiddenFields'][] = $value; } - foreach ($childReturn['stylesheetFiles'] as $value) { + foreach ($childReturn['stylesheetFiles'] ?? [] as $value) { $existing['stylesheetFiles'][] = $value; } - if (!empty($childReturn['requireJsModules'])) { - foreach ($childReturn['requireJsModules'] as $module) { - $existing['requireJsModules'][] = $module; - } + foreach ($childReturn['requireJsModules'] ?? [] as $module) { + $existing['requireJsModules'][] = $module; } - if (!empty($childReturn['additionalInlineLanguageLabelFiles'])) { - foreach ($childReturn['additionalInlineLanguageLabelFiles'] as $inlineLanguageLabelFile) { - $existing['additionalInlineLanguageLabelFiles'][] = $inlineLanguageLabelFile; - } + foreach ($childReturn['additionalInlineLanguageLabelFiles'] ?? [] as $inlineLanguageLabelFile) { + $existing['additionalInlineLanguageLabelFiles'][] = $inlineLanguageLabelFile; } if (!empty($childReturn['inlineData'])) { $existingInlineData = $existing['inlineData']; -- GitLab