Author: markt
Date: Mon Nov  2 00:30:55 2009
New Revision: 831785

URL: http://svn.apache.org/viewvc?rev=831785&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=47331
Uninterpreted tags are essentially template text so apply the rules of JSp.2.2 
there too.

Modified:
    tomcat/trunk/java/org/apache/jasper/compiler/Validator.java
    tomcat/trunk/java/org/apache/jasper/resources/LocalStrings.properties

Modified: tomcat/trunk/java/org/apache/jasper/compiler/Validator.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/Validator.java?rev=831785&r1=831784&r2=831785&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/Validator.java (original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/Validator.java Mon Nov  2 
00:30:55 2009
@@ -731,9 +731,16 @@
                 int attrSize = attrs.getLength();
                 Node.JspAttribute[] jspAttrs = new Node.JspAttribute[attrSize];
                 for (int i = 0; i < attrSize; i++) {
+                    // JSP.2.2 - '#{' not allowed in template text
+                    String value = attrs.getValue(i);
+                    if (!pageInfo.isDeferredSyntaxAllowedAsLiteral()) {
+                        if (containsDeferredSyntax(value)) {
+                            err.jspError(n, "jsp.error.el.template.deferred");
+                        }
+                    }
                     jspAttrs[i] = getJspAttribute(null, attrs.getQName(i),
-                            attrs.getURI(i), attrs.getLocalName(i), attrs
-                                    .getValue(i), n, false);
+                            attrs.getURI(i), attrs.getLocalName(i), value, n,
+                            false);
                 }
                 n.setJspAttributes(jspAttrs);
             }
@@ -741,6 +748,31 @@
             visitBody(n);
         }
 
+        /*
+         * Look for a #{ sequence that isn't preceded by \.
+         */
+        private boolean containsDeferredSyntax(String value) {
+            if (value == null) {
+                return false;
+            }
+            
+            int i = 0;
+            int len = value.length();
+            boolean prevCharIsEscape = false;
+            while (i < value.length()) {
+                char c = value.charAt(i);
+                if (c == '#' && (i+1) < len && value.charAt(i+1) == '{' && 
!prevCharIsEscape) {
+                    return true;
+                } else if (c == '\\') {
+                    prevCharIsEscape = true;
+                } else {
+                    prevCharIsEscape = false;
+                }
+                i++;
+            }
+            return false;
+        }
+
         public void visit(Node.CustomTag n) throws JasperException {
 
             TagInfo tagInfo = n.getTagInfo();
@@ -1063,7 +1095,7 @@
                                 
                                 String expectedType = null;
                                 if (tldAttrs[j].isDeferredMethod()) {
-                                    // The String litteral must be castable to 
what is declared as type
+                                    // The String literal must be castable to 
what is declared as type
                                     // for the attribute
                                     String m = 
tldAttrs[j].getMethodSignature();
                                     if (m != null) {

Modified: tomcat/trunk/java/org/apache/jasper/resources/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/resources/LocalStrings.properties?rev=831785&r1=831784&r2=831785&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/resources/LocalStrings.properties 
(original)
+++ tomcat/trunk/java/org/apache/jasper/resources/LocalStrings.properties Mon 
Nov  2 00:30:55 2009
@@ -443,7 +443,7 @@
 jsp.exception=An exception occurred processing JSP page {0} at line {1}
 
 # JSP 2.1
-jsp.error.el.template.deferred=#{..} is not allowed in template text
+jsp.error.el.template.deferred=#{...} is not allowed in template text
 jsp.error.el.parse={0} : {1}
 jsp.error.page.invalid.deferredsyntaxallowedasliteral=Page directive: invalid 
value for deferredSyntaxAllowedAsLiteral
 jsp.error.tag.invalid.deferredsyntaxallowedasliteral=Tag directive: invalid 
value for deferredSyntaxAllowedAsLiteral



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to