luehe       2002/11/14 14:22:38

  Modified:    jasper2/src/share/org/apache/jasper/compiler
                        TagLibraryInfoImpl.java
  Log:
  Fixed 4779016 (bugtraq): Translation error doesn't occur if there are
  two functions with the same name.
  
  Revision  Changes    Path
  1.25      +21 -10    
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagLibraryInfoImpl.java
  
  Index: TagLibraryInfoImpl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagLibraryInfoImpl.java,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- TagLibraryInfoImpl.java   13 Nov 2002 18:38:11 -0000      1.24
  +++ TagLibraryInfoImpl.java   14 Nov 2002 22:22:38 -0000      1.25
  @@ -244,8 +244,8 @@
       {
           Vector tagVector = new Vector();
           Vector tagFileVector = new Vector();
  -        Vector functionVector = new Vector();
  -
  +        Hashtable functionTable = new Hashtable();
  +     
           // Create an iterator over the child elements of our <taglib> element
           ParserUtils pu = new ParserUtils();
           TreeNode tld = pu.parseXMLDocument(uri, in);
  @@ -278,9 +278,16 @@
               else if ("tag-file".equals(tname))
                   tagFileVector.addElement(createTagFileInfo(element, uri,
                                                           jarFile));
  -            else if ("function".equals(tname))          // JSP2.0
  -                functionVector.addElement(createFunctionInfo(element));
  -            else if ("display-name".equals(tname) ||    // Ignored elements
  +            else if ("function".equals(tname)) {         // JSP2.0
  +             FunctionInfo funcInfo = createFunctionInfo(element);
  +             String funcName = funcInfo.getName();
  +             if (functionTable.containsKey(funcName)) {
  +                 err.jspError("jsp.error.tld.fn.duplicate.name",
  +                              funcName, uri);
  +
  +             }
  +                functionTable.put(funcName, funcInfo);
  +            } else if ("display-name".equals(tname) ||    // Ignored elements
                        "small-icon".equals(tname) ||
                        "large-icon".equals(tname) ||
                        "listener".equals(tname)) {
  @@ -302,8 +309,12 @@
           this.tagFiles = new TagFileInfo[tagFileVector.size()];
           tagFileVector.copyInto (this.tagFiles);
   
  -        this.functions = new FunctionInfo[functionVector.size()];
  -        functionVector.copyInto (this.functions);
  +        this.functions = new FunctionInfo[functionTable.size()];
  +     int i=0;
  +        Enumeration enum = functionTable.elements();
  +     while (enum.hasMoreElements()) {
  +         this.functions[i++] = (FunctionInfo) enum.nextElement();
  +     }
       }
   
       private TagInfo createTagInfo(TreeNode elem) throws JasperException {
  
  
  

--
To unsubscribe, e-mail:   <mailto:tomcat-dev-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:tomcat-dev-help@;jakarta.apache.org>

Reply via email to