remm 2003/01/29 04:50:53 Modified: catalina/src/share/org/apache/catalina/core StandardContextValve.java Log: - Optimize checks for /WEB-INF and /META-INF. Revision Changes Path 1.4 +36 -13 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContextValve.java Index: StandardContextValve.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContextValve.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- StandardContextValve.java 12 Sep 2002 20:40:37 -0000 1.3 +++ StandardContextValve.java 29 Jan 2003 12:50:52 -0000 1.4 @@ -67,10 +67,15 @@ import java.io.IOException; import java.io.PrintWriter; + import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.naming.NamingException; + +import org.apache.tomcat.util.buf.CharChunk; +import org.apache.tomcat.util.buf.MessageBytes; + import org.apache.naming.ContextBindings; import org.apache.naming.resources.DirContextURLStreamHandler; import org.apache.catalina.Container; @@ -156,15 +161,31 @@ } // Disallow any direct access to resources under WEB-INF or META-INF - HttpServletRequest hreq = (HttpServletRequest) request.getRequest(); - String contextPath = hreq.getContextPath(); - String requestURI = ((HttpRequest) request).getDecodedRequestURI(); - String relativeURI = - requestURI.substring(contextPath.length()).toUpperCase(); - if (relativeURI.equals("/META-INF") || - relativeURI.equals("/WEB-INF") || - relativeURI.startsWith("/META-INF/") || - relativeURI.startsWith("/WEB-INF/")) { + HttpRequest hreq = (HttpRequest) request; + MessageBytes contextPathMB = hreq.getContextPathMB(); + int length = contextPathMB.getLength(); + MessageBytes decodedURIMB = hreq.getDecodedRequestURIMB(); + decodedURIMB.toChars(); + CharChunk decodedURIBC = decodedURIMB.getCharChunk(); + int bcLength = decodedURIBC.getLength(); + boolean notFound = false; + if (decodedURIBC.startsWithIgnoreCase("/META-INF", length)) { + if ((decodedURIBC.getLength() == ("/META-INF".length() + length)) + || (decodedURIBC.getBuffer()["/META-INF".length() + length] + == '/')) { + notFound = true; + } + } + if (decodedURIBC.startsWithIgnoreCase("/WEB-INF", length)) { + if ((decodedURIBC.getLength() == ("/WEB-INF".length() + length)) + || (decodedURIBC.getBuffer()["/WEB-INF".length() + length] + == '/')) { + System.out.println("Not found"); + notFound = true; + } + } + if (notFound) { + String requestURI = hreq.getDecodedRequestURI(); notFound(requestURI, (HttpServletResponse) response.getResponse()); return; } @@ -176,11 +197,13 @@ try { wrapper = (Wrapper) context.map(request, true); } catch (IllegalArgumentException e) { + String requestURI = hreq.getDecodedRequestURI(); badRequest(requestURI, (HttpServletResponse) response.getResponse()); return; } if (wrapper == null) { + String requestURI = hreq.getDecodedRequestURI(); notFound(requestURI, (HttpServletResponse) response.getResponse()); return; }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]