You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by kw...@apache.org on 2020/04/29 16:38:00 UTC

[sling-org-apache-sling-installer-factory-configuration] branch master updated: SLING-9408 do not throw IAE in case old value is array and new value is not

This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-installer-factory-configuration.git


The following commit(s) were added to refs/heads/master by this push:
     new 1b62c1a  SLING-9408 do not throw IAE in case old value is array and new value is not
1b62c1a is described below

commit 1b62c1a5e15ef1ce5222dc3a0af73cd9cf7bb57a
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Wed Apr 29 18:37:51 2020 +0200

    SLING-9408 do not throw IAE in case old value is array and new value is not
---
 .../installer/factories/configuration/impl/ConfigUtil.java   | 10 +++++++---
 .../factories/configuration/impl/ConfigUtilTest.java         | 12 ++++++++++++
 2 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigUtil.java b/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigUtil.java
index c5dc328..1e42ade 100644
--- a/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigUtil.java
+++ b/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigUtil.java
@@ -98,7 +98,7 @@ abstract class ConfigUtil {
                 for(final String key : keysA ) {
                     final Object valA = a.get(key);
                     final Object valB = b.get(key);
-                    if ( valA.getClass().isArray() ) {
+                    if ( valA.getClass().isArray() && valB.getClass().isArray()) {
                         final Object[] arrA = convertToObjectArray(valA);
                         final Object[] arrB = convertToObjectArray(valB);
 
@@ -112,12 +112,16 @@ abstract class ConfigUtil {
                                 break;
                             }
                         }
-                    } else {
-                        // we always do a string comparison
+                    } else if (!valA.getClass().isArray() && !valB.getClass().isArray()) {
+                        // if no arrays do a string comparison
                         if ( !(String.valueOf(valA).equals(String.valueOf(valB))) ) {
                             result = false;
                             break;
                         }
+                    } else {
+                        // one value is array the other is not!
+                        result = false;
+                        break;
                     }
                 }
             }
diff --git a/src/test/java/org/apache/sling/installer/factories/configuration/impl/ConfigUtilTest.java b/src/test/java/org/apache/sling/installer/factories/configuration/impl/ConfigUtilTest.java
index e63eed8..57e0402 100644
--- a/src/test/java/org/apache/sling/installer/factories/configuration/impl/ConfigUtilTest.java
+++ b/src/test/java/org/apache/sling/installer/factories/configuration/impl/ConfigUtilTest.java
@@ -119,4 +119,16 @@ public class ConfigUtilTest {
         Configuration cfg = ConfigUtil.getConfiguration(cm, "a.b.c", "c1");
         assertSame(c1, cfg);
     }
+    
+
+    @Test public void testIsSameDataWithSwitchFromArrayToSingleValue() throws Exception {
+        final Dictionary<String, Object> a = new Hashtable<>();
+        final Dictionary<String, Object> b = new Hashtable<>();
+
+        a.put("b", new int[] {1,2,3});
+        b.put("b", 1);
+
+        assertFalse(ConfigUtil.isSameData(a, b));
+        assertFalse(ConfigUtil.isSameData(b, a));
+    }
 }