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

svn commit: r1186897 - in /cxf/branches/2.4.x-fixes: ./ tools/common/src/main/java/org/apache/cxf/tools/util/URIParserUtil.java tools/common/src/test/java/org/apache/cxf/tools/util/URIParserUtilTest.java

Author: dkulp
Date: Thu Oct 20 16:32:08 2011
New Revision: 1186897

URL: http://svn.apache.org/viewvc?rev=1186897&view=rev
Log:
Merged revisions 1186866 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r1186866 | dkulp | 2011-10-20 11:52:52 -0400 (Thu, 20 Oct 2011) | 1 line
  
  [CXF-3855] Fix issue with uri escaping/encoding
........

Modified:
    cxf/branches/2.4.x-fixes/   (props changed)
    cxf/branches/2.4.x-fixes/tools/common/src/main/java/org/apache/cxf/tools/util/URIParserUtil.java
    cxf/branches/2.4.x-fixes/tools/common/src/test/java/org/apache/cxf/tools/util/URIParserUtilTest.java

Propchange: cxf/branches/2.4.x-fixes/
            ('svn:mergeinfo' removed)

Propchange: cxf/branches/2.4.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.4.x-fixes/tools/common/src/main/java/org/apache/cxf/tools/util/URIParserUtil.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/tools/common/src/main/java/org/apache/cxf/tools/util/URIParserUtil.java?rev=1186897&r1=1186896&r2=1186897&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/tools/common/src/main/java/org/apache/cxf/tools/util/URIParserUtil.java (original)
+++ cxf/branches/2.4.x-fixes/tools/common/src/main/java/org/apache/cxf/tools/util/URIParserUtil.java Thu Oct 20 16:32:08 2011
@@ -227,24 +227,25 @@ public final class URIParserUtil {
     }
 
     public static String escapeChars(String s) {
-        StringBuilder b = new StringBuilder(s);
-        int x = 0;
-        do {
-            char ch = b.charAt(x);
+        StringBuilder b = new StringBuilder(s.length());
+        
+        for (int x = 0; x < s.length(); x++) {
+            char ch = s.charAt(x);
             if (isExcluded(ch)) {
                 try {
                     byte[] bytes = Character.toString(ch).getBytes("UTF-8");
-                    b.setCharAt(x++, '%');
                     for (int y = 0; y < bytes.length; y++) {
-                        b.insert(x++, HEX_DIGITS.charAt((bytes[y] & 0xFF) >> 4));
-                        b.insert(x, HEX_DIGITS.charAt(bytes[y] & 0x0F));
+                        b.append("%");
+                        b.append(HEX_DIGITS.charAt((bytes[y] & 0xFF) >> 4));
+                        b.append(HEX_DIGITS.charAt(bytes[y] & 0x0F));
                     }
                 } catch (UnsupportedEncodingException e) {
                     //should not happen
                 }
+            } else {
+                b.append(ch);
             }
-            x++;
-        } while (x < b.length());
+        }
         return b.toString();
     }
     public static String normalize(final String uri) {

Modified: cxf/branches/2.4.x-fixes/tools/common/src/test/java/org/apache/cxf/tools/util/URIParserUtilTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/tools/common/src/test/java/org/apache/cxf/tools/util/URIParserUtilTest.java?rev=1186897&r1=1186896&r2=1186897&view=diff
==============================================================================
--- cxf/branches/2.4.x-fixes/tools/common/src/test/java/org/apache/cxf/tools/util/URIParserUtilTest.java (original)
+++ cxf/branches/2.4.x-fixes/tools/common/src/test/java/org/apache/cxf/tools/util/URIParserUtilTest.java Thu Oct 20 16:32:08 2011
@@ -19,6 +19,9 @@
 
 package org.apache.cxf.tools.util;
 
+import java.io.File;
+import java.net.URI;
+
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -93,4 +96,11 @@ public class URIParserUtilTest extends A
         uri = "file:/home/john/test/all/../../alltest";
         assertEquals("file:/home/john/alltest", URIParserUtil.getAbsoluteURI(uri));
     }
+    @Test
+    public void testCXF3855() throws Exception {
+        String orig = new String(new byte[] {-47, -122}, "UTF-8");
+        orig = "/foo" + orig + ".txt";
+        String s = URIParserUtil.escapeChars(orig);
+        assertEquals(orig, new File(new URI("file:" + s)).getAbsolutePath());
+    }
 }