You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2007/03/13 17:07:46 UTC

svn commit: r517746 - in /tapestry/tapestry5/tapestry-core/trunk/src: main/java/org/apache/tapestry/internal/services/PageRenderDispatcher.java test/java/org/apache/tapestry/internal/services/PageRenderDispatcherTest.java

Author: hlship
Date: Tue Mar 13 09:07:45 2007
New Revision: 517746

URL: http://svn.apache.org/viewvc?view=rev&rev=517746
Log:
TAPESTRY-1343: Under Tomcat, a root path URL such as http://.../context (without a trailing slash) causes a StringIndexOutOfBoundsException inside PageRenderDispatcher

Modified:
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageRenderDispatcher.java
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageRenderDispatcherTest.java

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageRenderDispatcher.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageRenderDispatcher.java?view=diff&rev=517746&r1=517745&r2=517746
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageRenderDispatcher.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageRenderDispatcher.java Tue Mar 13 09:07:45 2007
@@ -54,6 +54,10 @@
 
         String path = request.getPath();
 
+        // TAPESTRY-1343: This can happen in Tomcat (but not in Jetty) for URL such as
+        // http://.../context (with no trailing slash).
+        if (path.equals("")) return false;
+
         int searchStart = 1;
 
         while (true)
@@ -89,14 +93,12 @@
                         context,
                         renderer);
 
-                if (responseGenerator != null)
-                    responseGenerator.sendClientResponse(response);
+                if (responseGenerator != null) responseGenerator.sendClientResponse(response);
 
                 return true;
             }
 
-            if (atEnd)
-                return false;
+            if (atEnd) return false;
 
             // Advance to the next slash within the path.
 
@@ -114,8 +116,7 @@
      */
     private String[] convertActivationContext(String extraPath)
     {
-        if(extraPath.length() == 0)
-            return new String[0];
+        if (extraPath.length() == 0) return new String[0];
 
         String[] context = extraPath.split("/");
 

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageRenderDispatcherTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageRenderDispatcherTest.java?view=diff&rev=517746&r1=517745&r2=517746
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageRenderDispatcherTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageRenderDispatcherTest.java Tue Mar 13 09:07:45 2007
@@ -55,6 +55,27 @@
         verify();
     }
 
+    // TAPESTRY-1343
+    @Test
+    public void empty_path() throws Exception
+    {
+        ComponentClassResolver resolver = newComponentClassResolver();
+        PageResponseRenderer renderer = newPageResponseRenderer();
+        PageLinkHandler handler = newMock(PageLinkHandler.class);
+        Request request = newRequest();
+        Response response = newResponse();
+
+        train_getPath(request, "");
+
+        replay();
+
+        Dispatcher d = new PageRenderDispatcher(resolver, handler, renderer);
+
+        assertFalse(d.dispatch(request, response));
+
+        verify();
+    }
+
     @Test
     public void no_extra_context_without_final_slash() throws Exception
     {