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

cziegeler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/felix-dev.git


The following commit(s) were added to refs/heads/master by this push:
     new 6c4ef71  FELIX-6455 : configadmin.plugin.interpolation: default Value 
with ] is interpreted wrong
6c4ef71 is described below

commit 6c4ef7179e64ba0db05e25a1e3502f8f5f0f80d2
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Sat Sep 4 16:46:41 2021 +0200

    FELIX-6455 : configadmin.plugin.interpolation: default Value with ] is 
interpreted wrong
---
 .../plugin/interpolation/Interpolator.java         | 28 +++++++++++++++-------
 .../InterpolationConfigurationPluginTest.java      |  4 ++++
 2 files changed, 24 insertions(+), 8 deletions(-)

diff --git 
a/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/Interpolator.java
 
b/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/Interpolator.java
index fa39cd9..a479a8a 100755
--- 
a/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/Interpolator.java
+++ 
b/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/Interpolator.java
@@ -66,19 +66,31 @@ public class Interpolator {
         }
 
         // find END marker
-        final String value = valueRef.get();
+        String value = valueRef.get();
         int index = start + START.length();
         int end = -1;
         int count = 1;
         while ( index < value.length() && count > 0 ) {            
-            if ( value.charAt(index) == END 
-                 && (value.charAt(index - 1) != ESCAPE || value.charAt(index - 
2) == ESCAPE) ) {
-                end = index;
-                count--;
+            if ( value.charAt(index) == END ) {
+                if ( value.charAt(index - 1) != ESCAPE || value.charAt(index - 
2) == ESCAPE ) {
+                    end = index;
+                    count--;
+                } else {
+                    // remove escape
+                    value = value.substring(0, index - 
1).concat(value.substring(index));
+                    valueRef.set(value);
+                    index--;
+                }
             }
-            if ( value.charAt(index) == '['
-                 && (value.charAt(index - 1) != ESCAPE || value.charAt(index - 
2) == ESCAPE) ) {
-                count++;
+            if ( value.charAt(index) == '[' ) {
+                if ( value.charAt(index - 1) != ESCAPE || value.charAt(index - 
2) == ESCAPE ) {
+                    count++;
+                } else {
+                    // remove escape
+                    value = value.substring(0, index - 
1).concat(value.substring(index));
+                    valueRef.set(value);
+                    index--;
+                }    
             }
             index++;
         }
diff --git 
a/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPluginTest.java
 
b/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPluginTest.java
index 015c8c5..28902cb 100644
--- 
a/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPluginTest.java
+++ 
b/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPluginTest.java
@@ -148,6 +148,8 @@ public class InterpolationConfigurationPluginTest {
         dict.put("defaulted7", "$[env:notset;default=/()^$]");
         dict.put("defaulted8", "$[env:notset;default=[8080]]");
         dict.put("defaulted9", "$[env:notset;default=[aabb]cc]");
+        dict.put("defaulted10", "$[env:notset;default=\\[aabb]cc]");
+        dict.put("defaulted11", "$[env:notset;default=\\[aabb\\]cc]");
 
         plugin.modifyConfiguration(null, dict);
 
@@ -160,6 +162,8 @@ public class InterpolationConfigurationPluginTest {
         assertEquals("/()^$", dict.get("defaulted7"));
         assertEquals("[8080]", dict.get("defaulted8"));
         assertEquals("[aabb]cc", dict.get("defaulted9"));
+        assertEquals("[aabbcc]", dict.get("defaulted10"));
+        assertEquals("[aabb]cc", dict.get("defaulted11"));
     }
 
     @Test

Reply via email to