Author: markt Date: Wed Jun 24 17:45:42 2009 New Revision: 788097 URL: http://svn.apache.org/viewvc?rev=788097&view=rev Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=37794 Handle chunked POSTs. If maxPostSize is exceeded, a 500 results
Modified: tomcat/tc6.0.x/trunk/ (props changed) tomcat/tc6.0.x/trunk/STATUS.txt tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/LocalStrings.properties tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Request.java tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Propchange: tomcat/tc6.0.x/trunk/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Wed Jun 24 17:45:42 2009 @@ -1 +1 @@ -/tomcat/trunk:601180,606992,612607,630314,640888,652744,653247,673796,673820,683982,684001,684081,684234,684269-684270,685177,687503,687645,689402,690781,691392,691805,692748,693378,694992,695053,695311,696780,696782,698012,698227,698236,698613,699427,699634,701355,709294,709811,709816,710063,710066,710125,710205,711126,711600,712461,712467,718360,719119,719124,719602,719626,719628,720046,720069,721040,721286,721708,721886,723404,723738,726052,727303,728032,728768,728947,729057,729567,729569,729571,729681,729809,729815,729934,730250,730590,731651,732859,732863,734734,740675,740684,742677,742697,742714,744160,744238,746321,746384,746425,747834,747863,748344,750258,750291,750921,751286-751287,751289,751295,753039,757335,757774,758365,758596,758616,758664,759074,761601,762868,762929,762936-762937,763166,763183,763193,763228,763262,763298,763302,763325,763599,763611,763654,763681,763706,764985,764997,765662,768335,769979,770716,770809,770876,776921,776924,776935,776945,777464,77 7466,777576,777625,778379,778523-778524,781528,781779,782145,782791,783316,783696,783724,783756,783762,783766,783863,784453,784602,784614,785688,785768,785859,786468,786667,787627,787770 +/tomcat/trunk:601180,606992,612607,630314,640888,652744,653247,673796,673820,683982,684001,684081,684234,684269-684270,685177,687503,687645,689402,690781,691392,691805,692748,693378,694992,695053,695311,696780,696782,698012,698227,698236,698613,699427,699634,701355,709294,709811,709816,710063,710066,710125,710205,711126,711600,712461,712467,718360,719119,719124,719602,719626,719628,720046,720069,721040,721286,721708,721886,723404,723738,726052,727303,728032,728768,728947,729057,729567,729569,729571,729681,729809,729815,729934,730250,730590,731651,732859,732863,734734,740675,740684,742677,742697,742714,744160,744238,746321,746384,746425,747834,747863,748344,750258,750291,750921,751286-751287,751289,751295,753039,757335,757774,758365,758596,758616,758664,759074,761601,762868,762929,762936-762937,763166,763183,763193,763228,763262,763298,763302,763325,763599,763611,763654,763681,763706,764985,764997,765662,768335,769979,770716,770809,770876,776921,776924,776935,776945,777464,77 7466,777576,777625,778379,778523-778524,781528,781779,782145,782791,783316,783696,783724,783756,783762,783766,783863,784453,784602,784614,785381,785688,785768,785859,786468,786487,786667,787627,787770 Modified: tomcat/tc6.0.x/trunk/STATUS.txt URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/STATUS.txt?rev=788097&r1=788096&r2=788097&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/STATUS.txt (original) +++ tomcat/tc6.0.x/trunk/STATUS.txt Wed Jun 24 17:45:42 2009 @@ -113,13 +113,6 @@ +1: fhanik, markt, mturk -1: -* Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=37794 - Handle chunked POSTs. If maxPostSize is exceeded, a 500 results - http://svn.apache.org/viewvc?rev=785381&view=rev - http://svn.apache.org/viewvc?rev=786487&view=rev - +1: markt, fhanik, mturk - -1: - * Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=47389 http://svn.apache.org/viewvc?rev=786124&view=rev +1: fhanik, markt, mturk Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/LocalStrings.properties URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/LocalStrings.properties?rev=788097&r1=788096&r2=788097&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/LocalStrings.properties (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/LocalStrings.properties Wed Jun 24 17:45:42 2009 @@ -59,6 +59,7 @@ coyoteRequest.attributeEvent=Exception thrown by attributes event listener coyoteRequest.parseParameters=Exception thrown whilst processing POSTed parameters coyoteRequest.postTooLarge=Parameters were not parsed because the size of the posted data was too big. Use the maxPostSize attribute of the connector to resolve this if the application should accept large POSTs. +coyoteRequest.chunkedPostTooLarge=Parameters were not parsed because the size of the posted data was too big. Because this request was a chunked request, it could not be processed further. Use the maxPostSize attribute of the connector to resolve this if the application should accept large POSTs. requestFacade.nullRequest=The request object has been recycled and is no longer associated with this facade Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Request.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Request.java?rev=788097&r1=788096&r2=788097&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Request.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Request.java Wed Jun 24 17:45:42 2009 @@ -46,6 +46,7 @@ import javax.servlet.http.HttpSession; import org.apache.tomcat.util.buf.B2CConverter; +import org.apache.tomcat.util.buf.ByteChunk; import org.apache.tomcat.util.buf.MessageBytes; import org.apache.tomcat.util.buf.StringCache; import org.apache.tomcat.util.http.Cookies; @@ -2476,7 +2477,8 @@ int maxPostSize = connector.getMaxPostSize(); if ((maxPostSize > 0) && (len > maxPostSize)) { if (context.getLogger().isDebugEnabled()) { - context.getLogger().debug("Post too large"); + context.getLogger().debug( + sm.getString("coyoteRequest.postTooLarge")); } return; } @@ -2501,6 +2503,20 @@ return; } parameters.processParameters(formData, 0, len); + } else if ("chunked".equalsIgnoreCase( + coyoteRequest.getHeader("transfer-encoding"))) { + byte[] formData = null; + try { + formData = readChunkedPostBody(); + } catch (IOException e) { + // Client disconnect + if (context.getLogger().isDebugEnabled()) { + context.getLogger().debug( + sm.getString("coyoteRequest.parseParameters"), e); + } + return; + } + parameters.processParameters(formData, 0, formData.length); } } @@ -2526,6 +2542,38 @@ /** + * Read chunked post body. + */ + protected byte[] readChunkedPostBody() throws IOException { + ByteChunk body = new ByteChunk(); + + byte[] buffer = new byte[CACHED_POST_LEN]; + + int len = 0; + while (len > -1) { + len = getStream().read(buffer, 0, CACHED_POST_LEN); + if (connector.getMaxPostSize() > 0 && + (body.getLength() + len) > connector.getMaxPostSize()) { + // Too much data + throw new IllegalArgumentException( + sm.getString("coyoteRequest.chunkedPostTooLarge")); + } + if (len > 0) { + body.append(buffer, 0, len); + } + } + if (body.getLength() < body.getBuffer().length) { + int length = body.getLength(); + byte[] result = new byte[length]; + System.arraycopy(body.getBuffer(), 0, result, 0, length); + return result; + } else { + return body.getBuffer(); + } + } + + + /** * Parse request locales. */ protected void parseLocales() { Modified: tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml?rev=788097&r1=788096&r2=788097&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Wed Jun 24 17:45:42 2009 @@ -49,6 +49,10 @@ (markt/idarwin) </update> <fix> + <bug>37794</bug>: Support the parsing of parameters from chunked POSTs. + (markt) + </fix> + <fix> <bug>43343</bug>: Fix additional concurrency issues identified with the persistent session manager. (markt) </fix> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org