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 2013/05/28 13:26:21 UTC
svn commit: r1486875 - in /tomcat/trunk:
java/org/apache/coyote/http11/InternalNioInputBuffer.java
test/org/apache/catalina/startup/SimpleHttpClient.java
test/org/apache/coyote/http11/TestInternalInputBuffer.java
Author: markt
Date: Tue May 28 11:26:20 2013
New Revision: 1486875
URL: http://svn.apache.org/r1486875
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=54947
NIO connector incorrectly rejects a request if the CRLF terminating the request line is split across multiple packets.
Patch for the fix by Konstantin Preißer.
I added a test case.
Modified:
tomcat/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java
tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java
tomcat/trunk/test/org/apache/coyote/http11/TestInternalInputBuffer.java
Modified: tomcat/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java?rev=1486875&r1=1486874&r2=1486875&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java Tue May 28 11:26:20 2013
@@ -372,11 +372,11 @@ public class InternalNioInputBuffer exte
}
parsingRequestLineStart = pos;
parsingRequestLinePhase = 6;
- }
- if (parsingRequestLinePhase == 6) {
- // Mark the current buffer position
+ // Mark the current buffer position
end = 0;
+ }
+ if (parsingRequestLinePhase == 6) {
//
// Reading the protocol
// Protocol is always US-ASCII
Modified: tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java?rev=1486875&r1=1486874&r2=1486875&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java (original)
+++ tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java Tue May 28 11:26:20 2013
@@ -42,7 +42,9 @@ public abstract class SimpleHttpClient {
public static final String TEMP_DIR =
System.getProperty("java.io.tmpdir");
- public static final String CRLF = "\r\n";
+ public static final String CR = "\r";
+ public static final String LF = "\n";
+ public static final String CRLF = CR + LF;
public static final String INFO_100 = "HTTP/1.1 100";
public static final String OK_200 = "HTTP/1.1 200";
Modified: tomcat/trunk/test/org/apache/coyote/http11/TestInternalInputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http11/TestInternalInputBuffer.java?rev=1486875&r1=1486874&r2=1486875&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http11/TestInternalInputBuffer.java (original)
+++ tomcat/trunk/test/org/apache/coyote/http11/TestInternalInputBuffer.java Tue May 28 11:26:20 2013
@@ -415,4 +415,67 @@ public class TestInternalInputBuffer ext
}
+ /**
+ * Test case for https://issues.apache.org/bugzilla/show_bug.cgi?id=54947
+ */
+ @Test
+ public void testBug54947() {
+
+ Bug54947Client client = new Bug54947Client();
+
+ client.doRequest();
+ assertTrue(client.isResponse200());
+ assertTrue(client.isResponseBodyOK());
+ }
+
+
+ /**
+ * Bug 54947 test client.
+ */
+ private class Bug54947Client extends SimpleHttpClient {
+
+ private Exception doRequest() {
+
+ Tomcat tomcat = getTomcatInstance();
+
+ Context root = tomcat.addContext("", TEMP_DIR);
+ Tomcat.addServlet(root, "Bug54947", new TesterServlet());
+ root.addServletMapping("/test", "Bug54947");
+
+ try {
+ tomcat.start();
+ setPort(tomcat.getConnector().getLocalPort());
+
+ // Open connection
+ connect();
+
+ String[] request = new String[2];
+ request[0] = "GET http://localhost:8080/test HTTP/1.1" + CR;
+ request[1] = LF +
+ "Connection: close" + CRLF +
+ CRLF;
+
+ setRequest(request);
+ processRequest(); // blocks until response has been read
+
+ // Close the connection
+ disconnect();
+ } catch (Exception e) {
+ return e;
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isResponseBodyOK() {
+ if (getResponseBody() == null) {
+ return false;
+ }
+ if (!getResponseBody().contains("OK")) {
+ return false;
+ }
+ return true;
+ }
+
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org