Author: markt
Date: Fri Oct 24 14:03:23 2008
New Revision: 707745

URL: http://svn.apache.org/viewvc?rev=707745&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=45691
Prevent generation of duplicate variable names.

Modified:
    tomcat/tc6.0.x/trunk/STATUS.txt
    tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/Compiler.java
    tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/JspUtil.java
    tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/Node.java
    tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/TagPluginManager.java
    tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml

Modified: tomcat/tc6.0.x/trunk/STATUS.txt
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/STATUS.txt?rev=707745&r1=707744&r2=707745&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/STATUS.txt (original)
+++ tomcat/tc6.0.x/trunk/STATUS.txt Fri Oct 24 14:03:23 2008
@@ -73,12 +73,6 @@
   -0: remm: configuring this is useless (esp on Windows, only the default 
behavior gives acceptable performance)
   -1: 
 
-* Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=45691
-  http://svn.apache.org/viewvc?rev=690693&view=rev
-  NB: Methods deleted in JspUtil to be deprecated rather than deleted
-  +1: markt, remm, fhanik
-  -1:
-
 * ETag improvement: https://issues.apache.org/bugzilla/show_bug.cgi?id=45735
   +1: remm, markt, rjung
   -1: 

Modified: tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/Compiler.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/Compiler.java?rev=707745&r1=707744&r2=707745&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/Compiler.java 
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/Compiler.java Fri Oct 
24 14:03:23 2008
@@ -145,10 +145,6 @@
 
         ServletWriter writer = null;
         try {
-
-            // Reset the temporary variable counter for the generator.
-            JspUtil.resetTemporaryVariableName();
-
             // Parse the file
             ParserController parserCtl = new ParserController(ctxt, this);
             pageNodes = parserCtl.parse(ctxt.getJspFile());

Modified: tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/JspUtil.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/JspUtil.java?rev=707745&r1=707744&r2=707745&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/JspUtil.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/JspUtil.java Fri Oct 
24 14:03:23 2008
@@ -610,6 +610,7 @@
     /**
      * Resets the temporary variable name.
      * (not thread-safe)
+     * @deprecated
      */
     public static void resetTemporaryVariableName() {
         tempSequenceNumber = 0;
@@ -618,6 +619,7 @@
     /**
      * Generates a new temporary variable name.
      * (not thread-safe)
+     * @deprecated
      */
     public static String nextTemporaryVariableName() {
         return Constants.TEMP_VARIABLE_NAME_PREFIX + (tempSequenceNumber++);
@@ -1141,4 +1143,4 @@
 
         return buf.toString();
     }
-}
\ No newline at end of file
+}

Modified: tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/Node.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/Node.java?rev=707745&r1=707744&r2=707745&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/Node.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/Node.java Fri Oct 24 
14:03:23 2008
@@ -39,6 +39,7 @@
 import javax.servlet.jsp.tagext.TryCatchFinally;
 import javax.servlet.jsp.tagext.VariableInfo;
 
+import org.apache.jasper.Constants;
 import org.apache.jasper.JasperException;
 import org.apache.jasper.compiler.tagplugin.TagPluginContext;
 import org.xml.sax.Attributes;
@@ -470,6 +471,11 @@
         private boolean isBomPresent;
 
         /*
+         * Sequence number for temporary variables.
+         */
+        private int tempSequenceNumber = 0;
+
+        /*
          * Constructor.
          */
         Root(Mark start, Node parent, boolean isXmlSyntax) {
@@ -548,6 +554,18 @@
         public Root getParentRoot() {
             return parentRoot;
         }
+        
+        /**
+         * Generates a new temporary variable name.
+         */
+        public String nextTemporaryVariableName() {
+            if (parentRoot == null) {
+                return Constants.TEMP_VARIABLE_NAME_PREFIX + 
(tempSequenceNumber++);
+            } else {
+                return parentRoot.nextTemporaryVariableName();
+            }
+            
+        }
     }
 
     /**
@@ -1913,7 +1931,7 @@
          */
         public String getTemporaryVariableName() {
             if (temporaryVariableName == null) {
-                temporaryVariableName = JspUtil.nextTemporaryVariableName();
+                temporaryVariableName = getRoot().nextTemporaryVariableName();
             }
             return temporaryVariableName;
         }

Modified: 
tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/TagPluginManager.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/TagPluginManager.java?rev=707745&r1=707744&r2=707745&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/TagPluginManager.java 
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/TagPluginManager.java 
Fri Oct 24 14:03:23 2008
@@ -150,91 +150,91 @@
            n.setAtSTag(curNodes);
            n.setUseTagPlugin(true);
            pluginAttributes = new HashMap();
-       }
+        }
 
-       public TagPluginContext getParentContext() {
-           Node parent = node.getParent();
-           if (! (parent instanceof Node.CustomTag)) {
-               return null;
-           }
-           return ((Node.CustomTag) parent).getTagPluginContext();
-       }
-
-       public void setPluginAttribute(String key, Object value) {
-           pluginAttributes.put(key, value);
-       }
-
-       public Object getPluginAttribute(String key) {
-           return pluginAttributes.get(key);
-       }
-
-       public boolean isScriptless() {
-           return node.getChildInfo().isScriptless();
-       }
-
-       public boolean isConstantAttribute(String attribute) {
-           Node.JspAttribute attr = getNodeAttribute(attribute);
-           if (attr == null)
-               return false;
-           return attr.isLiteral();
-       }
+        public TagPluginContext getParentContext() {
+            Node parent = node.getParent();
+            if (! (parent instanceof Node.CustomTag)) {
+                return null;
+            }
+            return ((Node.CustomTag) parent).getTagPluginContext();
+        }
+
+        public void setPluginAttribute(String key, Object value) {
+            pluginAttributes.put(key, value);
+        }
+
+        public Object getPluginAttribute(String key) {
+            return pluginAttributes.get(key);
+        }
+
+        public boolean isScriptless() {
+            return node.getChildInfo().isScriptless();
+        }
 
-       public String getConstantAttribute(String attribute) {
-           Node.JspAttribute attr = getNodeAttribute(attribute);
+        public boolean isConstantAttribute(String attribute) {
+            Node.JspAttribute attr = getNodeAttribute(attribute);
             if (attr == null)
-               return null;
-           return attr.getValue();
-       }
-
-       public boolean isAttributeSpecified(String attribute) {
-           return getNodeAttribute(attribute) != null;
-       }
-
-       public String getTemporaryVariableName() {
-           return JspUtil.nextTemporaryVariableName();
-       }
-
-       public void generateImport(String imp) {
-           pageInfo.addImport(imp);
-       }
-
-       public void generateDeclaration(String id, String text) {
-           if (pageInfo.isPluginDeclared(id)) {
-               return;
-           }
-           curNodes.add(new Node.Declaration(text, node.getStart(), null));
-       }
-
-       public void generateJavaSource(String sourceCode) {
-           curNodes.add(new Node.Scriptlet(sourceCode, node.getStart(),
-                                           null));
-       }
-
-       public void generateAttribute(String attributeName) {
-           curNodes.add(new Node.AttributeGenerator(node.getStart(),
-                                                    attributeName,
-                                                    node));
-       }
-
-       public void dontUseTagPlugin() {
-           node.setUseTagPlugin(false);
-       }
-
-       public void generateBody() {
-           // Since we'll generate the body anyway, this is really a nop, 
-           // except for the fact that it lets us put the Java sources the
-           // plugins produce in the correct order (w.r.t the body).
-           curNodes = node.getAtETag();
-       }
-
-       private Node.JspAttribute getNodeAttribute(String attribute) {
-           Node.JspAttribute[] attrs = node.getJspAttributes();
-           for (int i=0; attrs != null && i < attrs.length; i++) {
-               if (attrs[i].getName().equals(attribute)) {
-                   return attrs[i];
-               }
-           }
-           return null;
-       }
+                return false;
+            return attr.isLiteral();
+        }
+
+        public String getConstantAttribute(String attribute) {
+            Node.JspAttribute attr = getNodeAttribute(attribute);
+            if (attr == null)
+                return null;
+            return attr.getValue();
+        }
+
+        public boolean isAttributeSpecified(String attribute) {
+            return getNodeAttribute(attribute) != null;
+        }
+
+        public String getTemporaryVariableName() {
+            return node.getRoot().nextTemporaryVariableName();
+        }
+
+        public void generateImport(String imp) {
+            pageInfo.addImport(imp);
+        }
+
+        public void generateDeclaration(String id, String text) {
+            if (pageInfo.isPluginDeclared(id)) {
+                return;
+            }
+            curNodes.add(new Node.Declaration(text, node.getStart(), null));
+        }
+
+        public void generateJavaSource(String sourceCode) {
+            curNodes.add(new Node.Scriptlet(sourceCode, node.getStart(),
+                                            null));
+        }
+
+        public void generateAttribute(String attributeName) {
+            curNodes.add(new Node.AttributeGenerator(node.getStart(),
+                                                     attributeName,
+                                                     node));
+        }
+
+        public void dontUseTagPlugin() {
+            node.setUseTagPlugin(false);
+        }
+
+        public void generateBody() {
+            // Since we'll generate the body anyway, this is really a nop, 
+            // except for the fact that it lets us put the Java sources the
+            // plugins produce in the correct order (w.r.t the body).
+            curNodes = node.getAtETag();
+        }
+
+        private Node.JspAttribute getNodeAttribute(String attribute) {
+            Node.JspAttribute[] attrs = node.getJspAttributes();
+            for (int i=0; attrs != null && i < attrs.length; i++) {
+                if (attrs[i].getName().equals(attribute)) {
+                    return attrs[i];
+                }
+            }
+            return null;
+        }
     }
 }

Modified: tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml?rev=707745&r1=707744&r2=707745&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Fri Oct 24 14:03:23 2008
@@ -136,6 +136,10 @@
       <fix>
         <bug>45666</bug>: Prevent infinite loop on include. (markt)
       </fix>
+      <fix>
+        <bug>45691</bug>: Prevent generation of duplicate variable names when
+        generating code for JSPs. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Cluster">



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to