Index: connectors/http11/src/java/org/apache/coyote/http11/Http11Processor.java =================================================================== --- connectors/http11/src/java/org/apache/coyote/http11/Http11Processor.java (revision 959427) +++ connectors/http11/src/java/org/apache/coyote/http11/Http11Processor.java (revision 959428) @@ -78,7 +78,13 @@ protected static StringManager sm = StringManager.getManager(Constants.Package); + /* + * 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; + // ----------------------------------------------------------- Constructors @@ -1657,6 +1663,8 @@ //inputBuffer.addFilter(new GzipInputFilter()); outputBuffer.addFilter(new GzipOutputFilter()); + pluggableFilterIndex = inputBuffer.filterLibrary.length; + } @@ -1675,7 +1683,7 @@ (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)) { inputBuffer.addActiveFilter(inputFilters[i]); Index: connectors/http11/src/java/org/apache/coyote/http11/Http11AprProcessor.java =================================================================== --- connectors/http11/src/java/org/apache/coyote/http11/Http11AprProcessor.java (revision 959427) +++ connectors/http11/src/java/org/apache/coyote/http11/Http11AprProcessor.java (revision 959428) @@ -77,7 +77,13 @@ protected static StringManager sm = StringManager.getManager(Constants.Package); + /* + * 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; + // ----------------------------------------------------------- Constructors @@ -1699,6 +1705,8 @@ //inputBuffer.addFilter(new GzipInputFilter()); outputBuffer.addFilter(new GzipOutputFilter()); + pluggableFilterIndex = inputBuffer.filterLibrary.length; + } @@ -1717,7 +1725,7 @@ (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)) { inputBuffer.addActiveFilter(inputFilters[i]); Index: connectors/http11/src/java/org/apache/coyote/http11/filters/BufferedInputFilter.java =================================================================== --- connectors/http11/src/java/org/apache/coyote/http11/filters/BufferedInputFilter.java (revision 959427) +++ connectors/http11/src/java/org/apache/coyote/http11/filters/BufferedInputFilter.java (revision 959428) @@ -102,10 +102,12 @@ } 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;