Projects
Mega:24.03:SP1:Everything
tomcat
_service:tar_scm:CVE-2021-33037-1.patch
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:CVE-2021-33037-1.patch of Package tomcat
From 94a5f7b95adee95fbc945767a71c27e329970a80 Mon Sep 17 00:00:00 2001 From: Mark Thomas <markt@apache.org> Date: Mon, 10 May 2021 21:20:46 +0100 Subject: [PATCH] Remove support for the identity T-E header value --- .../apache/coyote/http11/Http11Processor.java | 7 +- .../coyote/http11/TestHttp11Processor.java | 95 ++++++++++++++----- webapps/docs/changelog.xml | 6 ++ 3 files changed, 78 insertions(+), 30 deletions(-) diff --git a/java/org/apache/coyote/http11/Http11Processor.java b/java/org/apache/coyote/http11/Http11Processor.java index 86556ec..c840c83 100644 --- a/java/org/apache/coyote/http11/Http11Processor.java +++ b/java/org/apache/coyote/http11/Http11Processor.java @@ -243,11 +243,8 @@ public class Http11Processor extends AbstractProcessor { // encoding names are case insensitive. (RFC2616, section 3.6) encodingName = encodingName.trim().toLowerCase(Locale.ENGLISH); - if (encodingName.equals("identity")) { - // Skip - } else if (encodingName.equals("chunked")) { - inputBuffer.addActiveFilter - (inputFilters[Constants.CHUNKED_FILTER]); + if (encodingName.equals("chunked")) { + inputBuffer.addActiveFilter(inputFilters[Constants.CHUNKED_FILTER]); contentDelimitation = true; } else { for (int i = pluggableFilterIndex; i < inputFilters.length; i++) { diff --git a/test/org/apache/coyote/http11/TestHttp11Processor.java b/test/org/apache/coyote/http11/TestHttp11Processor.java index 5357526..1d12007 100644 --- a/test/org/apache/coyote/http11/TestHttp11Processor.java +++ b/test/org/apache/coyote/http11/TestHttp11Processor.java @@ -249,31 +249,6 @@ public class TestHttp11Processor extends TomcatBaseTest { } - @Test - public void testWithTEIdentity() throws Exception { - getTomcatInstanceTestWebapp(false, true); - - String request = - "POST /test/echo-params.jsp HTTP/1.1" + SimpleHttpClient.CRLF + - "Host: any" + SimpleHttpClient.CRLF + - "Transfer-encoding: identity" + SimpleHttpClient.CRLF + - "Content-Length: 9" + SimpleHttpClient.CRLF + - "Content-Type: application/x-www-form-urlencoded" + - SimpleHttpClient.CRLF + - "Connection: close" + SimpleHttpClient.CRLF + - SimpleHttpClient.CRLF + - "test=data"; - - Client client = new Client(getPort()); - client.setRequest(new String[] {request}); - - client.connect(); - client.processRequest(); - Assert.assertTrue(client.isResponse200()); - Assert.assertTrue(client.getResponseBody().contains("test - data")); - } - - @Test public void testWithTESavedRequest() throws Exception { getTomcatInstanceTestWebapp(false, true); @@ -1308,4 +1283,74 @@ public class TestHttp11Processor extends TomcatBaseTest { // Expected response is a 200 response. Assert.assertTrue(client.isResponse200()); } + + + @Test + public void testTEHeaderUnknown01() throws Exception { + doTestTEHeaderUnknown("identity"); + } + + + @Test + public void testTEHeaderUnknown02() throws Exception { + doTestTEHeaderUnknown("identity, chunked"); + } + + + @Test + public void testTEHeaderUnknown03() throws Exception { + doTestTEHeaderUnknown("unknown, chunked"); + } + + + @Test + public void testTEHeaderUnknown04() throws Exception { + doTestTEHeaderUnknown("void"); + } + + + @Test + public void testTEHeaderUnknown05() throws Exception { + doTestTEHeaderUnknown("void, chunked"); + } + + + @Test + public void testTEHeaderUnknown06() throws Exception { + doTestTEHeaderUnknown("void, identity"); + } + + + @Test + public void testTEHeaderUnknown07() throws Exception { + doTestTEHeaderUnknown("identity, void"); + } + + + private void doTestTEHeaderUnknown(String headerValue) throws Exception { + Tomcat tomcat = getTomcatInstance(); + + // No file system docBase required + Context ctx = tomcat.addContext("", null); + + // Add servlet + Tomcat.addServlet(ctx, "TesterServlet", new TesterServlet(false)); + ctx.addServletMappingDecoded("/foo", "TesterServlet"); + + tomcat.start(); + + String request = + "GET /foo HTTP/1.1" + SimpleHttpClient.CRLF + + "Host: localhost:" + getPort() + SimpleHttpClient.CRLF + + "Transfer-Encoding: " + headerValue + SimpleHttpClient.CRLF + + SimpleHttpClient.CRLF; + + Client client = new Client(tomcat.getConnector().getLocalPort()); + client.setRequest(new String[] {request}); + + client.connect(); + client.processRequest(false); + + Assert.assertTrue(client.isResponse501()); + } } diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index bc37288..94a0d94 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -309,6 +309,12 @@ Enable host name verification when using TLS with the WebSocket client. (markt) </fix> + <fix> + Remove support for the <code>identity</code> transfer encoding. The + inclusion of this encoding in RFC 2616 was an error that was corrected + in 2001. Requests using this transfer encoding will now receive a 501 + response. (markt) + </fix> </changelog> </subsection> <subsection name="Web applications"> -- 2.23.0
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2