1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00

Merge branch 'PHP-8.5'

* PHP-8.5:
  Fix GH-21077: Accessing Dom\Node::baseURI can throw TypeError
This commit is contained in:
Niels Dossche
2026-01-30 18:14:24 +01:00
6 changed files with 53 additions and 13 deletions

View File

@@ -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);

View File

@@ -666,14 +666,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");
}
}

View File

@@ -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);

View 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"

View File

@@ -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"]=>

View File

@@ -148,7 +148,7 @@ object(Dom\Notation)#4 (13) {
["nodeName"]=>
string(3) "GIF"
["baseURI"]=>
NULL
string(11) "about:blank"
["isConnected"]=>
bool(false)
["parentNode"]=>