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