mmidy       00/02/08 09:03:18

  Modified:    src/org/apache/xalan/xslt ElemElement.java
  Log:
  Error if name attribute of xsl:element is not a valid qname
  
  Revision  Changes    Path
  1.6       +29 -4     xml-xalan/src/org/apache/xalan/xslt/ElemElement.java
  
  Index: ElemElement.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/src/org/apache/xalan/xslt/ElemElement.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ElemElement.java  2000/01/20 14:40:07     1.5
  +++ ElemElement.java  2000/02/08 17:03:18     1.6
  @@ -120,8 +120,26 @@
       XPathSupport execContext = processor.getXMLProcessorLiaison();
       String elemName = m_name_avt.evaluate(execContext, sourceNode, this,
                                             new StringBuffer());
  -    if(null != elemName)
  +     // make sure that if a prefix is specified on the attribute name, it is 
valid 
  +    int indexOfNSSep = elemName.indexOf(':');
  +    String ns ="" ;
  +    if(indexOfNSSep >= 0)
       {
  +      String nsprefix = elemName.substring(0, indexOfNSSep);
  +      // Catch the exception this may cause. We don't want to stop 
processing.
  +      try{
  +        ns = getNamespaceForPrefix(nsprefix);
  +      }
  +      catch(Exception ex) 
  +      {
  +        // Could not resolve prefix
  +        ns = null;
  +        processor.warn(XSLTErrorResources.WG_COULD_NOT_RESOLVE_PREFIX, new 
Object[]{nsprefix});            
  +      }
  +    }
  +    // Only do this if name is valid
  +    if(null != elemName && null != ns)
  +    {
         if(null != m_namespace_avt)
         {
           String elemNameSpace = m_namespace_avt.evaluate(execContext, 
sourceNode, this,
  @@ -141,9 +159,13 @@
             elemName = (prefix + ":"+elemName);
           }
         }
  -      
  -      processor.m_resultTreeHandler.startElement(elemName);   
         
  +      processor.m_resultTreeHandler.startElement(elemName);
  +    }  
  +    // Instantiate content of xsl:element. Note that if startElement was not
  +    // called(ie: if invalid element name, the element's attributes will be
  +    // excluded because processor.m_pendingElementName will be null.
  +    {  
         super.execute(processor, sourceTree, sourceNode, mode);
         
         // Handle namespaces(including those on the ancestor chain 
  @@ -152,7 +174,10 @@
         
         executeChildren(processor, sourceTree, 
                         sourceNode, mode);
  -      
  +    }
  +    // Now end the element if name was valid
  +    if(null != elemName && null != ns)
  +     {   
         processor.m_resultTreeHandler.endElement(elemName);
       }
     }
  
  
  

Reply via email to