Return-Path: Delivered-To: apmail-jakarta-tomcat-dev-archive@jakarta.apache.org Received: (qmail 11105 invoked by uid 500); 25 Aug 2001 00:08:02 -0000 Mailing-List: contact tomcat-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: list-post: Reply-To: tomcat-dev@jakarta.apache.org Delivered-To: mailing list tomcat-dev@jakarta.apache.org Received: (qmail 11096 invoked by uid 500); 25 Aug 2001 00:08:02 -0000 Delivered-To: apmail-jakarta-tomcat-4.0-cvs@apache.org Date: 25 Aug 2001 00:01:57 -0000 Message-ID: <20010825000157.16640.qmail@icarus.apache.org> From: craigmcc@apache.org To: jakarta-tomcat-4.0-cvs@apache.org Subject: cvs commit: jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/servlet JspServlet.java X-Spam-Rating: h31.sny.collab.net 1.6.2 0/1000/N craigmcc 01/08/24 17:01:57 Modified: jasper/src/share/org/apache/jasper/servlet JspServlet.java Log: Change the way that Jasper looks for the "?jsp_precompile" precompilation request parameter. Previously, it was using request.getParameter(), which caused all of the request parameters to be parsed before the JSP page would have the opportunity to call request.setCharacterEncoding(). Revision Changes Path 1.21 +42 -27 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/servlet/JspServlet.java Index: JspServlet.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/servlet/JspServlet.java,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- JspServlet.java 2001/08/07 20:53:06 1.20 +++ JspServlet.java 2001/08/25 00:01:56 1.21 @@ -382,36 +382,51 @@ } + /** + *

Look for a precompilation request as described in + * Section 8.4.2 of the JSP 1.2 Specification. WARNING - + * we cannot use request.getParameter() for this, because + * that will trigger parsing all of the request parameters, and not give + * a servlet the opportunity to call + * request.setCharacterEncoding() first.

+ * + * @param request The servlet requset we are processing + * + * @exception ServletException if an invalid parameter value for the + * jsp_precompile parameter name is specified + */ boolean preCompile(HttpServletRequest request) throws ServletException { - boolean precompile = false; - String precom = request.getParameter(Constants.PRECOMPILE); - String qString = request.getQueryString(); - - if (precom != null) { - // An equal sign was specified - // (?jsp_precompile=... or &jsp_precompile=...) - if (precom.equals("true") || precom.trim().length()==0) { - precompile = true; - } else if (precom.equals("false")) { - precompile = false; - } else { - // This is illegal. - throw new ServletException("Can't have request parameter " + - Constants.PRECOMPILE + " set to " + precom); - } - } else { - // Check if precompile is specified (but it does not have - // the '=' following it.) - if (qString != null && - (qString.startsWith(Constants.PRECOMPILE) || - qString.indexOf("&" + Constants.PRECOMPILE) - != -1)) { - precompile = true; - } - } - return precompile; + + String queryString = request.getQueryString(); + if (queryString == null) + return (false); + int start = queryString.indexOf(Constants.PRECOMPILE); + if (start < 0) + return (false); + queryString = + queryString.substring(start + Constants.PRECOMPILE.length()); + if (queryString.length() == 0) + return (true); // ?jsp_precompile + if (queryString.startsWith("&")) + return (true); // ?jsp_precompile&foo=bar... + if (!queryString.startsWith("=")) + return (false); // part of some other name or value + int limit = queryString.length(); + int ampersand = queryString.indexOf("&"); + if (ampersand > 0) + limit = ampersand; + String value = queryString.substring(1, limit); + if (value.equals("true")) + return (true); // ?jsp_precompile=true + else if (value.equals("false")) + return (false); // ?jsp_precompile=false + else + throw new ServletException("Cannott have request parameter " + + Constants.PRECOMPILE + " set to " + + value); + }