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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org