Skip to content

Commit d5e6dd8

Browse files
authored
Add missing cache invalidation for innerHTML (#16652)
* Add test with wrong output * Add missing cache invalidation for innerHTML
1 parent 65fbf47 commit d5e6dd8

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

ext/dom/inner_html_mixin.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,9 @@ zend_result dom_element_inner_html_write(dom_object *obj, zval *newval)
359359
}
360360
}
361361

362+
ZEND_ASSERT(obj->document != NULL);
363+
php_libxml_invalidate_node_list_cache(obj->document);
364+
362365
dom_remove_all_children(context_node);
363366
return php_dom_pre_insert(obj->document, fragment, context_node, NULL) ? SUCCESS : FAILURE;
364367
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
--TEST--
2+
$innerHTML cache invalidation
3+
--EXTENSIONS--
4+
dom
5+
--FILE--
6+
<?php
7+
8+
$dom = Dom\XMLDocument::createFromString('<root><a/><a/><a/></root>');
9+
$els = $dom->getElementsByTagName('a');
10+
var_dump($els[0]->tagName);
11+
12+
$dom->documentElement->innerHTML = '<b/>';
13+
14+
echo $dom->saveXML(), "\n";
15+
var_dump($els);
16+
var_dump($els[0]?->tagName);
17+
18+
?>
19+
--EXPECT--
20+
string(1) "a"
21+
<?xml version="1.0" encoding="UTF-8"?>
22+
<root><b/></root>
23+
object(Dom\HTMLCollection)#2 (1) {
24+
["length"]=>
25+
int(0)
26+
}
27+
NULL

0 commit comments

Comments
 (0)