amyroh      2003/02/12 23:22:01

  Modified:    catalina/src/share/org/apache/catalina/valves
                        ErrorDispatcherValve.java
  Log:
  Fix to return an error-page for 500 if it's defined in web.xml.
  If ErrorDispatcherValve does not find an error-page for an internal error, it sets
  the error code to 500 but does not then try to see if there is an error-page
  mapping for this error code.
  If the servlet throws an exception that does not map to an error-page, then we
  should set the error-code to 500 and see if there is an error-page for 500 and
  if so, return that. Most users will configure a generic error-page for 500
  rather than for exception-types.
  Fix for bugtraq 4685997.
  
  Revision  Changes    Path
  1.5       +27 -6     
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/valves/ErrorDispatcherValve.java
  
  Index: ErrorDispatcherValve.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/valves/ErrorDispatcherValve.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ErrorDispatcherValve.java 4 Nov 2002 06:33:02 -0000       1.4
  +++ ErrorDispatcherValve.java 13 Feb 2003 07:22:01 -0000      1.5
  @@ -258,7 +258,22 @@
                       log("Exception Processing " + errorPage, e);
                   }
               }
  +        } else {
  +            // A custom error-page has not been defined for the exception
  +            // that was thrown during request processing. Check if an
  +            // error-page for error code 500 was specified and if so, 
  +            // send that page back as the response.
  +            ServletResponse sresp = (ServletResponse) response;
  +            if (sresp instanceof HttpServletResponse) {
  +                ((HttpServletResponse) sresp).setStatus(
  +                    HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
  +                // The response is an error
  +                response.setError();
  +
  +                status(request, response);
  +            }
           }
  +            
   
       }
   
  @@ -389,7 +404,14 @@
           try {
   
               // Reset the response if possible (else IllegalStateException)
  -            hres.reset();
  +            //hres.reset();
  +            // Reset the response (keeping the real error code and message)
  +            Integer statusCodeObj =
  +                (Integer) hreq.getAttribute(Globals.STATUS_CODE_ATTR);
  +            int statusCode = statusCodeObj.intValue();
  +            String message = 
  +                (String) hreq.getAttribute(Globals.ERROR_MESSAGE_ATTR);
  +            ((HttpResponse) response).reset(statusCode, message);
   
               // Forward control to the specified location
               ServletContext servletContext =
  @@ -451,4 +473,3 @@
   
   
   }
  -
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to