Author: fhanik Date: Mon Jun 9 11:59:43 2008 New Revision: 665829 URL: http://svn.apache.org/viewvc?rev=665829&view=rev Log: apply whitespace tolerance fix
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=665829&r1=665828&r2=665829&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/STATUS.txt (original) +++ tomcat/tc6.0.x/trunk/STATUS.txt Mon Jun 9 11:59:43 2008 @@ -43,14 +43,6 @@ remm Ok with this addition, but I would only vote +0 for inclusion in this release (this still sounds like a very minor fix) -* Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=42750 - Make parsing of request line more tolerant of multiple SP and/or HT - Note: This is on the critical path - http://svn.apache.org/viewvc?rev=657954&view=rev - +1: markt, jfclere, fhanik - -1: - +0: remm - * After being done with an asynchronous sendfile, the socket should go to the poller (if assigned to a worker, it will block). Index: java/org/apache/tomcat/util/net/AprEndpoint.java 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=665829&r1=665828&r2=665829&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 Mon Jun 9 11:59:43 2008 @@ -403,7 +403,8 @@ throw new EOFException(sm.getString("iib.eof.error")); } - if (buf[pos] == Constants.SP) { + // Spec says single SP but it also says be tolerant of HT + if (buf[pos] == Constants.SP || buf[pos] == Constants.HT) { space = true; request.method().setBytes(buf, start, pos - start); } @@ -412,6 +413,20 @@ } + // Spec says single SP but also says be tolerant of multiple and/or HT + while (space) { + // Read new bytes if needed + if (pos >= lastValid) { + if (!fill()) + throw new EOFException(sm.getString("iib.eof.error")); + } + if (buf[pos] == Constants.SP || buf[pos] == Constants.HT) { + pos++; + } else { + space = false; + } + } + // Mark the current buffer position start = pos; int end = 0; @@ -421,7 +436,6 @@ // Reading the URI // - space = false; boolean eol = false; while (!space) { @@ -432,7 +446,8 @@ throw new EOFException(sm.getString("iib.eof.error")); } - if (buf[pos] == Constants.SP) { + // Spec says single SP but it also says be tolerant of HT + if (buf[pos] == Constants.SP || buf[pos] == Constants.HT) { space = true; end = pos; } else if ((buf[pos] == Constants.CR) @@ -459,6 +474,21 @@ request.requestURI().setBytes(buf, start, end - start); } + // Spec says single SP but also says be tolerant of multiple and/or HT + while (space) { + // Read new bytes if needed + if (pos >= lastValid) { + if (!fill()) + throw new EOFException(sm.getString("iib.eof.error")); + } + if (buf[pos] == Constants.SP || buf[pos] == Constants.HT) { + pos++; + } else { + space = false; + } + } + + // Mark the current buffer position start = pos; end = 0; 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=665829&r1=665828&r2=665829&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 Mon Jun 9 11:59:43 2008 @@ -391,7 +391,8 @@ throw new EOFException(sm.getString("iib.eof.error")); } - if (buf[pos] == Constants.SP) { + // Spec says single SP but it also says be tolerant of HT + if (buf[pos] == Constants.SP || buf[pos] == Constants.HT) { space = true; request.method().setBytes(buf, start, pos - start); } @@ -400,6 +401,21 @@ } + + // Spec says single SP but also says be tolerant of multiple and/or HT + while (space) { + // Read new bytes if needed + if (pos >= lastValid) { + if (!fill()) + throw new EOFException(sm.getString("iib.eof.error")); + } + if (buf[pos] == Constants.SP || buf[pos] == Constants.HT) { + pos++; + } else { + space = false; + } + } + // Mark the current buffer position start = pos; int end = 0; @@ -409,7 +425,6 @@ // Reading the URI // - space = false; boolean eol = false; while (!space) { @@ -420,7 +435,8 @@ throw new EOFException(sm.getString("iib.eof.error")); } - if (buf[pos] == Constants.SP) { + // Spec says single SP but it also says be tolerant of HT + if (buf[pos] == Constants.SP || buf[pos] == Constants.HT) { space = true; end = pos; } else if ((buf[pos] == Constants.CR) @@ -447,6 +463,20 @@ request.requestURI().setBytes(buf, start, end - start); } + // Spec says single SP but also says be tolerant of multiple and/or HT + while (space) { + // Read new bytes if needed + if (pos >= lastValid) { + if (!fill()) + throw new EOFException(sm.getString("iib.eof.error")); + } + if (buf[pos] == Constants.SP || buf[pos] == Constants.HT) { + pos++; + } else { + space = false; + } + } + // Mark the current buffer position start = pos; end = 0; 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=665829&r1=665828&r2=665829&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 Mon Jun 9 11:59:43 2008 @@ -454,7 +454,7 @@ if (!fill(true, false)) //request line parsing return false; } - if (buf[pos] == Constants.SP) { + if (buf[pos] == Constants.SP || buf[pos] == Constants.HT) { space = true; request.method().setBytes(buf, parsingRequestLineStart, pos - parsingRequestLineStart); } @@ -464,20 +464,34 @@ parsingRequestLinePhase = 3; } if ( parsingRequestLinePhase == 3 ) { + // Spec says single SP but also be tolerant of multiple and/or HT + boolean space = true; + while (space) { + // Read new bytes if needed + if (pos >= lastValid) { + if (!fill(true, false)) //request line parsing + return false; + } + if (buf[pos] == Constants.SP || buf[pos] == Constants.HT) { + pos++; + } else { + space = false; + } + } + // Mark the current buffer position int end = 0; // // Reading the URI // - boolean space = false; while (!space) { // Read new bytes if needed if (pos >= lastValid) { if (!fill(true,false)) //request line parsing return false; } - if (buf[pos] == Constants.SP) { + if (buf[pos] == Constants.SP || buf[pos] == Constants.HT) { space = true; end = pos; } else if ((buf[pos] == Constants.CR) @@ -504,6 +518,21 @@ parsingRequestLinePhase = 4; } if ( parsingRequestLinePhase == 4 ) { + // Spec says single SP but also be tolerant of multiple and/or HT + boolean space = true; + while (space) { + // Read new bytes if needed + if (pos >= lastValid) { + if (!fill(true, false)) //request line parsing + return false; + } + if (buf[pos] == Constants.SP || buf[pos] == Constants.HT) { + pos++; + } else { + space = false; + } + } + // Mark the current buffer position end = 0; 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=665829&r1=665828&r2=665829&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Mon Jun 9 11:59:43 2008 @@ -35,6 +35,9 @@ <section name="Tomcat 6.0.17 (remm)"> <subsection name="Catalina"> <changelog> + <fix><bug>42750</bug> + request line should be tolerant of multiple whitespaces. + </fix> <update> Add ManagerBase session getLastAccessedTimestamp and getCreationTimestamp for better remote JMX access. (pero) --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]