You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2014/08/27 16:28:15 UTC
svn commit: r1620903 - in /tomcat/trunk:
java/org/apache/jasper/compiler/Compiler.java
java/org/apache/jasper/compiler/Generator.java
java/org/apache/jasper/servlet/JspServletWrapper.java
test/org/apache/jasper/servlet/TestJspServlet.java
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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org