This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch 8.5.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 6c71b4f206730c20d3e81459d7d5e4a9d8234bae Author: Mark Thomas <ma...@apache.org> AuthorDate: Fri Jan 14 19:25:35 2022 +0000 Fix server push. Validation will see pseudo headers so should allow them --- java/org/apache/coyote/http2/StreamProcessor.java | 19 ++++++++++++++++++- webapps/docs/changelog.xml | 8 ++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/java/org/apache/coyote/http2/StreamProcessor.java b/java/org/apache/coyote/http2/StreamProcessor.java index c8731a6..734a4cb 100644 --- a/java/org/apache/coyote/http2/StreamProcessor.java +++ b/java/org/apache/coyote/http2/StreamProcessor.java @@ -18,7 +18,9 @@ package org.apache.coyote.http2; import java.io.IOException; import java.util.Enumeration; +import java.util.HashSet; import java.util.Iterator; +import java.util.Set; import javax.servlet.http.HttpServletResponse; @@ -49,9 +51,17 @@ class StreamProcessor extends AbstractProcessor { private static final Log log = LogFactory.getLog(StreamProcessor.class); private static final StringManager sm = StringManager.getManager(StreamProcessor.class); + private static final Set<String> H2_PSEUDO_HEADERS_REQUEST = new HashSet<>(); + private final Http2UpgradeHandler handler; private final Stream stream; + static { + H2_PSEUDO_HEADERS_REQUEST.add(":method"); + H2_PSEUDO_HEADERS_REQUEST.add(":scheme"); + H2_PSEUDO_HEADERS_REQUEST.add(":authority"); + H2_PSEUDO_HEADERS_REQUEST.add(":path"); + } StreamProcessor(Http2UpgradeHandler handler, Stream stream, Adapter adapter, SocketWrapperBase<?> socketWrapper) { @@ -456,9 +466,16 @@ class StreamProcessor extends AbstractProcessor { // HTTP header names must be tokens. MimeHeaders headers = request.getMimeHeaders(); + boolean previousHeaderWasPseudoHeader = true; Enumeration<String> names = headers.names(); while (names.hasMoreElements()) { - if (!HttpParser.isToken(names.nextElement())) { + String name = names.nextElement(); + if (H2_PSEUDO_HEADERS_REQUEST.contains(name)) { + if (!previousHeaderWasPseudoHeader) { + return false; + } + } else if (!HttpParser.isToken(name)) { + previousHeaderWasPseudoHeader = false; return false; } } diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 5b5fa84..aa82f3d 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -105,6 +105,14 @@ issues do not "pop up" wrt. others). --> <section name="Tomcat 8.5.75 (schultz)" rtext="In development"> + <subsection name="Coyote"> + <changelog> + <fix> + Correct a regression in the fix for <bug>65785</bug> that broke HTTP/2 + server push. (markt) + </fix> + </changelog> + </subsection> </section> <section name="Tomcat 8.5.74 (schultz)" rtext="Release in progress"> <subsection name="Catalina"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org