# 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
     }