You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2006/10/09 18:22:20 UTC

svn commit: r454417 - in /jackrabbit/trunk/jackrabbit/src: main/java/org/apache/jackrabbit/util/ISO9075.java test/java/org/apache/jackrabbit/util/ISO9075Test.java

Author: jukka
Date: Mon Oct  9 09:22:18 2006
New Revision: 454417

URL: http://svn.apache.org/viewvc?view=rev&rev=454417
Log:
JCR-563: Avoid problems with decoding _x0024_ ($) and _x005c_ (\).

Modified:
    jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/ISO9075.java
    jackrabbit/trunk/jackrabbit/src/test/java/org/apache/jackrabbit/util/ISO9075Test.java

Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/ISO9075.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/ISO9075.java?view=diff&rev=454417&r1=454416&r2=454417
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/ISO9075.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/util/ISO9075.java Mon Oct  9 09:22:18 2006
@@ -134,7 +134,12 @@
         StringBuffer decoded = new StringBuffer();
         Matcher m = ENCODE_PATTERN.matcher(name);
         while (m.find()) {
-            m.appendReplacement(decoded, Character.toString((char) Integer.parseInt(m.group().substring(2, 6), 16)));
+            char ch = (char) Integer.parseInt(m.group().substring(2, 6), 16);
+            if (ch == '$' || ch == '\\') {
+                m.appendReplacement(decoded, "\\" + ch);
+            } else {
+                m.appendReplacement(decoded, Character.toString(ch));
+            }
         }
         m.appendTail(decoded);
         return decoded.toString();

Modified: jackrabbit/trunk/jackrabbit/src/test/java/org/apache/jackrabbit/util/ISO9075Test.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/test/java/org/apache/jackrabbit/util/ISO9075Test.java?view=diff&rev=454417&r1=454416&r2=454417
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/test/java/org/apache/jackrabbit/util/ISO9075Test.java (original)
+++ jackrabbit/trunk/jackrabbit/src/test/java/org/apache/jackrabbit/util/ISO9075Test.java Mon Oct  9 09:22:18 2006
@@ -37,6 +37,21 @@
         assertEquals("My_x005f_x0020_x0020_Documents", ISO9075.encode("My_x0020 Documents"));
     }
 
+    public void testMatcherEscapes() {
+        assertEquals(
+                "StringWith$inside", ISO9075.decode("StringWith$inside"));
+        assertEquals(
+                "StringWith$inside", ISO9075.decode("StringWith_x0024_inside"));
+        assertEquals(
+                "StringWith_x0024_inside", ISO9075.encode("StringWith$inside"));
+        assertEquals(
+                "StringWith\\inside", ISO9075.decode("StringWith\\inside"));
+        assertEquals(
+                "StringWith\\inside", ISO9075.decode("StringWith_x005c_inside"));
+        assertEquals(
+                "StringWith_x005c_inside", ISO9075.encode("StringWith\\inside"));
+    }
+
     /**
      * This is a disabled brute force test. It tests permutations of characters:
      * <code>' ', '_', 'x', '0', '2', 'a', 'b', '{'</code>, encodes and decodes