diff --git a/ext/dom/php_dom.c b/ext/dom/php_dom.c index 0c6f9af3bff96..f80194bdde571 100644 --- a/ext/dom/php_dom.c +++ b/ext/dom/php_dom.c @@ -265,47 +265,28 @@ PHP_DOM_EXPORT dom_object *php_dom_object_get_data(xmlNodePtr obj) } /* }}} end php_dom_object_get_data */ -/* {{{ dom_read_na */ -static int dom_read_na(dom_object *obj, zval *retval) -{ - zend_throw_error(NULL, "Cannot read property"); - return FAILURE; -} -/* }}} */ - -/* {{{ dom_write_na */ -static int dom_write_na(dom_object *obj, zval *newval) -{ - zend_throw_error(NULL, "Cannot write property"); - return FAILURE; -} -/* }}} */ - -/* {{{ dom_register_prop_handler */ static void dom_register_prop_handler(HashTable *prop_handler, char *name, size_t name_len, dom_read_t read_func, dom_write_t write_func) { dom_prop_handler hnd; zend_string *str; - hnd.read_func = read_func ? read_func : dom_read_na; - hnd.write_func = write_func ? write_func : dom_write_na; + hnd.read_func = read_func; + hnd.write_func = write_func; str = zend_string_init_interned(name, name_len, 1); zend_hash_add_mem(prop_handler, str, &hnd, sizeof(dom_prop_handler)); zend_string_release_ex(str, 1); } -/* }}} */ -static zval *dom_get_property_ptr_ptr(zend_object *object, zend_string *name, int type, void **cache_slot) /* {{{ */ +static zval *dom_get_property_ptr_ptr(zend_object *object, zend_string *name, int type, void **cache_slot) { dom_object *obj = php_dom_obj_from_obj(object); - zval *retval = NULL; if (!obj->prop_handler || !zend_hash_exists(obj->prop_handler, name)) { - retval = zend_std_get_property_ptr_ptr(object, name, type, cache_slot); + return zend_std_get_property_ptr_ptr(object, name, type, cache_slot); } - return retval; + + return NULL; } -/* }}} */ /* {{{ dom_read_property */ zval *dom_read_property(zend_object *object, zend_string *name, int type, void **cache_slot, zval *rv) @@ -337,7 +318,6 @@ zval *dom_read_property(zend_object *object, zend_string *name, int type, void * } /* }}} */ -/* {{{ dom_write_property */ zval *dom_write_property(zend_object *object, zend_string *name, zval *value, void **cache_slot) { dom_object *obj = php_dom_obj_from_obj(object); @@ -346,15 +326,32 @@ zval *dom_write_property(zend_object *object, zend_string *name, zval *value, vo if (obj->prop_handler != NULL) { hnd = zend_hash_find_ptr(obj->prop_handler, name); } + if (hnd) { - hnd->write_func(obj, value); - } else { - value = zend_std_write_property(object, name, value, cache_slot); + if (!hnd->write_func) { + zend_throw_error(NULL, "Cannot write read-only property %s::$%s", ZSTR_VAL(object->ce->name), ZSTR_VAL(name)); + return &EG(error_zval); + } + + zend_property_info *prop = zend_get_property_info(object->ce, name, /* silent */ true); + if (prop && ZEND_TYPE_IS_SET(prop->type)) { + zval tmp; + ZVAL_COPY(&tmp, value); + if (!zend_verify_property_type(prop, &tmp, ZEND_CALL_USES_STRICT_TYPES(EG(current_execute_data)))) { + zval_ptr_dtor(&tmp); + return &EG(error_zval); + } + hnd->write_func(obj, &tmp); + zval_ptr_dtor(&tmp); + } else { + hnd->write_func(obj, value); + } + + return value; } - return value; + return zend_std_write_property(object, name, value, cache_slot); } -/* }}} */ /* {{{ dom_property_exists */ static int dom_property_exists(zend_object *object, zend_string *name, int check_empty, void **cache_slot) diff --git a/ext/dom/php_dom.stub.php b/ext/dom/php_dom.stub.php index 94aad3e2370a8..dec474bd85eb3 100644 --- a/ext/dom/php_dom.stub.php +++ b/ext/dom/php_dom.stub.php @@ -61,8 +61,7 @@ class DOMNode /** @readonly */ public string $nodeName; - /** @var string|null */ - public $nodeValue; + public ?string $nodeValue; /** @readonly */ public int $nodeType; @@ -94,8 +93,7 @@ class DOMNode /** @readonly */ public ?string $namespaceURI; - /** @var string */ - public $prefix = ""; + public string $prefix; /** @readonly */ public ?string $localName; @@ -103,8 +101,7 @@ class DOMNode /** @readonly */ public ?string $baseURI; - /** @var string */ - public $textContent = ""; + public string $textContent; /** @return DOMNode|false */ public function appendChild(DOMNode $node) {} @@ -415,29 +412,22 @@ class DOMDocument extends DOMNode implements DOMParentNode */ public ?string $actualEncoding; - /** @var string|null */ - public $encoding; + public ?string $encoding; /** @readonly */ public ?string $xmlEncoding; - /** @var bool */ - public $standalone = false; + public bool $standalone; - /** @var bool */ - public $xmlStandalone = false; + public bool $xmlStandalone; - /** @var string|null */ - public $version; + public ?string $version; - /** @var string|null */ - public $xmlVersion; + public ?string $xmlVersion; - /** @var bool */ - public $strictErrorChecking = false; + public bool $strictErrorChecking; - /** @var string|null */ - public $documentURI; + public ?string $documentURI; /** * @readonly @@ -445,23 +435,17 @@ class DOMDocument extends DOMNode implements DOMParentNode */ public mixed $config = null; - /** @var bool */ - public $formatOutput = false; + public bool $formatOutput; - /** @var bool */ - public $validateOnParse = false; + public bool $validateOnParse; - /** @var bool */ - public $resolveExternals = false; + public bool $resolveExternals; - /** @var bool */ - public $preserveWhiteSpace = false; + public bool $preserveWhiteSpace; - /** @var bool */ - public $recover = false; + public bool $recover; - /** @var bool */ - public $substituteEntities = false; + public bool $substituteEntities; /** @readonly */ public ?DOMElement $firstElementChild; @@ -580,7 +564,7 @@ public function prepend(...$nodes): void {} final class DOMException extends Exception { - /** @var int */ + /** @var int Intentionally left untyped */ public $code = 0; } @@ -664,8 +648,7 @@ class DOMProcessingInstruction extends DOMNode /** @readonly */ public string $target; - /** @var string */ - public $data = ""; + public string $data; public function __construct(string $name, string $value = "") {} } @@ -676,8 +659,7 @@ class DOMXPath /** @readonly */ public DOMDocument $document; - /** @var bool */ - public $registerNodeNamespaces = false; + public bool $registerNodeNamespaces; public function __construct(DOMDocument $document, bool $registerNodeNS = true) {} diff --git a/ext/dom/php_dom_arginfo.h b/ext/dom/php_dom_arginfo.h index 62f67e7e1bd29..1b77719f4caaf 100644 --- a/ext/dom/php_dom_arginfo.h +++ b/ext/dom/php_dom_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: da7dc3118b701446f39e1b3375600923b3a1202e */ + * Stub hash: f9bcfaa9c0ed58949c4ee58fbf1833359010be7d */ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_dom_import_simplexml, 0, 1, DOMElement, 1) ZEND_ARG_TYPE_INFO(0, node, IS_OBJECT, 0) @@ -950,9 +950,9 @@ static zend_class_entry *register_class_DOMNode(void) zend_string_release(property_nodeName_name); zval property_nodeValue_default_value; - ZVAL_NULL(&property_nodeValue_default_value); + ZVAL_UNDEF(&property_nodeValue_default_value); zend_string *property_nodeValue_name = zend_string_init("nodeValue", sizeof("nodeValue") - 1, 1); - zend_declare_property_ex(class_entry, property_nodeValue_name, &property_nodeValue_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_nodeValue_name, &property_nodeValue_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING|MAY_BE_NULL)); zend_string_release(property_nodeValue_name); zval property_nodeType_default_value; @@ -1024,9 +1024,9 @@ static zend_class_entry *register_class_DOMNode(void) zend_string_release(property_namespaceURI_name); zval property_prefix_default_value; - ZVAL_EMPTY_STRING(&property_prefix_default_value); + ZVAL_UNDEF(&property_prefix_default_value); zend_string *property_prefix_name = zend_string_init("prefix", sizeof("prefix") - 1, 1); - zend_declare_property_ex(class_entry, property_prefix_name, &property_prefix_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_prefix_name, &property_prefix_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(property_prefix_name); zval property_localName_default_value; @@ -1042,9 +1042,9 @@ static zend_class_entry *register_class_DOMNode(void) zend_string_release(property_baseURI_name); zval property_textContent_default_value; - ZVAL_EMPTY_STRING(&property_textContent_default_value); + ZVAL_UNDEF(&property_textContent_default_value); zend_string *property_textContent_name = zend_string_init("textContent", sizeof("textContent") - 1, 1); - zend_declare_property_ex(class_entry, property_textContent_name, &property_textContent_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_textContent_name, &property_textContent_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(property_textContent_name); return class_entry; @@ -1339,9 +1339,9 @@ static zend_class_entry *register_class_DOMDocument(zend_class_entry *class_entr zend_string_release(property_actualEncoding_name); zval property_encoding_default_value; - ZVAL_NULL(&property_encoding_default_value); + ZVAL_UNDEF(&property_encoding_default_value); zend_string *property_encoding_name = zend_string_init("encoding", sizeof("encoding") - 1, 1); - zend_declare_property_ex(class_entry, property_encoding_name, &property_encoding_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_encoding_name, &property_encoding_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING|MAY_BE_NULL)); zend_string_release(property_encoding_name); zval property_xmlEncoding_default_value; @@ -1351,39 +1351,39 @@ static zend_class_entry *register_class_DOMDocument(zend_class_entry *class_entr zend_string_release(property_xmlEncoding_name); zval property_standalone_default_value; - ZVAL_BOOL(&property_standalone_default_value, 0); + ZVAL_UNDEF(&property_standalone_default_value); zend_string *property_standalone_name = zend_string_init("standalone", sizeof("standalone") - 1, 1); - zend_declare_property_ex(class_entry, property_standalone_name, &property_standalone_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_standalone_name, &property_standalone_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL)); zend_string_release(property_standalone_name); zval property_xmlStandalone_default_value; - ZVAL_BOOL(&property_xmlStandalone_default_value, 0); + ZVAL_UNDEF(&property_xmlStandalone_default_value); zend_string *property_xmlStandalone_name = zend_string_init("xmlStandalone", sizeof("xmlStandalone") - 1, 1); - zend_declare_property_ex(class_entry, property_xmlStandalone_name, &property_xmlStandalone_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_xmlStandalone_name, &property_xmlStandalone_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL)); zend_string_release(property_xmlStandalone_name); zval property_version_default_value; - ZVAL_NULL(&property_version_default_value); + ZVAL_UNDEF(&property_version_default_value); zend_string *property_version_name = zend_string_init("version", sizeof("version") - 1, 1); - zend_declare_property_ex(class_entry, property_version_name, &property_version_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_version_name, &property_version_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING|MAY_BE_NULL)); zend_string_release(property_version_name); zval property_xmlVersion_default_value; - ZVAL_NULL(&property_xmlVersion_default_value); + ZVAL_UNDEF(&property_xmlVersion_default_value); zend_string *property_xmlVersion_name = zend_string_init("xmlVersion", sizeof("xmlVersion") - 1, 1); - zend_declare_property_ex(class_entry, property_xmlVersion_name, &property_xmlVersion_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_xmlVersion_name, &property_xmlVersion_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING|MAY_BE_NULL)); zend_string_release(property_xmlVersion_name); zval property_strictErrorChecking_default_value; - ZVAL_BOOL(&property_strictErrorChecking_default_value, 0); + ZVAL_UNDEF(&property_strictErrorChecking_default_value); zend_string *property_strictErrorChecking_name = zend_string_init("strictErrorChecking", sizeof("strictErrorChecking") - 1, 1); - zend_declare_property_ex(class_entry, property_strictErrorChecking_name, &property_strictErrorChecking_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_strictErrorChecking_name, &property_strictErrorChecking_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL)); zend_string_release(property_strictErrorChecking_name); zval property_documentURI_default_value; - ZVAL_NULL(&property_documentURI_default_value); + ZVAL_UNDEF(&property_documentURI_default_value); zend_string *property_documentURI_name = zend_string_init("documentURI", sizeof("documentURI") - 1, 1); - zend_declare_property_ex(class_entry, property_documentURI_name, &property_documentURI_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_documentURI_name, &property_documentURI_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING|MAY_BE_NULL)); zend_string_release(property_documentURI_name); zval property_config_default_value; @@ -1393,39 +1393,39 @@ static zend_class_entry *register_class_DOMDocument(zend_class_entry *class_entr zend_string_release(property_config_name); zval property_formatOutput_default_value; - ZVAL_BOOL(&property_formatOutput_default_value, 0); + ZVAL_UNDEF(&property_formatOutput_default_value); zend_string *property_formatOutput_name = zend_string_init("formatOutput", sizeof("formatOutput") - 1, 1); - zend_declare_property_ex(class_entry, property_formatOutput_name, &property_formatOutput_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_formatOutput_name, &property_formatOutput_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL)); zend_string_release(property_formatOutput_name); zval property_validateOnParse_default_value; - ZVAL_BOOL(&property_validateOnParse_default_value, 0); + ZVAL_UNDEF(&property_validateOnParse_default_value); zend_string *property_validateOnParse_name = zend_string_init("validateOnParse", sizeof("validateOnParse") - 1, 1); - zend_declare_property_ex(class_entry, property_validateOnParse_name, &property_validateOnParse_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_validateOnParse_name, &property_validateOnParse_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL)); zend_string_release(property_validateOnParse_name); zval property_resolveExternals_default_value; - ZVAL_BOOL(&property_resolveExternals_default_value, 0); + ZVAL_UNDEF(&property_resolveExternals_default_value); zend_string *property_resolveExternals_name = zend_string_init("resolveExternals", sizeof("resolveExternals") - 1, 1); - zend_declare_property_ex(class_entry, property_resolveExternals_name, &property_resolveExternals_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_resolveExternals_name, &property_resolveExternals_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL)); zend_string_release(property_resolveExternals_name); zval property_preserveWhiteSpace_default_value; - ZVAL_BOOL(&property_preserveWhiteSpace_default_value, 0); + ZVAL_UNDEF(&property_preserveWhiteSpace_default_value); zend_string *property_preserveWhiteSpace_name = zend_string_init("preserveWhiteSpace", sizeof("preserveWhiteSpace") - 1, 1); - zend_declare_property_ex(class_entry, property_preserveWhiteSpace_name, &property_preserveWhiteSpace_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_preserveWhiteSpace_name, &property_preserveWhiteSpace_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL)); zend_string_release(property_preserveWhiteSpace_name); zval property_recover_default_value; - ZVAL_BOOL(&property_recover_default_value, 0); + ZVAL_UNDEF(&property_recover_default_value); zend_string *property_recover_name = zend_string_init("recover", sizeof("recover") - 1, 1); - zend_declare_property_ex(class_entry, property_recover_name, &property_recover_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_recover_name, &property_recover_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL)); zend_string_release(property_recover_name); zval property_substituteEntities_default_value; - ZVAL_BOOL(&property_substituteEntities_default_value, 0); + ZVAL_UNDEF(&property_substituteEntities_default_value); zend_string *property_substituteEntities_name = zend_string_init("substituteEntities", sizeof("substituteEntities") - 1, 1); - zend_declare_property_ex(class_entry, property_substituteEntities_name, &property_substituteEntities_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_substituteEntities_name, &property_substituteEntities_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL)); zend_string_release(property_substituteEntities_name); zend_string *property_firstElementChild_class_DOMElement = zend_string_init("DOMElement", sizeof("DOMElement")-1, 1); @@ -1593,9 +1593,9 @@ static zend_class_entry *register_class_DOMProcessingInstruction(zend_class_entr zend_string_release(property_target_name); zval property_data_default_value; - ZVAL_EMPTY_STRING(&property_data_default_value); + ZVAL_UNDEF(&property_data_default_value); zend_string *property_data_name = zend_string_init("data", sizeof("data") - 1, 1); - zend_declare_property_ex(class_entry, property_data_name, &property_data_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_data_name, &property_data_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(property_data_name); return class_entry; @@ -1616,9 +1616,9 @@ static zend_class_entry *register_class_DOMXPath(void) zend_string_release(property_document_name); zval property_registerNodeNamespaces_default_value; - ZVAL_BOOL(&property_registerNodeNamespaces_default_value, 0); + ZVAL_UNDEF(&property_registerNodeNamespaces_default_value); zend_string *property_registerNodeNamespaces_name = zend_string_init("registerNodeNamespaces", sizeof("registerNodeNamespaces") - 1, 1); - zend_declare_property_ex(class_entry, property_registerNodeNamespaces_name, &property_registerNodeNamespaces_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_registerNodeNamespaces_name, &property_registerNodeNamespaces_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL)); zend_string_release(property_registerNodeNamespaces_name); return class_entry; diff --git a/ext/dom/tests/DOMDocumentFragment_construct_basic_002.phpt b/ext/dom/tests/DOMDocumentFragment_construct_basic_002.phpt index d2ded7dce8393..36a0762c16f07 100644 --- a/ext/dom/tests/DOMDocumentFragment_construct_basic_002.phpt +++ b/ext/dom/tests/DOMDocumentFragment_construct_basic_002.phpt @@ -12,11 +12,5 @@ $fragment->__construct(); var_dump($fragment); ?> --EXPECT-- -object(DOMDocumentFragment)#1 (3) { - ["nodeValue"]=> - NULL - ["prefix"]=> - string(0) "" - ["textContent"]=> - string(0) "" +object(DOMDocumentFragment)#1 (0) { } diff --git a/ext/dom/tests/bug55700.phpt b/ext/dom/tests/bug55700.phpt index 29d2c34007621..32d8b8ecd13f4 100644 --- a/ext/dom/tests/bug55700.phpt +++ b/ext/dom/tests/bug55700.phpt @@ -33,8 +33,8 @@ bool(false) bool(true) 1 object(DOMXPath)#4 (2) { - ["registerNodeNamespaces"]=> - bool(true) ["document"]=> string(22) "(object value omitted)" + ["registerNodeNamespaces"]=> + bool(true) } diff --git a/ext/dom/tests/bug69846.phpt b/ext/dom/tests/bug69846.phpt index f0d8e3e926ddd..7655d203fa22f 100644 --- a/ext/dom/tests/bug69846.phpt +++ b/ext/dom/tests/bug69846.phpt @@ -31,14 +31,6 @@ foreach ($dataNodes AS $node) { --EXPECTF-- int(3) object(DOMText)#%d (21) { - ["nodeValue"]=> - string(3) " - " - ["prefix"]=> - string(0) "" - ["textContent"]=> - string(3) " - " ["wholeText"]=> string(3) " " @@ -53,6 +45,9 @@ object(DOMText)#%d (21) { NULL ["nodeName"]=> string(5) "#text" + ["nodeValue"]=> + string(3) " + " ["nodeType"]=> int(3) ["parentNode"]=> @@ -73,26 +68,17 @@ object(DOMText)#%d (21) { string(22) "(object value omitted)" ["namespaceURI"]=> NULL + ["prefix"]=> + string(0) "" ["localName"]=> NULL ["baseURI"]=> NULL -} -object(DOMElement)#%d (23) { - ["nodeValue"]=> - string(39) " - Value A - Value B - Value C - " - ["prefix"]=> - string(0) "" ["textContent"]=> - string(39) " - Value A - Value B - Value C + string(3) " " +} +object(DOMElement)#7 (23) { ["schemaTypeInfo"]=> NULL ["tagName"]=> @@ -109,6 +95,12 @@ object(DOMElement)#%d (23) { NULL ["nodeName"]=> string(5) "form1" + ["nodeValue"]=> + string(39) " + Value A + Value B + Value C + " ["nodeType"]=> int(1) ["parentNode"]=> @@ -129,20 +121,20 @@ object(DOMElement)#%d (23) { string(22) "(object value omitted)" ["namespaceURI"]=> NULL + ["prefix"]=> + string(0) "" ["localName"]=> string(5) "form1" ["baseURI"]=> NULL + ["textContent"]=> + string(39) " + Value A + Value B + Value C + " } object(DOMText)#%d (21) { - ["nodeValue"]=> - string(1) " -" - ["prefix"]=> - string(0) "" - ["textContent"]=> - string(1) " -" ["wholeText"]=> string(1) " " @@ -157,6 +149,9 @@ object(DOMText)#%d (21) { NULL ["nodeName"]=> string(5) "#text" + ["nodeValue"]=> + string(1) " +" ["nodeType"]=> int(3) ["parentNode"]=> @@ -177,8 +172,13 @@ object(DOMText)#%d (21) { string(22) "(object value omitted)" ["namespaceURI"]=> NULL + ["prefix"]=> + string(0) "" ["localName"]=> NULL ["baseURI"]=> NULL + ["textContent"]=> + string(1) " +" } diff --git a/ext/dom/tests/domobject_debug_handler.phpt b/ext/dom/tests/domobject_debug_handler.phpt index ce85b5c9a6d48..8dbaa61a16545 100644 --- a/ext/dom/tests/domobject_debug_handler.phpt +++ b/ext/dom/tests/domobject_debug_handler.phpt @@ -17,38 +17,34 @@ print_r($d); --EXPECTF-- DOMDocument Object ( - [nodeValue] => - [prefix] => - [textContent] => - foobar + [config] => + [dynamicProperty] => stdClass Object + ( + ) + [doctype] => + [implementation] => (object value omitted) + [documentElement] => (object value omitted) + [actualEncoding] => [encoding] => + [xmlEncoding] => [standalone] => 1 [xmlStandalone] => 1 [version] => 1.0 [xmlVersion] => 1.0 [strictErrorChecking] => 1 [documentURI] => %s - [config] => [formatOutput] => [validateOnParse] => [resolveExternals] => [preserveWhiteSpace] => 1 [recover] => [substituteEntities] => - [dynamicProperty] => stdClass Object - ( - ) - - [doctype] => - [implementation] => (object value omitted) - [documentElement] => (object value omitted) - [actualEncoding] => - [xmlEncoding] => [firstElementChild] => (object value omitted) [lastElementChild] => (object value omitted) [childElementCount] => 1 [nodeName] => #document + [nodeValue] => [nodeType] => 9 [parentNode] => [childNodes] => (object value omitted) @@ -59,6 +55,10 @@ DOMDocument Object [attributes] => [ownerDocument] => [namespaceURI] => + [prefix] => [localName] => [baseURI] => %s + [textContent] => + foobar + ) diff --git a/ext/dom/tests/property_write_errors.phpt b/ext/dom/tests/property_write_errors.phpt new file mode 100644 index 0000000000000..941651615eb3b --- /dev/null +++ b/ext/dom/tests/property_write_errors.phpt @@ -0,0 +1,33 @@ +--TEST-- +Test property write errors +--EXTENSIONS-- +dom +--FILE-- +nodeValue = []; +} catch (TypeError $exception) { + echo $exception->getMessage() . "\n"; +} + +try { + $dom->nodeType += 1; +} catch (Error $exception) { + echo $exception->getMessage() . "\n"; +} + +try { + $dom->xmlEncoding = null; +} catch (Error $exception) { + echo $exception->getMessage() . "\n"; +} + +?> +--EXPECT-- +Cannot assign array to property DOMNode::$nodeValue of type ?string +Cannot write read-only property DOMDocument::$nodeType +Cannot write read-only property DOMDocument::$xmlEncoding