mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
Merge branch 'PHP-8.4'
* PHP-8.4: Add missing cache invalidation for innerHTML (#16652)
This commit is contained in:
@@ -374,6 +374,9 @@ zend_result dom_element_inner_html_write(dom_object *obj, zval *newval)
|
||||
}
|
||||
}
|
||||
|
||||
ZEND_ASSERT(obj->document != NULL);
|
||||
php_libxml_invalidate_node_list_cache(obj->document);
|
||||
|
||||
/* 5. Replace all with fragment within context. */
|
||||
dom_remove_all_children(context_node);
|
||||
return php_dom_pre_insert(obj->document, fragment, context_node, NULL) ? SUCCESS : FAILURE;
|
||||
@@ -451,6 +454,9 @@ zend_result dom_element_outer_html_write(dom_object *obj, zval *newval)
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
ZEND_ASSERT(obj->document != NULL);
|
||||
php_libxml_invalidate_node_list_cache(obj->document);
|
||||
|
||||
/* 7. Replace this with fragment within this's parent. */
|
||||
if (!php_dom_pre_insert(obj->document, fragment, this->parent, this)) {
|
||||
xmlFreeNode(fragment);
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
--TEST--
|
||||
$innerHTML cache invalidation
|
||||
--EXTENSIONS--
|
||||
dom
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$dom = Dom\XMLDocument::createFromString('<root><a/><a/><a/></root>');
|
||||
$els = $dom->getElementsByTagName('a');
|
||||
var_dump($els[0]->tagName);
|
||||
|
||||
$dom->documentElement->innerHTML = '<b/>';
|
||||
|
||||
echo $dom->saveXML(), "\n";
|
||||
var_dump($els);
|
||||
var_dump($els[0]?->tagName);
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
string(1) "a"
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<root><b/></root>
|
||||
object(Dom\HTMLCollection)#2 (1) {
|
||||
["length"]=>
|
||||
int(0)
|
||||
}
|
||||
NULL
|
||||
Reference in New Issue
Block a user