Author: mbenson
Date: Mon Dec 19 09:52:05 2005
New Revision: 357737

URL: http://svn.apache.org/viewcvs?rev=357737&view=rev
Log:
add'l fixes RE using URI >= Java 1.4:  ensure the URI is encoded prior to
passing to URI.create(); ensure no new object is created by encodeUri until
encoding is determined to be necessary.

Modified:
    ant/core/trunk/src/main/org/apache/tools/ant/launch/Locator.java

Modified: ant/core/trunk/src/main/org/apache/tools/ant/launch/Locator.java
URL: 
http://svn.apache.org/viewcvs/ant/core/trunk/src/main/org/apache/tools/ant/launch/Locator.java?rev=357737&r1=357736&r2=357737&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/launch/Locator.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/launch/Locator.java Mon Dec 19 
09:52:05 2005
@@ -156,6 +156,11 @@
         // things when the path is not absolute, and fall back to the old 
parsing behavior.
         if (uriClazz != null && uri.startsWith("file:/")) {
             try {
+                uri = encodeUri(uri);
+            } catch (UnsupportedEncodingException e) {
+                //leave as-is?
+            }
+            try {
                 java.lang.reflect.Method createMethod = 
uriClazz.getMethod("create", new Class[] {String.class});
                 Object uriObj = createMethod.invoke(null, new Object[] {uri});
                 java.lang.reflect.Constructor fileConst = 
File.class.getConstructor(new Class[] {uriClazz});
@@ -257,25 +262,31 @@
         int i = 0;
         int len = path.length();
         int ch = 0;
-        StringBuffer sb = new StringBuffer(len);
+        StringBuffer sb = null;
         for (; i < len; i++) {
             ch = path.charAt(i);
             // if it's not an ASCII character, break here, and use UTF-8 
encoding
             if (ch >= 128)
                 break;
             if (gNeedEscaping[ch]) {
+                if (sb == null) {
+                    sb = new StringBuffer(path.substring(0, i));
+                }
                 sb.append('%');
                 sb.append(gAfterEscaping1[ch]);
                 sb.append(gAfterEscaping2[ch]);
                 // record the fact that it's escaped
             }
-            else {
-                sb.append((char)ch);
+            else if (sb != null) {
+                sb.append((char) ch);
             }
         }
 
         // we saw some non-ascii character
         if (i < len) {
+            if (sb == null) {
+                sb = new StringBuffer(path.substring(0, i));
+            }
             // get UTF-8 bytes for the remaining sub-string
             byte[] bytes = null;
             byte b;
@@ -291,18 +302,17 @@
                     sb.append('%');
                     sb.append(gHexChs[ch >> 4]);
                     sb.append(gHexChs[ch & 0xf]);
-                }
-                else if (gNeedEscaping[b]) {
+                } else if (gNeedEscaping[b]) {
                     sb.append('%');
                     sb.append(gAfterEscaping1[b]);
                     sb.append(gAfterEscaping2[b]);
                 }
                 else {
-                    sb.append((char)b);
+                    sb.append((char) b);
                 }
             }
         }
-        return sb.toString();
+        return sb == null ? path : sb.toString();
     }
 
     /**



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to