Author: markt Date: Mon Mar 9 12:59:05 2015 New Revision: 1665222 URL: http://svn.apache.org/r1665222 Log: Fix the 9.0.x version of BZ 57638. The assumption that a blocking read would fill the provided buffer was not valid.
Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java?rev=1665222&r1=1665221&r2=1665222&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Mon Mar 9 12:59:05 2015 @@ -17,6 +17,7 @@ package org.apache.coyote.ajp; import java.io.ByteArrayInputStream; +import java.io.EOFException; import java.io.IOException; import java.io.InterruptedIOException; import java.net.InetAddress; @@ -1517,8 +1518,17 @@ public class AjpProcessor extends Abstra */ private boolean read(byte[] buf, int pos, int n, boolean block) throws IOException { int read = socketWrapper.read(block, buf, pos, n); - if (!block && read > 0 && read < n) { - socketWrapper.read(true, buf, pos + n, n - read); + if (read > 0 && read < n) { + int left = n - read; + int start = pos + read; + while (left > 0) { + read = socketWrapper.read(true, buf, start, left); + if (read == -1) { + throw new EOFException(); + } + left = left - read; + start = start + read; + } } return read > 0; --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org