Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Wilkins2014-10-30 03:12:43 +0000
committerGreg Wilkins2014-10-30 03:12:43 +0000
commit8eab088a3538fc043c404ed9ed4dc2b1ce6a771b (patch)
tree8c4425b587ad27ed1f5dac7381a1203bc6f331ec
parentcde420a2fc0408a18c914ff297da749f6cadbb02 (diff)
downloadorg.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
-rw-r--r--jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java25
-rw-r--r--jetty-util/src/main/java/org/eclipse/jetty/util/URIUtil.java7
-rw-r--r--jetty-util/src/test/java/org/eclipse/jetty/util/resource/AbstractFSResourceTest.java17
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());
+
+ }
}

Back to the top