]> granicus.if.org Git - php/commitdiff
Cheaper checks for exceptions thrown from __toString()
authorDmitry Stogov <dmitry@zend.com>
Wed, 5 Jun 2019 22:47:22 +0000 (01:47 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 5 Jun 2019 22:47:22 +0000 (01:47 +0300)
32 files changed:
Zend/zend_builtin_functions.c
Zend/zend_execute.c
Zend/zend_operators.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h
ext/date/php_date.c
ext/dom/attr.c
ext/dom/characterdata.c
ext/dom/document.c
ext/dom/node.c
ext/dom/processinginstruction.c
ext/iconv/iconv.c
ext/intl/transliterator/transliterator_class.c
ext/mbstring/mbstring.c
ext/mysqli/mysqli.c
ext/oci8/oci8_statement.c
ext/openssl/openssl.c
ext/openssl/xp_ssl.c
ext/pdo_firebird/firebird_driver.c
ext/pdo_oci/oci_driver.c
ext/pgsql/pgsql.c
ext/reflection/php_reflection.c
ext/simplexml/simplexml.c
ext/snmp/snmp.c
ext/spl/spl_iterators.c
ext/sqlite3/sqlite3.c
ext/standard/assert.c
ext/standard/password.c
ext/standard/string.c
ext/xmlreader/php_xmlreader.c
ext/xsl/xsltprocessor.c
ext/zip/php_zip.c

index 160fb8a73973b32cec6f656040176af02d922ce4..6275e9997f69df8835324d0b03ba69d95b3b2aa2 100644 (file)
@@ -736,8 +736,9 @@ ZEND_FUNCTION(error_reporting)
 
        old_error_reporting = EG(error_reporting);
        if (ZEND_NUM_ARGS() != 0) {
-               zend_string *new_val = zval_get_string(err);
-               if (UNEXPECTED(EG(exception))) {
+               zend_string *new_val = zval_try_get_string(err);
+
+               if (UNEXPECTED(!new_val)) {
                        return;
                }
 
index 8adb6ef3b90b6be096a5f05f685647151ecdb0d1..70b050fd098dd92c672fb249572cd3559ae40347 100644 (file)
@@ -1548,8 +1548,8 @@ static zend_never_inline void zend_assign_to_string_offset(zval *str, zval *dim,
 
        if (Z_TYPE_P(value) != IS_STRING) {
                /* Convert to string, just the time to pick the 1st byte */
-               zend_string *tmp = zval_get_string_func(value);
-               if (UNEXPECTED(EG(exception))) {
+               zend_string *tmp = zval_try_get_string_func(value);
+               if (UNEXPECTED(!tmp)) {
                        if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                ZVAL_UNDEF(EX_VAR(opline->result.var));
                        }
@@ -4028,11 +4028,13 @@ static zend_never_inline zend_op_array* ZEND_FASTCALL zend_include_or_eval(zval
 
        ZVAL_UNDEF(&tmp_inc_filename);
        if (Z_TYPE_P(inc_filename) != IS_STRING) {
-               ZVAL_STR(&tmp_inc_filename, zval_get_string_func(inc_filename));
-               inc_filename = &tmp_inc_filename;
-               if (UNEXPECTED(EG(exception))) {
+               zend_string *tmp = zval_try_get_string_func(inc_filename);
+
+               if (UNEXPECTED(!tmp)) {
                        return NULL;
                }
+               ZVAL_STR(&tmp_inc_filename, tmp);
+               inc_filename = &tmp_inc_filename;
        }
 
        switch (type) {
index 896f6dcbe19e788bcd918f6ac105364219b8ad37..36606713961356ac1351ead1bd638107c512c354 100644 (file)
@@ -607,14 +607,15 @@ try_again:
 
 ZEND_API zend_bool ZEND_FASTCALL _try_convert_to_string(zval *op)
 {
-       if (Z_TYPE_P(op) != IS_STRING) {
-               zend_string *str = zval_get_string_func(op);
-               if (UNEXPECTED(EG(exception))) {
-                       return 0;
-               }
-               zval_ptr_dtor(op);
-               ZVAL_STR(op, str);
+       zend_string *str;
+
+       ZEND_ASSERT(Z_TYPE_P(op) != IS_STRING);
+       str = zval_try_get_string_func(op);
+       if (UNEXPECTED(!str)) {
+               return 0;
        }
+       zval_ptr_dtor(op);
+       ZVAL_STR(op, str);
        return 1;
 }
 
@@ -865,7 +866,7 @@ try_again:
 }
 /* }}} */
 
-ZEND_API zend_string* ZEND_FASTCALL zval_get_string_func(zval *op) /* {{{ */
+static zend_always_inline zend_string* __zval_get_string_func(zval *op, zend_bool try) /* {{{ */
 {
 try_again:
        switch (Z_TYPE_P(op)) {
@@ -896,7 +897,7 @@ try_again:
                        } else if (Z_OBJ_HT_P(op)->get) {
                                zval *z = Z_OBJ_HT_P(op)->get(op, &tmp);
                                if (Z_TYPE_P(z) != IS_OBJECT) {
-                                       zend_string *str = zval_get_string(z);
+                                       zend_string *str = try ? zval_try_get_string(z) : zval_get_string(z);
                                        zval_ptr_dtor(z);
                                        return str;
                                }
@@ -905,7 +906,7 @@ try_again:
                        if (!EG(exception)) {
                                zend_throw_error(NULL, "Object of class %s could not be converted to string", ZSTR_VAL(Z_OBJCE_P(op)->name));
                        }
-                       return ZSTR_EMPTY_ALLOC();
+                       return try ? NULL : ZSTR_EMPTY_ALLOC();
                }
                case IS_REFERENCE:
                        op = Z_REFVAL_P(op);
@@ -918,13 +919,15 @@ try_again:
 }
 /* }}} */
 
+ZEND_API zend_string* ZEND_FASTCALL zval_get_string_func(zval *op) /* {{{ */
+{
+       return __zval_get_string_func(op, 0);
+}
+/* }}} */
+
 ZEND_API zend_string* ZEND_FASTCALL zval_try_get_string_func(zval *op) /* {{{ */
 {
-       zend_string *str = zval_get_string_func(op);
-       if (UNEXPECTED(EG(exception))) {
-               return NULL;
-       }
-       return str;
+       return __zval_get_string_func(op, 1);
 }
 /* }}} */
 
index 349c3907646f3f32eef173cbe65f07c1f1123cbd..aad472f6f25f6bc5d4e8adf906292696d120b049 100644 (file)
@@ -1631,8 +1631,8 @@ ZEND_VM_HELPER(zend_fetch_var_address_helper, CONST|TMPVAR|CV, UNUSED, int type)
                if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
                        ZVAL_UNDEFINED_OP1();
                }
-               name = zval_get_tmp_string(varname, &tmp_name);
-               if (UNEXPECTED(EG(exception))) {
+               name = zval_try_get_tmp_string(varname, &tmp_name);
+               if (UNEXPECTED(!name)) {
                        FREE_OP1();
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
@@ -5896,8 +5896,8 @@ ZEND_VM_HANDLER(74, ZEND_UNSET_VAR, CONST|TMPVAR|CV, UNUSED, VAR_FETCH)
                if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
                        varname = ZVAL_UNDEFINED_OP1();
                }
-               name = zval_get_tmp_string(varname, &tmp_name);
-               if (UNEXPECTED(EG(exception))) {
+               name = zval_try_get_tmp_string(varname, &tmp_name);
+               if (UNEXPECTED(!name)) {
                        FREE_OP1();
                        HANDLE_EXCEPTION();
                }
index 8ecfe7cb9fc0d87409a0375b99093b65293fbe39..003dde0aa17fd25dfab723359067789661bcfda9 100644 (file)
@@ -8473,8 +8473,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_
                if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
                        ZVAL_UNDEFINED_OP1();
                }
-               name = zval_get_tmp_string(varname, &tmp_name);
-               if (UNEXPECTED(EG(exception))) {
+               name = zval_try_get_tmp_string(varname, &tmp_name);
+               if (UNEXPECTED(!name)) {
 
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
@@ -8989,8 +8989,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HA
                if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
                        varname = ZVAL_UNDEFINED_OP1();
                }
-               name = zval_get_tmp_string(varname, &tmp_name);
-               if (UNEXPECTED(EG(exception))) {
+               name = zval_try_get_tmp_string(varname, &tmp_name);
+               if (UNEXPECTED(!name)) {
 
                        HANDLE_EXCEPTION();
                }
@@ -15883,8 +15883,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_
                if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
                        ZVAL_UNDEFINED_OP1();
                }
-               name = zval_get_tmp_string(varname, &tmp_name);
-               if (UNEXPECTED(EG(exception))) {
+               name = zval_try_get_tmp_string(varname, &tmp_name);
+               if (UNEXPECTED(!name)) {
                        zval_ptr_dtor_nogc(free_op1);
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
@@ -16008,8 +16008,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_H
                if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
                        varname = ZVAL_UNDEFINED_OP1();
                }
-               name = zval_get_tmp_string(varname, &tmp_name);
-               if (UNEXPECTED(EG(exception))) {
+               name = zval_try_get_tmp_string(varname, &tmp_name);
+               if (UNEXPECTED(!name)) {
                        zval_ptr_dtor_nogc(free_op1);
                        HANDLE_EXCEPTION();
                }
@@ -47050,8 +47050,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_
                if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
                        ZVAL_UNDEFINED_OP1();
                }
-               name = zval_get_tmp_string(varname, &tmp_name);
-               if (UNEXPECTED(EG(exception))) {
+               name = zval_try_get_tmp_string(varname, &tmp_name);
+               if (UNEXPECTED(!name)) {
 
                        ZVAL_UNDEF(EX_VAR(opline->result.var));
                        HANDLE_EXCEPTION();
@@ -47877,8 +47877,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDL
                if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
                        varname = ZVAL_UNDEFINED_OP1();
                }
-               name = zval_get_tmp_string(varname, &tmp_name);
-               if (UNEXPECTED(EG(exception))) {
+               name = zval_try_get_tmp_string(varname, &tmp_name);
+               if (UNEXPECTED(!name)) {
 
                        HANDLE_EXCEPTION();
                }
index 3e8fb419d810bb7dbdae581afcd5b49133255758..3ed320705d29c2a93b78e7b89e6515bf3e1934c5 100644 (file)
@@ -2040,12 +2040,13 @@ static int date_interval_has_property(zval *object, zval *member, int type, void
        int retval = 0;
 
        if (UNEXPECTED(Z_TYPE_P(member) != IS_STRING)) {
-               ZVAL_STR(&tmp_member, zval_get_string_func(member));
-               member = &tmp_member;
-               cache_slot = NULL;
-               if (EG(exception)) {
+               zend_string *str = zval_try_get_string_func(member);
+               if (UNEXPECTED(!str)) {
                        return 0;
                }
+               ZVAL_STR(&tmp_member, str);
+               member = &tmp_member;
+               cache_slot = NULL;
        }
 
        obj = Z_PHPINTERVAL_P(object);
@@ -4167,12 +4168,13 @@ static zval *date_interval_read_property(zval *object, zval *member, int type, v
        double      fvalue = -1;
 
        if (Z_TYPE_P(member) != IS_STRING) {
-               ZVAL_STR(&tmp_member, zval_get_string_func(member));
-               member = &tmp_member;
-               cache_slot = NULL;
-               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;
+               cache_slot = NULL;
        }
 
        obj = Z_PHPINTERVAL_P(object);
@@ -4238,12 +4240,13 @@ static zval *date_interval_write_property(zval *object, zval *member, zval *valu
        zval tmp_member;
 
        if (Z_TYPE_P(member) != IS_STRING) {
-               ZVAL_STR(&tmp_member, zval_get_string_func(member));
-               member = &tmp_member;
-               cache_slot = NULL;
-               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;
+               cache_slot = NULL;
        }
 
        obj = Z_PHPINTERVAL_P(object);
@@ -4292,12 +4295,13 @@ static zval *date_interval_get_property_ptr_ptr(zval *object, zval *member, int
        zval tmp_member, *ret;
 
        if (Z_TYPE_P(member) != IS_STRING) {
-               ZVAL_STR(&tmp_member, zval_get_string_func(member));
-               member = &tmp_member;
-               cache_slot = NULL;
-               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;
+               cache_slot = NULL;
        }
 
        if(zend_binary_strcmp("y", sizeof("y") - 1, Z_STRVAL_P(member), Z_STRLEN_P(member)) == 0 ||
index 025570851733ef37f794ff6531217ec7b89dab2e..9326e145bf1b77222754bb688fd942f188c9ddd0 100644 (file)
@@ -160,8 +160,8 @@ int dom_attr_value_write(dom_object *obj, zval *newval)
                return FAILURE;
        }
 
-       str = zval_get_string(newval);
-       if (EG(exception)) {
+       str = zval_try_get_string(newval);
+       if (UNEXPECTED(!str)) {
                return FAILURE;
        }
 
index 76763706774e932137c935d76d76cce810f40af0..b0ac50f44e5c72d15c7170177ee19916e7443594 100644 (file)
@@ -104,8 +104,8 @@ int dom_characterdata_data_write(dom_object *obj, zval *newval)
                return FAILURE;
        }
 
-       str = zval_get_string(newval);
-       if (EG(exception)) {
+       str = zval_try_get_string(newval);
+       if (UNEXPECTED(!str)) {
                return FAILURE;
        }
 
index 235323e1d7bd32d137675b71e9a0fba11460d3d9..672fd624b3459368b054d177a04f636a2e4c8597 100644 (file)
@@ -337,8 +337,8 @@ int dom_document_encoding_write(dom_object *obj, zval *newval)
                return FAILURE;
        }
 
-       str = zval_get_string(newval);
-       if (EG(exception)) {
+       str = zval_try_get_string(newval);
+       if (UNEXPECTED(!str)) {
                return FAILURE;
        }
 
@@ -434,8 +434,8 @@ int dom_document_version_write(dom_object *obj, zval *newval)
                return FAILURE;
        }
 
-       str = zval_get_string(newval);
-       if (EG(exception)) {
+       str = zval_try_get_string(newval);
+       if (UNEXPECTED(!str)) {
                return FAILURE;
        }
 
@@ -665,8 +665,8 @@ int dom_document_document_uri_write(dom_object *obj, zval *newval)
                return FAILURE;
        }
 
-       str = zval_get_string(newval);
-       if (EG(exception)) {
+       str = zval_try_get_string(newval);
+       if (UNEXPECTED(!str)) {
                return FAILURE;
        }
 
index 44e6f58b30a488060a5f17f36c42b448bea98074..609d1a6116008ea1b3a774e01ac58fb2d40c8386 100644 (file)
@@ -330,8 +330,8 @@ int dom_node_node_value_write(dom_object *obj, zval *newval)
                return FAILURE;
        }
 
-       str = zval_get_string(newval);
-       if (EG(exception)) {
+       str = zval_try_get_string(newval);
+       if (UNEXPECTED(!str)) {
                return FAILURE;
        }
 
@@ -724,8 +724,8 @@ int dom_node_prefix_write(dom_object *obj, zval *newval)
                                        nsnode = xmlDocGetRootElement(nodep->doc);
                                }
                        }
-                       str = zval_get_string(newval);
-                       if (EG(exception)) {
+                       str = zval_try_get_string(newval);
+                       if (UNEXPECTED(!str)) {
                                return FAILURE;
                        }
 
@@ -861,8 +861,8 @@ int dom_node_text_content_write(dom_object *obj, zval *newval)
                return FAILURE;
        }
 
-       str = zval_get_string(newval);
-       if (EG(exception)) {
+       str = zval_try_get_string(newval);
+       if (UNEXPECTED(!str)) {
                return FAILURE;
        }
 
index 103bfd74f039acb38b554697bfa475ab768ddfe4..8cd2848c5190c27070a2690d5b2ed3bc06a45eca 100644 (file)
@@ -138,8 +138,8 @@ int dom_processinginstruction_data_write(dom_object *obj, zval *newval)
                return FAILURE;
        }
 
-       str = zval_get_string(newval);
-       if (EG(exception)) {
+       str = zval_try_get_string(newval);
+       if (UNEXPECTED(!str)) {
                return FAILURE;
        }
 
index 688e3a25527a00ac24cc29639710929a208b54ac..f70dcbf6138f92cbe730bba0d4ae9e2583fbae17 100644 (file)
@@ -2286,8 +2286,8 @@ PHP_FUNCTION(iconv_mime_encode)
 
                if ((pzval = zend_hash_str_find_deref(Z_ARRVAL_P(pref), "line-break-chars", sizeof("line-break-chars") - 1)) != NULL) {
                        if (Z_TYPE_P(pzval) != IS_STRING) {
-                               tmp_str = zval_get_string_func(pzval);
-                               if (EG(exception)) {
+                               tmp_str = zval_try_get_string_func(pzval);
+                               if (UNEXPECTED(!tmp_str)) {
                                        return;
                                }
                                lfchars = ZSTR_VAL(tmp_str);
index a619ed4309ece7b63b04075bdb2a5b50c9651a05..d5aac5df169a080a973f0f5a65f1820fce6e7861 100644 (file)
@@ -193,11 +193,12 @@ err:
        zval tmp_member;                                                        \
        if( Z_TYPE_P( member ) != IS_STRING )           \
        {                                                                                       \
-               ZVAL_STR(&tmp_member,                                   \
-                       zval_get_string_func(member));          \
+               zend_string *_str =                                             \
+                       zval_try_get_string_func(member);       \
+               if (UNEXPECTED(!_str)) { return_fail; } \
+               ZVAL_STR(&tmp_member, _str);                    \
                member = &tmp_member;                                   \
                cache_slot = NULL;                                              \
-               if (EG(exception)) { return_fail; }             \
     }
 
 #define TRANSLITERATOR_PROPERTY_HANDLER_EPILOG \
index e3611562e58b0e2a2d47b3374ca4b594d0efe216..bf71270452ffed1fe671c9fe285da247aee0c5c7 100644 (file)
@@ -826,8 +826,8 @@ php_mb_parse_encoding_array(zval *array, const mbfl_encoding ***return_list, siz
                bauto = 0;
                n = 0;
                ZEND_HASH_FOREACH_VAL(target_hash, hash_entry) {
-                       zend_string *encoding_str = zval_get_string(hash_entry);
-                       if (EG(exception)) {
+                       zend_string *encoding_str = zval_try_get_string(hash_entry);
+                       if (UNEXPECTED(!encoding_str)) {
                                ret = FAILURE;
                                break;
                        }
@@ -3348,8 +3348,8 @@ PHP_FUNCTION(mb_convert_encoding)
                                _from_encodings = NULL;
 
                                ZEND_HASH_FOREACH_VAL(target_hash, hash_entry) {
-                                       zend_string *encoding_str = zval_get_string(hash_entry);
-                                       if (EG(exception)) {
+                                       zend_string *encoding_str = zval_try_get_string(hash_entry);
+                                       if (UNEXPECTED(!encoding_str)) {
                                                if (_from_encodings) {
                                                        efree(_from_encodings);
                                                }
index 9964ea0be49c97aa189df91a2f973ca4a7890b94..1d56c1ab60b6897d67d3bd1729dc74212c112e74 100644 (file)
@@ -307,11 +307,12 @@ zval *mysqli_read_property(zval *object, zval *member, int type, void **cache_sl
        obj = Z_MYSQLI_P(object);
 
        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;
        }
 
        if (obj->prop_handler != NULL) {
@@ -343,11 +344,12 @@ zval *mysqli_write_property(zval *object, zval *member, zval *value, void **cach
        mysqli_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_MYSQLI_P(object);
index 91f6223373c38b3ab4af2ec63ba3430f1d27d0af..fa6e97e47f90d3a3bf5e4dcc396ac575445027a7 100644 (file)
@@ -1930,8 +1930,8 @@ php_oci_bind *php_oci_bind_array_helper_date(zval *var, zend_long max_table_leng
                        bind->array.element_lengths[i] = sizeof(OCIDate);
                }
                if ((i < bind->array.current_length) && (entry = zend_hash_get_current_data(hash)) != NULL) {
-                       zend_string *entry_str = zval_get_string(entry);
-                       if (EG(exception)) {
+                       zend_string *entry_str = zval_try_get_string(entry);
+                       if (UNEXPECTED(!entry_str)) {
                                efree(bind->array.element_lengths);
                                efree(bind->array.elements);
                                efree(bind);
index 7f287c88234dc8607987ef813d8fd858b2b64be6..7d40c858821135446c29e485869588f8d315e3e4 100644 (file)
@@ -2673,8 +2673,8 @@ static X509_STORE *php_openssl_setup_verify(zval *calist)
 
        if (calist && (Z_TYPE_P(calist) == IS_ARRAY)) {
                ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(calist), item) {
-                       zend_string *str = zval_get_string(item);
-                       if (EG(exception)) {
+                       zend_string *str = zval_try_get_string(item);
+                       if (UNEXPECTED(!str)) {
                                return NULL;
                        }
 
@@ -3154,8 +3154,8 @@ static int php_openssl_make_REQ(struct php_x509_request * req, X509_REQ * csr, z
                        if (strindex) {
                                int nid = OBJ_txt2nid(ZSTR_VAL(strindex));
                                if (nid != NID_undef) {
-                                       zend_string *str_item = zval_get_string(item);
-                                       if (EG(exception)) {
+                                       zend_string *str_item = zval_try_get_string(item);
+                                       if (UNEXPECTED(!str_item)) {
                                                return FAILURE;
                                        }
                                        if (!X509_NAME_add_entry_by_NID(subj, nid, MBSTRING_UTF8,
@@ -3237,8 +3237,8 @@ static int php_openssl_make_REQ(struct php_x509_request * req, X509_REQ * csr, z
 
                                nid = OBJ_txt2nid(ZSTR_VAL(strindex));
                                if (nid != NID_undef) {
-                                       zend_string *str_item = zval_get_string(item);
-                                       if (EG(exception)) {
+                                       zend_string *str_item = zval_try_get_string(item);
+                                       if (UNEXPECTED(!str_item)) {
                                                return FAILURE;
                                        }
                                        if (!X509_NAME_add_entry_by_NID(subj, nid, MBSTRING_UTF8, (unsigned char*)ZSTR_VAL(str_item), -1, -1, 0)) {
@@ -5369,8 +5369,8 @@ PHP_FUNCTION(openssl_pkcs7_encrypt)
        /* tack on extra headers */
        if (zheaders) {
                ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(zheaders), strindex, zcertval) {
-                       zend_string *str = zval_get_string(zcertval);
-                       if (EG(exception)) {
+                       zend_string *str = zval_try_get_string(zcertval);
+                       if (UNEXPECTED(!str)) {
                                goto clean_exit;
                        }
                        if (strindex) {
@@ -5587,8 +5587,8 @@ PHP_FUNCTION(openssl_pkcs7_sign)
                int ret;
 
                ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(zheaders), strindex, hval) {
-                       zend_string *str = zval_get_string(hval);
-                       if (EG(exception)) {
+                       zend_string *str = zval_try_get_string(hval);
+                       if (UNEXPECTED(!str)) {
                                goto clean_exit;
                        }
                        if (strindex) {
index ad08e1f13a625e8281fec065ab259101f68786ec..09d1bcbf3e5b0dc4e2e8b6dff44da05fba01b934 100644 (file)
@@ -1484,8 +1484,8 @@ static int php_openssl_enable_server_sni(php_stream *stream, php_openssl_netstre
                                return FAILURE;
                        }
 
-                       local_cert_str = zval_get_string(local_cert);
-                       if (EG(exception)) {
+                       local_cert_str = zval_try_get_string(local_cert);
+                       if (UNEXPECTED(!local_cert_str)) {
                                return FAILURE;
                        }
                        if (!VCWD_REALPATH(ZSTR_VAL(local_cert_str), resolved_cert_path_buff)) {
@@ -1506,8 +1506,8 @@ static int php_openssl_enable_server_sni(php_stream *stream, php_openssl_netstre
                                return FAILURE;
                        }
 
-                       local_pk_str = zval_get_string(local_pk);
-                       if (EG(exception)) {
+                       local_pk_str = zval_try_get_string(local_pk);
+                       if (UNEXPECTED(!local_pk_str)) {
                                return FAILURE;
                        }
                        if (!VCWD_REALPATH(ZSTR_VAL(local_pk_str), resolved_pk_path_buff)) {
index a4ff7e5c5a78e99faea08101829c654e9c3e9526..53ffbdc7c672904ca0db40d5355ddf5907b6c05a 100644 (file)
@@ -465,8 +465,8 @@ static int firebird_handle_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *v
 
                case PDO_FB_ATTR_DATE_FORMAT:
                        {
-                               zend_string *str = zval_get_string(val);
-                               if (EG(exception)) {
+                               zend_string *str = zval_try_get_string(val);
+                               if (UNEXPECTED(!str)) {
                                        return 0;
                                }
                                if (H->date_format) {
@@ -479,8 +479,8 @@ static int firebird_handle_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *v
 
                case PDO_FB_ATTR_TIME_FORMAT:
                        {
-                               zend_string *str = zval_get_string(val);
-                               if (EG(exception)) {
+                               zend_string *str = zval_try_get_string(val);
+                               if (UNEXPECTED(!str)) {
                                        return 0;
                                }
                                if (H->time_format) {
@@ -493,8 +493,8 @@ static int firebird_handle_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *v
 
                case PDO_FB_ATTR_TIMESTAMP_FORMAT:
                        {
-                               zend_string *str = zval_get_string(val);
-                               if (EG(exception)) {
+                               zend_string *str = zval_try_get_string(val);
+                               if (UNEXPECTED(!str)) {
                                        return 0;
                                }
                                if (H->timestamp_format) {
index f121b4791bf2ebe8df62e5205b296c4ce820f329..eb1f70bdb0977f8bbadd52155bde7c80c8dd395c 100644 (file)
@@ -460,8 +460,8 @@ static int oci_handle_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val) /
                case PDO_OCI_ATTR_ACTION:
                {
 #if (OCI_MAJOR_VERSION >= 10)
-                       zend_string *action = zval_get_string(val);
-                       if (EG(exception)) {
+                       zend_string *action = zval_try_get_string(val);
+                       if (UNEXPECTED(!action)) {
                                return 0;
                        }
 
@@ -481,8 +481,8 @@ static int oci_handle_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val) /
                case PDO_OCI_ATTR_CLIENT_INFO:
                {
 #if (OCI_MAJOR_VERSION >= 10)
-                       zend_string *client_info = zval_get_string(val);
-                       if (EG(exception)) {
+                       zend_string *client_info = zval_try_get_string(val);
+                       if (UNEXPECTED(!client_info)) {
                                return 0;
                        }
 
@@ -502,8 +502,8 @@ static int oci_handle_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val) /
                case PDO_OCI_ATTR_CLIENT_IDENTIFIER:
                {
 #if (OCI_MAJOR_VERSION >= 10)
-                       zend_string *identifier = zval_get_string(val);
-                       if (EG(exception)) {
+                       zend_string *identifier = zval_try_get_string(val);
+                       if (UNEXPECTED(!identifier)) {
                                return 0;
                        }
 
@@ -523,8 +523,8 @@ static int oci_handle_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val) /
                case PDO_OCI_ATTR_MODULE:
                {
 #if (OCI_MAJOR_VERSION >= 10)
-                       zend_string *module = zval_get_string(val);
-                       if (EG(exception)) {
+                       zend_string *module = zval_try_get_string(val);
+                       if (UNEXPECTED(!module)) {
                                return 0;
                        }
 
index 9dd08f249a194d901ee39c91605b9ffb27b8c392..967eb051555f0f6b3b790ee1780b9186b4193ccc 100644 (file)
@@ -4284,8 +4284,8 @@ PHP_FUNCTION(pg_copy_from)
                                PQclear(pgsql_result);
 #if HAVE_PQPUTCOPYDATA
                                ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pg_rows), value) {
-                                       zend_string *tmp = zval_get_string(value);
-                                       if (EG(exception)) {
+                                       zend_string *tmp = zval_try_get_string(value);
+                                       if (UNEXPECTED(!tmp)) {
                                                return;
                                        }
                                        query = (char *)emalloc(ZSTR_LEN(tmp) + 2);
@@ -4309,8 +4309,8 @@ PHP_FUNCTION(pg_copy_from)
                                }
 #else
                                ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pg_rows), value) {
-                                       zend_string *tmp = zval_get_string(value);
-                                       if (EG(exception)) {
+                                       zend_string *tmp = zval_try_get_string(value);
+                                       if (UNEXPECTED(!tmp)) {
                                                return;
                                        }
                                        query = (char *)emalloc(ZSTR_LEN(tmp) + 2);
@@ -5173,8 +5173,8 @@ PHP_FUNCTION(pg_send_execute)
                        if (Z_TYPE_P(tmp) == IS_NULL) {
                                params[i] = NULL;
                        } else {
-                               zend_string *tmp_str = zval_get_string(tmp);
-                               if (EG(exception)) {
+                               zend_string *tmp_str = zval_try_get_string(tmp);
+                               if (UNEXPECTED(!tmp)) {
                                        _php_pgsql_free_params(params, num_params);
                                        return;
                                }
index ab519251806de1b10eb68feb9f4dda6b78bd5f28..ecdec41e036348722fec1452bf47810d366372eb 100644 (file)
@@ -2275,8 +2275,8 @@ ZEND_METHOD(reflection_parameter, __construct)
                                if (Z_TYPE_P(classref) == IS_OBJECT) {
                                        ce = Z_OBJCE_P(classref);
                                } else {
-                                       name = zval_get_string(classref);
-                                       if (EG(exception)) {
+                                       name = zval_try_get_string(classref);
+                                       if (UNEXPECTED(!name)) {
                                                return;
                                        }
                                        if ((ce = zend_lookup_class(name)) == NULL) {
@@ -2288,8 +2288,8 @@ ZEND_METHOD(reflection_parameter, __construct)
                                        zend_string_release(name);
                                }
 
-                               name = zval_get_string(method);
-                               if (EG(exception)) {
+                               name = zval_try_get_string(method);
+                               if (UNEXPECTED(!name)) {
                                        return;
                                }
 
index 01c119888e32012c54d15ceae0f603efa2a7d3dc..06c504884cf7cde3fc054407fadddf66d38b160f 100644 (file)
@@ -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);
index 69ff9b00f493ebdf56c32542101ac55987f2fc84..1c781304c52e0b5bcebed8aad629efcd7d44e824 100644 (file)
@@ -1918,11 +1918,12 @@ zval *php_snmp_read_property(zval *object, zval *member, int type, void **cache_
        obj = Z_SNMP_P(object);
 
        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;
        }
 
        hnd = zend_hash_find_ptr(&php_snmp_properties, Z_STR_P(member));
@@ -1955,11 +1956,12 @@ zval *php_snmp_write_property(zval *object, zval *member, zval *value, void **ca
        php_snmp_prop_handler *hnd;
 
        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_SNMP_P(object);
index defb9fdb88eeeb22778f0a171ca0a7eb11b0b273..8c3c2b454e7b9abd2ad238baec0609262685fec9 100644 (file)
@@ -2063,8 +2063,8 @@ SPL_METHOD(RegexIterator, accept)
 
                case REGIT_MODE_REPLACE: {
                        zval *replacement = zend_read_property(intern->std.ce, ZEND_THIS, "replacement", sizeof("replacement")-1, 1, &rv);
-                       zend_string *replacement_str = zval_get_string(replacement);
-                       if (EG(exception)) {
+                       zend_string *replacement_str = zval_try_get_string(replacement);
+                       if (UNEXPECTED(!replacement_str)) {
                                return;
                        }
 
index c3ffeabc0011091ed3d2b2f9f51070b3274373bf..81ce1a0f00af545e61b52d189d34a0948ac9a52d 100644 (file)
@@ -802,8 +802,8 @@ static int sqlite3_do_callback(struct php_sqlite3_fci *fc, zval *cb, int argc, s
                                        break;
 
                                default: {
-                                       zend_string *str = zval_get_string(&retval);
-                                       if (EG(exception)) {
+                                       zend_string *str = zval_try_get_string(&retval);
+                                       if (UNEXPECTED(!str)) {
                                                ret = FAILURE;
                                                break;
                                        }
@@ -1487,8 +1487,8 @@ static int php_sqlite3_bind_params(php_sqlite3_stmt *stmt_obj) /* {{{ */
                                }
 
                                case SQLITE3_TEXT: {
-                                       zend_string *str = zval_get_string(parameter);
-                                       if (EG(exception)) {
+                                       zend_string *str = zval_try_get_string(parameter);
+                                       if (UNEXPECTED(!str)) {
                                                return FAILURE;
                                        }
                                        return_code = sqlite3_bind_text(stmt_obj->stmt, param->param_number, ZSTR_VAL(str), ZSTR_LEN(str), SQLITE_TRANSIENT);
index 6e21af6dd5e50dd1014a33e1c8330dc3694f9167..9f315d058186d32114d8abdc2d15acd3905f292a 100644 (file)
@@ -299,8 +299,8 @@ PHP_FUNCTION(assert_options)
        case ASSERT_ACTIVE:
                oldint = ASSERTG(active);
                if (ac == 2) {
-                       zend_string *value_str = zval_get_string(value);
-                       if (EG(exception)) {
+                       zend_string *value_str = zval_try_get_string(value);
+                       if (UNEXPECTED(!value_str)) {
                                return;
                        }
 
@@ -315,8 +315,8 @@ PHP_FUNCTION(assert_options)
        case ASSERT_BAIL:
                oldint = ASSERTG(bail);
                if (ac == 2) {
-                       zend_string *value_str = zval_get_string(value);
-                       if (EG(exception)) {
+                       zend_string *value_str = zval_try_get_string(value);
+                       if (UNEXPECTED(!value_str)) {
                                return;
                        }
 
@@ -331,8 +331,8 @@ PHP_FUNCTION(assert_options)
        case ASSERT_QUIET_EVAL:
                oldint = ASSERTG(quiet_eval);
                if (ac == 2) {
-                       zend_string *value_str = zval_get_string(value);
-                       if (EG(exception)) {
+                       zend_string *value_str = zval_try_get_string(value);
+                       if (UNEXPECTED(!value_str)) {
                                return;
                        }
 
@@ -347,8 +347,8 @@ PHP_FUNCTION(assert_options)
        case ASSERT_WARNING:
                oldint = ASSERTG(warning);
                if (ac == 2) {
-                       zend_string *value_str = zval_get_string(value);
-                       if (EG(exception)) {
+                       zend_string *value_str = zval_try_get_string(value);
+                       if (UNEXPECTED(!value_str)) {
                                return;
                        }
 
@@ -377,8 +377,8 @@ PHP_FUNCTION(assert_options)
        case ASSERT_EXCEPTION:
                oldint = ASSERTG(exception);
                if (ac == 2) {
-                       zend_string *val = zval_get_string(value);
-                       if (EG(exception)) {
+                       zend_string *val = zval_try_get_string(value);
+                       if (UNEXPECTED(!val)) {
                                return;
                        }
 
index 52ff1518e6250adc1c04d1069bc965ec62db606b..d91058bfc21c1b56996585f957e726bcf5d61daf 100644 (file)
@@ -139,8 +139,8 @@ static zend_string* php_password_get_salt(zval *unused_, size_t required_salt_le
                case IS_LONG:
                case IS_DOUBLE:
                case IS_OBJECT:
-                       buffer = zval_get_string(option_buffer);
-                       if (EG(exception)) {
+                       buffer = zval_try_get_string(option_buffer);
+                       if (UNEXPECTED(!buffer)) {
                                return NULL;
                        }
                        break;
index a7aa02fcbda0e83db115ddb0863b42523b97fd1e..3e06085a5fb91fbf9ee1cf37fd93433396b07d5c 100644 (file)
@@ -4849,8 +4849,8 @@ PHP_FUNCTION(setlocale)
                        plocale = &args[i];
                }
 
-               loc = zval_get_string(plocale);
-               if (EG(exception)) {
+               loc = zval_try_get_string(plocale);
+               if (UNEXPECTED(!loc)) {
                        return;
                }
 
index b3b202af39b51bb357645b7ddc1b41bd836910c3..20960d96d5f038d6c6472b13843341b4bc98aa66 100644 (file)
@@ -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);
index 919006041a9fbd387fe2100ab5d6065e3b0925ce..20d907dc4a643eee8659c811778ba6ca79a4eef8 100644 (file)
@@ -757,14 +757,17 @@ PHP_FUNCTION(xsl_xsltprocessor_set_parameter)
                intern = Z_XSL_P(id);
                ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(array_value), string_key, entry) {
                        zval tmp;
+                       zend_string *str;
+
                        if (string_key == NULL) {
                                php_error_docref(NULL, E_WARNING, "Invalid parameter array");
                                RETURN_FALSE;
                        }
-                       ZVAL_STR(&tmp, zval_get_string(entry));
-                       if (EG(exception)) {
+                       str = zval_try_get_string(entry);
+                       if (UNEXPECTED(!str)) {
                                return;
                        }
+                       ZVAL_STR(&tmp, str);
                        zend_hash_update(intern->parameter, string_key, &tmp);
                } ZEND_HASH_FOREACH_END();
                RETURN_TRUE;
@@ -847,8 +850,8 @@ PHP_FUNCTION(xsl_xsltprocessor_register_php_functions)
                intern = Z_XSL_P(id);
 
                ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(array_value), entry) {
-                       zend_string *str = zval_get_string(entry);
-                       if (EG(exception)) {
+                       zend_string *str = zval_try_get_string(entry);
+                       if (UNEXPECTED(!str)) {
                                return;
                        }
                        ZVAL_LONG(&new_string, 1);
index c2b41309c0da446b0a0c49e63659f22953f55e11..b8e01c1fe23028bfc17e842449eb85e0b5cb5be4 100644 (file)
@@ -873,12 +873,13 @@ static zval *php_zip_get_property_ptr_ptr(zval *object, zval *member, int type,
        zip_prop_handler *hnd = NULL;
 
        if (Z_TYPE_P(member) != IS_STRING) {
-               ZVAL_STR(&tmp_member, zval_get_string_func(member));
-               member = &tmp_member;
-               cache_slot = NULL;
-               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;
+               cache_slot = NULL;
        }
 
        obj = Z_ZIP_P(object);
@@ -907,12 +908,13 @@ static zval *php_zip_read_property(zval *object, zval *member, int type, void **
        zip_prop_handler *hnd = NULL;
 
        if (Z_TYPE_P(member) != IS_STRING) {
-               ZVAL_STR(&tmp_member, zval_get_string_func(member));
-               member = &tmp_member;
-               cache_slot = NULL;
-               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;
+               cache_slot = NULL;
        }
 
        obj = Z_ZIP_P(object);
@@ -946,12 +948,13 @@ static int php_zip_has_property(zval *object, zval *member, int type, void **cac
        int retval = 0;
 
        if (Z_TYPE_P(member) != IS_STRING) {
-               ZVAL_STR(&tmp_member, zval_get_string_func(member));
-               member = &tmp_member;
-               cache_slot = NULL;
-               if (EG(exception)) {
+               zend_string *str = zval_try_get_string_func(member);
+               if (UNEXPECTED(!str)) {
                        return 0;
                }
+               ZVAL_STR(&tmp_member, str);
+               member = &tmp_member;
+               cache_slot = NULL;
        }
 
        obj = Z_ZIP_P(object);