mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
This is a long standing bug: IDs aren't properly tracked causing either outdated or plain incorrect results from getElementById. This PR implements a pragmatic solution in which we still try to use the ID lookup table to a degree, but only as a performance boost not as a "single source of truth". Full details are explained in the getElementById code. Closes GH-14349.
54 lines
1.4 KiB
PHP
54 lines
1.4 KiB
PHP
--TEST--
|
|
Bug #79701 (getElementById does not correctly work with duplicate definitions) - id property variation
|
|
--EXTENSIONS--
|
|
dom
|
|
--FILE--
|
|
<?php
|
|
$dom = Dom\XMLDocument::createFromString(<<<XML
|
|
<root>
|
|
<test1/>
|
|
<test2/>
|
|
</root>
|
|
XML);
|
|
|
|
$test1 = $dom->documentElement->firstElementChild;
|
|
$test2 = $test1->nextElementSibling;
|
|
|
|
echo "--- After parsing ---\n";
|
|
var_dump($dom->getElementById("x")?->nodeName);
|
|
|
|
echo "--- After setting test2 ---\n";
|
|
$test2->id = "x";
|
|
var_dump($dom->getElementById("x")?->nodeName);
|
|
echo "--- After setting test1 ---\n";
|
|
$test1->id = "x";
|
|
var_dump($dom->getElementById("x")?->nodeName);
|
|
echo "--- After resetting test1 ---\n";
|
|
$test1->id = "y";
|
|
var_dump($dom->getElementById("x")?->nodeName);
|
|
echo "--- After resetting test2 ---\n";
|
|
$test2->id = "y";
|
|
var_dump($dom->getElementById("x")?->nodeName);
|
|
echo "--- After resetting test1 ---\n";
|
|
$test1->id = "x";
|
|
var_dump($dom->getElementById("x")?->nodeName);
|
|
echo "--- After calling setIdAttribute with false on test1 ---\n";
|
|
$test1->setIdAttribute("id", false);
|
|
var_dump($dom->getElementById("x")?->nodeName);
|
|
?>
|
|
--EXPECT--
|
|
--- After parsing ---
|
|
NULL
|
|
--- After setting test2 ---
|
|
string(5) "test2"
|
|
--- After setting test1 ---
|
|
string(5) "test1"
|
|
--- After resetting test1 ---
|
|
string(5) "test2"
|
|
--- After resetting test2 ---
|
|
NULL
|
|
--- After resetting test1 ---
|
|
string(5) "test1"
|
|
--- After calling setIdAttribute with false on test1 ---
|
|
NULL
|