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