mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
Fix GH-20281: \Dom\Document::getElementById() is inconsistent after nodes are removed
This worked for non-parsed elements already, but not for elements where xmlAddID() returns early due to the ID already existing. In that case what was missing is marking the attribute as an ID. Closes GH-20283.
This commit is contained in:
2
NEWS
2
NEWS
@@ -15,6 +15,8 @@ PHP NEWS
|
||||
- DOM:
|
||||
. Partially fixed bug GH-16317 (DOM classes do not allow
|
||||
__debugInfo() overrides to work). (nielsdos)
|
||||
. Fixed bug GH-20281 (\Dom\Document::getElementById() is inconsistent
|
||||
after nodes are removed). (nielsdos)
|
||||
|
||||
- Exif:
|
||||
. Fix possible memory leak when tag is empty. (nielsdos)
|
||||
|
||||
@@ -268,7 +268,10 @@ static lexbor_libxml2_bridge_status lexbor_libxml2_bridge_convert(
|
||||
|
||||
/* xmlIsID does some other stuff too that is irrelevant here. */
|
||||
if (local_name_length == 2 && local_name[0] == 'i' && local_name[1] == 'd' && attr->node.ns == LXB_NS_HTML) {
|
||||
xmlAddID(NULL, lxml_doc, value, lxml_attr);
|
||||
if (xmlAddID(NULL, lxml_doc, value, lxml_attr) == 0) {
|
||||
/* If the ID already exists, the ID attribute still needs to be marked as an ID. */
|
||||
lxml_attr->atype = XML_ATTRIBUTE_ID;
|
||||
}
|
||||
}
|
||||
|
||||
/* libxml2 doesn't support line numbers on this anyway, it derives them instead, so don't bother */
|
||||
|
||||
15
ext/dom/tests/modern/html/interactions/gh20281.phpt
Normal file
15
ext/dom/tests/modern/html/interactions/gh20281.phpt
Normal file
@@ -0,0 +1,15 @@
|
||||
--TEST--
|
||||
GH-20281 (\Dom\Document::getElementById() is inconsistent after nodes are removed)
|
||||
--EXTENSIONS--
|
||||
dom
|
||||
--CREDITS--
|
||||
cscott
|
||||
--FILE--
|
||||
<?php
|
||||
$d = \Dom\HTMLDocument::createFromString('<p id="a">b</p><p id="a">c</p>', LIBXML_NOERROR);
|
||||
$p = $d->getElementById('a');
|
||||
$p->remove();
|
||||
echo $d->getElementById('a')->textContent, "\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
c
|
||||
Reference in New Issue
Block a user