Author: markt Date: Tue Nov 23 21:45:56 2010 New Revision: 1038351 URL: http://svn.apache.org/viewvc?rev=1038351&view=rev Log: Move configuration of trailer header size limit to the connector
Modified: tomcat/trunk/java/org/apache/coyote/Constants.java tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java tomcat/trunk/java/org/apache/coyote/http11/filters/ChunkedInputFilter.java tomcat/trunk/test/org/apache/coyote/http11/filters/TestChunkedInputFilter.java tomcat/trunk/webapps/docs/config/http.xml tomcat/trunk/webapps/docs/config/systemprops.xml Modified: tomcat/trunk/java/org/apache/coyote/Constants.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/Constants.java?rev=1038351&r1=1038350&r2=1038351&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/Constants.java (original) +++ tomcat/trunk/java/org/apache/coyote/Constants.java Tue Nov 23 21:45:56 2010 @@ -67,14 +67,5 @@ public final class Constants { public static final boolean USE_CUSTOM_STATUS_MSG_IN_HEADER = Boolean.valueOf(System.getProperty( "org.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER", - "false")).booleanValue(); - - /** - * Limit on the total length of the trailer headers in - * a chunked HTTP request. - */ - public static final int MAX_TRAILER_SIZE = - Integer.parseInt(System.getProperty( - "org.apache.coyote.MAX_TRAILER_SIZE", - "8192")); + "false")).booleanValue(); } Modified: tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java?rev=1038351&r1=1038350&r2=1038351&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java Tue Nov 23 21:45:56 2010 @@ -771,13 +771,13 @@ public abstract class AbstractHttp11Proc /** * Initialize standard input and output filters. */ - protected void initializeFilters() { + protected void initializeFilters(int maxTrailerSize) { // Create and add the identity filters. getInputBuffer().addFilter(new IdentityInputFilter()); getOutputBuffer().addFilter(new IdentityOutputFilter()); // Create and add the chunked filters. - getInputBuffer().addFilter(new ChunkedInputFilter()); + getInputBuffer().addFilter(new ChunkedInputFilter(maxTrailerSize)); getOutputBuffer().addFilter(new ChunkedOutputFilter()); // Create and add the void filters. Modified: tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java?rev=1038351&r1=1038350&r2=1038351&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java Tue Nov 23 21:45:56 2010 @@ -332,6 +332,16 @@ public abstract class AbstractHttp11Prot public void setServer( String server ) { this.server = server; } public String getServer() { return server; } + // HTTP + /** + * Maximum size of trailing headers in bytes + */ + private int maxTrailerSize = 8192; + public int getMaxTrailerSize() { return maxTrailerSize; } + public void setMaxTrailerSize(int maxTrailerSize) { + this.maxTrailerSize = maxTrailerSize; + } + @Override public Executor getExecutor() { return endpoint.getExecutor(); } public void setExecutor(Executor executor) { endpoint.setExecutor(executor); } Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java?rev=1038351&r1=1038350&r2=1038351&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java Tue Nov 23 21:45:56 2010 @@ -66,7 +66,8 @@ public class Http11AprProcessor extends // ----------------------------------------------------------- Constructors - public Http11AprProcessor(int headerBufferSize, AprEndpoint endpoint) { + public Http11AprProcessor(int headerBufferSize, AprEndpoint endpoint, + int maxTrailerSize) { this.endpoint = endpoint; @@ -82,7 +83,7 @@ public class Http11AprProcessor extends ssl = endpoint.isSSLEnabled(); - initializeFilters(); + initializeFilters(maxTrailerSize); // Cause loading of HexUtils HexUtils.load(); Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java?rev=1038351&r1=1038350&r2=1038351&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java Tue Nov 23 21:45:56 2010 @@ -433,7 +433,8 @@ public class Http11AprProtocol extends A protected Http11AprProcessor createProcessor() { Http11AprProcessor processor = new Http11AprProcessor( - proto.getMaxHttpHeaderSize(), (AprEndpoint)proto.endpoint); + proto.getMaxHttpHeaderSize(), (AprEndpoint)proto.endpoint, + proto.getMaxTrailerSize()); processor.setAdapter(proto.adapter); processor.setMaxKeepAliveRequests(proto.getMaxKeepAliveRequests()); processor.setTimeout(proto.timeout); Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java?rev=1038351&r1=1038350&r2=1038351&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Tue Nov 23 21:45:56 2010 @@ -68,7 +68,8 @@ public class Http11NioProcessor extends // ----------------------------------------------------------- Constructors - public Http11NioProcessor(int maxHttpHeaderSize, NioEndpoint endpoint) { + public Http11NioProcessor(int maxHttpHeaderSize, NioEndpoint endpoint, + int maxTrailerSize) { this.endpoint = endpoint; @@ -84,7 +85,7 @@ public class Http11NioProcessor extends ssl = endpoint.isSSLEnabled(); - initializeFilters(); + initializeFilters(maxTrailerSize); // Cause loading of HexUtils HexUtils.load(); Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java?rev=1038351&r1=1038350&r2=1038351&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java Tue Nov 23 21:45:56 2010 @@ -433,8 +433,8 @@ public class Http11NioProtocol extends A public Http11NioProcessor createProcessor() { Http11NioProcessor processor = new Http11NioProcessor( - proto.getMaxHttpHeaderSize(), - (NioEndpoint)proto.endpoint); + proto.getMaxHttpHeaderSize(), (NioEndpoint)proto.endpoint, + proto.getMaxTrailerSize()); processor.setAdapter(proto.adapter); processor.setMaxKeepAliveRequests(proto.getMaxKeepAliveRequests()); processor.setTimeout(proto.getTimeout()); Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java?rev=1038351&r1=1038350&r2=1038351&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java Tue Nov 23 21:45:56 2010 @@ -61,7 +61,8 @@ public class Http11Processor extends Abs // ------------------------------------------------------------ Constructor - public Http11Processor(int headerBufferSize, JIoEndpoint endpoint) { + public Http11Processor(int headerBufferSize, JIoEndpoint endpoint, + int maxTrailerSize) { this.endpoint = endpoint; @@ -75,7 +76,7 @@ public class Http11Processor extends Abs response.setOutputBuffer(outputBuffer); request.setResponse(response); - initializeFilters(); + initializeFilters(maxTrailerSize); // Cause loading of HexUtils HexUtils.load(); Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java?rev=1038351&r1=1038350&r2=1038351&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java Tue Nov 23 21:45:56 2010 @@ -293,8 +293,9 @@ public class Http11Protocol extends Abst } protected Http11Processor createProcessor() { - Http11Processor processor = - new Http11Processor(proto.getMaxHttpHeaderSize(), (JIoEndpoint)proto.endpoint); + Http11Processor processor = new Http11Processor( + proto.getMaxHttpHeaderSize(), (JIoEndpoint)proto.endpoint, + proto.getMaxTrailerSize()); processor.setAdapter(proto.adapter); processor.setMaxKeepAliveRequests(proto.getMaxKeepAliveRequests()); processor.setKeepAliveTimeout(proto.getKeepAliveTimeout()); Modified: tomcat/trunk/java/org/apache/coyote/http11/filters/ChunkedInputFilter.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/filters/ChunkedInputFilter.java?rev=1038351&r1=1038350&r2=1038351&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/filters/ChunkedInputFilter.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/filters/ChunkedInputFilter.java Tue Nov 23 21:45:56 2010 @@ -102,15 +102,7 @@ public class ChunkedInputFilter implemen /** * Byte chunk used to store trailing headers. */ - protected ByteChunk trailingHeaders; - - { - trailingHeaders = new ByteChunk(); - if (org.apache.coyote.Constants.MAX_TRAILER_SIZE > 0) { - trailingHeaders.setLimit(org.apache.coyote.Constants.MAX_TRAILER_SIZE); - } - } - + protected ByteChunk trailingHeaders = new ByteChunk(); /** * Flag set to true if the next call to doRead() must parse a CRLF pair @@ -124,8 +116,10 @@ public class ChunkedInputFilter implemen */ private Request request; - // ------------------------------------------------------------- Properties - + // ----------------------------------------------------------- Constructors + public ChunkedInputFilter(int maxTrailerSize) { + this.trailingHeaders.setLimit(maxTrailerSize); + } // ---------------------------------------------------- InputBuffer Methods Modified: tomcat/trunk/test/org/apache/coyote/http11/filters/TestChunkedInputFilter.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http11/filters/TestChunkedInputFilter.java?rev=1038351&r1=1038350&r2=1038351&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/coyote/http11/filters/TestChunkedInputFilter.java (original) +++ tomcat/trunk/test/org/apache/coyote/http11/filters/TestChunkedInputFilter.java Tue Nov 23 21:45:56 2010 @@ -82,13 +82,10 @@ public class TestChunkedInputFilter exte Tomcat.addServlet(ctx, "servlet", new EchoHeaderServlet()); ctx.addServletMapping("/", "servlet"); + // Limit the size of the trailing header + tomcat.getConnector().setProperty("maxTrailerSize", "10"); tomcat.start(); - StringBuilder longText = new StringBuilder("Test1234567890"); - while (longText.length() <= 8192) { - longText.append(longText.toString()); - } - String[] request = new String[]{ "POST /echo-params.jsp HTTP/1.1" + SimpleHttpClient.CRLF + "Host: any" + SimpleHttpClient.CRLF + @@ -102,7 +99,7 @@ public class TestChunkedInputFilter exte "4" + SimpleHttpClient.CRLF + "&b=1" + SimpleHttpClient.CRLF + "0" + SimpleHttpClient.CRLF + - "x-trailer: Test" + longText + SimpleHttpClient.CRLF + + "x-trailer: Test" + SimpleHttpClient.CRLF + SimpleHttpClient.CRLF }; TrailerClient client = new TrailerClient(); Modified: tomcat/trunk/webapps/docs/config/http.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/http.xml?rev=1038351&r1=1038350&r2=1038351&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/config/http.xml (original) +++ tomcat/trunk/webapps/docs/config/http.xml Tue Nov 23 21:45:56 2010 @@ -335,6 +335,13 @@ execute tasks using the executor rather than an internal thread pool.</p> </attribute> + <attribute name="maxTrailerSize"> + <p>Limits the total length of trailing headers in the last chunk of + a chunked HTTP request. If the value is <code>-1</code>, no limit will be + imposed. If not specified, the default value of <code>8192</code> will be + used.</p> + </attribute> + <attribute name="minSpareThreads" required="false"> <p>The minimum number of threads always kept running. If not specified, the default of <code>10</code> is used.</p> Modified: tomcat/trunk/webapps/docs/config/systemprops.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/systemprops.xml?rev=1038351&r1=1038350&r2=1038351&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/config/systemprops.xml (original) +++ tomcat/trunk/webapps/docs/config/systemprops.xml Tue Nov 23 21:45:56 2010 @@ -474,13 +474,6 @@ <p>If not specified, the default value of <code>false</code> will be used.</p> </property> - <property name="org.apache.coyote.MAX_TRAILER_SIZE"> - <p>Limits the total length of trailing headers in the last chunk of - a chunked HTTP request. - If the value is <code>-1</code>, no limit will be imposed.</p> - <p>If not specified, the default value of <code>8192</code> will be used.</p> - </property> - <property name="catalina.useNaming"> <p>If this is <code>false</code> it will override the <code>useNaming</code> attribute for all <a href="context.html"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org