diff --git a/NEWS b/NEWS index 99781c8c652..1c1cf6acae6 100644 --- a/NEWS +++ b/NEWS @@ -2,7 +2,11 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? ????, PHP 8.3.13 -- Opcache: +- SimpleXML: + . Fixed bug GH-15837 (Segmentation fault in ext/simplexml/simplexml.c). + (nielsdos) + +- SOAP: . Fixed bug #73182 (PHP SOAPClient does not support stream context HTTP headers in array form). (nielsdos) . Fixed bug #62900 (Wrong namespace on xsd import error message). (nielsdos) diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c index 1047fb4f19c..e0c1bf7926e 100644 --- a/ext/simplexml/simplexml.c +++ b/ext/simplexml/simplexml.c @@ -2540,6 +2540,11 @@ static void php_sxe_iterator_current_key(zend_object_iterator *iter, zval *key) { php_sxe_iterator *iterator = (php_sxe_iterator *)iter; zval *curobj = &iterator->sxe->iter.data; + if (Z_ISUNDEF_P(curobj)) { + ZVAL_NULL(key); + return; + } + php_sxe_object *intern = Z_SXEOBJ_P(curobj); xmlNodePtr curnode = NULL; diff --git a/ext/simplexml/tests/gh15837.phpt b/ext/simplexml/tests/gh15837.phpt new file mode 100644 index 00000000000..302db064ee0 --- /dev/null +++ b/ext/simplexml/tests/gh15837.phpt @@ -0,0 +1,30 @@ +--TEST-- +GH-15837 (Segmentation fault in ext/simplexml/simplexml.c) +--CREDITS-- +YuanchengJiang +--FILE-- + + + + + + + + +EOF; +$sxe = new SimpleXMLIterator($xml); +$rit = new RecursiveIteratorIterator($sxe, RecursiveIteratorIterator::LEAVES_ONLY); +foreach ($rit as $child) { + $ancestry = $child->xpath('ancestor-or-self::*'); + // Exhaust internal iterator + foreach ($ancestry as $ancestor) { + } +} +var_dump($rit->valid()); +var_dump($rit->key()); +?> +--EXPECT-- +bool(false) +NULL