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:
@@ -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_prefix_write(dom_object *obj, zval *newval);
|
||||||
zend_result dom_node_local_name_read(dom_object *obj, zval *retval);
|
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_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_read(dom_object *obj, zval *retval);
|
||||||
zend_result dom_node_text_content_write(dom_object *obj, zval *newval);
|
zend_result dom_node_text_content_write(dom_object *obj, zval *newval);
|
||||||
|
|
||||||
|
|||||||
@@ -666,14 +666,25 @@ zend_result dom_node_base_uri_read(dom_object *obj, zval *retval)
|
|||||||
ZVAL_STRING(retval, (const char *) baseuri);
|
ZVAL_STRING(retval, (const char *) baseuri);
|
||||||
xmlFree(baseuri);
|
xmlFree(baseuri);
|
||||||
} else {
|
} else {
|
||||||
if (php_dom_follow_spec_intern(obj)) {
|
ZVAL_NULL(retval);
|
||||||
if (nodep->doc->URL) {
|
}
|
||||||
ZVAL_STRING(retval, (const char *) nodep->doc->URL);
|
|
||||||
} else {
|
return SUCCESS;
|
||||||
ZVAL_STRING(retval, "about:blank");
|
}
|
||||||
}
|
|
||||||
|
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 {
|
} 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);
|
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, "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, "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, "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, "ownerDocument", dom_node_owner_document_read, NULL);
|
||||||
DOM_REGISTER_PROP_HANDLER(&dom_modern_node_prop_handlers, "parentNode", dom_node_parent_node_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"]=>
|
["nodeName"]=>
|
||||||
string(5) "qname"
|
string(5) "qname"
|
||||||
["baseURI"]=>
|
["baseURI"]=>
|
||||||
NULL
|
string(11) "about:blank"
|
||||||
["isConnected"]=>
|
["isConnected"]=>
|
||||||
bool(false)
|
bool(false)
|
||||||
["parentNode"]=>
|
["parentNode"]=>
|
||||||
@@ -86,7 +86,7 @@ object(Dom\DocumentType)#2 (19) {
|
|||||||
["nodeName"]=>
|
["nodeName"]=>
|
||||||
string(5) "qname"
|
string(5) "qname"
|
||||||
["baseURI"]=>
|
["baseURI"]=>
|
||||||
NULL
|
string(11) "about:blank"
|
||||||
["isConnected"]=>
|
["isConnected"]=>
|
||||||
bool(false)
|
bool(false)
|
||||||
["parentNode"]=>
|
["parentNode"]=>
|
||||||
@@ -129,7 +129,7 @@ object(Dom\DocumentType)#1 (19) {
|
|||||||
["nodeName"]=>
|
["nodeName"]=>
|
||||||
string(5) "qname"
|
string(5) "qname"
|
||||||
["baseURI"]=>
|
["baseURI"]=>
|
||||||
NULL
|
string(11) "about:blank"
|
||||||
["isConnected"]=>
|
["isConnected"]=>
|
||||||
bool(false)
|
bool(false)
|
||||||
["parentNode"]=>
|
["parentNode"]=>
|
||||||
@@ -172,7 +172,7 @@ object(Dom\DocumentType)#4 (19) {
|
|||||||
["nodeName"]=>
|
["nodeName"]=>
|
||||||
string(5) "qname"
|
string(5) "qname"
|
||||||
["baseURI"]=>
|
["baseURI"]=>
|
||||||
NULL
|
string(11) "about:blank"
|
||||||
["isConnected"]=>
|
["isConnected"]=>
|
||||||
bool(false)
|
bool(false)
|
||||||
["parentNode"]=>
|
["parentNode"]=>
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ object(Dom\Notation)#4 (13) {
|
|||||||
["nodeName"]=>
|
["nodeName"]=>
|
||||||
string(3) "GIF"
|
string(3) "GIF"
|
||||||
["baseURI"]=>
|
["baseURI"]=>
|
||||||
NULL
|
string(11) "about:blank"
|
||||||
["isConnected"]=>
|
["isConnected"]=>
|
||||||
bool(false)
|
bool(false)
|
||||||
["parentNode"]=>
|
["parentNode"]=>
|
||||||
|
|||||||
Reference in New Issue
Block a user