Author: markt Date: Fri Feb 13 12:35:32 2015 New Revision: 1659539 URL: http://svn.apache.org/r1659539 Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=57544 Avoid potential infinite loop. Chances are this is only triggered by code (WebSocket, non-blocking, async) that isn't in 6.0.x but better to clean it up anyway.
Modified: tomcat/tc6.0.x/trunk/STATUS.txt tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalInputBuffer.java tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Modified: tomcat/tc6.0.x/trunk/STATUS.txt URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/STATUS.txt?rev=1659539&r1=1659538&r2=1659539&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/STATUS.txt (original) +++ tomcat/tc6.0.x/trunk/STATUS.txt Fri Feb 13 12:35:32 2015 @@ -34,14 +34,6 @@ PATCHES PROPOSED TO BACKPORT: +1: kkolinko, remm, markt -1: -* Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=57544 - Avoid potential infinite loop. Chances are this is only triggered by code - (WebSocket, non-blocking, async) that isn't in 6.0.x but better to clean it up - anyway. - http://people.apache.org/~markt/patches/2015-02-08-bug57544-tc6-v1.patch - +1: markt, kkolinko, remm - -1: - * Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=57558 Add missing JARs in Ant task definition. Expand the pattern in catalina-tasks.xml to include all jars in ${catalina.home}/lib. Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java?rev=1659539&r1=1659538&r2=1659539&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java Fri Feb 13 12:35:32 2015 @@ -29,7 +29,6 @@ import org.apache.tomcat.util.buf.ByteCh import org.apache.tomcat.util.buf.MessageBytes; import org.apache.tomcat.util.http.MimeHeaders; import org.apache.tomcat.util.res.StringManager; - import org.apache.coyote.InputBuffer; import org.apache.coyote.Request; @@ -302,15 +301,8 @@ public class InternalAprInputBuffer impl request.recycle(); // Copy leftover bytes to the beginning of the buffer - if (lastValid - pos > 0) { - int npos = 0; - int opos = pos; - while (lastValid - opos > opos - npos) { - System.arraycopy(buf, opos, buf, npos, opos - npos); - npos += pos; - opos += pos; - } - System.arraycopy(buf, opos, buf, npos, lastValid - opos); + if (lastValid - pos > 0 && pos > 0) { + System.arraycopy(buf, pos, buf, 0, lastValid - pos); } // Recycle filters Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalInputBuffer.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalInputBuffer.java?rev=1659539&r1=1659538&r2=1659539&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalInputBuffer.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalInputBuffer.java Fri Feb 13 12:35:32 2015 @@ -303,15 +303,8 @@ public class InternalInputBuffer impleme request.recycle(); // Copy leftover bytes to the beginning of the buffer - if (lastValid - pos > 0) { - int npos = 0; - int opos = pos; - while (lastValid - opos > opos - npos) { - System.arraycopy(buf, opos, buf, npos, opos - npos); - npos += pos; - opos += pos; - } - System.arraycopy(buf, opos, buf, npos, lastValid - opos); + if (lastValid - pos > 0 && pos > 0) { + System.arraycopy(buf, pos, buf, 0, lastValid - pos); } // Recycle filters Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java?rev=1659539&r1=1659538&r2=1659539&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java Fri Feb 13 12:35:32 2015 @@ -372,15 +372,8 @@ public class InternalNioInputBuffer impl request.recycle(); // Copy leftover bytes to the beginning of the buffer - if (lastValid - pos > 0) { - int npos = 0; - int opos = pos; - while (lastValid - opos > opos - npos) { - System.arraycopy(buf, opos, buf, npos, opos - npos); - npos += pos; - opos += pos; - } - System.arraycopy(buf, opos, buf, npos, lastValid - opos); + if (lastValid - pos > 0 && pos > 0) { + System.arraycopy(buf, pos, buf, 0, lastValid - pos); } // Recycle filters Modified: tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml?rev=1659539&r1=1659538&r2=1659539&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Fri Feb 13 12:35:32 2015 @@ -70,6 +70,10 @@ that many bytes first before closing the connection to give the client a chance to read the reponse. (markt) </fix> + <fix> + <bug>57544</bug>: Fix a potential infinite loop when preparing a kept + alive HTTP connection for the next request. (markt) + </fix> </changelog> </subsection> <subsection name="Jasper"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org