Author: markt Date: Mon Feb 1 19:47:13 2016 New Revision: 1727992 URL: http://svn.apache.org/viewvc?rev=1727992&view=rev Log: Fix a consistent unit test failure on OSX (no idea why it started to appear now) Handle the case where the required TLS buffer increases after the connection has been initiated.
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SecureNioChannel.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SecureNioChannel.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SecureNioChannel.java?rev=1727992&r1=1727991&r2=1727992&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/SecureNioChannel.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/SecureNioChannel.java Mon Feb 1 19:47:13 2016 @@ -558,18 +558,33 @@ public class SecureNioChannel extends Ni if (unwrap.getStatus() == Status.BUFFER_UNDERFLOW) { break; } - } else if (unwrap.getStatus() == Status.BUFFER_OVERFLOW && read > 0) { - //buffer overflow can happen, if we have read data, then - //empty out the dst buffer before we do another read - break; + } else if (unwrap.getStatus() == Status.BUFFER_OVERFLOW) { + if (read > 0) { + // Buffer overflow can happen if we have read data. Return + // so the destination buffer can be emptied before another + // read is attempted + break; + } else { + // The SSL session has increased the required buffer size + // since the buffer was created. + if (dst == socket.getSocketBufferHandler().getReadBuffer()) { + // This is the normal case for this code + socket.getSocketBufferHandler().expand( + sslEngine.getSession().getApplicationBufferSize()); + dst = socket.getSocketBufferHandler().getReadBuffer(); + } else { + // Can't expand the buffer as there is no way to signal + // to the caller that the buffer has been replaced. + throw new IOException( + sm.getString("channel.nio.ssl.unwrapFail", unwrap.getStatus())); + } + } } else { - //here we should trap BUFFER_OVERFLOW and call expand on the buffer - //for now, throw an exception, as we initialized the buffers - //in the constructor + // Something else went wrong throw new IOException(sm.getString("channel.nio.ssl.unwrapFail", unwrap.getStatus())); } - } while ( (netInBuffer.position() != 0)); //continue to unwrapping as long as the input buffer has stuff - return (read); + } while (netInBuffer.position() != 0); //continue to unwrapping as long as the input buffer has stuff + return read; } /** Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1727992&r1=1727991&r2=1727992&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Mon Feb 1 19:47:13 2016 @@ -99,6 +99,10 @@ New configuration option <code>ajpFlush</code> for the AJP connectors to disable the sending of AJP flush packets. (rjung) </add> + <fix> + Handle the case in the NIO connector where the required TLS buffer sizes + increase after the connection has been initiated. (markt) + </fix> </changelog> </subsection> </section> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org