chregu Mon Jan 6 05:00:57 2003 EDT
Modified files: (Branch: PHP_4_3)
/php4/ext/domxml php_domxml.c
Log:
- fix crash in domxml_node_insert_before() (by Lukas Schr�der)
Index: php4/ext/domxml/php_domxml.c
diff -u php4/ext/domxml/php_domxml.c:1.218.2.6 php4/ext/domxml/php_domxml.c:1.218.2.7
--- php4/ext/domxml/php_domxml.c:1.218.2.6 Mon Jan 6 03:48:38 2003
+++ php4/ext/domxml/php_domxml.c Mon Jan 6 05:00:34 2003
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_domxml.c,v 1.218.2.6 2003/01/06 08:48:38 chregu Exp $ */
+/* $Id: php_domxml.c,v 1.218.2.7 2003/01/06 10:00:34 chregu Exp $ */
/* TODO
* - Support Notation Nodes
@@ -2400,9 +2400,40 @@
DOMXML_GET_OBJ(child, node, le_domxmlnodep);
+ new_child = NULL;
+
if (ref != NULL) {
DOMXML_GET_OBJ(refp, ref, le_domxmlnodep);
- new_child = xmlAddPrevSibling(refp, child);
+
+ /*
+ * The following code is from libxml2/tree.c
+ * libxml does free textnodes, if there are adjacent TEXT nodes
+ * This is bad behaviour for domxml, since then we have have reference
+ * to undefined nodes. The idea here is, that we do this text
+comparison
+ * by ourself and not free the nodes. and only if libxml2 won't do
+any harm
+ * call the function from libxml2.
+ * The code is exactly the same as in libxml2, only xmlFreeNode was
+taken away.
+ */
+
+ if (child->type == XML_TEXT_NODE) {
+ if (refp->type == XML_TEXT_NODE) {
+ xmlChar *tmp;
+
+ tmp = xmlStrdup(child->content);
+ tmp = xmlStrcat(tmp, refp->content);
+ xmlNodeSetContent(refp, tmp);
+ xmlFree(tmp);
+ new_child = refp;
+ }
+ if ((refp->prev != NULL) && (refp->prev->type == XML_TEXT_NODE)
+ && (refp->name == refp->prev->name)) {
+ xmlNodeAddContent(refp->prev, child->content);
+ new_child = refp->prev;
+ }
+ }
+
+ if (new_child == NULL)
+ new_child = xmlAddPrevSibling(refp, child);
} else {
/* first unlink node, if child is already a child of parent
for some strange reason, this is needed
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php