Skip to content

[DOM] Register id attributes set via setAttribute() in XML documents - #298

Open
iliaal wants to merge 1 commit into
masterfrom
fix/dom-setattribute-id-master
Open

[DOM] Register id attributes set via setAttribute() in XML documents#298
iliaal wants to merge 1 commit into
masterfrom
fix/dom-setattribute-id-master

Conversation

@iliaal

@iliaal iliaal commented Aug 24, 2026

Copy link
Copy Markdown
Owner

getElementById() only found dynamically created id attributes in HTML documents because the registration helper restricted the XML_ATTRIBUTE_ID flag to XML_HTML_DOCUMENT_NODE, so Dom\XMLDocument::getElementById() returned null after setAttribute("id", ...) though the id property had registered. The restriction is dropped so modern XML documents register an un-namespaced id attribute, setIdAttribute(false) still unregisters, and legacy DOMDocument stays unchanged because every helper call site sits behind spec mode. A phpt covers set, re-set, setAttributeNS, removal and setIdAttribute(false).

getElementById() relies on the XML_ATTRIBUTE_ID flag that only the HTML
registration path used to set for dynamically created attributes, leaving
Dom\XMLDocument::getElementById() blind to ids set through setAttribute(),
setAttributeNS() and setAttributeNode(). Drop the document-type restriction
so modern XML documents register a namespaced-less id attribute like HTML
documents already do; setIdAttribute(false) still unregisters. Siblings
audited: all three dom_check_register_attribute_id() call sites (setAttribute,
setAttributeNode(NS), setAttributeNS) plus php_set_attribute_id()/
setIdAttribute* which already handled both directions.
which already handled both directions.
@iliaal
iliaal force-pushed the fix/dom-setattribute-id-master branch from 5f9a6b6 to c47910e Compare August 26, 2026 12:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant