Suppress deprecation notices when ext/dom properties are accessed by the get_debug_info handler (#15530)

This commit is contained in:
Máté Kocsis 2024-08-23 10:39:11 +02:00 committed by GitHub
parent 793f6321e7
commit 7e45e57d8f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 41 additions and 25 deletions

View file

@ -107,10 +107,7 @@ zend_result dom_document_encoding_read(dom_object *obj, zval *retval)
zend_result dom_document_actual_encoding_read(dom_object *obj, zval *retval) zend_result dom_document_actual_encoding_read(dom_object *obj, zval *retval)
{ {
zend_error(E_DEPRECATED, "Property DOMDocument::$actualEncoding is deprecated"); PHP_DOM_DEPRECATED_PROPERTY("Property DOMDocument::$actualEncoding is deprecated");
if (UNEXPECTED(EG(exception))) {
return FAILURE;
}
return dom_document_encoding_read(obj, retval); return dom_document_encoding_read(obj, retval);
} }
@ -419,10 +416,7 @@ Since: DOM Level 3
*/ */
zend_result dom_document_config_read(dom_object *obj, zval *retval) zend_result dom_document_config_read(dom_object *obj, zval *retval)
{ {
zend_error(E_DEPRECATED, "Property DOMDocument::$config is deprecated"); PHP_DOM_DEPRECATED_PROPERTY("Property DOMDocument::$config is deprecated");
if (UNEXPECTED(EG(exception))) {
return FAILURE;
}
ZVAL_NULL(retval); ZVAL_NULL(retval);
return SUCCESS; return SUCCESS;

View file

@ -104,10 +104,7 @@ Since: DOM Level 3
*/ */
zend_result dom_entity_actual_encoding_read(dom_object *obj, zval *retval) zend_result dom_entity_actual_encoding_read(dom_object *obj, zval *retval)
{ {
zend_error(E_DEPRECATED, "Property DOMEntity::$actualEncoding is deprecated"); PHP_DOM_DEPRECATED_PROPERTY("Property DOMEntity::$actualEncoding is deprecated");
if (UNEXPECTED(EG(exception))) {
return FAILURE;
}
ZVAL_NULL(retval); ZVAL_NULL(retval);
return SUCCESS; return SUCCESS;
@ -122,10 +119,7 @@ Since: DOM Level 3
*/ */
zend_result dom_entity_encoding_read(dom_object *obj, zval *retval) zend_result dom_entity_encoding_read(dom_object *obj, zval *retval)
{ {
zend_error(E_DEPRECATED, "Property DOMEntity::$encoding is deprecated"); PHP_DOM_DEPRECATED_PROPERTY("Property DOMEntity::$encoding is deprecated");
if (UNEXPECTED(EG(exception))) {
return FAILURE;
}
ZVAL_NULL(retval); ZVAL_NULL(retval);
return SUCCESS; return SUCCESS;
@ -140,10 +134,7 @@ Since: DOM Level 3
*/ */
zend_result dom_entity_version_read(dom_object *obj, zval *retval) zend_result dom_entity_version_read(dom_object *obj, zval *retval)
{ {
zend_error(E_DEPRECATED, "Property DOMEntity::$version is deprecated"); PHP_DOM_DEPRECATED_PROPERTY("Property DOMEntity::$version is deprecated");
if (UNEXPECTED(EG(exception))) {
return FAILURE;
}
ZVAL_NULL(retval); ZVAL_NULL(retval);
return SUCCESS; return SUCCESS;

View file

@ -203,6 +203,16 @@ static const libxml_doc_props default_doc_props = {
.classmap = NULL, .classmap = NULL,
}; };
ZEND_DECLARE_MODULE_GLOBALS(dom)
static PHP_GINIT_FUNCTION(dom)
{
#if defined(COMPILE_DL_DOM) && defined(ZTS)
ZEND_TSRMLS_CACHE_UPDATE();
#endif
dom_globals->suppress_warnings = false;
}
/* {{{ dom_get_doc_props() */ /* {{{ dom_get_doc_props() */
dom_doc_propsptr dom_get_doc_props(php_libxml_ref_obj *document) dom_doc_propsptr dom_get_doc_props(php_libxml_ref_obj *document)
{ {
@ -464,6 +474,8 @@ static HashTable* dom_get_debug_info_helper(zend_object *object, int *is_temp) /
return debug_info; return debug_info;
} }
DOM_G(suppress_warnings) = true;
object_str = ZSTR_INIT_LITERAL("(object value omitted)", false); object_str = ZSTR_INIT_LITERAL("(object value omitted)", false);
ZEND_HASH_MAP_FOREACH_STR_KEY_PTR(prop_handlers, string_key, entry) { ZEND_HASH_MAP_FOREACH_STR_KEY_PTR(prop_handlers, string_key, entry) {
@ -486,6 +498,8 @@ static HashTable* dom_get_debug_info_helper(zend_object *object, int *is_temp) /
zend_string_release_ex(object_str, false); zend_string_release_ex(object_str, false);
DOM_G(suppress_warnings) = false;
return debug_info; return debug_info;
} }
/* }}} */ /* }}} */
@ -668,7 +682,11 @@ zend_module_entry dom_module_entry = { /* {{{ */
NULL, NULL,
PHP_MINFO(dom), PHP_MINFO(dom),
DOM_API_VERSION, /* Extension versionnumber */ DOM_API_VERSION, /* Extension versionnumber */
STANDARD_MODULE_PROPERTIES PHP_MODULE_GLOBALS(dom),
PHP_GINIT(dom),
NULL,
NULL,
STANDARD_MODULE_PROPERTIES_EX
}; };
/* }}} */ /* }}} */

View file

@ -300,6 +300,23 @@ static zend_always_inline const xmlChar *php_dom_get_content_or_empty(const xmlN
return node->content ? node->content : BAD_CAST ""; return node->content ? node->content : BAD_CAST "";
} }
#define PHP_DOM_DEPRECATED_PROPERTY(message) do { \
if (EXPECTED(!DOM_G(suppress_warnings))) {\
zend_error(E_DEPRECATED, message); \
if (UNEXPECTED(EG(exception))) { \
return FAILURE; \
} \
} \
} while (0)
ZEND_BEGIN_MODULE_GLOBALS(dom)
bool suppress_warnings;
ZEND_END_MODULE_GLOBALS(dom)
ZEND_EXTERN_MODULE_GLOBALS(dom)
#define DOM_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(dom, v)
PHP_MINIT_FUNCTION(dom); PHP_MINIT_FUNCTION(dom);
PHP_MSHUTDOWN_FUNCTION(dom); PHP_MSHUTDOWN_FUNCTION(dom);
PHP_MINFO_FUNCTION(dom); PHP_MINFO_FUNCTION(dom);

View file

@ -16,10 +16,6 @@ var_dump($d);
?> ?>
--EXPECTF-- --EXPECTF--
Deprecated: Creation of dynamic property DOMDocument::$dynamicProperty is deprecated in %s on line %d Deprecated: Creation of dynamic property DOMDocument::$dynamicProperty is deprecated in %s on line %d
Deprecated: Property DOMDocument::$actualEncoding is deprecated in %s on line %d
Deprecated: Property DOMDocument::$config is deprecated in %s on line %d
object(DOMDocument)#1 (41) { object(DOMDocument)#1 (41) {
["dynamicProperty"]=> ["dynamicProperty"]=>
object(stdClass)#2 (0) { object(stdClass)#2 (0) {