From 6f6fedcb46a27cd3530f0babc9b03ce4598f9eab Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Wed, 2 Aug 2023 20:40:30 +0200 Subject: [PATCH] Handle strict error properly in adoptNode failure, and add a test --- ext/dom/document.c | 2 +- ext/dom/tests/DOMDocument_adoptNode.phpt | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/ext/dom/document.c b/ext/dom/document.c index c3c48ef0239..03f8b2cbd79 100644 --- a/ext/dom/document.c +++ b/ext/dom/document.c @@ -1064,7 +1064,7 @@ PHP_METHOD(DOMDocument, adoptNode) || nodep->type == XML_ENTITY_NODE || nodep->type == XML_NOTATION_NODE)) { php_dom_throw_error(NOT_SUPPORTED_ERR, dom_get_strict_error(dom_object_nodep->document)); - RETURN_THROWS(); + RETURN_FALSE; } xmlDocPtr new_document; diff --git a/ext/dom/tests/DOMDocument_adoptNode.phpt b/ext/dom/tests/DOMDocument_adoptNode.phpt index fb99618d71e..2382cabd513 100644 --- a/ext/dom/tests/DOMDocument_adoptNode.phpt +++ b/ext/dom/tests/DOMDocument_adoptNode.phpt @@ -43,7 +43,7 @@ $adopted = $doc1->adoptNode($doc1->firstChild->firstChild); var_dump($adopted->textContent); var_dump($doc1->saveXML()); -echo "-- Adopt a document --\n"; +echo "-- Adopt a document (strict error on) --\n"; try { $doc1->adoptNode($doc1); @@ -51,6 +51,16 @@ try { echo $e->getMessage(), "\n"; } +echo "-- Adopt a document (strict error off) --\n"; + +$doc1->strictErrorChecking = false; +try { + $doc1->adoptNode($doc1); +} catch (\DOMException $e) { + echo $e->getMessage(), "\n"; +} +$doc1->strictErrorChecking = true; + echo "-- Adopt an attribute --\n"; $doc3 = new DOMDocument(); @@ -102,7 +112,7 @@ unset($doc1); var_dump($child->nodeName); ?> ---EXPECT-- +--EXPECTF-- -- Owner document check before adopting -- bool(true) bool(false) @@ -127,8 +137,11 @@ string(5) "world" string(27) "

" --- Adopt a document -- +-- Adopt a document (strict error on) -- Not Supported Error +-- Adopt a document (strict error off) -- + +Warning: DOMDocument::adoptNode(): Not Supported Error in %s on line %d -- Adopt an attribute -- bool(true) bool(true)