[jboss-cvs] JBossAS SVN: r86567 - in branches/Branch_5_x: tomcat/src/main/org/jboss/web/tomcat/service/session and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Mar 31 22:40:41 EDT 2009


Author: bstansberry at jboss.com
Date: 2009-03-31 22:40:41 -0400 (Tue, 31 Mar 2009)
New Revision: 86567

Modified:
   branches/Branch_5_x/testsuite/src/main/org/jboss/test/cluster/defaultcfg/simpleweb/test/JvmRouteValveUnitTestCase.java
   branches/Branch_5_x/tomcat/src/main/org/jboss/web/tomcat/service/session/JvmRouteValve.java
Log:
[JBAS-6682] Avoid StringIndexOutOfBoundsException

Modified: branches/Branch_5_x/testsuite/src/main/org/jboss/test/cluster/defaultcfg/simpleweb/test/JvmRouteValveUnitTestCase.java
===================================================================
--- branches/Branch_5_x/testsuite/src/main/org/jboss/test/cluster/defaultcfg/simpleweb/test/JvmRouteValveUnitTestCase.java	2009-04-01 02:36:46 UTC (rev 86566)
+++ branches/Branch_5_x/testsuite/src/main/org/jboss/test/cluster/defaultcfg/simpleweb/test/JvmRouteValveUnitTestCase.java	2009-04-01 02:40:41 UTC (rev 86567)
@@ -532,6 +532,63 @@
       assertEquals(NON_FAILOVER_ID, session.getId());
       assertEquals(null, mgr.getNewCookieIdSession());
    }
+
+   public void testNoJvmRouteRequest() throws Exception
+   {
+      log.info("Enter testNoJvmRouteRequest");
+      
+      MockJBossManager mgr = new MockJBossManager();
+      mgr.setJvmRoute(JVM_ROUTE);
+       
+      JvmRouteValve jvmRouteValve = new JvmRouteValve(mgr);
+      
+      MockValve mockValve = new MockValve();
+      
+      jvmRouteValve.setNext(mockValve);
+      
+      Session session = mgr.createSession(NON_FAILOVER_ID);
+      MockRequest req = new MockRequest();
+      req.setSession(session.getSession());
+      req.setRequestedSessionId(NO_JVMROUTE_ID);
+      
+      Response res = new Response();
+      
+      jvmRouteValve.invoke(req, res);
+      
+      assertSame(req, mockValve.getInvokedRequest());
+      assertSame(res, mockValve.getInvokedResponse());
+      assertEquals(NON_FAILOVER_ID, session.getId());
+      assertEquals(NON_FAILOVER_ID, mgr.getNewCookieIdSession());
+   }
+
+   public void testNoJvmRouteRequestFromURL() throws Exception
+   {
+      log.info("Enter testNoJvmRouteRequest");
+      
+      MockJBossManager mgr = new MockJBossManager();
+      mgr.setJvmRoute(JVM_ROUTE);
+       
+      JvmRouteValve jvmRouteValve = new JvmRouteValve(mgr);
+      
+      MockValve mockValve = new MockValve();
+      
+      jvmRouteValve.setNext(mockValve);
+      
+      Session session = mgr.createSession(NON_FAILOVER_ID);
+      MockRequest req = new MockRequest();
+      req.setSession(session.getSession());
+      req.setRequestedSessionId(NO_JVMROUTE_ID);
+      req.setRequestedSessionIdFromURL(true);
+      
+      Response res = new Response();
+      
+      jvmRouteValve.invoke(req, res);
+      
+      assertSame(req, mockValve.getInvokedRequest());
+      assertSame(res, mockValve.getInvokedResponse());
+      assertEquals(NON_FAILOVER_ID, session.getId());
+      assertEquals(null, mgr.getNewCookieIdSession());
+   }
    
    public void testJvmRouteIncludesDomain() throws Exception
    {

Modified: branches/Branch_5_x/tomcat/src/main/org/jboss/web/tomcat/service/session/JvmRouteValve.java
===================================================================
--- branches/Branch_5_x/tomcat/src/main/org/jboss/web/tomcat/service/session/JvmRouteValve.java	2009-04-01 02:36:46 UTC (rev 86566)
+++ branches/Branch_5_x/tomcat/src/main/org/jboss/web/tomcat/service/session/JvmRouteValve.java	2009-04-01 02:40:41 UTC (rev 86567)
@@ -132,19 +132,19 @@
       
       // TODO. The current format is assumed to be id.jvmRoute. Can be generalized later.
       String sessionJvmRoute = null;
-      int index = sessionId.indexOf(".");
-      if (index > 0)
+      int index = sessionId.indexOf('.', 0);
+      if (index > -1 && index < sessionId.length() -1)
       {
          sessionJvmRoute = sessionId.substring(index + 1, sessionId.length());
       }
       
       if (!jvmRoute.equals(sessionJvmRoute))
       {
-         if (sessionJvmRoute == null)
+         if (index < 0)
          {
             // If this valve is turned on, we assume we have an appendix of jvmRoute. 
             // So this request is new.
-            newId = sessionId + "." + jvmRoute;
+            newId = new StringBuilder(sessionId).append('.').append(jvmRoute).toString();
          }         
          else 
          {
@@ -175,10 +175,10 @@
             String requestedJvmRoute = null;
             if (requestedId != null)
             {
-               index = requestedId.indexOf(".");
-               if (index > 0)
+               int reqIndex = requestedId.indexOf('.', 0);
+               if (reqIndex > -1 && reqIndex < requestedId.length() - 1)
                {
-                  requestedJvmRoute = requestedId.substring(index + 1, requestedId.length());
+                  requestedJvmRoute = requestedId.substring(reqIndex + 1, requestedId.length());
                }
             }
             
@@ -189,8 +189,8 @@
                   log_.trace("handleJvmRoute(): We have detected a failover with different jvmRoute." +
                      " received one: " + requestedJvmRoute + " new one: " + jvmRoute + ". Will resent the session id.");
                }
-               String base = sessionId.substring(0, index);
-               newId = base + "." + jvmRoute;
+               String base = index > -1 ? sessionId.substring(0, index) : sessionId;
+               newId = new StringBuilder(base).append('.').append(jvmRoute).toString();
             }
          }
 




More information about the jboss-cvs-commits mailing list