From ed246da9e84bb15c82f201e03c4b59b8f0e03750 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Wed, 30 Oct 2024 21:36:00 +0100 Subject: [PATCH 1/2] Add test with wrong output --- .../common/innerHTML_cache_invalidation.phpt | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 ext/dom/tests/modern/common/innerHTML_cache_invalidation.phpt diff --git a/ext/dom/tests/modern/common/innerHTML_cache_invalidation.phpt b/ext/dom/tests/modern/common/innerHTML_cache_invalidation.phpt new file mode 100644 index 0000000000000..fcde8f189e804 --- /dev/null +++ b/ext/dom/tests/modern/common/innerHTML_cache_invalidation.phpt @@ -0,0 +1,27 @@ +--TEST-- +$innerHTML cache invalidation +--EXTENSIONS-- +dom +--FILE-- +'); +$els = $dom->getElementsByTagName('a'); +var_dump($els[0]->tagName); + +$dom->documentElement->innerHTML = ''; + +echo $dom->saveXML(), "\n"; +var_dump($els); +var_dump($els[0]?->tagName); + +?> +--EXPECT-- +string(1) "a" + + +object(Dom\HTMLCollection)#2 (1) { + ["length"]=> + int(0) +} +string(1) "a" From ea42dd22bb3ce1f86523ca2a30e104e34c890847 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Wed, 30 Oct 2024 21:37:06 +0100 Subject: [PATCH 2/2] Add missing cache invalidation for innerHTML --- ext/dom/inner_html_mixin.c | 3 +++ ext/dom/tests/modern/common/innerHTML_cache_invalidation.phpt | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/ext/dom/inner_html_mixin.c b/ext/dom/inner_html_mixin.c index 262c85411aaf2..e72b205bf4628 100644 --- a/ext/dom/inner_html_mixin.c +++ b/ext/dom/inner_html_mixin.c @@ -359,6 +359,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); + dom_remove_all_children(context_node); return php_dom_pre_insert(obj->document, fragment, context_node, NULL) ? SUCCESS : FAILURE; } diff --git a/ext/dom/tests/modern/common/innerHTML_cache_invalidation.phpt b/ext/dom/tests/modern/common/innerHTML_cache_invalidation.phpt index fcde8f189e804..976be202cece2 100644 --- a/ext/dom/tests/modern/common/innerHTML_cache_invalidation.phpt +++ b/ext/dom/tests/modern/common/innerHTML_cache_invalidation.phpt @@ -24,4 +24,4 @@ object(Dom\HTMLCollection)#2 (1) { ["length"]=> int(0) } -string(1) "a" +NULL