kinman 2002/09/09 13:36:07
Modified: jasper2/src/share/org/apache/jasper/compiler
TagFileProcessor.java
jasper2/src/share/org/apache/jasper/resources
messages.properties
jasper2/src/share/org/apache/jasper/servlet
JspServletWrapper.java
Log:
- Detect and flags circular dependent tag files.
Revision Changes Path
1.23 +21 -12
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagFileProcessor.java
Index: TagFileProcessor.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagFileProcessor.java,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- TagFileProcessor.java 4 Sep 2002 17:59:11 -0000 1.22
+++ TagFileProcessor.java 9 Sep 2002 20:36:07 -0000 1.23
@@ -332,11 +332,12 @@
/**
* Compiles and loads a tagfile.
*/
- private static Class loadTagFile(JspCompilationContext ctxt,
+ private static Class loadTagFile(Compiler compiler,
String tagFilePath, TagInfo tagInfo,
TagData tagData)
throws JasperException {
+ JspCompilationContext ctxt = compiler.getCompilationContext();
JspRuntimeContext rctxt = ctxt.getRuntimeContext();
JspServletWrapper wrapper =
(JspServletWrapper) rctxt.getWrapper(tagFilePath);
@@ -353,7 +354,17 @@
ctxt.getTagFileJars());
rctxt.addWrapper(tagFilePath,wrapper);
}
- return wrapper.loadTagFile();
+
+ // Check to see if we have been here before but not finished
+ // compiling/loading.
+ if (wrapper.incTripCount() > 0) {
+ // Circular tag file dependencies
+ compiler.getErrorDispatcher().jspError("jsp.error.circular.tagfile",
+ tagFilePath);
+ }
+ Class tagClass = wrapper.loadTagFile();
+ wrapper.decTripCount();
+ return tagClass;
}
/*
@@ -363,12 +374,12 @@
static class TagFileLoaderVisitor extends Node.Visitor {
- private JspCompilationContext ctxt;
+ private Compiler compiler;
private PageInfo pageInfo;
- TagFileLoaderVisitor(JspCompilationContext ctxt, PageInfo pageInfo) {
- this.ctxt = ctxt;
- this.pageInfo = pageInfo;
+ TagFileLoaderVisitor(Compiler compiler) {
+ this.compiler = compiler;
+ this.pageInfo = compiler.getPageInfo();
}
public void visit(Node.CustomTag n) throws JasperException {
@@ -376,7 +387,7 @@
if (tagFileInfo != null) {
String tagFilePath = tagFileInfo.getPath();
pageInfo.addDependant(tagFilePath);
- Class c = loadTagFile(ctxt, tagFilePath, n.getTagInfo(),
+ Class c = loadTagFile(compiler, tagFilePath, n.getTagInfo(),
n.getTagData());
n.setTagHandlerClass(c);
}
@@ -393,9 +404,7 @@
public static void loadTagFiles(Compiler compiler, Node.Nodes page)
throws JasperException {
- JspCompilationContext ctxt = compiler.getCompilationContext();
- PageInfo pageInfo = compiler.getPageInfo();
- page.visit(new TagFileLoaderVisitor(ctxt, pageInfo));
+ page.visit(new TagFileLoaderVisitor(compiler));
}
}
1.36 +2 -2
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/resources/messages.properties
Index: messages.properties
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/resources/messages.properties,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -r1.35 -r1.36
--- messages.properties 29 Aug 2002 23:27:36 -0000 1.35
+++ messages.properties 9 Sep 2002 20:36:07 -0000 1.36
@@ -300,4 +300,4 @@
jsp.error.duplicate.name.jspattribute=The attribute {0} specified in the standard
or custom action also appears as the value of the name attribute in the enclosed
jsp:attribute
jsp.error.not.in.template=Not allowed in a template text body.
jsp.error.badaction=The action is not a recognizable standard action.
-
+jsp.error.circular.tagfile=The tag file {0} contains a circular dependency on
itself. This is currently not implemented.
1.17 +13 -3
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/servlet/JspServletWrapper.java
Index: JspServletWrapper.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/servlet/JspServletWrapper.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- JspServletWrapper.java 29 Aug 2002 18:31:20 -0000 1.16
+++ JspServletWrapper.java 9 Sep 2002 20:36:07 -0000 1.17
@@ -114,6 +114,7 @@
private ServletConfig config;
private Options options;
private boolean isTagFile;
+ private int tripCount;
/*
* JspServletWrapper for JSP pages.
@@ -145,6 +146,7 @@
this.config = null; // not used
this.options = options;
this.jspUri = tagFilePath;
+ this.tripCount = 0;
ctxt = new JspCompilationContext(jspUri, tagInfo, tagData, options,
servletContext, this, rctxt,
tagFileJars);
@@ -246,6 +248,14 @@
public boolean isTagFile() {
return this.isTagFile;
+ }
+
+ public int incTripCount() {
+ return tripCount++;
+ }
+
+ public int decTripCount() {
+ return tripCount--;
}
public void service(HttpServletRequest request,
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>