From: Rob Richards Date: Thu, 11 Sep 2008 14:20:30 +0000 (+0000) Subject: fix bug #46047 (SimpleXML converts empty nodes into object with nested array) X-Git-Tag: BEFORE_HEAD_NS_CHANGE~430 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5f50350ca9150ae797cf10beffded535dcd9bbe5;p=php fix bug #46047 (SimpleXML converts empty nodes into object with nested array) add test --- diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c index fc27d706bd..db1e840dc4 100644 --- a/ext/simplexml/simplexml.c +++ b/ext/simplexml/simplexml.c @@ -1142,13 +1142,17 @@ static HashTable * sxe_get_prop_hash(zval *object, int is_debug TSRMLS_DC) /* {{ SKIP_TEXT(node); } else { if (node->type == XML_TEXT_NODE) { - xmlChar *tmp; - - MAKE_STD_ZVAL(value); - tmp = xmlNodeListGetString(node->doc, node, 1); - ZVAL_XML_STRING(value, (char *)tmp, ZSTR_DUPLICATE); - xmlFree(tmp); - zend_hash_next_index_insert(rv, &value, sizeof(zval *), NULL); + const xmlChar *cur = node->content; + + if (*cur != 0) { + xmlChar *tmp; + + MAKE_STD_ZVAL(value); + tmp = xmlNodeListGetString(node->doc, node, 1); + ZVAL_XML_STRING(value, (char *)tmp, ZSTR_DUPLICATE); + xmlFree(tmp); + zend_hash_next_index_insert(rv, &value, sizeof(zval *), NULL); + } goto next_iter; } } diff --git a/ext/simplexml/tests/bug46047.phpt b/ext/simplexml/tests/bug46047.phpt new file mode 100644 index 0000000000..37f31cdeb6 --- /dev/null +++ b/ext/simplexml/tests/bug46047.phpt @@ -0,0 +1,48 @@ +--TEST-- +Bug #46047 (SimpleXML converts empty nodes into object with nested array) +--FILE-- +', + LIBXML_NOCDATA); +print_r($xml); + +$xml = new SimpleXMLElement(''); +print_r($xml); + +$xml = new SimpleXMLElement(''); +print_r($xml); +?> +--EXPECTF-- +SimpleXMLElement Object +( + [bar] => SimpleXMLElement Object + ( + ) + + [baz] => SimpleXMLElement Object + ( + ) + +) +SimpleXMLElement Object +( + [bar] => SimpleXMLElement Object + ( + ) + + [baz] => SimpleXMLElement Object + ( + ) + +) +SimpleXMLElement Object +( + [bar] => SimpleXMLElement Object + ( + ) + + [baz] => SimpleXMLElement Object + ( + ) + +) \ No newline at end of file