|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #77686 Removed elements are still returned by getElementById
Submitted: 2019-03-01 07:11 UTC Modified: -
Avg. Score:3.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:0 (0.0%)
Same OS:0 (0.0%)
From: gtisza at gmail dot com Assigned:
Status: Open Package: DOM XML related
PHP Version: 7.3.2 OS:
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2019-03-01 07:11 UTC] gtisza at gmail dot com
Removing a DOMElement from a HTML document does not refresh the id index; getElementById() will still return the removed element. (getElementsByTagName(), in contrast, works as expected.)
Live test:

Calling setIdAttribute() on the removed element apparently updates the index and fixes getElementById() behavior. It does not fix it for any children of the removed node, however.

Test script:
$doc = new DOMDocument;
$doc->loadHTML('<html><body id="x"><div id="y"></div></body></html>');
$body = $doc->getElementById('x');
$div = $doc->getElementById('y');
$doc->getElementById('y'); // <div id="y">


Add a Patch

Pull Requests

Pull requests:

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2019-03-01 22:14 UTC]
Corrected test script including the DOM removal:
$doc = new DOMDocument;
$doc->loadHTML('<html><body id="x"><div id="y"></div></body></html>');
$body = $doc->getElementById('x');
$div = $doc->getElementById('y');
$doc->getElementById('y'); // <div id="y">
 [2019-03-04 06:47 UTC] gtisza at gmail dot com
Apparently the id is only unindexed when the element is destroyed, not when it is detached from the document: (thanks to Ori Livneh for tracking that down). So not that easy to run into this bug as typically no reference is retained to a detached element, once the variable used for detaching goes out of scope.
 [2019-03-04 07:16 UTC] gtisza at gmail dot com
Also it seems certain method calls refresh the index (setIdAttribute, specifically):
Only for a single element, though, not the subtree of the element.
 [2021-05-04 04:09 UTC]
The following pull request has been associated:

Patch Name: Fix #77686: Immediately remove ID from DOMDocument when removing child element
On GitHub:
PHP Copyright © 2001-2023 The PHP Group
All rights reserved.
Last updated: Tue Mar 28 19:03:41 2023 UTC