From 5f50350ca9150ae797cf10beffded535dcd9bbe5 Mon Sep 17 00:00:00 2001 From: Rob Richards Date: Thu, 11 Sep 2008 14:20:30 +0000 Subject: [PATCH] fix bug #46047 (SimpleXML converts empty nodes into object with nested array) add test --- ext/simplexml/simplexml.c | 18 +++++++----- ext/simplexml/tests/bug46047.phpt | 48 +++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 7 deletions(-) create mode 100644 ext/simplexml/tests/bug46047.phpt 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 -- 2.50.1