From ee4c6ac02b6701d3a3ac3d060b21d141ccb79557 Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Fri, 5 Jul 2002 16:37:21 +0000 Subject: [PATCH] fixed bug #87279 added an example in the regression tests for this case * libxslt/preproc.c libxslt/transform.c: fixed bug #87279 * tests/docs/Makefile.am tests/docs/bug-88.xml tests/general/Makefile.am tests/general/bug-88.*: added an example in the regression tests for this case Daniel --- ChangeLog | 7 +++++++ libxslt/preproc.c | 8 ++++++++ libxslt/transform.c | 8 +++++++- tests/docs/Makefile.am | 1 + tests/docs/bug-88.xml | 1 + tests/general/Makefile.am | 1 + tests/general/bug-88.out | 2 ++ tests/general/bug-88.xsl | 6 ++++++ 8 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 tests/docs/bug-88.xml create mode 100644 tests/general/bug-88.out create mode 100644 tests/general/bug-88.xsl diff --git a/ChangeLog b/ChangeLog index 24a8ba6..d830d6f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Fri Jul 5 18:28:08 CEST 2002 Daniel Veillard + + * libxslt/preproc.c libxslt/transform.c: fixed bug #87279 + * tests/docs/Makefile.am tests/docs/bug-88.xml + tests/general/Makefile.am tests/general/bug-88.*: added an + example in the regression tests for this case + Fri Jul 5 16:30:02 CEST 2002 Daniel Veillard * libxslt/preproc.c libxslt/xsltutils.c: applied a patch from diff --git a/libxslt/preproc.c b/libxslt/preproc.c index dc613d8..a52f193 100644 --- a/libxslt/preproc.c +++ b/libxslt/preproc.c @@ -453,7 +453,15 @@ xsltElementComp(xsltStylesheetPtr style, xmlNodePtr inst) { comp->ns = xsltEvalStaticAttrValueTemplate(style, inst, (const xmlChar *)"namespace", XSLT_NAMESPACE, &comp->has_ns); + if (comp->has_ns == 0) { + xmlNsPtr defaultNs; + defaultNs = xmlSearchNs(inst->doc, inst, NULL); + if (defaultNs != NULL) { + comp->ns = xmlStrdup(defaultNs->href); + comp->has_ns = 1; + } + } comp->use = xsltEvalStaticAttrValueTemplate(style, inst, (const xmlChar *)"use-attribute-sets", XSLT_NAMESPACE, &comp->has_use); diff --git a/libxslt/transform.c b/libxslt/transform.c index 1891f0b..da226af 100644 --- a/libxslt/transform.c +++ b/libxslt/transform.c @@ -2124,6 +2124,7 @@ xsltElement(xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNsPtr ns = NULL, oldns = NULL; xmlNodePtr copy; xmlNodePtr oldInsert; + int generateDefault = 0; if (ctxt->insert == NULL) @@ -2166,6 +2167,8 @@ xsltElement(xsltTransformContextPtr ctxt, xmlNodePtr node, ctxt->insert); xmlFree(namespace); } + } else if ((comp->ns != NULL) && (prefix == NULL) && (comp->has_ns)) { + generateDefault = 1; } else if (comp->ns != NULL) { ns = xsltGetSpecialNamespace(ctxt, inst, comp->ns, prefix, ctxt->insert); @@ -2195,7 +2198,10 @@ xsltElement(xsltTransformContextPtr ctxt, xmlNodePtr node, "xsl:element : creation of %s failed\n", name); goto error; } - if ((ns == NULL) && (oldns != NULL)) { + if (generateDefault == 1) { + ns = xmlNewNs(copy, comp->ns, NULL); + copy->ns = ns; + } else if ((ns == NULL) && (oldns != NULL)) { /* very specific case xsltGetNamespace failed */ ns = xmlNewNs(copy, oldns->href, oldns->prefix); copy->ns = ns; diff --git a/tests/docs/Makefile.am b/tests/docs/Makefile.am index 1a431b4..e526251 100644 --- a/tests/docs/Makefile.am +++ b/tests/docs/Makefile.am @@ -87,6 +87,7 @@ EXTRA_DIST = \ bug-84.xml \ bug-86.xml \ bug-87.xml \ + bug-88.xml \ character.xml \ array.xml \ items.xml diff --git a/tests/docs/bug-88.xml b/tests/docs/bug-88.xml new file mode 100644 index 0000000..69d62f2 --- /dev/null +++ b/tests/docs/bug-88.xml @@ -0,0 +1 @@ + diff --git a/tests/general/Makefile.am b/tests/general/Makefile.am index ba08ab0..bed8e01 100644 --- a/tests/general/Makefile.am +++ b/tests/general/Makefile.am @@ -90,6 +90,7 @@ EXTRA_DIST = \ bug-84.out bug-84.xsl \ bug-86.out bug-86.xsl \ bug-87.out bug-87.xsl \ + bug-88.out bug-88.xsl \ character.out character.xsl \ character2.out character2.xsl \ itemschoose.out itemschoose.xsl \ diff --git a/tests/general/bug-88.out b/tests/general/bug-88.out new file mode 100644 index 0000000..ce11146 --- /dev/null +++ b/tests/general/bug-88.out @@ -0,0 +1,2 @@ + + diff --git a/tests/general/bug-88.xsl b/tests/general/bug-88.xsl new file mode 100644 index 0000000..a2cc734 --- /dev/null +++ b/tests/general/bug-88.xsl @@ -0,0 +1,6 @@ + + + + + + -- 2.7.4