You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2015/03/09 13:59:05 UTC
svn commit: r1665222 -
/tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org