libxslt r1472 - in trunk: . libxslt tests/docs tests/general
- From: veillard svn gnome org
- To: svn-commits-list gnome org
- Subject: libxslt r1472 - in trunk: . libxslt tests/docs tests/general
- Date: Tue, 13 May 2008 15:34:37 +0100 (BST)
Author: veillard
Date: Tue May 13 14:34:37 2008
New Revision: 1472
URL: http://svn.gnome.org/viewvc/libxslt?rev=1472&view=rev
Log:
* libxslt/xslt.c libxslt/extensions.c libxslt/extensions.h:
fix the processing of top level elements of stylesheets which
are not in the XSLT namespace and are not an extension either
should fix #529223
* tests/docs/Makefile.am tests/docs/bug-167.xml
tests/general/Makefile.am tests/general/bug-167.*: add the
test to the regression suite
Daniel
Added:
trunk/tests/docs/bug-167.xml
trunk/tests/general/bug-167.out
trunk/tests/general/bug-167.xsl
Modified:
trunk/ChangeLog
trunk/libxslt/extensions.c
trunk/libxslt/extensions.h
trunk/libxslt/xslt.c
trunk/tests/docs/Makefile.am
trunk/tests/general/Makefile.am
Modified: trunk/libxslt/extensions.c
==============================================================================
--- trunk/libxslt/extensions.c (original)
+++ trunk/libxslt/extensions.c Tue May 13 14:34:37 2008
@@ -1115,7 +1115,7 @@
/**
* xsltCheckExtPrefix:
* @style: the stylesheet
- * @URI: the namespace URI (possibly NULL)
+ * @URI: the namespace prefix (possibly NULL)
*
* Check if the given prefix is one of the declared extensions.
* This is intended to be called only at compile-time.
@@ -1173,6 +1173,37 @@
}
/**
+ * xsltCheckExtURI:
+ * @style: the stylesheet
+ * @URI: the namespace URI (possibly NULL)
+ *
+ * Check if the given prefix is one of the declared extensions.
+ * This is intended to be called only at compile-time.
+ * Called by:
+ * xsltPrecomputeStylesheet() (xslt.c)
+ * xsltParseTemplateContent (xslt.c)
+ *
+ * Returns 1 if this is an extension, 0 otherwise
+ */
+int
+xsltCheckExtURI(xsltStylesheetPtr style, const xmlChar * URI)
+{
+ xsltExtDefPtr cur;
+
+ if ((style == NULL) || (style->nsDefs == NULL))
+ return (0);
+ if (URI == NULL)
+ return (0);
+ cur = (xsltExtDefPtr) style->nsDefs;
+ while (cur != NULL) {
+ if (xmlStrEqual(URI, cur->URI))
+ return (1);
+ cur = cur->next;
+ }
+ return (0);
+}
+
+/**
* xsltRegisterExtModuleFull:
* @URI: URI associated to this module
* @initFunc: the module initialization function
Modified: trunk/libxslt/extensions.h
==============================================================================
--- trunk/libxslt/extensions.h (original)
+++ trunk/libxslt/extensions.h Tue May 13 14:34:37 2008
@@ -75,7 +75,7 @@
xsltRegisterExtModule (const xmlChar *URI,
xsltExtInitFunction initFunc,
xsltExtShutdownFunction shutdownFunc);
-XSLTPUBFUN int XSLTCALL
+XSLTPUBFUN int XSLTCALL
xsltRegisterExtModuleFull
(const xmlChar * URI,
xsltExtInitFunction initFunc,
@@ -83,8 +83,8 @@
xsltStyleExtInitFunction styleInitFunc,
xsltStyleExtShutdownFunction styleShutdownFunc);
-XSLTPUBFUN int XSLTCALL
- xsltUnregisterExtModule (const xmlChar * URI);
+XSLTPUBFUN int XSLTCALL
+ xsltUnregisterExtModule (const xmlChar * URI);
XSLTPUBFUN void * XSLTCALL
xsltGetExtData (xsltTransformContextPtr ctxt,
@@ -216,6 +216,9 @@
XSLTPUBFUN int XSLTCALL
xsltCheckExtPrefix (xsltStylesheetPtr style,
const xmlChar *URI);
+XSLTPUBFUN int XSLTCALL
+ xsltCheckExtURI (xsltStylesheetPtr style,
+ const xmlChar *URI);
XSLTPUBFUN int XSLTCALL
xsltInitCtxtExts (xsltTransformContextPtr ctxt);
XSLTPUBFUN void XSLTCALL
Modified: trunk/libxslt/xslt.c
==============================================================================
--- trunk/libxslt/xslt.c (original)
+++ trunk/libxslt/xslt.c Tue May 13 14:34:37 2008
@@ -3397,7 +3397,7 @@
static void
xsltPrecomputeStylesheet(xsltStylesheetPtr style, xmlNodePtr cur)
{
- xmlNodePtr deleteNode;
+ xmlNodePtr deleteNode, styleelem;
int internalize = 0;
if ((style == NULL) || (cur == NULL))
@@ -3408,6 +3408,14 @@
internalize = 1;
else
style->internalized = 0;
+
+ if ((cur != NULL) && (IS_XSLT_ELEM(cur)) &&
+ (IS_XSLT_NAME(cur, "stylesheet"))) {
+ styleelem = cur;
+ } else {
+ styleelem = NULL;
+ }
+
/*
* This content comes from the stylesheet
* For stylesheets, the set of whitespace-preserving
@@ -3539,9 +3547,16 @@
}
/*
- * Skip to next node
+ * Skip to next node. In case of a namespaced element children of
+ * the stylesheet and not in the XSLT namespace and not an extension
+ * element, ignore its content.
*/
- if (cur->children != NULL) {
+ if ((cur->type == XML_ELEMENT_NODE) && (cur->ns != NULL) &&
+ (styleelem != NULL) && (cur->parent == styleelem) &&
+ (!xmlStrEqual(cur->ns->href, XSLT_NAMESPACE)) &&
+ (!xsltCheckExtURI(style, cur->ns->href))) {
+ goto skip_children;
+ } else if (cur->children != NULL) {
if ((cur->children->type != XML_ENTITY_DECL) &&
(cur->children->type != XML_ENTITY_REF_NODE) &&
(cur->children->type != XML_ENTITY_NODE)) {
@@ -3554,7 +3569,7 @@
if (cur->next != NULL) {
cur = cur->next;
continue;
- }
+ }
do {
cur = cur->parent;
@@ -6023,11 +6038,10 @@
xmlFree(prop);
}
- cur = top->children;
-
/*
* process xsl:import elements
*/
+ cur = top->children;
while (cur != NULL) {
if (IS_BLANK_NODE(cur)) {
cur = cur->next;
Modified: trunk/tests/docs/Makefile.am
==============================================================================
--- trunk/tests/docs/Makefile.am (original)
+++ trunk/tests/docs/Makefile.am Tue May 13 14:34:37 2008
@@ -165,6 +165,7 @@
bug-164.xml \
bug-165.xml \
bug-166.xml \
+ bug-167.xml \
character.xml \
array.xml \
items.xml
Added: trunk/tests/docs/bug-167.xml
==============================================================================
--- (empty file)
+++ trunk/tests/docs/bug-167.xml Tue May 13 14:34:37 2008
@@ -0,0 +1 @@
+<doc/>
Modified: trunk/tests/general/Makefile.am
==============================================================================
--- trunk/tests/general/Makefile.am (original)
+++ trunk/tests/general/Makefile.am Tue May 13 14:34:37 2008
@@ -174,6 +174,7 @@
bug-164.out bug-164.xsl \
bug-165.out bug-165.xsl bug-145.err \
bug-166.out bug-166.xsl \
+ bug-167.out bug-167.xsl \
character.out character.xsl \
character2.out character2.xsl \
itemschoose.out itemschoose.xsl \
Added: trunk/tests/general/bug-167.out
==============================================================================
--- (empty file)
+++ trunk/tests/general/bug-167.out Tue May 13 14:34:37 2008
@@ -0,0 +1 @@
+Hello
\ No newline at end of file
Added: trunk/tests/general/bug-167.xsl
==============================================================================
--- (empty file)
+++ trunk/tests/general/bug-167.xsl Tue May 13 14:34:37 2008
@@ -0,0 +1,20 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version="1.0">
+
+<xsl:output method="text"/>
+
+<xsl:template match="/">
+ <xsl:text>Hello </xsl:text>
+ <xsl:if test="false()">
+ <xsl:text>world</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+<x:ignore xmlns:x="x">
+<xsl:template match="/">
+ <!--this better not be here!-->
+</xsl:template>
+</x:ignore>
+
+</xsl:stylesheet>
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]