From cf7040455b55e0ad6c8e533e1a0616bb4b208613 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Tue, 31 Mar 2026 22:37:03 +0100 Subject: [PATCH] Fix GH-21583: SimpleXML empty element incorrectly casts to true. --- ext/simplexml/simplexml.c | 7 +------ ext/simplexml/tests/000.phpt | 2 +- ext/simplexml/tests/gh21583.phpt | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 ext/simplexml/tests/gh21583.phpt diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c index 8cf8e657e58f..365ae4518e2c 100644 --- a/ext/simplexml/simplexml.c +++ b/ext/simplexml/simplexml.c @@ -1843,12 +1843,7 @@ static zend_result sxe_object_cast_ex(zend_object *readobj, zval *writeobj, int sxe = php_sxe_fetch_object(readobj); if (type == _IS_BOOL) { - node = php_sxe_get_first_node_non_destructive(sxe, NULL); - if (node) { - ZVAL_TRUE(writeobj); - } else { - ZVAL_BOOL(writeobj, !sxe_prop_is_empty(readobj)); - } + ZVAL_BOOL(writeobj, !sxe_prop_is_empty(readobj)); return SUCCESS; } diff --git a/ext/simplexml/tests/000.phpt b/ext/simplexml/tests/000.phpt index d640d0652f4b..acfeaea9f02d 100644 --- a/ext/simplexml/tests/000.phpt +++ b/ext/simplexml/tests/000.phpt @@ -221,7 +221,7 @@ object(SimpleXMLElement)#%d (1) { } ===sxe->elem11->elem111->elem1111 bool(true) -bool(true) +bool(false) int(1) object(SimpleXMLElement)#%d (0) { } diff --git a/ext/simplexml/tests/gh21583.phpt b/ext/simplexml/tests/gh21583.phpt new file mode 100644 index 000000000000..5ea33697f041 --- /dev/null +++ b/ext/simplexml/tests/gh21583.phpt @@ -0,0 +1,18 @@ +--TEST-- +GH-21583 (SimpleXML empty element incorrectly casts to true) +--EXTENSIONS-- +simplexml +--FILE-- +text'); + +var_dump((bool) $xml->bar); +var_dump((bool) $xml->baz); +var_dump((bool) $xml->qux); +var_dump((bool) $xml->nonexistent); +?> +--EXPECT-- +bool(false) +bool(true) +bool(true) +bool(false)