From 457392fa64692be0927ed641369370f02afb0420 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 6 Jun 2019 01:47:22 +0300 Subject: Cheaper checks for exceptions thrown from __toString() --- ext/xmlreader/php_xmlreader.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'ext/xmlreader/php_xmlreader.c') diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c index b3b202af39..20960d96d5 100644 --- a/ext/xmlreader/php_xmlreader.c +++ b/ext/xmlreader/php_xmlreader.c @@ -122,11 +122,12 @@ zval *xmlreader_get_property_ptr_ptr(zval *object, zval *member, int type, void xmlreader_prop_handler *hnd = NULL; if (Z_TYPE_P(member) != IS_STRING) { - ZVAL_STR(&tmp_member, zval_get_string_func(member)); - member = &tmp_member; - if (EG(exception)) { + zend_string *str = zval_try_get_string_func(member); + if (UNEXPECTED(!str)) { return NULL; } + ZVAL_STR(&tmp_member, str); + member = &tmp_member; } obj = Z_XMLREADER_P(object); @@ -156,11 +157,12 @@ zval *xmlreader_read_property(zval *object, zval *member, int type, void **cache xmlreader_prop_handler *hnd = NULL; if (Z_TYPE_P(member) != IS_STRING) { - ZVAL_STR(&tmp_member, zval_get_string_func(member)); - member = &tmp_member; - if (EG(exception)) { + zend_string *str = zval_try_get_string_func(member); + if (UNEXPECTED(!str)) { return &EG(uninitialized_zval); } + ZVAL_STR(&tmp_member, str); + member = &tmp_member; } obj = Z_XMLREADER_P(object); @@ -194,11 +196,12 @@ zval *xmlreader_write_property(zval *object, zval *member, zval *value, void **c xmlreader_prop_handler *hnd = NULL; if (Z_TYPE_P(member) != IS_STRING) { - ZVAL_STR(&tmp_member, zval_get_string_func(member)); - member = &tmp_member; - if (EG(exception)) { + zend_string *str = zval_try_get_string_func(member); + if (UNEXPECTED(!str)) { return value; } + ZVAL_STR(&tmp_member, str); + member = &tmp_member; } obj = Z_XMLREADER_P(object); -- cgit v1.2.1