markt 2004/12/09 16:00:00 Modified: coyote/src/java/org/apache/coyote Response.java http11/src/java/org/apache/coyote/http11 Http11Processor.java http11/src/java/org/apache/coyote/http11/filters IdentityOutputFilter.java util/java/org/apache/tomcat/util/buf MessageBytes.java Log: Fix bug 32585. Better handling for content length greater than Integer.MAX_VALUE in response. Revision Changes Path 1.35 +10 -1 jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/Response.java Index: Response.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/Response.java,v retrieving revision 1.34 retrieving revision 1.35 diff -u -r1.34 -r1.35 --- Response.java 28 Jul 2004 18:51:44 -0000 1.34 +++ Response.java 10 Dec 2004 00:00:00 -0000 1.35 @@ -100,7 +100,7 @@ protected String contentType = null; protected String contentLanguage = null; protected String characterEncoding = Constants.DEFAULT_CHARACTER_ENCODING; - protected int contentLength = -1; + protected long contentLength = -1; private Locale locale = DEFAULT_LOCALE; // General informations @@ -529,6 +529,15 @@ } public int getContentLength() { + long length = getContentLengthLong(); + + if (length < Integer.MAX_VALUE) { + return (int) length; + } + return -1; + } + + public long getContentLengthLong() { return contentLength; } 1.116 +2 -2 jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11Processor.java Index: Http11Processor.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11Processor.java,v retrieving revision 1.115 retrieving revision 1.116 diff -u -r1.115 -r1.116 --- Http11Processor.java 22 Nov 2004 06:42:46 -0000 1.115 +++ Http11Processor.java 10 Dec 2004 00:00:00 -0000 1.116 @@ -1489,9 +1489,9 @@ } } - int contentLength = response.getContentLength(); + long contentLength = response.getContentLengthLong(); if (contentLength != -1) { - headers.setValue("Content-Length").setInt(contentLength); + headers.setValue("Content-Length").setLong(contentLength); outputBuffer.addActiveFilter (outputFilters[Constants.IDENTITY_FILTER]); contentDelimitation = true; 1.8 +1 -1 jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/filters/IdentityOutputFilter.java Index: IdentityOutputFilter.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/filters/IdentityOutputFilter.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- IdentityOutputFilter.java 24 Feb 2004 08:50:55 -0000 1.7 +++ IdentityOutputFilter.java 10 Dec 2004 00:00:00 -0000 1.8 @@ -141,7 +141,7 @@ * after the response header processing is complete. */ public void setResponse(Response response) { - contentLength = response.getContentLength(); + contentLength = response.getContentLengthLong(); remaining = contentLength; } 1.21 +42 -0 jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/buf/MessageBytes.java Index: MessageBytes.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/buf/MessageBytes.java,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- MessageBytes.java 12 Nov 2004 10:51:49 -0000 1.20 +++ MessageBytes.java 10 Dec 2004 00:00:00 -0000 1.21 @@ -610,6 +610,48 @@ type=T_BYTES; } + /** Set the buffer to the representation of an long + */ + public void setLong(long l) { + byteC.allocate(32, 64); + long current = l; + byte[] buf = byteC.getBuffer(); + int start = 0; + int end = 0; + if (l == 0) { + buf[end++] = (byte) '0'; + } + if (l < 0) { + current = -l; + buf[end++] = (byte) '-'; + } + while (current > 0) { + int digit = (int) (current % 10); + current = current / 10; + buf[end++] = HexUtils.HEX[digit]; + } + byteC.setOffset(0); + byteC.setEnd(end); + // Inverting buffer + end--; + if (l < 0) { + start++; + } + while (end > start) { + byte temp = buf[start]; + buf[start] = buf[end]; + buf[end] = temp; + start++; + end--; + } + longValue=l; + hasStrValue=false; + hasHashCode=false; + hasIntValue=false; + hasLongValue=true; + hasDateValue=false; + type=T_BYTES; + } /** * @deprecated The buffer are general purpose, caching for headers should
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]