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]>

Reply via email to