Author: markt Date: Wed Aug 27 14:28:14 2014 New Revision: 1620903 URL: http://svn.apache.org/r1620903 Log: Rework fix for https://issues.apache.org/bugzilla/show_bug.cgi?id=56568
Modified: tomcat/trunk/java/org/apache/jasper/compiler/Compiler.java tomcat/trunk/java/org/apache/jasper/compiler/Generator.java tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java tomcat/trunk/test/org/apache/jasper/servlet/TestJspServlet.java Modified: tomcat/trunk/java/org/apache/jasper/compiler/Compiler.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/Compiler.java?rev=1620903&r1=1620902&r2=1620903&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/compiler/Compiler.java (original) +++ tomcat/trunk/java/org/apache/jasper/compiler/Compiler.java Wed Aug 27 14:28:14 2014 @@ -255,13 +255,6 @@ public abstract class Compiler { // to be GC'd and save memory. ctxt.setWriter(null); - if (jsw != null) { - // Need to know if the JSP is an error page at runtime to determine - // which HTTP methods are permitted. Error pages permit any. Normal - // pages only permit GET, POST or HEAD. - jsw.setErrorPage(pageInfo.isErrorPage()); - } - if (log.isDebugEnabled()) { t4 = System.currentTimeMillis(); log.debug("Generated " + javaFileName + " total=" + (t4 - t1) Modified: tomcat/trunk/java/org/apache/jasper/compiler/Generator.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/Generator.java?rev=1620903&r1=1620902&r2=1620903&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/compiler/Generator.java (original) +++ tomcat/trunk/java/org/apache/jasper/compiler/Generator.java Wed Aug 27 14:28:14 2014 @@ -643,6 +643,20 @@ class Generator { out.pushIndent(); out.println(); + // Method check + if (!pageInfo.isErrorPage()) { + out.println("final java.lang.String _jspx_method = request.getMethod();"); + out.print("if (!\"GET\".equals(_jspx_method) && !\"POST\".equals(_jspx_method) && !\"HEAD\".equals(_jspx_method) && "); + out.println("!javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {"); + out.pushIndent(); + out.print("response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "); + out.println("\"" + Localizer.getMessage("jsp.error.servlet.invalid.method") + "\");"); + out.println("return;"); + out.popIndent(); + out.println("}"); + out.println(); + } + // Local variable declarations out.printil("final javax.servlet.jsp.PageContext pageContext;"); Modified: tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java?rev=1620903&r1=1620902&r2=1620903&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java (original) +++ tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java Wed Aug 27 14:28:14 2014 @@ -22,7 +22,6 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; -import javax.servlet.DispatcherType; import javax.servlet.RequestDispatcher; import javax.servlet.Servlet; import javax.servlet.ServletConfig; @@ -104,7 +103,6 @@ public class JspServletWrapper { private final boolean unloadAllowed; private final boolean unloadByCount; private final boolean unloadByIdle; - private boolean errorPage; /* * JspServletWrapper for JSP pages. @@ -421,20 +419,6 @@ public class JspServletWrapper { } } - String method = request.getMethod(); - - if (!"GET".equals(method) && !"POST".equals(method) && !"HEAD".equals(method) && - !DispatcherType.ERROR.equals(request.getDispatcherType()) && - !isErrorPage()) { - // Specification states behaviour is undefined - // Jasper opts to reject any other verbs, partly as they are - // unlikely to make sense in a JSP context and partly to protect - // against verb tampering - response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, - Localizer.getMessage("jsp.error.servlet.invalid.method")); - return; - } - /* * (4) Service request */ @@ -601,14 +585,4 @@ public class JspServletWrapper { return new JasperException(ex); } } - - - public void setErrorPage(boolean errorPage) { - this.errorPage = errorPage; - } - - - public boolean isErrorPage() { - return errorPage; - } } Modified: tomcat/trunk/test/org/apache/jasper/servlet/TestJspServlet.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/jasper/servlet/TestJspServlet.java?rev=1620903&r1=1620902&r2=1620903&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/jasper/servlet/TestJspServlet.java (original) +++ tomcat/trunk/test/org/apache/jasper/servlet/TestJspServlet.java Wed Aug 27 14:28:14 2014 @@ -67,6 +67,7 @@ public class TestJspServlet extends Tom Assert.assertEquals(500, rc); } + @Test public void testBug56568b() throws Exception { Tomcat tomcat = getTomcatInstance(); @@ -87,6 +88,27 @@ public class TestJspServlet extends Tom Assert.assertEquals(200, rc); } + + @Test + public void testBug56568c() throws Exception { + Tomcat tomcat = getTomcatInstance(); + + // Use the test web application so JSP support is available and the + // default JSP error page can be used. + File appDir = new File("test/webapp"); + tomcat.addWebapp(null, "/test", appDir.getAbsolutePath()); + + tomcat.start(); + + int rc = methodUrl("http://localhost:"; + getPort() + "/test/jsp/test.jsp", + new ByteChunk(), 500000, null, null, "PUT"); + + // Make sure we get a 405 response which indicates that test.jsp is + // complaining about being called with the PUT method. + Assert.assertEquals(405, rc); + } + + private static class Bug56568aServlet extends HttpServlet { private static final long serialVersionUID = 1L; --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org