You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by pe...@apache.org on 2005/12/12 13:29:27 UTC

svn commit: r356252 - in /tomcat/container/tc5.5.x: modules/cluster/src/share/org/apache/catalina/cluster/io/XByteBuffer.java modules/cluster/src/share/org/apache/catalina/cluster/tcp/DataSender.java webapps/docs/changelog.xml

Author: pero
Date: Mon Dec 12 04:29:16 2005
New Revision: 356252

URL: http://svn.apache.org/viewcvs?rev=356252&view=rev
Log:
Fix Bug 37808 -- 'java.lang.ArrayIndexOutOfBoundsException inside XByteBuffer.java.
Very production critical bug, arrgh!

Modified:
    tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/io/XByteBuffer.java
    tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/DataSender.java
    tomcat/container/tc5.5.x/webapps/docs/changelog.xml

Modified: tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/io/XByteBuffer.java
URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/io/XByteBuffer.java?rev=356252&r1=356251&r2=356252&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/io/XByteBuffer.java (original)
+++ tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/io/XByteBuffer.java Mon Dec 12 04:29:16 2005
@@ -1,5 +1,5 @@
 /*
- * Copyright 1999,2004 The Apache Software Foundation.
+ * Copyright 1999,2004-2005 The Apache Software Foundation.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,14 +28,13 @@
  * Transfer package:
  * <ul>
  * <li><b>START_DATA/b> - 7 bytes - <i>FLT2002</i></li>
+ * <li><b>COMPRESS</b>  - 4 bytes - is message compressed flag</li>
  * <li><b>SIZE</b>      - 4 bytes - size of the data package</li>
  * <li><b>DATA</b>      - should be as many bytes as the prev SIZE</li>
  * <li><b>END_DATA</b>  - 7 bytes - <i>TLF2003</i></lI>
  * </ul>
  * FIXME: Why we not use a list of byte buffers?
  * FIXME: Used a pool of buffers instead, every time new generation
- * FIXME: Compress mode send real data length at the first bytes?
- * FIXME: s to-do.txt for new format proposal
  *
  * @author Filip Hanik
  * @author Peter Rossbach
@@ -145,7 +144,7 @@
     /**
      * Internal mechanism to make a check if a complete package exists
      * within the buffer
-     * @return - true if a complete package (header,size,data,footer) exists within the buffer
+     * @return - true if a complete package (header,compress,size,data,footer) exists within the buffer
      */
     public int countPackages()
     {
@@ -157,10 +156,11 @@
             //first check start header
             int index = XByteBuffer.firstIndexOf(buf,start,START_DATA);
             //if the header (START_DATA) isn't the first thing or
-            //the buffer isn't even 10 bytes
-            if ( index != start || ((bufSize-start)<10) ) break;
-            //then get the size 4 bytes
+            //the buffer isn't even 14 bytes
+            if ( index != start || ((bufSize-start)<14) ) break;
+            //then get the compress 4 bytes
             int compress = toInt(buf, pos);
+            //then get the size 4 bytes
             int size = toInt(buf, pos+4);
             //now the total buffer has to be long enough to hold
             //START_DATA.length+8+size+END_DATA.length
@@ -181,7 +181,7 @@
 
     /**
      * Method to check if a package exists in this byte buffer.
-     * @return - true if a complete package (header,size,data,footer) exists within the buffer
+     * @return - true if a complete package (header,compress,size,data,footer) exists within the buffer
      */
     public boolean doesPackageExist()  {
         return (countPackages()>0);
@@ -191,7 +191,7 @@
      * Extracts the message bytes from a package.
      * If no package exists, a IllegalStateException will be thrown.
      * @param clearFromBuffer - if true, the package will be removed from the byte buffer
-     * @return - returns the actual message bytes (header, size and footer not included).
+     * @return - returns the actual message bytes (header, compress,size and footer not included).
      */
     public ClusterData extractPackage(boolean clearFromBuffer)
             throws java.io.IOException {
@@ -211,12 +211,6 @@
             bufSize = bufSize - totalsize;
             System.arraycopy(buf, totalsize, buf, 0, bufSize);
         }
-        //int size = toInt(buf, START_DATA.length);
-        //byte[] data = new byte[size];
-        //System.arraycopy(buf, START_DATA.length + 4, data, 0, size);
-        //if (clearFromBuffer) {
-        //    int totalsize = START_DATA.length + 4 + size + END_DATA.length;
-
         return cdata;
     }
 

Modified: tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/DataSender.java
URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/DataSender.java?rev=356252&r1=356251&r2=356252&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/DataSender.java (original)
+++ tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/DataSender.java Mon Dec 12 04:29:16 2005
@@ -818,6 +818,9 @@
                     throw xx ;
                 }
             } else {
+                synchronized(this) {
+                    closeSocket();
+                }
                 exception = x;
                 // FIXME Hmm, throw the exception or not?
             }

Modified: tomcat/container/tc5.5.x/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/webapps/docs/changelog.xml?rev=356252&r1=356251&r2=356252&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/webapps/docs/changelog.xml (original)
+++ tomcat/container/tc5.5.x/webapps/docs/changelog.xml Mon Dec 12 04:29:16 2005
@@ -29,6 +29,16 @@
       </fix>
     </changelog>
   </subsection>
+    <subsection name="Cluster">
+    <changelog>
+      <fix>
+       <bug>37808</bug>: Fix ArrayIndexOutOfBoundsException inside XByteBuffer. Reported by Dietmar Mueller (pero)
+      </fix>
+      <add>
+        DataSender starts new Socket after IOException. (pero)
+      </add>
+    </changelog>
+  </subsection>
 </section>
 
 <section name="Tomcat 5.5.14 (yoavs)">



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org