Blame SOURCES/tomcat-7.0.76-CVE-2017-5664.patch

828cdb
--- java/org/apache/catalina/servlets/DefaultServlet.java.orig	2017-06-08 16:12:18.426412964 -0400
828cdb
+++ java/org/apache/catalina/servlets/DefaultServlet.java	2017-06-08 16:12:18.436413002 -0400
828cdb
@@ -245,7 +245,7 @@
828cdb
         urlEncoder.addSafeCharacter('.');
828cdb
         urlEncoder.addSafeCharacter('*');
828cdb
         urlEncoder.addSafeCharacter('/');
828cdb
-        
828cdb
+
828cdb
         if (Globals.IS_SECURITY_ENABLED) {
828cdb
             factory = DocumentBuilderFactory.newInstance();
828cdb
             factory.setNamespaceAware(true);
828cdb
@@ -423,6 +423,18 @@
828cdb
     }
828cdb
 
828cdb
 
828cdb
+    @Override
828cdb
+    protected void service(HttpServletRequest req, HttpServletResponse resp)
828cdb
+            throws ServletException, IOException {
828cdb
+
828cdb
+        if (req.getDispatcherType() == DispatcherType.ERROR) {
828cdb
+            doGet(req, resp);
828cdb
+        } else {
828cdb
+            super.service(req, resp);
828cdb
+        }
828cdb
+    }
828cdb
+
828cdb
+
828cdb
     /**
828cdb
      * Process a GET request for the specified resource.
828cdb
      *
828cdb
@@ -860,8 +872,7 @@
828cdb
             }
828cdb
         }
828cdb
 
828cdb
-        boolean isError =
828cdb
-            response.getStatus() >= HttpServletResponse.SC_BAD_REQUEST;
828cdb
+        boolean isError = DispatcherType.ERROR == request.getDispatcherType();
828cdb
 
828cdb
         // Check if the conditions specified in the optional If headers are
828cdb
         // satisfied.
828cdb
@@ -1326,7 +1337,7 @@
828cdb
 
828cdb
     }
828cdb
 
828cdb
-    
828cdb
+
828cdb
     /**
828cdb
      * Return an InputStream to an HTML representation of the contents
828cdb
      * of this directory.
828cdb
@@ -1767,15 +1778,15 @@
828cdb
 
828cdb
 
828cdb
     private File validateGlobalXsltFile() {
828cdb
-        
828cdb
+
828cdb
         File result = null;
828cdb
         String base = System.getProperty(Globals.CATALINA_BASE_PROP);
828cdb
-        
828cdb
+
828cdb
         if (base != null) {
828cdb
             File baseConf = new File(base, "conf");
828cdb
             result = validateGlobalXsltFile(baseConf);
828cdb
         }
828cdb
-        
828cdb
+
828cdb
         if (result == null) {
828cdb
             String home = System.getProperty(Globals.CATALINA_HOME_PROP);
828cdb
             if (home != null && !home.equals(base)) {
828cdb
@@ -2364,6 +2375,8 @@
828cdb
 
828cdb
         /**
828cdb
          * Validate range.
828cdb
+         *
828cdb
+         * @return true if the range is valid, otherwise false
828cdb
          */
828cdb
         public boolean validate() {
828cdb
             if (end >= length)
828cdb
--- java/org/apache/catalina/servlets/WebdavServlet.java.orig	2017-06-08 16:12:18.427412968 -0400
828cdb
+++ java/org/apache/catalina/servlets/WebdavServlet.java	2017-06-08 16:12:18.436413002 -0400
828cdb
@@ -40,6 +40,7 @@
828cdb
 import javax.naming.NamingEnumeration;
828cdb
 import javax.naming.NamingException;
828cdb
 import javax.naming.directory.DirContext;
828cdb
+import javax.servlet.DispatcherType;
828cdb
 import javax.servlet.RequestDispatcher;
828cdb
 import javax.servlet.ServletContext;
828cdb
 import javax.servlet.ServletException;
828cdb
@@ -354,6 +355,11 @@
828cdb
             return;
828cdb
         }
828cdb
 
828cdb
+        if (req.getDispatcherType() == DispatcherType.ERROR) {
828cdb
+            doGet(req, resp);
828cdb
+            return;
828cdb
+        }
828cdb
+
828cdb
         final String method = req.getMethod();
828cdb
 
828cdb
         if (debug > 0) {
828cdb
--- webapps/docs/changelog.xml.orig	2017-06-08 16:12:18.429412975 -0400
828cdb
+++ webapps/docs/changelog.xml	2017-06-08 16:13:17.452638065 -0400
828cdb
@@ -57,6 +57,23 @@
828cdb
   They eventually become mixed with the numbered issues. (I.e., numbered
828cdb
   issues do not "pop up" wrt. others).
828cdb
 -->
828cdb
+<section name="Tomcat 7.0.76-2 (csutherl)">
828cdb
+  <subsection name="Catalina">
828cdb
+    <changelog>
828cdb
+      <fix>
828cdb
+        Use a more reliable mechanism for the DefaultServlet when
828cdb
+        determining if the current request is for custom error page or not.
828cdb
+        (markt)
828cdb
+      </fix>
828cdb
+      <fix>
828cdb
+        Ensure that when the Default or WebDAV servlets process an error
828cdb
+        dispatch that the error resource is processed via the
828cdb
+        doGet() method irrespective of the method used for the
828cdb
+        original request that triggered the error. (markt)
828cdb
+      </fix>
828cdb
+    </changelog>
828cdb
+  </subsection>
828cdb
+</section>
828cdb
 <section name="Tomcat 7.0.76 (violetagg)">
828cdb
   <subsection name="Catalina">
828cdb
     <changelog>