You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2010/03/17 05:09:48 UTC

svn commit: r924146 - in /camel/trunk/components/camel-web/src: main/java/org/apache/camel/web/util/UriCharactersEncoder.java test/java/org/apache/camel/web/util/UriCharachersEncoderTest.java

Author: ningjiang
Date: Wed Mar 17 04:09:48 2010
New Revision: 924146

URL: http://svn.apache.org/viewvc?rev=924146&view=rev
Log:
CAMEL-2554 Fixed the IndexOutOfBoundsException issue of UriCharactersEncoder

Modified:
    camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/util/UriCharactersEncoder.java
    camel/trunk/components/camel-web/src/test/java/org/apache/camel/web/util/UriCharachersEncoderTest.java

Modified: camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/util/UriCharactersEncoder.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/util/UriCharactersEncoder.java?rev=924146&r1=924145&r2=924146&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/util/UriCharactersEncoder.java (original)
+++ camel/trunk/components/camel-web/src/main/java/org/apache/camel/web/util/UriCharactersEncoder.java Wed Mar 17 04:09:48 2010
@@ -59,32 +59,30 @@ public final class UriCharactersEncoder 
             return s;
         }
 
-        try {
-            // First check whether we actually need to encode
-            byte[] bytes = s.getBytes("UTF8");
-            for (int i = 0;;) {
-                if (unsafeCharacters.get(bytes[i])) {
+        // First check whether we actually need to encode
+        char chars[] = s.toCharArray();
+        for (int i = 0;;) {
+            // just deal with the ascii character
+            if (chars[i] > 0 && chars[i] < 128) {
+                if (unsafeCharacters.get(chars[i])) {
                     break;
                 }
-                if (++i >= bytes.length) {
-                    return s;
-                }
             }
+            if (++i >= chars.length) {
+                return s;
+            }
+        }
 
-            // okay there are some unsafe characters so we do need to encode
-            StringBuffer sb = new StringBuffer();
-            for (byte b : bytes) {
-                if (unsafeCharacters.get(b)) {
-                    appendEscape(sb, b);
-                } else {
-                    sb.append((char)b);
-                }
+        // okay there are some unsafe characters so we do need to encode
+        StringBuffer sb = new StringBuffer();
+        for (char ch : chars) {
+            if (ch > 0 && ch < 128 && unsafeCharacters.get(ch)) {
+                appendEscape(sb, (byte)ch);
+            } else {
+                sb.append(ch);
             }
-            return sb.toString();
-        } catch (UnsupportedEncodingException e) {
-            LOG.error("Can't encoding the uri: ", e);
-            return null;
         }
+        return sb.toString();
     }
 
     private static void appendEscape(StringBuffer sb, byte b) {

Modified: camel/trunk/components/camel-web/src/test/java/org/apache/camel/web/util/UriCharachersEncoderTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/test/java/org/apache/camel/web/util/UriCharachersEncoderTest.java?rev=924146&r1=924145&r2=924146&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/test/java/org/apache/camel/web/util/UriCharachersEncoderTest.java (original)
+++ camel/trunk/components/camel-web/src/test/java/org/apache/camel/web/util/UriCharachersEncoderTest.java Wed Mar 17 04:09:48 2010
@@ -21,10 +21,6 @@ import org.junit.Assert;
 import org.junit.Test;
 
 
-
-/**
- *
- */
 public class UriCharachersEncoderTest extends Assert {
     @Test
     public void testEncoder() {
@@ -37,7 +33,8 @@ public class UriCharachersEncoderTest ex
 
     @Test
     public void testNoEncoding() {
-        String noEncoding = "direct:start";
+        String noEncoding = "direct:start\uFD04";
+        System.out.println(noEncoding.length());
         String result = UriCharactersEncoder.encode(noEncoding);
         assertEquals("Get the wrong encoding result", noEncoding, result);
     }