Greetings! You actually found a bug. The attached patch fixes the problem.
It is checked in the XMLSEC_0_0_X_BRANCH branch as well.

Thanks for bug report,
Aleksey
Index: src/xmltree.c
===================================================================
RCS file: /cvs/gnome/xmlsec/src/xmltree.c,v
retrieving revision 1.10
diff -u -r1.10 xmltree.c
--- src/xmltree.c       16 Aug 2002 03:46:31 -0000      1.10
+++ src/xmltree.c       24 Feb 2003 18:31:52 -0000
@@ -600,6 +600,7 @@
            
     xmlNodeSetContent(node, NULL);
     xmlAddChild(node, ptr);
+    xmlSetTreeDoc(ptr, node->doc);
     return(0);
 }
 
Index: src/xslt.c
===================================================================
RCS file: /cvs/gnome/xmlsec/src/xslt.c,v
retrieving revision 1.7
diff -u -r1.7 xslt.c
--- src/xslt.c  15 Aug 2002 20:27:16 -0000      1.7
+++ src/xslt.c  24 Feb 2003 18:31:52 -0000
@@ -383,10 +383,30 @@
  */
 int
 xmlSecTransformXsltAdd(xmlNodePtr transformNode, const xmlChar *xslt) {
+    xmlDocPtr xslt_doc;
+    int ret;
+        
     xmlSecAssert2(transformNode != NULL, -1);    
     xmlSecAssert2(xslt != NULL, -1);    
     
-    xmlNodeSetContent(transformNode, xslt);
+    xslt_doc = xmlParseMemory(xslt, xmlStrlen(xslt));
+    if(xslt_doc == NULL) {
+       xmlSecError(XMLSEC_ERRORS_HERE,
+                   XMLSEC_ERRORS_R_XML_FAILED,
+                   "xmlParseMemory");
+       return(-1);
+    }
+    
+    ret = xmlSecReplaceContent(transformNode, xmlDocGetRootElement(xslt_doc));
+    if(ret < 0) {
+       xmlSecError(XMLSEC_ERRORS_HERE,
+                   XMLSEC_ERRORS_R_XMLSEC_FAILED,
+                   "xmlSecReplaceContent");
+       xmlFreeDoc(xslt_doc);
+       return(-1);
+    }
+    
+    xmlFreeDoc(xslt_doc);
     return(0);
 }
 

Reply via email to