You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2008/01/15 05:41:34 UTC

svn commit: r612014 - in /mina/trunk/filter-codec-http/src/main/java/org/apache/mina/filter/codec/http: HttpHeaderDecodingState.java HttpRequestDecodingState.java

Author: trustin
Date: Mon Jan 14 20:41:31 2008
New Revision: 612014

URL: http://svn.apache.org/viewvc?rev=612014&view=rev
Log:
Related issue: DIRMINA-505 (OOM errors when handling badly formed HTTP requests)
* Collections created by all http decoding state are cleaned up when the state is destroyed.

Modified:
    mina/trunk/filter-codec-http/src/main/java/org/apache/mina/filter/codec/http/HttpHeaderDecodingState.java
    mina/trunk/filter-codec-http/src/main/java/org/apache/mina/filter/codec/http/HttpRequestDecodingState.java

Modified: mina/trunk/filter-codec-http/src/main/java/org/apache/mina/filter/codec/http/HttpHeaderDecodingState.java
URL: http://svn.apache.org/viewvc/mina/trunk/filter-codec-http/src/main/java/org/apache/mina/filter/codec/http/HttpHeaderDecodingState.java?rev=612014&r1=612013&r2=612014&view=diff
==============================================================================
--- mina/trunk/filter-codec-http/src/main/java/org/apache/mina/filter/codec/http/HttpHeaderDecodingState.java (original)
+++ mina/trunk/filter-codec-http/src/main/java/org/apache/mina/filter/codec/http/HttpHeaderDecodingState.java Mon Jan 14 20:41:31 2008
@@ -21,7 +21,7 @@
 
 import java.nio.charset.CharsetDecoder;
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -49,10 +49,8 @@
     private final CharsetDecoder defaultDecoder =
         HttpCodecUtils.DEFAULT_CHARSET.newDecoder();
 
-    private Map<String, List<String>> headers = new HashMap<String, List<String>>();
-
+    private Map<String, List<String>> headers;
     private String lastHeaderName;
-
     private StringBuilder lastHeaderValue;
 
     HttpHeaderDecodingState() {
@@ -61,11 +59,15 @@
 
     @Override
     protected DecodingState init() throws Exception {
+        headers = new LinkedHashMap<String, List<String>>();
         return FIND_EMPTY_LINE;
     }
 
     @Override
     protected void destroy() throws Exception {
+        headers = null;
+        lastHeaderName = null;
+        lastHeaderValue = null;
     }
 
     private final DecodingState FIND_EMPTY_LINE = new CrLfDecodingState() {
@@ -74,8 +76,6 @@
                 ProtocolDecoderOutput out) throws Exception {
             if (foundCRLF) {
                 out.write(headers);
-                // Reset the state.
-                headers = new HashMap<String, List<String>>();
                 return null;
             } else {
                 return READ_HEADER_NAME;
@@ -83,8 +83,8 @@
         }
     };
 
-    private final DecodingState READ_HEADER_NAME = new ConsumeToTerminatorDecodingState(
-            (byte) ':') {
+    private final DecodingState READ_HEADER_NAME =
+        new ConsumeToTerminatorDecodingState((byte) ':') {
         @Override
         protected DecodingState finishDecode(IoBuffer product,
                 ProtocolDecoderOutput out) throws Exception {

Modified: mina/trunk/filter-codec-http/src/main/java/org/apache/mina/filter/codec/http/HttpRequestDecodingState.java
URL: http://svn.apache.org/viewvc/mina/trunk/filter-codec-http/src/main/java/org/apache/mina/filter/codec/http/HttpRequestDecodingState.java?rev=612014&r1=612013&r2=612014&view=diff
==============================================================================
--- mina/trunk/filter-codec-http/src/main/java/org/apache/mina/filter/codec/http/HttpRequestDecodingState.java (original)
+++ mina/trunk/filter-codec-http/src/main/java/org/apache/mina/filter/codec/http/HttpRequestDecodingState.java Mon Jan 14 20:41:31 2008
@@ -67,6 +67,7 @@
 
     @Override
     protected void destroy() throws Exception {
+        request = null;
     }
 
     private final DecodingState SKIP_EMPTY_LINES = new CrLfDecodingState() {