You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2007/06/16 13:44:26 UTC
svn commit: r547910 - in /jakarta/httpcomponents/httpcore/trunk: ./
module-main/src/main/java/org/apache/http/impl/
module-main/src/main/java/org/apache/http/util/
module-main/src/test/java/org/apache/http/util/
module-nio/src/main/java/org/apache/http...
Author: olegk
Date: Sat Jun 16 04:44:24 2007
New Revision: 547910
URL: http://svn.apache.org/viewvc?view=rev&rev=547910
Log:
HTTPCORE-81: Correctly enforce max line length when parsing folded header lines
Modified:
jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt
jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpClientConnection.java
jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpServerConnection.java
jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/util/HeaderUtils.java
jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/util/TestHeaderUtils.java
jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/codecs/HttpMessageParser.java
Modified: jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt?view=diff&rev=547910&r1=547909&r2=547910
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt (original)
+++ jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt Sat Jun 16 04:44:24 2007
@@ -1,7 +1,8 @@
Changes since 4.0 Alpha 4
* [HTTPCORE-81]: Maximum line length and maximum header counts parameters are now
- correctly enforced in both base and NIO modules.
+ correctly enforced in both base and NIO modules. Fixed maximum line length check
+ when parsing folded header lines.
Contributed by Steffen Pingel <spingel at limewire.com>
* Added HTTP client handler implementation that allocates fixed size content
Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpClientConnection.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpClientConnection.java?view=diff&rev=547910&r1=547909&r2=547910
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpClientConnection.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpClientConnection.java Sat Jun 16 04:44:24 2007
@@ -82,6 +82,7 @@
private HttpDataTransmitter datatransmitter = null;
private int maxHeaderCount = -1;
+ private int maxLineLen = -1;
private int maxGarbageLines = -1;
public AbstractHttpClientConnection() {
@@ -114,6 +115,8 @@
this.datatransmitter = datatransmitter;
this.maxHeaderCount = params.getIntParameter(
HttpConnectionParams.MAX_HEADER_COUNT, -1);
+ this.maxLineLen = params.getIntParameter(
+ HttpConnectionParams.MAX_LINE_LENGTH, -1);
this.maxGarbageLines = params.getIntParameter(
HttpConnectionParams.MAX_STATUS_LINE_GARBAGE, Integer.MAX_VALUE);
}
@@ -249,7 +252,10 @@
protected void readResponseHeaders(final HttpResponse response)
throws HttpException, IOException {
- Header[] headers = HeaderUtils.parseHeaders(this.datareceiver, this.maxHeaderCount);
+ Header[] headers = HeaderUtils.parseHeaders(
+ this.datareceiver,
+ this.maxHeaderCount,
+ this.maxLineLen);
response.setHeaders(headers);
}
Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpServerConnection.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpServerConnection.java?view=diff&rev=547910&r1=547909&r2=547910
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpServerConnection.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/impl/AbstractHttpServerConnection.java Sat Jun 16 04:44:24 2007
@@ -80,6 +80,7 @@
private HttpDataTransmitter datatransmitter = null;
private int maxHeaderCount = -1;
+ private int maxLineLen = -1;
public AbstractHttpServerConnection() {
super();
@@ -111,6 +112,8 @@
this.datatransmitter = datatransmitter;
this.maxHeaderCount = params.getIntParameter(
HttpConnectionParams.MAX_HEADER_COUNT, -1);
+ this.maxLineLen = params.getIntParameter(
+ HttpConnectionParams.MAX_LINE_LENGTH, -1);
}
public HttpRequest receiveRequestHeader()
@@ -144,7 +147,10 @@
protected void receiveRequestHeaders(final HttpRequest request)
throws HttpException, IOException {
- Header[] headers = HeaderUtils.parseHeaders(this.datareceiver, this.maxHeaderCount);
+ Header[] headers = HeaderUtils.parseHeaders(
+ this.datareceiver,
+ this.maxHeaderCount,
+ this.maxLineLen);
request.setHeaders(headers);
}
Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/util/HeaderUtils.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/util/HeaderUtils.java?view=diff&rev=547910&r1=547909&r2=547910
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/util/HeaderUtils.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/util/HeaderUtils.java Sat Jun 16 04:44:24 2007
@@ -66,8 +66,10 @@
* @throws HttpException
* @throws IOException
*/
- public static Header[] parseHeaders(final HttpDataReceiver datareceiver, int maxCount)
- throws HttpException, IOException {
+ public static Header[] parseHeaders(
+ final HttpDataReceiver datareceiver,
+ int maxHeaderCount,
+ int maxLineLen) throws HttpException, IOException {
if (datareceiver == null) {
throw new IllegalArgumentException("HTTP data receiver may not be null");
}
@@ -100,6 +102,10 @@
}
i++;
}
+ if (maxLineLen > 0
+ && previous.length() + 1 + current.length() - i > maxLineLen) {
+ throw new IOException("Maximum line length limit exceeded");
+ }
previous.append(' ');
previous.append(current, i, current.length() - i);
} else {
@@ -107,7 +113,7 @@
previous = current;
current = null;
}
- if (maxCount > 0 && headerLines.size() >= maxCount) {
+ if (maxHeaderCount > 0 && headerLines.size() >= maxHeaderCount) {
throw new IOException("Maximum header count exceeded");
}
}
@@ -125,7 +131,7 @@
public static Header[] parseHeaders(final HttpDataReceiver datareceiver)
throws HttpException, IOException {
- return parseHeaders(datareceiver, -1);
+ return parseHeaders(datareceiver, -1, -1);
}
}
Modified: jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/util/TestHeaderUtils.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/util/TestHeaderUtils.java?view=diff&rev=547910&r1=547909&r2=547910
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/util/TestHeaderUtils.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-main/src/test/java/org/apache/http/util/TestHeaderUtils.java Sat Jun 16 04:44:24 2007
@@ -184,12 +184,27 @@
"\r\n";
HttpDataReceiver receiver = new HttpDataReceiverMockup(s, "US-ASCII");
try {
- HeaderUtils.parseHeaders(receiver, 2);
+ HeaderUtils.parseHeaders(receiver, 2, -1);
fail("IOException should have been thrown");
} catch (IOException ex) {
// expected
}
}
-
+
+ public void testMaxHeaderCountForFoldedHeader() throws Exception {
+ String s =
+ "header1: stuff\r\n" +
+ " stuff \r\n" +
+ " stuff\r\n" +
+ "\r\n";
+ HttpDataReceiver receiver = new HttpDataReceiverMockup(s, "US-ASCII");
+ try {
+ HeaderUtils.parseHeaders(receiver, 2, 15);
+ fail("IOException should have been thrown");
+ } catch (IOException ex) {
+ // expected
+ }
+ }
+
}
Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/codecs/HttpMessageParser.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/codecs/HttpMessageParser.java?view=diff&rev=547910&r1=547909&r2=547910
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/codecs/HttpMessageParser.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/codecs/HttpMessageParser.java Sat Jun 16 04:44:24 2007
@@ -120,7 +120,8 @@
}
i++;
}
- if (this.maxLineLen > 0 && previous.length() + 1 + current.length() - i > this.maxLineLen) {
+ if (this.maxLineLen > 0
+ && previous.length() + 1 + current.length() - i > this.maxLineLen) {
throw new IOException("Maximum line length limit exceeded");
}
previous.append(' ');