Arrange filter logic.
authorjfclere <jfclere@13f79535-47bb-0310-9956-ffa450edef68>
Tue, 29 Jun 2010 10:13:54 +0000 (10:13 +0000)
committerjfclere <jfclere@13f79535-47bb-0310-9956-ffa450edef68>
Tue, 29 Jun 2010 10:13:54 +0000 (10:13 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@958911 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/coyote/http11/AbstractHttp11Processor.java
java/org/apache/coyote/http11/filters/BufferedInputFilter.java

index bf0a0f0..db6779d 100644 (file)
@@ -54,6 +54,12 @@ public abstract class AbstractHttp11Processor {
     protected static boolean isSecurityEnabled = 
         org.apache.coyote.Constants.IS_SECURITY_ENABLED;
 
+    /*
+     * Tracks how many internal filters are in the filter library so they
+     * are skipped when looking for pluggable filters. 
+     */
+    private int pluggableFilterIndex = Integer.MAX_VALUE;
+    
     /**
      * Associated adapter.
      */
@@ -764,7 +770,8 @@ public abstract class AbstractHttp11Processor {
         // Create and add the chunked filters.
         //getInputBuffer().addFilter(new GzipInputFilter());
         getOutputBuffer().addFilter(new GzipOutputFilter());
-
+        
+        pluggableFilterIndex = getInputBuffer().getFilters().length;
     }
 
     
@@ -807,7 +814,7 @@ public abstract class AbstractHttp11Processor {
                 (inputFilters[Constants.CHUNKED_FILTER]);
             contentDelimitation = true;
         } else {
-            for (int i = 2; i < inputFilters.length; i++) {
+            for (int i = pluggableFilterIndex; i < inputFilters.length; i++) {
                 if (inputFilters[i].getEncodingName()
                     .toString().equals(encodingName)) {
                     getInputBuffer().addActiveFilter(inputFilters[i]);
index cb7ed66..2b6c44c 100644 (file)
@@ -102,10 +102,12 @@ public class BufferedInputFilter implements InputFilter {
     }
 
     public void recycle() {
-        if (buffered.getBuffer().length > 65536) {
-            buffered = null;
-        } else {
-            buffered.recycle();
+        if (buffered != null) {
+            if (buffered.getBuffer().length > 65536) {
+                buffered = null;
+            } else {
+                buffered.recycle();
+            }
         }
         tempRead.recycle();
         hasRead = false;