Author: pete
Date: Tue Sep  6 14:01:19 2011
New Revision: 1165675

URL: http://svn.apache.org/viewvc?rev=1165675&view=rev
Log:
WICKET-4020 ResourceMapper throws IllegalStateException when attempting to map 
a request to a URL ending in a empty segment (directory)

Modified:
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/ResourceMapper.java
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapperTest.java
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/ResourceMapperTest.java

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/ResourceMapper.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/ResourceMapper.java?rev=1165675&r1=1165674&r2=1165675&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/ResourceMapper.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/ResourceMapper.java
 Tue Sep  6 14:01:19 2011
@@ -237,11 +237,23 @@ public class ResourceMapper extends Abst
 
                if (segments.isEmpty() == false)
                {
+                       // get filename (the last segment)
                        final int lastSegmentAt = segments.size() - 1;
-                       final ResourceUrl resourceUrl = new 
ResourceUrl(segments.get(lastSegmentAt), parameters);
+                       String filename = segments.get(lastSegmentAt);
+                       
+                       // ignore requests with empty filename
+                       if(Strings.isEmpty(filename))
+                       {
+                               return;
+                       }
+                       
+                       // create resource url from filename and query 
parameters
+                       final ResourceUrl resourceUrl = new 
ResourceUrl(filename, parameters);
 
+                       // remove caching information from request
                        getCachingStrategy().undecorateUrl(resourceUrl);
                        
+                       // check for broken caching strategy (this must never 
happen)
                        if (Strings.isEmpty(resourceUrl.getFileName()))
                        {
                                throw new IllegalStateException("caching 
strategy returned empty name for " + resourceUrl);

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapperTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapperTest.java?rev=1165675&r1=1165674&r2=1165675&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapperTest.java
 (original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/BasicResourceReferenceMapperTest.java
 Tue Sep  6 14:01:19 2011
@@ -20,6 +20,7 @@ import java.io.Serializable;
 import java.util.Locale;
 
 import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Url;
 import 
org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler;
 import org.apache.wicket.request.mapper.parameter.INamedParameters;
@@ -37,6 +38,7 @@ import org.apache.wicket.util.IProvider;
 import org.apache.wicket.util.ValueProvider;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.StringResourceStream;
+import org.junit.Test;
 
 /**
  * @author Matej Knopp
@@ -515,6 +517,13 @@ public class BasicResourceReferenceMappe
                assertEquals("test-version-1.0.4-beta.txt", url.getFileName());
        }
 
+       public void testRequestWithEmptyFilename()
+       {
+               Url url = Url.parse("wicket/resource/" + CLASS_NAME + "/");
+               IRequestHandler handler = encoder.mapRequest(getRequest(url));
+               assertNull(handler);
+       }
+
        /**
         * Tests <a 
href="https://issues.apache.org/jira/browse/WICKET-3918";>WICKET-3918</a>.
         */

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/ResourceMapperTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/ResourceMapperTest.java?rev=1165675&r1=1165674&r2=1165675&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/ResourceMapperTest.java
 (original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/ResourceMapperTest.java
 Tue Sep  6 14:01:19 2011
@@ -247,6 +247,16 @@ public class ResourceMapperTest extends 
                assertEquals("123", params.get("val").toString());
        }
 
+       @Test
+       public void requestWithEmptyFilename()
+       {
+               // request invalid path with empty filename
+               // this must not return a handler  
+               Request request = createRequest("test2/image/");
+               IRequestHandler handler = 
mapperWithPlaceholder.mapRequest(request);
+               assertNull(handler);
+       }
+
        private static class TestResource implements IResource
        {
                private static final long serialVersionUID = 
-3130204487473856574L;


Reply via email to