You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2010/05/28 11:30:16 UTC
svn commit: r949136 - in /felix/trunk/fileinstall/src:
main/java/org/apache/felix/fileinstall/internal/Util.java
test/java/org/apache/felix/fileinstall/internal/UtilTest.java
Author: gnodet
Date: Fri May 28 09:30:16 2010
New Revision: 949136
URL: http://svn.apache.org/viewvc?rev=949136&view=rev
Log:
FELIX-2366: Avoiding property substitution by escaping does not remove escape character
Modified:
felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/Util.java
felix/trunk/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/UtilTest.java
Modified: felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/Util.java
URL: http://svn.apache.org/viewvc/felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/Util.java?rev=949136&r1=949135&r2=949136&view=diff
==============================================================================
--- felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/Util.java (original)
+++ felix/trunk/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/Util.java Fri May 28 09:30:16 2010
@@ -133,7 +133,7 @@ public class Util
// return the existing value.
if ((startDelim < 0) || (stopDelim < 0))
{
- return val;
+ return unescape(val);
}
// At this point, we have found a variable placeholder so
@@ -154,7 +154,7 @@ public class Util
if (substValue == null)
{
// Ignore unknown property values.
- substValue = System.getProperty(variable, "");
+ substValue = variable.length() > 0 ? System.getProperty(variable, "") : "";
}
// Remove the found variable from the cycle map, since
@@ -172,6 +172,13 @@ public class Util
val = substVars(val, currentKey, cycleMap, configProps);
// Remove escape characters preceding {, } and \
+ val = unescape(val);
+
+ // Return the value.
+ return val;
+ }
+
+ private static String unescape(String val) {
int escape = val.indexOf(ESCAPE_CHAR);
while (escape >= 0 && escape < val.length() - 1)
{
@@ -182,8 +189,6 @@ public class Util
}
escape = val.indexOf(ESCAPE_CHAR, escape + 1);
}
-
- // Return the value.
return val;
}
Modified: felix/trunk/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/UtilTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/UtilTest.java?rev=949136&r1=949135&r2=949136&view=diff
==============================================================================
--- felix/trunk/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/UtilTest.java (original)
+++ felix/trunk/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/UtilTest.java Fri May 28 09:30:16 2010
@@ -54,4 +54,31 @@ public class UtilTest extends TestCase
assertEquals("${a", Util.substVars("${a", "b", null, new Hashtable()));
}
+ public void testEmptyVariable() {
+ assertEquals("", Util.substVars("${}", "b", null, new Hashtable()));
+ }
+
+ public void testInnerSubst() {
+ Dictionary props = new Hashtable();
+ props.put("a", "b");
+ props.put("b", "c");
+ assertEquals("c", Util.substVars("${${a}}", "z", null, props));
+ }
+
+ public void testSubstLoop() {
+ try {
+ Util.substVars("${a}", "a", null, new Hashtable());
+ fail("Should have thrown an exception");
+ } catch (IllegalArgumentException e) {
+ // expected
+ }
+ }
+
+ public void testSubstitutionEscape()
+ {
+ assertEquals("${a}", Util.substVars("$\\{a${#}\\}", "b", null, new Hashtable()));
+ assertEquals("${a}", Util.substVars("$\\{a\\}${#}", "b", null, new Hashtable()));
+ assertEquals("${a}", Util.substVars("$\\{a\\}", "b", null, new Hashtable()));
+ }
+
}
\ No newline at end of file