File apache-tomcat-CVE-2010-2227.patch of Package tomcat6
Index: tomcat6-6.0.18/apache-tomcat-6.0.18-src/java/org/apache/coyote/http11/Http11Processor.java
===================================================================
--- tomcat6-6.0.18.orig/apache-tomcat-6.0.18-src/java/org/apache/coyote/http11/Http11Processor.java 2008-07-22 02:01:28.000000000 +0200
+++ tomcat6-6.0.18/apache-tomcat-6.0.18-src/java/org/apache/coyote/http11/Http11Processor.java 2010-07-15 14:54:01.974001302 +0200
@@ -74,6 +74,13 @@
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;
+
+
// ------------------------------------------------------------ Constructor
@@ -1628,6 +1635,8 @@
//inputBuffer.addFilter(new GzipInputFilter());
outputBuffer.addFilter(new GzipOutputFilter());
+ pluggableFilterIndex = inputBuffer.filterLibrary.length;
+
}
@@ -1646,7 +1655,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: tomcat6-6.0.18/apache-tomcat-6.0.18-src/java/org/apache/coyote/http11/Http11AprProcessor.java
===================================================================
--- tomcat6-6.0.18.orig/apache-tomcat-6.0.18-src/java/org/apache/coyote/http11/Http11AprProcessor.java 2008-07-22 02:01:29.000000000 +0200
+++ tomcat6-6.0.18/apache-tomcat-6.0.18-src/java/org/apache/coyote/http11/Http11AprProcessor.java 2010-07-15 14:54:02.016875938 +0200
@@ -78,6 +78,12 @@
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
@@ -1716,6 +1722,8 @@
//inputBuffer.addFilter(new GzipInputFilter());
outputBuffer.addFilter(new GzipOutputFilter());
+ pluggableFilterIndex = inputBuffer.filterLibrary.length;
+
}
@@ -1734,7 +1742,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: tomcat6-6.0.18/apache-tomcat-6.0.18-src/java/org/apache/coyote/http11/Http11NioProcessor.java
===================================================================
--- tomcat6-6.0.18.orig/apache-tomcat-6.0.18-src/java/org/apache/coyote/http11/Http11NioProcessor.java 2008-07-22 02:01:28.000000000 +0200
+++ tomcat6-6.0.18/apache-tomcat-6.0.18-src/java/org/apache/coyote/http11/Http11NioProcessor.java 2010-07-15 14:54:02.108875188 +0200
@@ -81,6 +81,13 @@
*/
protected SSLSupport sslSupport;
+ /*
+ * 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
@@ -1736,6 +1743,8 @@
//inputBuffer.addFilter(new GzipInputFilter());
outputBuffer.addFilter(new GzipOutputFilter());
+ pluggableFilterIndex = inputBuffer.filterLibrary.length;
+
}
@@ -1754,7 +1763,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: tomcat6-6.0.18/apache-tomcat-6.0.18-src/java/org/apache/coyote/http11/filters/BufferedInputFilter.java
===================================================================
--- tomcat6-6.0.18.orig/apache-tomcat-6.0.18-src/java/org/apache/coyote/http11/filters/BufferedInputFilter.java 2008-07-22 02:01:29.000000000 +0200
+++ tomcat6-6.0.18/apache-tomcat-6.0.18-src/java/org/apache/coyote/http11/filters/BufferedInputFilter.java 2010-07-15 14:54:02.142345894 +0200
@@ -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;