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 2019/04/07 17:23:08 UTC
[tomcat] branch master updated: Fix missing query string on
protocol upgrade
This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/master by this push:
new f4681e6 Fix missing query string on protocol upgrade
f4681e6 is described below
commit f4681e638990f54eefc92a06c63e7431a9badaeb
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Sun Apr 7 18:22:23 2019 +0100
Fix missing query string on protocol upgrade
---
java/org/apache/coyote/http11/Http11Processor.java | 1 +
.../apache/coyote/http2/TestStreamQueryString.java | 52 ++++++++++++++++++++--
webapps/docs/changelog.xml | 5 +++
3 files changed, 55 insertions(+), 3 deletions(-)
diff --git a/java/org/apache/coyote/http11/Http11Processor.java b/java/org/apache/coyote/http11/Http11Processor.java
index c5f198c..e272a92 100644
--- a/java/org/apache/coyote/http11/Http11Processor.java
+++ b/java/org/apache/coyote/http11/Http11Processor.java
@@ -513,6 +513,7 @@ public class Http11Processor extends AbstractProcessor {
dest.method().duplicate(source.method());
dest.getMimeHeaders().duplicate(source.getMimeHeaders());
dest.requestURI().duplicate(source.requestURI());
+ dest.queryString().duplicate(source.queryString());
return dest;
diff --git a/test/org/apache/coyote/http2/TestStreamQueryString.java b/test/org/apache/coyote/http2/TestStreamQueryString.java
index f92540c..b1749e9 100644
--- a/test/org/apache/coyote/http2/TestStreamQueryString.java
+++ b/test/org/apache/coyote/http2/TestStreamQueryString.java
@@ -20,6 +20,7 @@ import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -73,15 +74,13 @@ public class TestStreamQueryString extends Http2TestBase {
Tomcat tomcat = getTomcatInstance();
Context ctxt = tomcat.addContext("", null);
- Tomcat.addServlet(ctxt, "simple", new SimpleServlet());
- ctxt.addServletMappingDecoded("/simple", "simple");
Tomcat.addServlet(ctxt, "query", new Query(queryValue));
ctxt.addServletMappingDecoded("/query", "query");
tomcat.start();
openClientConnection();
- doHttpUpgrade();
+ doHttpUpgrade(queryValue);
sendClientPreface();
validateHttp2InitialResponse();
@@ -105,6 +104,53 @@ public class TestStreamQueryString extends Http2TestBase {
}
+ protected void doHttpUpgrade(String queryValue) throws IOException {
+ byte[] upgradeRequest = ("GET /query?" + Query.PARAM_NAME + "=" + queryValue + " HTTP/1.1\r\n" +
+ "Host: localhost:" + getPort() + "\r\n" +
+ "Connection: "+ DEFAULT_CONNECTION_HEADER_VALUE + "\r\n" +
+ "Upgrade: h2c\r\n" +
+ EMPTY_HTTP2_SETTINGS_HEADER +
+ "\r\n").getBytes(StandardCharsets.ISO_8859_1);
+ os.write(upgradeRequest);
+ os.flush();
+
+ Assert.assertTrue("Failed to read HTTP Upgrade response",
+ readHttpUpgradeResponse());
+ }
+
+
+ @Override
+ protected void validateHttp2InitialResponse() throws Exception {
+ // - 101 response acts as acknowledgement of the HTTP2-Settings header
+ // Need to read 5 frames
+ // - settings (server settings - must be first)
+ // - settings ack (for the settings frame in the client preface)
+ // - ping
+ // - headers (for response)
+ // - data (for response body)
+ parser.readFrame(true);
+ parser.readFrame(true);
+ parser.readFrame(true);
+ parser.readFrame(true);
+ parser.readFrame(true);
+
+ Assert.assertEquals("0-Settings-[3]-[200]\n" +
+ "0-Settings-End\n" +
+ "0-Settings-Ack\n" +
+ "0-Ping-[0,0,0,0,0,0,0,1]\n" +
+ "1-HeadersStart\n" +
+ "1-Header-[:status]-[200]\n" +
+ "1-Header-[content-type]-[text/plain;charset=UTF-8]\n" +
+ "1-Header-[content-length]-[2]\n" +
+ "1-Header-[date]-[Wed, 11 Nov 2015 19:18:42 GMT]\n" +
+ "1-HeadersEnd\n" +
+ "1-Body-2\n" +
+ "1-EndOfStream\n", output.getTrace());
+
+ output.clearTrace();
+ }
+
+
private static final class Query extends HttpServlet {
private static final long serialVersionUID = 1L;
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index a327e90..7a7601c 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -127,6 +127,11 @@
<fix>
Fix NIO2 SSL edge cases. (remm)
</fix>
+ <fix>
+ When performing an upgrade from HTTP/1.1 to HTTP/2, ensure that any
+ query string present in the original HTTP/1.1 request is passed to the
+ HTTP/2 request processing. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Jasper">
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org