From 211edf64669ed221d1103103a9a5281a4301b57b Mon Sep 17 00:00:00 2001
From: Markus Klein <markus.klein@typo3.org>
Date: Tue, 27 Feb 2018 15:57:58 +0100
Subject: [PATCH] [BUGFIX] Correctly handle identical arrays in
 arrayDiffAssocRecursive

Add a new test to make sure that identical input arrays also deliver
an empty result as difference.

Resolves: #84067
Releases: master, 8.7, 7.6
Change-Id: Ia16ca9560094c4ae42eb69cac9e09cd4bef7dc4e
Reviewed-on: https://review.typo3.org/55925
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Tested-by: Markus Klein <markus.klein@typo3.org>
---
 .../core/Classes/Utility/ArrayUtility.php     |  5 +++-
 .../Tests/Unit/Utility/ArrayUtilityTest.php   | 30 +++++++++++++++++--
 2 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/typo3/sysext/core/Classes/Utility/ArrayUtility.php b/typo3/sysext/core/Classes/Utility/ArrayUtility.php
index 3273d9a76e95..be2542231f2c 100644
--- a/typo3/sysext/core/Classes/Utility/ArrayUtility.php
+++ b/typo3/sysext/core/Classes/Utility/ArrayUtility.php
@@ -674,7 +674,10 @@ class ArrayUtility
                 $differenceArray[$key] = $value;
             } elseif (is_array($value)) {
                 if (is_array($array2[$key])) {
-                    $differenceArray[$key] = self::arrayDiffAssocRecursive($value, $array2[$key]);
+                    $recursiveResult = self::arrayDiffAssocRecursive($value, $array2[$key]);
+                    if (!empty($recursiveResult)) {
+                        $differenceArray[$key] = $recursiveResult;
+                    }
                 }
             }
         }
diff --git a/typo3/sysext/core/Tests/Unit/Utility/ArrayUtilityTest.php b/typo3/sysext/core/Tests/Unit/Utility/ArrayUtilityTest.php
index fc6528e7bf8b..af1ef6052e7e 100644
--- a/typo3/sysext/core/Tests/Unit/Utility/ArrayUtilityTest.php
+++ b/typo3/sysext/core/Tests/Unit/Utility/ArrayUtilityTest.php
@@ -2085,7 +2085,7 @@ class ArrayUtilityTest extends UnitTestCase
             ]
         ];
         $array2 = [
-            'key1' => 'value1',
+            'key1' => 'valueDoesNotMatter',
             'key2' => [
                 'key21' => 'value21',
                 'key23' => [
@@ -2121,7 +2121,7 @@ class ArrayUtilityTest extends UnitTestCase
         $array2 = [
             'key1' => 'value1',
             'key2' => [
-                'key21' => 'value21'
+                'key21' => 'valueDoesNotMatter'
             ]
         ];
         $expectedResult = [
@@ -2131,6 +2131,32 @@ class ArrayUtilityTest extends UnitTestCase
         $this->assertEquals($expectedResult, $actualResult);
     }
 
+    /**
+     * @test
+     */
+    public function arrayDiffAssocRecursiveReturnsEmptyIfEqual()
+    {
+        $array1 = [
+            'key1' => [
+                'key11' => 'value11',
+                'key12' => 'value12'
+            ],
+            'key2' => 'value2',
+            'key3' => 'value3'
+        ];
+        $array2 = [
+            'key1' => [
+                'key11' => 'valueDoesNotMatter',
+                'key12' => 'value12'
+            ],
+            'key2' => 'value2',
+            'key3' => 'value3'
+        ];
+        $expectedResult = [];
+        $actualResult = ArrayUtility::arrayDiffAssocRecursive($array1, $array2);
+        $this->assertEquals($expectedResult, $actualResult);
+    }
+
     //////////////////////////////////////
     // Tests concerning naturalKeySortRecursive
     //////////////////////////////////////
-- 
GitLab