Author: markt
Date: Sun Apr 10 10:35:55 2011
New Revision: 1090766

URL: http://svn.apache.org/viewvc?rev=1090766&view=rev
Log:
Check tag file attribute names are valid Java identifiers

Modified:
    tomcat/trunk/java/org/apache/jasper/compiler/JspUtil.java
    tomcat/trunk/java/org/apache/jasper/compiler/Parser.java
    tomcat/trunk/java/org/apache/jasper/resources/LocalStrings.properties
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/jasper/compiler/JspUtil.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/JspUtil.java?rev=1090766&r1=1090765&r2=1090766&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/JspUtil.java (original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/JspUtil.java Sun Apr 10 
10:35:55 2011
@@ -858,6 +858,31 @@ public class JspUtil {
         return false;
     }
 
+    public static boolean isJavaIdentifier(String key) {
+        // Should not be the case but check to be sure
+        if (key == null || key.length() == 0) {
+            return false;
+        }
+        
+        if (isJavaKeyword(key)) {
+            return false;
+        }
+
+        // Check the start character that has more restrictions
+        if (!Character.isJavaIdentifierStart(key.charAt(0))) {
+            return false;
+        }
+
+        // Check each remaining character used is permitted
+        for (int idx = 1; idx < key.length(); idx++) {
+            if (!Character.isJavaIdentifierPart(key.charAt(idx))) {
+                return false;
+            }
+        }
+        
+        return true;
+    }
+
     static InputStreamReader getReader(String fname, String encoding,
             JarFile jarFile, JspCompilationContext ctxt, ErrorDispatcher err)
             throws JasperException, IOException {

Modified: tomcat/trunk/java/org/apache/jasper/compiler/Parser.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/Parser.java?rev=1090766&r1=1090765&r2=1090766&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/Parser.java (original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/Parser.java Sun Apr 10 
10:35:55 2011
@@ -593,6 +593,18 @@ class Parser implements TagConstants {
      */
     private void parseAttributeDirective(Node parent) throws JasperException {
         Attributes attrs = parseAttributes();
+        // JSP.8.3 says the variable created for each attribute must have the
+        // same name as the attribute. Therefore, the names must be valid Java
+        // identifiers
+        if (attrs != null && attrs.getLength() > 0) {
+            for (int i = 0; i < attrs.getLength(); i++) {
+                if ("name".equals(attrs.getLocalName(i)) &&
+                        !JspUtil.isJavaIdentifier(attrs.getValue(i))) {
+                    err.jspError(start, "jsp.error.identifier",
+                            attrs.getValue(i));
+                }
+            }
+        }
         new Node.AttributeDirective(attrs, start, parent);
     }
 

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=1090766&r1=1090765&r2=1090766&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/resources/LocalStrings.properties 
(original)
+++ tomcat/trunk/java/org/apache/jasper/resources/LocalStrings.properties Sun 
Apr 10 10:35:55 2011
@@ -486,4 +486,6 @@ jsp.message.jsp_removed_excess=Removing 
 jsp.message.jsp_removed_idle=Removing idle JSP for path [{0}] in context [{1}] 
after {2} seconds");
 jsp.message.jsp_unload_check=Checking JSPs for unload in context [{0}], JSP 
count: {1} queue length: {2}
 
+jsp.error.identifier=The attribute name [{0}] is invalid since it is not a 
valid Java identifier
+
 xmlParser.skipBomFail=Failed to skip BOM when parsing XML input stream

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1090766&r1=1090765&r2=1090766&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Sun Apr 10 10:35:55 2011
@@ -77,6 +77,10 @@
         Label JSP/tag file line and column numbers when reporting errors since
         it may not be immediately obvious what the numbers represent. (markt)
       </add>
+      <fix>
+        <bug>36362</bug>: Check that tag file attribute names are valid Java
+        identifiers. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Web applications">



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

Reply via email to