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]