Skip to content

DOM: insertBefore($n,$n) throws Error previous sibling (#22686)#22769

Merged
PurHur merged 2 commits into
masterfrom
agent/issue-22686-insertbefore-self-ref
Jul 24, 2026
Merged

DOM: insertBefore($n,$n) throws Error previous sibling (#22686)#22769
PurHur merged 2 commits into
masterfrom
agent/issue-22686-insertbefore-self-ref

Conversation

@PurHur

@PurHur PurHur commented Jul 24, 2026

Copy link
Copy Markdown
Owner

Summary

  • Guard DOMNode::insertBefore($n, $n) in VmDom so same-node insert raises Error: Cannot add newnode as the previous sibling of refnode before detach (php-src ext/dom/node.c), instead of DOMException: Not found error.
  • Wire user-script AOT insertBefore via JitDomInsertBefore + DomCreateElementJitHelper (same pattern as replaceChild).
  • Compliance + repro + AOT reorder smoke; spine/inventory synced.

Closes #22686

php-src reference

  • ext/dom/node.cdom_node_insert_before / libxml xmlAddPrevSibling failure when new == ref

Verification

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && php bin/vm.php test/repro/issue_22686_dom_insertbefore_self_ref.php'
# Error:Cannot add newnode as the previous sibling of refnode / PASS

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && php bin/jit.php test/repro/issue_22686_dom_insertbefore_self_ref.php'
# PASS

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && vendor/bin/phpunit --filter dom_node_insertbefore_self_ref'
# OK (2 tests)

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && export PHP_COMPILER_HELPER_RUNTIME_O=1 && php vendor/bin/phpunit test/aot/AotTest.php --filter dom_node_insertbefore_reorder'
# OK (1 test)

php script/bootstrap-inventory.php --check   # OK 6505/6505
php script/check-selfhost-spine-coverage-sync.php  # OK

Test plan

Made with Cursor

Match php-src ext/dom/node.c: same-node insertBefore raises Error before
detach (not DOMException NOT_FOUND). Wire user-script AOT insertBefore
through DomCreateElementJitHelper like replaceChild.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@PurHur
PurHur merged commit 0f0ee6a into master Jul 24, 2026
1 check failed
@PurHur
PurHur deleted the agent/issue-22686-insertbefore-self-ref branch July 24, 2026 03:08
@PurHur

PurHur commented Jul 24, 2026

Copy link
Copy Markdown
Owner Author

Cleanup bot: deleted leftover remote branch agent/issue-22686-insertbefore-self-ref (squash-merged here; issue #22686 closed; tip already on master).

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.

Regression: DOMNode::insertBefore($n, $n) throws Not found — Zend Error previous sibling (ext/dom/node.c)

1 participant