You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by mc...@apache.org on 2010/10/11 20:43:55 UTC
svn commit: r1021457 -
/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/util/Classpath.java
Author: mconcini
Date: Mon Oct 11 18:43:55 2010
New Revision: 1021457
URL: http://svn.apache.org/viewvc?rev=1021457&view=rev
Log:
MYFACES-2941 - handle escaped white spaces in filesystem paths in _getAlternativeJarFile()
Modified:
myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/util/Classpath.java
Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/util/Classpath.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/util/Classpath.java?rev=1021457&r1=1021456&r2=1021457&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/util/Classpath.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/util/Classpath.java Mon Oct 11 18:43:55 2010
@@ -34,7 +34,8 @@ import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import org.apache.myfaces.shared_impl.util.ClassUtils;
-
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
/**
* @author Jacob Hookom
* @author Roland Huss
@@ -43,6 +44,7 @@ import org.apache.myfaces.shared_impl.ut
*/
public final class Classpath
{
+ private static final Charset UTF8 = Charset.forName("UTF-8");
private Classpath()
{
}
@@ -265,7 +267,8 @@ public final class Classpath
{
jarFileUrl = jarFileUrl.substring("file:".length());
}
-
+ // make sure this is a valid file system path by removing escaping of white-space characters, etc.
+ jarFileUrl = decodeFilesystemUrl(jarFileUrl);
return new JarFile(jarFileUrl);
}
@@ -296,5 +299,39 @@ public final class Classpath
}
}
}
+
+ private static String decodeFilesystemUrl(String url) {
+ //borrowed from commons-io FileUtils.
+ String decoded = url;
+ if (url != null && url.indexOf('%') >= 0) {
+ int n = url.length();
+ StringBuffer buffer = new StringBuffer();
+ ByteBuffer bytes = ByteBuffer.allocate(n);
+ for (int i = 0; i < n;) {
+ if (url.charAt(i) == '%') {
+ try {
+ do {
+ byte octet = (byte) Integer.parseInt(url.substring(i + 1, i + 3), 16);
+ bytes.put(octet);
+ i += 3;
+ } while (i < n && url.charAt(i) == '%');
+ continue;
+ } catch (RuntimeException e) {
+ // malformed percent-encoded octet, fall through and
+ // append characters literally
+ } finally {
+ if (bytes.position() > 0) {
+ bytes.flip();
+ buffer.append(UTF8.decode(bytes).toString());
+ bytes.clear();
+ }
+ }
+ }
+ buffer.append(url.charAt(i++));
+ }
+ decoded = buffer.toString();
+ }
+ return decoded;
+ }
}