diff --git a/ext/dom/html5_parser.c b/ext/dom/html5_parser.c index f1dc2db53b25b..d5fe3d5c2773d 100644 --- a/ext/dom/html5_parser.c +++ b/ext/dom/html5_parser.c @@ -268,7 +268,10 @@ static lexbor_libxml2_bridge_status lexbor_libxml2_bridge_convert( /* xmlIsID does some other stuff too that is irrelevant here. */ if (local_name_length == 2 && local_name[0] == 'i' && local_name[1] == 'd' && attr->node.ns == LXB_NS_HTML) { - xmlAddID(NULL, lxml_doc, value, lxml_attr); + if (xmlAddID(NULL, lxml_doc, value, lxml_attr) == 0) { + /* If the ID already exists, the ID attribute still needs to be marked as an ID. */ + lxml_attr->atype = XML_ATTRIBUTE_ID; + } } /* libxml2 doesn't support line numbers on this anyway, it derives them instead, so don't bother */ diff --git a/ext/dom/tests/modern/html/interactions/gh20281.phpt b/ext/dom/tests/modern/html/interactions/gh20281.phpt new file mode 100644 index 0000000000000..324c5a2756331 --- /dev/null +++ b/ext/dom/tests/modern/html/interactions/gh20281.phpt @@ -0,0 +1,15 @@ +--TEST-- +GH-20281 (\Dom\Document::getElementById() is inconsistent after nodes are removed) +--EXTENSIONS-- +dom +--CREDITS-- +cscott +--FILE-- +b
c
', LIBXML_NOERROR); +$p = $d->getElementById('a'); +$p->remove(); +echo $d->getElementById('a')->textContent, "\n"; +?> +--EXPECT-- +c diff --git a/ext/phar/tests/tar/bug70417.phpt b/ext/phar/tests/tar/bug70417.phpt index 4d98a18954cc3..504d7e1e387b6 100644 --- a/ext/phar/tests/tar/bug70417.phpt +++ b/ext/phar/tests/tar/bug70417.phpt @@ -3,32 +3,17 @@ Bug #70417 (PharData::compress() doesn't close temp file) --EXTENSIONS-- phar zlib ---SKIPIF-- - --FILE-- /dev/null', $out); // Note: valgrind can produce false positives for /usr/bin/lsof - return count($out); -} $filename = __DIR__ . '/bug70417.tar'; @unlink("$filename.gz"); -$openFiles1 = countOpenFiles(); +$resBefore = count(get_resources()); $arch = new PharData($filename); $arch->addFromString('foo', 'bar'); $arch->compress(Phar::GZ); unset($arch); -$openFiles2 = countOpenFiles(); -var_dump($openFiles1 === $openFiles2); +$resAfter = count(get_resources()); +var_dump($resBefore === $resAfter); ?> --CLEAN--