diff options
author | Dmitry Stogov <dmitry@zend.com> | 2019-06-06 01:47:22 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2019-06-06 01:47:22 +0300 |
commit | 457392fa64692be0927ed641369370f02afb0420 (patch) | |
tree | e83d85fadb66cffa22fc119d3df60e72f2f9a007 /ext/simplexml | |
parent | 90a2e4ba668e89e59301abfe71175b0c0d1f9b96 (diff) | |
download | php-git-457392fa64692be0927ed641369370f02afb0420.tar.gz |
Cheaper checks for exceptions thrown from __toString()
Diffstat (limited to 'ext/simplexml')
-rw-r--r-- | ext/simplexml/simplexml.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c index 01c119888e..06c504884c 100644 --- a/ext/simplexml/simplexml.c +++ b/ext/simplexml/simplexml.c @@ -258,11 +258,12 @@ long_dim: name = NULL; } else { if (Z_TYPE_P(member) != IS_STRING) { - ZVAL_STR(&tmp_zv, zval_get_string_func(member)); - member = &tmp_zv; - if (EG(exception)) { + zend_string *str = zval_try_get_string_func(member); + if (UNEXPECTED(!str)) { return &EG(uninitialized_zval); } + ZVAL_STR(&tmp_zv, str); + member = &tmp_zv; } name = Z_STRVAL_P(member); } @@ -457,8 +458,8 @@ long_dim: } } else { if (Z_TYPE_P(member) != IS_STRING) { - trim_str = zval_get_string_func(member); - if (EG(exception)) { + trim_str = zval_try_get_string_func(member); + if (UNEXPECTED(!trim_str)) { return &EG(error_zval); } @@ -720,11 +721,12 @@ static int sxe_prop_dim_exists(zval *object, zval *member, int check_empty, zend zval tmp_zv; if (Z_TYPE_P(member) != IS_STRING && Z_TYPE_P(member) != IS_LONG) { - ZVAL_STR(&tmp_zv, zval_get_string_func(member)); - member = &tmp_zv; - if (EG(exception)) { + zend_string *str = zval_try_get_string_func(member); + if (UNEXPECTED(!str)) { return 0; } + ZVAL_STR(&tmp_zv, str); + member = &tmp_zv; } sxe = Z_SXEOBJ_P(object); @@ -842,11 +844,12 @@ static void sxe_prop_dim_delete(zval *object, zval *member, zend_bool elements, int test = 0; if (Z_TYPE_P(member) != IS_STRING && Z_TYPE_P(member) != IS_LONG) { - ZVAL_STR(&tmp_zv, zval_get_string_func(member)); - member = &tmp_zv; - if (EG(exception)) { + zend_string *str = zval_try_get_string_func(member); + if (UNEXPECTED(!str)) { return; } + ZVAL_STR(&tmp_zv, str); + member = &tmp_zv; } sxe = Z_SXEOBJ_P(object); |