mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
Merge branch 'PHP-8.4' into PHP-8.5
* PHP-8.4: Fix GH-21077: Accessing Dom\Node::baseURI can throw TypeError
This commit is contained in:
4
NEWS
4
NEWS
@@ -10,6 +10,10 @@ PHP NEWS
|
||||
. Fix deprecation now showing when accessing null key of an array with JIT.
|
||||
(alexandre-daubois)
|
||||
|
||||
- DOM:
|
||||
. Fixed bug GH-21077 (Accessing Dom\Node::baseURI can throw TypeError).
|
||||
(ndossche)
|
||||
|
||||
- Windows:
|
||||
. Fixed compilation with clang (missing intrin.h include). (Kévin Dunglas)
|
||||
|
||||
|
||||
@@ -137,6 +137,7 @@ zend_result dom_modern_node_prefix_read(dom_object *obj, zval *retval);
|
||||
zend_result dom_node_prefix_write(dom_object *obj, zval *newval);
|
||||
zend_result dom_node_local_name_read(dom_object *obj, zval *retval);
|
||||
zend_result dom_node_base_uri_read(dom_object *obj, zval *retval);
|
||||
zend_result dom_modern_node_base_uri_read(dom_object *obj, zval *retval);
|
||||
zend_result dom_node_text_content_read(dom_object *obj, zval *retval);
|
||||
zend_result dom_node_text_content_write(dom_object *obj, zval *newval);
|
||||
|
||||
|
||||
@@ -659,14 +659,25 @@ zend_result dom_node_base_uri_read(dom_object *obj, zval *retval)
|
||||
ZVAL_STRING(retval, (const char *) baseuri);
|
||||
xmlFree(baseuri);
|
||||
} else {
|
||||
if (php_dom_follow_spec_intern(obj)) {
|
||||
if (nodep->doc->URL) {
|
||||
ZVAL_STRING(retval, (const char *) nodep->doc->URL);
|
||||
} else {
|
||||
ZVAL_STRING(retval, "about:blank");
|
||||
}
|
||||
ZVAL_NULL(retval);
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
zend_result dom_modern_node_base_uri_read(dom_object *obj, zval *retval)
|
||||
{
|
||||
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
|
||||
|
||||
xmlChar *baseuri = xmlNodeGetBase(nodep->doc, nodep);
|
||||
if (baseuri) {
|
||||
ZVAL_STRING(retval, (const char *) baseuri);
|
||||
xmlFree(baseuri);
|
||||
} else {
|
||||
if (nodep->doc && nodep->doc->URL) {
|
||||
ZVAL_STRING(retval, (const char *) nodep->doc->URL);
|
||||
} else {
|
||||
ZVAL_NULL(retval);
|
||||
ZVAL_STRING(retval, "about:blank");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -899,7 +899,7 @@ PHP_MINIT_FUNCTION(dom)
|
||||
zend_hash_init(&dom_modern_node_prop_handlers, 0, NULL, NULL, true);
|
||||
DOM_REGISTER_PROP_HANDLER(&dom_modern_node_prop_handlers, "nodeType", dom_node_node_type_read, NULL);
|
||||
DOM_REGISTER_PROP_HANDLER(&dom_modern_node_prop_handlers, "nodeName", dom_node_node_name_read, NULL);
|
||||
DOM_REGISTER_PROP_HANDLER(&dom_modern_node_prop_handlers, "baseURI", dom_node_base_uri_read, NULL);
|
||||
DOM_REGISTER_PROP_HANDLER(&dom_modern_node_prop_handlers, "baseURI", dom_modern_node_base_uri_read, NULL);
|
||||
DOM_REGISTER_PROP_HANDLER(&dom_modern_node_prop_handlers, "isConnected", dom_node_is_connected_read, NULL);
|
||||
DOM_REGISTER_PROP_HANDLER(&dom_modern_node_prop_handlers, "ownerDocument", dom_node_owner_document_read, NULL);
|
||||
DOM_REGISTER_PROP_HANDLER(&dom_modern_node_prop_handlers, "parentNode", dom_node_parent_node_read, NULL);
|
||||
|
||||
28
ext/dom/tests/modern/common/gh21077.phpt
Normal file
28
ext/dom/tests/modern/common/gh21077.phpt
Normal file
@@ -0,0 +1,28 @@
|
||||
--TEST--
|
||||
GH-21077 (Accessing Dom\Node::baseURI can throw TypeError)
|
||||
--EXTENSIONS--
|
||||
dom
|
||||
--CREDITS--
|
||||
mbeccati
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$implementation = new Dom\Implementation();
|
||||
$node = $implementation->createDocumentType('html', 'publicId', 'systemId');
|
||||
|
||||
var_dump($node->baseURI);
|
||||
|
||||
$dom = Dom\XMLDocument::createEmpty();
|
||||
$dom->append($node = $dom->importNode($node));
|
||||
|
||||
var_dump($dom->saveXML());
|
||||
|
||||
var_dump($node->baseURI);
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
string(11) "about:blank"
|
||||
string(84) "<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html PUBLIC "publicId" "systemId">
|
||||
"
|
||||
string(11) "about:blank"
|
||||
@@ -43,7 +43,7 @@ object(Dom\DocumentType)#3 (19) {
|
||||
["nodeName"]=>
|
||||
string(5) "qname"
|
||||
["baseURI"]=>
|
||||
NULL
|
||||
string(11) "about:blank"
|
||||
["isConnected"]=>
|
||||
bool(false)
|
||||
["parentNode"]=>
|
||||
@@ -86,7 +86,7 @@ object(Dom\DocumentType)#2 (19) {
|
||||
["nodeName"]=>
|
||||
string(5) "qname"
|
||||
["baseURI"]=>
|
||||
NULL
|
||||
string(11) "about:blank"
|
||||
["isConnected"]=>
|
||||
bool(false)
|
||||
["parentNode"]=>
|
||||
@@ -129,7 +129,7 @@ object(Dom\DocumentType)#1 (19) {
|
||||
["nodeName"]=>
|
||||
string(5) "qname"
|
||||
["baseURI"]=>
|
||||
NULL
|
||||
string(11) "about:blank"
|
||||
["isConnected"]=>
|
||||
bool(false)
|
||||
["parentNode"]=>
|
||||
@@ -172,7 +172,7 @@ object(Dom\DocumentType)#4 (19) {
|
||||
["nodeName"]=>
|
||||
string(5) "qname"
|
||||
["baseURI"]=>
|
||||
NULL
|
||||
string(11) "about:blank"
|
||||
["isConnected"]=>
|
||||
bool(false)
|
||||
["parentNode"]=>
|
||||
|
||||
@@ -148,7 +148,7 @@ object(Dom\Notation)#4 (13) {
|
||||
["nodeName"]=>
|
||||
string(3) "GIF"
|
||||
["baseURI"]=>
|
||||
NULL
|
||||
string(11) "about:blank"
|
||||
["isConnected"]=>
|
||||
bool(false)
|
||||
["parentNode"]=>
|
||||
|
||||
Reference in New Issue
Block a user