Fixed
- Security: parsing a deeply or repeatedly namespaced document no longer consumes quadratic memory; the in-scope namespace map is inherited through the prototype chain instead of being copied for every prefix-declaring element (O(N) instead of O(N2)), preventing a denial-of-service reachable from
DOMParser.parseFromString with default options. Serialized output is byte-identical. GHSA-965w-775f-mr7g
- Security: attribute de-duplication during parsing is now O(M) instead of O(M2); the
NamedNodeMap parse-time dedup path uses a null-prototype membership index, so a well-formed document with a hostile number of duplicate attributes can no longer wedge the parse. Attribute order and duplicate resolution (last value wins, first position kept) are byte-identical, preserving the XML no-duplicate-attributes well-formedness constraint. GHSA-8344-3jmq-59r6
- Security: trimming trailing whitespace from an XML end tag (
ETag) is now anchored so it runs in linear time instead of backtracking quadratically on a long whitespace run, preventing a ReDoS reachable from DOMParser.parseFromString. Trimmed output is byte-identical. GHSA-x4fp-j954-r2f4
- Security: malformed-input recovery is now linear instead of quadratic — the malformed tag-name scan terminates at an embedded
<, and Node.prototype.normalize() merges adjacent text nodes in O(K) instead of O(K2) (also reachable programmatically), per normalize() in the WHATWG DOM spec. DOM output is unchanged; only the reported error text differs. GHSA-93r5-fhx6-vmg9
- Security:
XMLSerializer.serializeToString() under { requireWellFormed: true } now rejects a DocType name that is not a valid XML Name, throwing InvalidStateError — matching the sibling publicId/systemId/internalSubset checks and preventing XML injection via DocumentType.name. GHSA-27p8-2357-5qqv
- Security:
XMLSerializer.serializeToString() under { requireWellFormed: true } now validates a processing-instruction target as an XML NCName and rejects a case-insensitive xml, throwing InvalidStateError — a check 0.8.x did not previously perform, preventing PI-target injection via >, ?, or whitespace. GHSA-c7q8-3ch8-vqpv
- Security:
Document.createEntityReference() now rejects an invalid XML Name at creation, and XMLSerializer.serializeToString() under { requireWellFormed: true } validates an EntityReference nodeName as an XML Name, throwing InvalidStateError — preventing XML injection via an entity-reference name. GHSA-6gmq-8vp8-gcm6
- Security: the parser now reports a not-well-formed end tag whose valid name is followed by trailing content as a recoverable
error instead of accepting it silently, per the XML ETag production; parsing recovers to the byte-identical DOM. Consumers that want strict rejection can escalate the reported error to fatal via the parser's errorHandler. GHSA-6h8r-xr42-gp59
Thank you,
@ericchiang,
@bhaswanthc,
@arpitjain099,
@Paranoidgrinch,
for your contributions
Fixed
- Security:
XMLSerializer.serializeToString() now also rejects invalid element and attribute names when { requireWellFormed: true } is passed, throwing InvalidStateError for a name that is not a valid XML QName (this covers the namespace prefix, which surfaces in the element qualified name or in a synthesized xmlns: declaration). This prevents XML injection via createElement() / setAttribute(), extending the existing requireWellFormed checks to the serialized name set. GHSA-w2rr-34g9-rvrj GHSA-4w3w-2rp5-g8jm
- Security: the processing-instruction grammar regex no longer backtracks quadratically on an unterminated processing instruction (
<?... with no closing ?>), preventing a denial-of-service (ReDoS) reachable from DOMParser.parseFromString with default options. GHSA-g53g-w8rj-fmg7
CharacterData nodeValue and data are now kept in sync [#990](https://github.com/xmldom/xmldom/issues/990)
Chore
Thank you,
@bhaswanthc,
@jmestwa-coder,
@stevenobiajulu,
for your contributions
Fixed
- Security:
XMLSerializer.serializeToString() now also rejects invalid element and attribute names when { requireWellFormed: true } is passed, throwing InvalidStateError for a name that is not a valid XML QName (this covers the namespace prefix, which surfaces in the element qualified name or in a synthesized xmlns: declaration). This prevents XML injection via createElement() / setAttribute(), extending the existing requireWellFormed checks to the serialized name set. GHSA-w2rr-34g9-rvrj GHSA-4w3w-2rp5-g8jm
Thank you,
@bhaswanthc,
@jmestwa-coder,
for your contributions
... (truncated)
Bumps @xmldom/xmldom from 0.8.13 to 0.8.15.
Release notes
Sourced from @xmldom/xmldom's releases.
Changelog
Sourced from @xmldom/xmldom's changelog.
... (truncated)
Commits
b5b8fb50.8.15327508edocs: add 0.8.15 CHANGELOG entryf40ccb8fix: prevent quadratic malformed-tag recovery and normalize() adjacent-text m...3abb093fix: prevent end-tag whitespace-trim ReDoS via anchored trim (GHSA-x4fp-j954-...2c548f2fix: prevent quadratic attribute de-duplication via null-prototype membership...08a74b4test: characterize NamedNodeMap attribute de-duplication before the index ref...954370ffix: prevent quadratic namespace-map memory consumption via prototype-chain i...4430189fix: report not-well-formed end-tag trailing content (GHSA-6h8r-xr42-gp59)6c3fb5ffix: prevent XML injection via unsafe EntityReference name (GHSA-6gmq-8vp8-gcm6)3b69487fix: prevent XML injection via unsafe processing instruction target serializa...Maintainer changes
This version was pushed to npm by karfau, a new releaser for
@xmldom/xmldomsince your current version.Dependabot compatibility score
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)You can disable automated security fix PRs for this repo from the Security Alerts page.