From a31f46421d7bf6f55dd9ac5876b8e2eacf7e0708 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Tue, 26 Feb 2019 15:32:18 +0100 Subject: Allow exceptions in __toString() RFC: https://wiki.php.net/rfc/tostring_exceptions And convert some object to string conversion related recoverable fatal errors into Error exceptions. Improve exception safety of internal code performing string conversions. --- ext/xmlreader/php_xmlreader.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'ext/xmlreader/php_xmlreader.c') diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c index 3ce3fed0e1..b3b202af39 100644 --- a/ext/xmlreader/php_xmlreader.c +++ b/ext/xmlreader/php_xmlreader.c @@ -124,6 +124,9 @@ zval *xmlreader_get_property_ptr_ptr(zval *object, zval *member, int type, void if (Z_TYPE_P(member) != IS_STRING) { ZVAL_STR(&tmp_member, zval_get_string_func(member)); member = &tmp_member; + if (EG(exception)) { + return NULL; + } } obj = Z_XMLREADER_P(object); @@ -155,6 +158,9 @@ zval *xmlreader_read_property(zval *object, zval *member, int type, void **cache if (Z_TYPE_P(member) != IS_STRING) { ZVAL_STR(&tmp_member, zval_get_string_func(member)); member = &tmp_member; + if (EG(exception)) { + return &EG(uninitialized_zval); + } } obj = Z_XMLREADER_P(object); @@ -190,6 +196,9 @@ zval *xmlreader_write_property(zval *object, zval *member, zval *value, void **c if (Z_TYPE_P(member) != IS_STRING) { ZVAL_STR(&tmp_member, zval_get_string_func(member)); member = &tmp_member; + if (EG(exception)) { + return value; + } } obj = Z_XMLREADER_P(object); -- cgit v1.2.1