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