Browse Source

- get_path forgotten in .h file

- fix crash in domxml_node_insert_before() (by Lukas Schröder)
PHP-5
Christian Stocker 24 years ago
parent
commit
413053aa75
  1. 33
      ext/domxml/php_domxml.c
  2. 1
      ext/domxml/php_domxml.h

33
ext/domxml/php_domxml.c

@ -2426,9 +2426,40 @@ PHP_FUNCTION(domxml_node_insert_before)
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

1
ext/domxml/php_domxml.h

@ -153,6 +153,7 @@ PHP_FUNCTION(domxml_node_set_content);
PHP_FUNCTION(domxml_node_get_content);
PHP_FUNCTION(domxml_node_text_concat);
PHP_FUNCTION(domxml_node_set_name);
PHP_FUNCTION(domxml_node_get_path);
PHP_FUNCTION(domxml_node_name);
PHP_FUNCTION(domxml_node_type);
PHP_FUNCTION(domxml_node_value);

Loading…
Cancel
Save