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);
}
}