iliaa           Wed Jul 23 12:44:27 2003 EDT

  Modified files:              (Branch: PHP_4_3)
    /php-src/ext/domxml php_domxml.c 
  Log:
  MFH: Fixed #24609 (segfault when using replace node across different docs)
  Patch by: Rob Richards
  
  # This patch somehow did not make it into 4.3.X, so on Rob's request in am
  # MFHing it in.
  
  
Index: php-src/ext/domxml/php_domxml.c
diff -u php-src/ext/domxml/php_domxml.c:1.218.2.25 
php-src/ext/domxml/php_domxml.c:1.218.2.26
--- php-src/ext/domxml/php_domxml.c:1.218.2.25  Wed Jun 18 13:43:34 2003
+++ php-src/ext/domxml/php_domxml.c     Wed Jul 23 12:44:27 2003
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_domxml.c,v 1.218.2.25 2003/06/18 17:43:34 rrichards Exp $ */
+/* $Id: php_domxml.c,v 1.218.2.26 2003/07/23 16:44:27 iliaa Exp $ */
 
 /* TODO
  * - Support Notation Nodes
@@ -2384,6 +2384,7 @@
 {
        zval *id, *rv = NULL, *node;
        xmlNodePtr repnode, nodep, old_repnode;
+       xmlDocPtr tmpdoc;
        int ret;
 
        DOMXML_GET_THIS_OBJ(nodep, id, le_domxmlnodep);
@@ -2394,7 +2395,17 @@
 
        DOMXML_GET_OBJ(repnode, node, le_domxmlnodep);
 
+       tmpdoc = repnode->doc;
+
        old_repnode = xmlReplaceNode(nodep, repnode);
+
+       /* ReplaceNode will change the doc for only the first node 
+       so check if doc was changed */
+       if (tmpdoc != repnode->doc) {
+               /* Set doc back to old doc otherwise libxml wont change all sub nodes 
*/
+               repnode->doc = tmpdoc;
+               xmlSetTreeDoc(repnode, old_repnode->doc);
+       }
 
        DOMXML_RET_OBJ(rv, old_repnode, &ret);
 }



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to