diff options
author | Greg Wilkins | 2014-10-30 03:12:43 +0000 |
---|---|---|
committer | Greg Wilkins | 2014-10-30 03:12:43 +0000 |
commit | 8eab088a3538fc043c404ed9ed4dc2b1ce6a771b (patch) | |
tree | 8c4425b587ad27ed1f5dac7381a1203bc6f331ec | |
parent | cde420a2fc0408a18c914ff297da749f6cadbb02 (diff) | |
download | org.eclipse.jetty.project-8eab088a3538fc043c404ed9ed4dc2b1ce6a771b.tar.gz org.eclipse.jetty.project-8eab088a3538fc043c404ed9ed4dc2b1ce6a771b.tar.xz org.eclipse.jetty.project-8eab088a3538fc043c404ed9ed4dc2b1ce6a771b.zip |
443550 improved FileResource encoded alias checking
3 files changed, 44 insertions, 5 deletions
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java index 37fda012e9..3b622655fc 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java @@ -303,6 +303,9 @@ public class ResourceHandler extends HandlerWrapper if (path==null || !path.startsWith("/")) throw new MalformedURLException(path); + if (LOG.isDebugEnabled()) + LOG.debug("{} getResource({})",_context==null?_baseResource:_context,_baseResource,path); + Resource base = _baseResource; if (base==null) { @@ -315,12 +318,22 @@ public class ResourceHandler extends HandlerWrapper { path=URIUtil.canonicalPath(path); Resource r = base.addPath(path); - if (r!=null && r.getAlias()!=null && !_context.checkAlias(path, r)) + + System.err.println(base+" + "+path+" = "+r); + + if (r!=null && r.getAlias()!=null && (_context==null || !_context.checkAlias(path, r))) + { + System.err.println("!OK "+r); + if (LOG.isDebugEnabled()) + LOG.debug("resource={} alias={}",r,r.getAlias()); return null; + } + System.err.println("OK "+r); return r; } catch(Exception e) { + e.printStackTrace(); LOG.ignore(e); } @@ -404,6 +417,16 @@ public class ResourceHandler extends HandlerWrapper } Resource resource = getResource(request); + + if (LOG.isDebugEnabled()) + { + if (resource==null) + LOG.debug("resource=null"); + else + LOG.debug("resource={} alias={} exists={}",resource,resource.getAlias(),resource.exists()); + } + + // If resource is not found if (resource==null || !resource.exists()) { diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/URIUtil.java b/jetty-util/src/main/java/org/eclipse/jetty/util/URIUtil.java index ca2013830c..e72f413d93 100644 --- a/jetty-util/src/main/java/org/eclipse/jetty/util/URIUtil.java +++ b/jetty-util/src/main/java/org/eclipse/jetty/util/URIUtil.java @@ -790,13 +790,12 @@ public class URIUtil if (cb=='%') cb=TypeUtil.convertHexDigit(uriB.charAt(b++))*16+TypeUtil.convertHexDigit(uriB.charAt(b++)); - if (ca!=cb) - return false; - if (ca=='/' && oa!=ob) return false; + + if (ca!=cb ) + return URIUtil.decodePath(uriA).equals(URIUtil.decodePath(uriB)); } - return a==lenA && b==lenB; } } diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/resource/AbstractFSResourceTest.java b/jetty-util/src/test/java/org/eclipse/jetty/util/resource/AbstractFSResourceTest.java index c9af65b90d..a25fd60e0f 100644 --- a/jetty-util/src/test/java/org/eclipse/jetty/util/resource/AbstractFSResourceTest.java +++ b/jetty-util/src/test/java/org/eclipse/jetty/util/resource/AbstractFSResourceTest.java @@ -47,6 +47,7 @@ import org.eclipse.jetty.toolchain.test.OS; import org.eclipse.jetty.toolchain.test.TestingDir; import org.eclipse.jetty.util.BufferUtil; import org.eclipse.jetty.util.CollectionAssert; +import org.junit.Assert; import org.junit.Rule; import org.junit.Test; @@ -498,4 +499,20 @@ public abstract class AbstractFSResourceTest // Expected path } } + + @Test + public void testUtf8Dir() throws Exception + { + File dir=new File(testdir.getDir(),"bãm"); + dir.mkdir(); + File file = new File(dir,"file.txt"); + file.createNewFile(); + + Resource base = newResource(dir); + Assert.assertNull(base.getAlias()); + + Resource r = base.addPath("file.txt"); + Assert.assertNull(r.getAlias()); + + } } |