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