Author: markt
Date: Sun Aug 31 06:47:57 2008
New Revision: 690693

URL: http://svn.apache.org/viewvc?rev=690693&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=45691
Make temporary variable name generation safe when multiple compilations are 
running in parallel

Modified:
    tomcat/trunk/java/org/apache/jasper/compiler/Compiler.java
    tomcat/trunk/java/org/apache/jasper/compiler/JspUtil.java
    tomcat/trunk/java/org/apache/jasper/compiler/Node.java
    tomcat/trunk/java/org/apache/jasper/compiler/TagPluginManager.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=690693&r1=690692&r2=690693&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/Compiler.java (original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/Compiler.java Sun Aug 31 
06:47:57 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/trunk/java/org/apache/jasper/compiler/JspUtil.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/JspUtil.java?rev=690693&r1=690692&r2=690693&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/JspUtil.java (original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/JspUtil.java Sun Aug 31 
06:47:57 2008
@@ -55,8 +55,6 @@
     private static final String OPEN_EXPR_XML  = "%=";
     private static final String CLOSE_EXPR_XML = "%";
 
-    private static int tempSequenceNumber = 0;
-    
     //private static ExpressionEvaluatorImpl expressionEvaluator
     //= new ExpressionEvaluatorImpl();
     
@@ -599,22 +597,6 @@
 //        }
     }
 
-    /**
-     * Resets the temporary variable name.
-     * (not thread-safe)
-     */
-    public static void resetTemporaryVariableName() {
-        tempSequenceNumber = 0;
-    }
-
-    /**
-     * Generates a new temporary variable name.
-     * (not thread-safe)
-     */
-    public static String nextTemporaryVariableName() {
-        return Constants.TEMP_VARIABLE_NAME_PREFIX + (tempSequenceNumber++);
-    }
-
     public static String coerceToPrimitiveBoolean(String s,
                           boolean isNamedAttribute) {
     if (isNamedAttribute) {

Modified: tomcat/trunk/java/org/apache/jasper/compiler/Node.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/Node.java?rev=690693&r1=690692&r2=690693&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/Node.java (original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/Node.java Sun Aug 31 06:47:57 
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/trunk/java/org/apache/jasper/compiler/TagPluginManager.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/TagPluginManager.java?rev=690693&r1=690692&r2=690693&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/TagPluginManager.java 
(original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/TagPluginManager.java Sun Aug 
31 06:47:57 2008
@@ -191,7 +191,7 @@
         }
 
         public String getTemporaryVariableName() {
-            return JspUtil.nextTemporaryVariableName();
+            return node.getRoot().nextTemporaryVariableName();
         }
 
         public void generateImport(String imp) {



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

Reply via email to