summaryrefslogtreecommitdiff
path: root/ext/xmlreader/php_xmlreader.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2019-06-06 01:47:22 +0300
committerDmitry Stogov <dmitry@zend.com>2019-06-06 01:47:22 +0300
commit457392fa64692be0927ed641369370f02afb0420 (patch)
treee83d85fadb66cffa22fc119d3df60e72f2f9a007 /ext/xmlreader/php_xmlreader.c
parent90a2e4ba668e89e59301abfe71175b0c0d1f9b96 (diff)
downloadphp-git-457392fa64692be0927ed641369370f02afb0420.tar.gz
Cheaper checks for exceptions thrown from __toString()
Diffstat (limited to 'ext/xmlreader/php_xmlreader.c')
-rw-r--r--ext/xmlreader/php_xmlreader.c21
1 files changed, 12 insertions, 9 deletions
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);