Merge branch 'PHP-8.3' into PHP-8.4

* PHP-8.3:
  Fix GH-16906: Reloading document can cause UAF in iterator
This commit is contained in:
Niels Dossche 2024-11-24 18:20:21 +01:00
commit 52c7c74ebb
No known key found for this signature in database
GPG Key ID: B8A8AD166DF0E2E5
4 changed files with 28 additions and 0 deletions

4
NEWS
View File

@ -2,6 +2,10 @@ PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? ??? ????, PHP 8.4.2
- DOM:
. Fixed bug GH-16906 (Reloading document can cause UAF in iterator).
(nielsdos)
- Opcache:
. Fixed bug GH-16851 (JIT_G(enabled) not set correctly on other threads).
(dktapps)

View File

@ -1469,6 +1469,10 @@ void dom_namednode_iter(dom_object *basenode, int ntype, dom_object *intern, xml
mapptr->baseobj = basenode;
mapptr->nodetype = ntype;
mapptr->ht = ht;
if (EXPECTED(doc != NULL)) {
mapptr->dict = doc->dict;
xmlDictReference(doc->dict);
}
const xmlChar* tmp;
@ -1582,6 +1586,7 @@ void dom_nnodemap_objects_free_storage(zend_object *object) /* {{{ */
if (!Z_ISUNDEF(objmap->baseobj_zv)) {
zval_ptr_dtor(&objmap->baseobj_zv);
}
xmlDictFree(objmap->dict);
efree(objmap);
intern->ptr = NULL;
}
@ -1613,6 +1618,7 @@ zend_object *dom_nnodemap_objects_new(zend_class_entry *class_type)
objmap->cached_length = -1;
objmap->cached_obj = NULL;
objmap->cached_obj_index = 0;
objmap->dict = NULL;
return &intern->std;
}

View File

@ -88,6 +88,7 @@ typedef struct dom_nnodemap_object {
php_libxml_cache_tag cache_tag;
dom_object *cached_obj;
zend_long cached_obj_index;
xmlDictPtr dict;
bool free_local : 1;
bool free_ns : 1;
} dom_nnodemap_object;

View File

@ -0,0 +1,17 @@
--TEST--
GH-16906 (Reloading document can cause UAF in iterator)
--EXTENSIONS--
dom
--FILE--
<?php
$doc = new DOMDocument;
$doc->loadXML('<?xml version="1.0"?><span><strong id="1"/><strong id="2"/></span>');
$list = $doc->getElementsByTagName('strong');
$doc->load(__DIR__."/book.xml");
var_dump($list);
?>
--EXPECT--
object(DOMNodeList)#2 (1) {
["length"]=>
int(0)
}