Skip to content

Stdlib: Dom\DocumentType entities/notations return Dom\NamedNodeMap — not Dom\DtdNamedNodeMap (ext/dom/php_dom.stub.php) #21014

Closed

Description

@PurHur

Category

stdlib · php-src-strict · ext/dom · PHP 8.4 Dom\ living API

Problem

Under PHP_COMPILER_PROFILE=8.4, Dom\DocumentType::$entities and $notations are materialized as Dom\NamedNodeMap. php-src exposes them as the distinct Dom\DtdNamedNodeMap class (Entity|Notation members). class_exists('Dom\\DtdNamedNodeMap') is false and instanceof Dom\DtdNamedNodeMap fails.

Repro Zend 8.4+ VM (2026-07-19)
class_exists('Dom\\DtdNamedNodeMap') true false
get_class($doc->doctype->entities) Dom\DtdNamedNodeMap Dom\NamedNodeMap
$doc->doctype->entities instanceof Dom\DtdNamedNodeMap true false (class missing)
Legacy DOMDocumentType::$entities DOMNamedNodeMap DOMNamedNodeMap (unchanged)

php-src reference

PHP implementation target

  • ext/dom/DomLivingBuiltinClasses.php — register Dom\DtdNamedNodeMap (copy NamedNodeMap methods)
  • ext/dom/VmDomLiving.php — CLASS_DTD_NAMED_NODE_MAP
  • ext/dom/VmDom.php — createNamedNodeMap(..., dtd: true) for doctype entities/notations on living trees; isNamedNodeMap() accepts DtdNamedNodeMap

Repro

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && PHP_COMPILER_PROFILE=8.4 php bin/vm.php test/repro/issue_dtd_named_node_map.php'

Done when

  • Dom\DtdNamedNodeMap exists under PROFILE=8.4
  • Living doctype entities/notations are Dom\DtdNamedNodeMap (legacy stays DOMNamedNodeMap)
  • Compliance .phpt under test/compliance/cases/dom/
  • php-src-strict; no php-compiler-strict shortcut

Activity

  1. added
    enhancementNew feature or request
    phase-4:stdlibPhase 4 – stdlib for web apps
    area:vmVirtual machine
    implementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claim
    on Jul 19, 2026
  2. PurHur commented on Jul 19, 2026

    @PurHur
    OwnerAuthor

    claim: PHP Compiler Ext — DOM & XML — starting this run

  3. PurHur commented on Jul 19, 2026

    @PurHur
    OwnerAuthor

    Merged via PR #21016.

    Fix: Register Dom\DtdNamedNodeMap and allocate it for living DocumentType::$entities / $notations (legacy stays DOMNamedNodeMap). Also spine-covered stream_socket_recvfrom/sendto so Pillar 1 stays green.

    Verification:

    PHP_COMPILER_PROFILE=8.4 php bin/vm.php test/repro/issue_21014_dom_dtd_named_node_map.php
    # DtdNamedNodeMap=yes / entities=Dom\DtdNamedNodeMap / …
    PHP_COMPILER_PROFILE=8.4 vendor/bin/phpunit --filter dom_dtd_named_node_map  # OK (2)
    make north-star5-verify-fast  # OK 6037/6037
    ./script/release-readiness.sh --json  # user_release_ready: yes
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:vmVirtual machineenhancementNew feature or requestimplementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claimphase-4:stdlibPhase 4 – stdlib for web appsstdlib

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions