]> granicus.if.org Git - php/commitdiff
Fix libxml/sxe/dom node import/export
authorNikita Popov <nikic@php.net>
Thu, 17 Apr 2014 21:29:35 +0000 (23:29 +0200)
committerNikita Popov <nikic@php.net>
Thu, 17 Apr 2014 22:15:13 +0000 (00:15 +0200)
Also fix sxe zts.

ext/dom/php_dom.c
ext/libxml/libxml.c
ext/simplexml/simplexml.c

index c51be7f66c269e0bad4702f6b432f9facc607794..99d99e236fc4f3bf10bcff1fb6f91a94da292462 100644 (file)
@@ -477,7 +477,7 @@ void *php_dom_export_node(zval *object TSRMLS_DC) /* {{{ */
        php_libxml_node_object *intern;
        xmlNodePtr nodep = NULL;
 
-       intern = Z_DOMOBJ_P(object);
+       intern = (php_libxml_node_object *) Z_DOMOBJ_P(object);
        if (intern->node) {
                nodep = intern->node->node;
        }
@@ -499,7 +499,7 @@ PHP_FUNCTION(dom_import_simplexml)
                return;
        }
 
-       nodeobj = Z_DOMOBJ_P(node);
+       nodeobj = (php_libxml_node_object *) ((char *) Z_OBJ_P(node) - Z_OBJ_HT_P(node)->offset);
        nodep = php_libxml_import_node(node TSRMLS_CC);
 
        if (nodep && nodeobj && (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE)) {
index 705045eee4ad20ad30cb2e36a83e61001164af27..d399f72b95eba1083412a1ede8c60fcf1ace7cac 100644 (file)
@@ -1152,7 +1152,7 @@ PHP_LIBXML_API xmlNodePtr php_libxml_import_node(zval *object TSRMLS_DC)
                while (ce->parent != NULL) {
                        ce = ce->parent;
                }
-               if ((export_hnd = zend_hash_find_ptr(&php_libxml_exports, ce->name))  == SUCCESS) {
+               if ((export_hnd = zend_hash_find_ptr(&php_libxml_exports, ce->name))) {
                        node = export_hnd->export_func(object TSRMLS_CC);
                }
        }
index 5d5d9c6fbc25845218512759cbdc6b4e8eba3f00..1c6a20c3528571a4fa8ce9080eb8a089b343544a 100644 (file)
@@ -971,7 +971,7 @@ static void sxe_dimension_delete(zval *object, zval *offset TSRMLS_DC)
 }
 /* }}} */
 
-static inline zend_string * sxe_xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int inLine) /* {{{ */
+static inline zend_string *sxe_xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int inLine TSRMLS_DC) /* {{{ */
 {
        xmlChar *tmp = xmlNodeListGetString(doc, list, inLine);
        zend_string *res;
@@ -1085,7 +1085,7 @@ static HashTable *sxe_get_prop_hash(zval *object, int is_debug TSRMLS_DC) /* {{{
                        test = sxe->iter.name && sxe->iter.type == SXE_ITER_ATTRLIST;
                        while (attr) {
                                if ((!test || !xmlStrcmp(attr->name, sxe->iter.name)) && match_ns(sxe, (xmlNodePtr)attr, sxe->iter.nsprefix, sxe->iter.isprefix)) {
-                                       ZVAL_STR(&value, sxe_xmlNodeListGetString((xmlDocPtr) sxe->document->ptr, attr->children, 1));
+                                       ZVAL_STR(&value, sxe_xmlNodeListGetString((xmlDocPtr) sxe->document->ptr, attr->children, 1 TSRMLS_CC));
                                        namelen = xmlStrlen(attr->name);
                                        if (ZVAL_IS_UNDEF(&zattr)) {
                                                array_init(&zattr);
@@ -1103,7 +1103,7 @@ static HashTable *sxe_get_prop_hash(zval *object, int is_debug TSRMLS_DC) /* {{{
 
        if (node && sxe->iter.type != SXE_ITER_ATTRLIST) {
                if (node->type == XML_ATTRIBUTE_NODE) {
-                       ZVAL_STR(&value, sxe_xmlNodeListGetString(node->doc, node->children, 1));
+                       ZVAL_STR(&value, sxe_xmlNodeListGetString(node->doc, node->children, 1 TSRMLS_CC));
                        zend_hash_next_index_insert(rv, &value);
                        node = NULL;
                } else if (sxe->iter.type != SXE_ITER_CHILD) {
@@ -1128,7 +1128,7 @@ static HashTable *sxe_get_prop_hash(zval *object, int is_debug TSRMLS_DC) /* {{{
                                        const xmlChar *cur = node->content;
                                        
                                        if (*cur != 0) {
-                                               ZVAL_STR(&value, sxe_xmlNodeListGetString(node->doc, node, 1));
+                                               ZVAL_STR(&value, sxe_xmlNodeListGetString(node->doc, node, 1 TSRMLS_CC));
                                                zend_hash_next_index_insert(rv, &value);
                                        }
                                        goto next_iter;
@@ -2384,7 +2384,7 @@ PHP_FUNCTION(simplexml_import_dom)
                return;
        }
 
-       object = (php_libxml_node_object *)Z_SXEOBJ_P(node);
+       object = (php_libxml_node_object *) ((char *) Z_OBJ_P(node) - Z_OBJ_HT_P(node)->offset);
 
        nodep = php_libxml_import_node(node TSRMLS_CC);