# HG changeset patch # User William M. Brack <wbrack@src.gnome.org> # Date 1042412336 0 # Sun Jan 12 22:58:56 2003 +0000 # Node ID 06b7f9bd83afd1e7346a48e2465074553eb9b95b # Parent 0cf9d09cc3db7f3c5b1be318486e03bc11abbe7c enhanced previous fix to bug #120684, using excellent suggestion by Daniel * transform.c: enhanced previous fix to bug #120684, using excellent suggestion by Daniel * attributes.c: fixed bug #119583, merging attribute sets from imported stylesheets. * tests/docs/Makefile.am tests/docs/bug-131.xml tests/general/Makefile.am tests/docs/bug-131*: added tests to the regression suite for bug #120684. diff --git a/libxslt/attributes.c b/libxslt/attributes.c --- a/libxslt/attributes.c +++ b/libxslt/attributes.c @@ -502,6 +502,7 @@ const xmlChar *name, const xmlChar *ns, ATTRIBUTE_UNUSED const xmlChar *ignored) { int ret; + xsltAttrElemPtr topSet; ret = xmlHashAddEntry2(style->attributeSets, name, ns, values); if (ret < 0) { @@ -510,14 +511,23 @@ */ #ifdef WITH_XSLT_DEBUG_ATTRIBUTES xsltGenericDebug(xsltGenericDebugContext, - "attribute sets %s present already in top stylesheet\n", - name); + "attribute set %s present already in top stylesheet" + " - merging\n", name); #endif - xsltFreeAttrElem(values); + topSet = xmlHashLookup2(style->attributeSets, name, ns); + if (topSet==NULL) { + xsltGenericError(xsltGenericErrorContext, + "xsl:attribute-set : logic error merging from imports for" + " attribute-set %s\n", name); + } else { + topSet = xsltMergeAttrElemList(topSet, values); + xmlHashUpdateEntry2(style->attributeSets, name, ns, topSet, NULL); + } + xsltFreeAttrElemList(values); #ifdef WITH_XSLT_DEBUG_ATTRIBUTES } else { xsltGenericDebug(xsltGenericDebugContext, - "attribute sets %s moved to top stylesheet\n", + "attribute set %s moved to top stylesheet\n", name); #endif }