1
0
mirror of https://github.com/php/php-src.git synced 2026-03-26 01:02:25 +01:00
Files
archived-php-src/ext/dom/tests/delayed_freeing/text_node.phpt
Niels Dossche 003ebdd039 Fix GH-9628: Implicitly removing nodes from \DOMDocument breaks existing references
Change the way lifetime works in ext/libxml and ext/dom

Previously, a node could be freed even when holding a userland reference
to it. This resulted in exceptions when trying to access that node after
it has been implicitly or explicitly removed. After this patch, a node
will only be freed when the last userland reference disappears.

Fixes GH-9628.
Closes GH-11576.
2023-07-03 21:31:57 +02:00

32 lines
780 B
PHP

--TEST--
Delayed freeing text node
--EXTENSIONS--
dom
--FILE--
<?php
$doc = new DOMDocument;
// Text nodes are special as the underlying library has a tendency to merge adjacent ones
$text1 = $doc->appendChild($doc->createElement('container'))
->appendChild($doc->createTextNode('my text 1'));
$text2 = $doc->documentElement->appendChild($doc->createTextNode('my text 2'));
echo $doc->saveXML(), "\n";
$text1->parentNode->remove();
echo $doc->saveXML(), "\n";
echo $doc->saveXML($text1), "\n";
echo $doc->saveXML($text2), "\n";
var_dump($text1->parentNode, $text2->parentNode);
var_dump($text1->nextSibling, $text2->previousSibling);
?>
--EXPECT--
<?xml version="1.0"?>
<container>my text 1my text 2</container>
<?xml version="1.0"?>
my text 1
my text 2
NULL
NULL
NULL
NULL