You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by fh...@apache.org on 2007/10/18 21:41:40 UTC

svn commit: r586102 - in /tomcat/sandbox/gdev6x: java/org/apache/tomcat/util/net/SecureNioChannel.java webapps/docs/changelog.xml

Author: fhanik
Date: Thu Oct 18 12:41:39 2007
New Revision: 586102

URL: http://svn.apache.org/viewvc?rev=586102&view=rev
Log:
Fix for http://issues.apache.org/bugzilla/show_bug.cgi?id=43653

Modified:
    tomcat/sandbox/gdev6x/java/org/apache/tomcat/util/net/SecureNioChannel.java
    tomcat/sandbox/gdev6x/webapps/docs/changelog.xml

Modified: tomcat/sandbox/gdev6x/java/org/apache/tomcat/util/net/SecureNioChannel.java
URL: http://svn.apache.org/viewvc/tomcat/sandbox/gdev6x/java/org/apache/tomcat/util/net/SecureNioChannel.java?rev=586102&r1=586101&r2=586102&view=diff
==============================================================================
--- tomcat/sandbox/gdev6x/java/org/apache/tomcat/util/net/SecureNioChannel.java (original)
+++ tomcat/sandbox/gdev6x/java/org/apache/tomcat/util/net/SecureNioChannel.java Thu Oct 18 12:41:39 2007
@@ -393,38 +393,45 @@
      * @todo Implement this java.nio.channels.WritableByteChannel method
      */
     public int write(ByteBuffer src) throws IOException {
-        //make sure we can handle expand, and that we only use on buffer
-        if ( src != bufHandler.getWriteBuffer() ) throw new IllegalArgumentException("You can only write using the application write buffer provided by the handler.");
-        //are we closing or closed?
-        if ( closing || closed) throw new IOException("Channel is in closing state.");
-        
-        //the number of bytes written
-        int written = 0;
-        
-        if (!flush(netOutBuffer)) {
-            //we haven't emptied out the buffer yet
+        if ( src == this.netOutBuffer ) {
+            //we can get here through a recursive call
+            //by using the NioBlockingSelector
+            int written = sc.write(src);
             return written;
-        }
+        } else {
+            //make sure we can handle expand, and that we only use on buffer
+            if ( src != bufHandler.getWriteBuffer() ) throw new IllegalArgumentException("You can only write using the application write buffer provided by the handler.");
+            //are we closing or closed?
+            if ( closing || closed) throw new IOException("Channel is in closing state.");
 
-        /*
-         * The data buffer is empty, we can reuse the entire buffer.
-         */
-        netOutBuffer.clear();
-
-        SSLEngineResult result = sslEngine.wrap(src, netOutBuffer);
-        written = result.bytesConsumed();
-        netOutBuffer.flip();
+            //the number of bytes written
+            int written = 0;
 
-        if (result.getStatus() == Status.OK) {
-            if (result.getHandshakeStatus() == HandshakeStatus.NEED_TASK) tasks();
-        } else {
-            throw new IOException("Unable to wrap data, invalid engine state: " +result.getStatus());
-        }        
+            if (!flush(netOutBuffer)) {
+                //we haven't emptied out the buffer yet
+                return written;
+            }
+
+            /*
+             * The data buffer is empty, we can reuse the entire buffer.
+             */
+            netOutBuffer.clear();
 
-        //force a flush
-        flush(netOutBuffer);
+            SSLEngineResult result = sslEngine.wrap(src, netOutBuffer);
+            written = result.bytesConsumed();
+            netOutBuffer.flip();
 
-        return written;
+            if (result.getStatus() == Status.OK) {
+                if (result.getHandshakeStatus() == HandshakeStatus.NEED_TASK) tasks();
+            } else {
+                throw new IOException("Unable to wrap data, invalid engine state: " +result.getStatus());
+            }        
+
+            //force a flush
+            flush(netOutBuffer);
+
+            return written;
+        }
     }
     
     /**

Modified: tomcat/sandbox/gdev6x/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/sandbox/gdev6x/webapps/docs/changelog.xml?rev=586102&r1=586101&r2=586102&view=diff
==============================================================================
--- tomcat/sandbox/gdev6x/webapps/docs/changelog.xml (original)
+++ tomcat/sandbox/gdev6x/webapps/docs/changelog.xml Thu Oct 18 12:41:39 2007
@@ -17,6 +17,9 @@
 <body>
 <section name="Tomcat g6.xdev(unknown)">
   <subsection name="Catalina">
+    <fix><bug>43653</bug>
+      Fix for SSL buffer mixup
+    </fix>
     <fix>
       <bug>42925</bug>: Add maintain for sendfile. (remm)
     </fix>



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