]> granicus.if.org Git - php/commitdiff
Use zend_string_release_ex() instread of zend_string_release() in places, where we...
authorDmitry Stogov <dmitry@zend.com>
Mon, 28 May 2018 13:27:12 +0000 (16:27 +0300)
committerDmitry Stogov <dmitry@zend.com>
Mon, 28 May 2018 13:27:12 +0000 (16:27 +0300)
180 files changed:
Zend/zend.c
Zend/zend_API.c
Zend/zend_ast.c
Zend/zend_builtin_functions.c
Zend/zend_closures.c
Zend/zend_compile.c
Zend/zend_compile.h
Zend/zend_constants.c
Zend/zend_exceptions.c
Zend/zend_execute.c
Zend/zend_execute_API.c
Zend/zend_hash.c
Zend/zend_highlight.c
Zend/zend_inheritance.c
Zend/zend_ini.c
Zend/zend_ini_parser.y
Zend/zend_language_parser.y
Zend/zend_language_scanner.c
Zend/zend_language_scanner.l
Zend/zend_list.c
Zend/zend_object_handlers.c
Zend/zend_objects.c
Zend/zend_opcode.c
Zend/zend_operators.c
Zend/zend_operators.h
Zend/zend_smart_str.h
Zend/zend_stream.c
Zend/zend_string.h
Zend/zend_variables.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h
ext/com_dotnet/com_handlers.c
ext/com_dotnet/com_typeinfo.c
ext/com_dotnet/com_wrapper.c
ext/curl/interface.c
ext/dba/dba.c
ext/dom/attr.c
ext/dom/characterdata.c
ext/dom/document.c
ext/dom/node.c
ext/dom/php_dom.c
ext/dom/processinginstruction.c
ext/dom/xpath.c
ext/exif/exif.c
ext/fileinfo/libmagic/funcs.c
ext/fileinfo/libmagic/softmagic.c
ext/filter/logical_filters.c
ext/gd/gd.c
ext/gmp/gmp.c
ext/hash/hash.c
ext/iconv/iconv.c
ext/interbase/ibase_events.c
ext/intl/converter/converter.c
ext/intl/dateformat/dateformat_create.cpp
ext/intl/intl_error.c
ext/intl/locale/locale_methods.c
ext/intl/msgformat/msgformat_helpers.cpp
ext/json/json_parser.tab.c
ext/json/json_parser.tab.h
ext/json/json_parser.y
ext/ldap/ldap.c
ext/mbstring/mb_gpc.c
ext/mbstring/mbstring.c
ext/mysqli/mysqli.c
ext/mysqli/mysqli_nonapi.c
ext/mysqlnd/mysqlnd_auth.c
ext/mysqlnd/mysqlnd_connection.c
ext/mysqlnd/mysqlnd_net.c
ext/mysqlnd/mysqlnd_result_meta.c
ext/mysqlnd/mysqlnd_vio.c
ext/oci8/oci8_interface.c
ext/oci8/oci8_statement.c
ext/opcache/Optimizer/block_pass.c
ext/opcache/Optimizer/compact_literals.c
ext/opcache/Optimizer/compact_vars.c
ext/opcache/Optimizer/pass1_5.c
ext/opcache/Optimizer/sccp.c
ext/opcache/Optimizer/zend_func_info.c
ext/opcache/Optimizer/zend_inference.c
ext/opcache/ZendAccelerator.c
ext/opcache/zend_accelerator_util_funcs.c
ext/opcache/zend_file_cache.c
ext/opcache/zend_persist.c
ext/opcache/zend_persist_calc.c
ext/openssl/openssl.c
ext/openssl/xp_ssl.c
ext/pcntl/pcntl.c
ext/pcre/php_pcre.c
ext/pdo/pdo_dbh.c
ext/pdo/pdo_sql_parser.c
ext/pdo/pdo_sql_parser.re
ext/pdo/pdo_stmt.c
ext/pdo_firebird/firebird_driver.c
ext/pdo_mysql/mysql_driver.c
ext/pdo_pgsql/pgsql_driver.c
ext/pdo_sqlite/sqlite_driver.c
ext/phar/func_interceptors.c
ext/phar/phar.c
ext/phar/phar_object.c
ext/phar/stream.c
ext/phar/tar.c
ext/phar/util.c
ext/phar/zip.c
ext/readline/readline.c
ext/readline/readline_cli.c
ext/reflection/php_reflection.c
ext/session/mod_files.c
ext/session/mod_mm.c
ext/session/session.c
ext/simplexml/simplexml.c
ext/snmp/snmp.c
ext/soap/php_encoding.c
ext/soap/php_http.c
ext/soap/php_packet_soap.c
ext/soap/soap.c
ext/sockets/sockets.c
ext/spl/php_spl.c
ext/spl/spl_array.c
ext/spl/spl_directory.c
ext/spl/spl_dllist.c
ext/spl/spl_heap.c
ext/spl/spl_iterators.c
ext/spl/spl_observer.c
ext/sqlite3/sqlite3.c
ext/standard/array.c
ext/standard/assert.c
ext/standard/basic_functions.c
ext/standard/browscap.c
ext/standard/exec.c
ext/standard/file.c
ext/standard/fsock.c
ext/standard/ftp_fopen_wrapper.c
ext/standard/head.c
ext/standard/http_fopen_wrapper.c
ext/standard/image.c
ext/standard/incomplete_class.c
ext/standard/info.c
ext/standard/mail.c
ext/standard/math.c
ext/standard/password.c
ext/standard/php_incomplete_class.h
ext/standard/proc_open.c
ext/standard/random.c
ext/standard/streamsfuncs.c
ext/standard/string.c
ext/standard/url.c
ext/standard/url_scanner_ex.c
ext/standard/url_scanner_ex.re
ext/standard/user_filters.c
ext/standard/var.c
ext/standard/var_unserializer.c
ext/standard/var_unserializer.re
ext/tidy/tidy.c
ext/wddx/wddx.c
ext/xml/xml.c
ext/xmlreader/php_xmlreader.c
ext/xmlrpc/xmlrpc-epi-php.c
ext/xsl/xsltprocessor.c
ext/zip/php_zip.c
ext/zip/zip_stream.c
ext/zlib/zlib.c
main/SAPI.c
main/fastcgi.c
main/fopen_wrappers.c
main/main.c
main/network.c
main/output.c
main/php_ini.c
main/php_variables.c
main/rfc1867.c
main/streams/cast.c
main/streams/filter.c
main/streams/plain_wrapper.c
main/streams/streams.c
main/streams/transports.c
sapi/cli/php_cli_server.c
sapi/fpm/fpm/fpm_php.c
sapi/fpm/fpm/fpm_status.c
sapi/litespeed/lsapi_main.c
win32/sendmail.c

index 98d8a803dbede471eb08bbf7fc7f67bf1db713f1..b29d7baa7644318438faba25e42344dac1f6f08d 100644 (file)
@@ -393,7 +393,7 @@ ZEND_API void zend_print_flat_zval_r(zval *expr) /* {{{ */
                        HashTable *properties = NULL;
                        zend_string *class_name = Z_OBJ_HANDLER_P(expr, get_class_name)(Z_OBJ_P(expr));
                        zend_printf("%s Object (", ZSTR_VAL(class_name));
-                       zend_string_release(class_name);
+                       zend_string_release_ex(class_name, 0);
 
                        if (Z_IS_RECURSIVE_P(expr)) {
                                ZEND_PUTS(" *RECURSION*");
@@ -445,7 +445,7 @@ static void zend_print_zval_r_to_buf(smart_str *buf, zval *expr, int indent) /*
 
                                zend_string *class_name = Z_OBJ_HANDLER_P(expr, get_class_name)(Z_OBJ_P(expr));
                                smart_str_appends(buf, ZSTR_VAL(class_name));
-                               zend_string_release(class_name);
+                               zend_string_release_ex(class_name, 0);
 
                                smart_str_appends(buf, " Object\n");
                                if (Z_IS_RECURSIVE_P(expr)) {
@@ -479,7 +479,7 @@ static void zend_print_zval_r_to_buf(smart_str *buf, zval *expr, int indent) /*
                        {
                                zend_string *str = zval_get_string_func(expr);
                                smart_str_append(buf, str);
-                               zend_string_release(str);
+                               zend_string_release_ex(str, 0);
                        }
                        break;
        }
@@ -499,7 +499,7 @@ ZEND_API void zend_print_zval_r(zval *expr, int indent) /* {{{ */
 {
        zend_string *str = zend_print_zval_r_to_str(expr, indent);
        zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
-       zend_string_release(str);
+       zend_string_release_ex(str, 0);
 }
 /* }}} */
 
index 7e1b1116b257538f263d658b5cbf1b24b751da2c..c493a3a67d8b5c9e60e24a68acb9880f813bcd2f 100644 (file)
@@ -1288,10 +1288,10 @@ ZEND_API void object_properties_load(zend_object *object, HashTable *properties)
                                        if (class_name && class_name[0] != '*') {
                                                zend_string *cname = zend_string_init(class_name, strlen(class_name), 0);
                                                EG(fake_scope) = zend_lookup_class(cname);
-                                               zend_string_release(cname);
+                                               zend_string_release_ex(cname, 0);
                                        }
                                        property_info = zend_get_property_info(object->ce, pname, 1);
-                                       zend_string_release(pname);
+                                       zend_string_release_ex(pname, 0);
                                        EG(fake_scope) = prev_scope;
                                } else {
                                        property_info = ZEND_WRONG_PROPERTY_INFO;
@@ -2084,7 +2084,7 @@ ZEND_API zend_module_entry* zend_register_module_ex(zend_module_entry *module) /
        lcname = zend_new_interned_string(lcname);
        if ((module_ptr = zend_hash_add_mem(&module_registry, lcname, module, sizeof(zend_module_entry))) == NULL) {
                zend_error(E_CORE_WARNING, "Module '%s' already loaded", module->name);
-               zend_string_release(lcname);
+               zend_string_release_ex(lcname, 1);
                return NULL;
        }
        module = module_ptr;
@@ -2092,14 +2092,14 @@ ZEND_API zend_module_entry* zend_register_module_ex(zend_module_entry *module) /
 
        if (module->functions && zend_register_functions(NULL, module->functions, NULL, module->type)==FAILURE) {
                zend_hash_del(&module_registry, lcname);
-               zend_string_release(lcname);
+               zend_string_release_ex(lcname, 1);
                EG(current_module) = NULL;
                zend_error(E_CORE_WARNING,"%s: Unable to register functions, unable to load", module->name);
                return NULL;
        }
 
        EG(current_module) = NULL;
-       zend_string_release(lcname);
+       zend_string_release_ex(lcname, 1);
        return module;
 }
 /* }}} */
@@ -2308,7 +2308,7 @@ ZEND_API int zend_register_functions(zend_class_entry *scope, const zend_functio
                if (zend_hash_add_ptr(target_function_table, lowercase_name, reg_function) == NULL) {
                        unload=1;
                        free(reg_function);
-                       zend_string_release(lowercase_name);
+                       zend_string_release_ex(lowercase_name, 1);
                        break;
                }
 
@@ -2398,7 +2398,7 @@ ZEND_API int zend_register_functions(zend_class_entry *scope, const zend_functio
                }
                ptr++;
                count++;
-               zend_string_release(lowercase_name);
+               zend_string_release_ex(lowercase_name, 1);
        }
        if (unload) { /* before unloading, display all remaining bad function in the module */
                if (scope) {
@@ -2750,7 +2750,7 @@ static zend_class_entry *do_register_internal_class(zend_class_entry *orig_class
        lowercase_name = zend_string_tolower_ex(orig_class_entry->name, 1);
        lowercase_name = zend_new_interned_string(lowercase_name);
        zend_hash_update_ptr(CG(class_table), lowercase_name, class_entry);
-       zend_string_release(lowercase_name);
+       zend_string_release_ex(lowercase_name, 1);
        return class_entry;
 }
 /* }}} */
@@ -2818,7 +2818,7 @@ ZEND_API int zend_register_class_alias_ex(const char *name, size_t name_len, zen
 
        lcname = zend_new_interned_string(lcname);
        ce = zend_hash_add_ptr(CG(class_table), lcname, ce);
-       zend_string_release(lcname);
+       zend_string_release_ex(lcname, 0);
        if (ce) {
                ce->refcount++;
                return SUCCESS;
@@ -2901,7 +2901,7 @@ ZEND_API int zend_disable_class(char *class_name, size_t class_name_length) /* {
        key = zend_string_alloc(class_name_length, 0);
        zend_str_tolower_copy(ZSTR_VAL(key), class_name, class_name_length);
        disabled_class = zend_hash_find_ptr(CG(class_table), key);
-       zend_string_release(key);
+       zend_string_release_ex(key, 0);
        if (!disabled_class) {
                return FAILURE;
        }
@@ -3075,10 +3075,10 @@ static zend_always_inline int zend_is_callable_check_func(int check_flags, zval
 
                cname = zend_string_init(Z_STRVAL_P(callable), clen, 0);
                if (!zend_is_callable_check_class(cname, scope, fcc, &strict_class, error)) {
-                       zend_string_release(cname);
+                       zend_string_release_ex(cname, 0);
                        return 0;
                }
-               zend_string_release(cname);
+               zend_string_release_ex(cname, 0);
 
                ftable = &fcc->calling_scope->function_table;
                if (ce_org && !instanceof_function(ce_org, fcc->calling_scope)) {
@@ -3164,7 +3164,7 @@ get_function_via_handler:
                                                if (fcc->function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
                                                        if (fcc->function_handler->type != ZEND_OVERLOADED_FUNCTION &&
                                                                fcc->function_handler->common.function_name) {
-                                                               zend_string_release(fcc->function_handler->common.function_name);
+                                                               zend_string_release_ex(fcc->function_handler->common.function_name, 0);
                                                        }
                                                        zend_free_trampoline(fcc->function_handler);
                                                }
@@ -3264,8 +3264,8 @@ get_function_via_handler:
                        if (error) zend_spprintf(error, 0, "function '%s' does not exist", ZSTR_VAL(mname));
                }
        }
-       zend_string_release(lmname);
-       zend_string_release(mname);
+       zend_string_release_ex(lmname, 0);
+       zend_string_release_ex(mname, 0);
 
        if (fcc->object) {
                fcc->called_scope = fcc->object->ce;
@@ -3389,7 +3389,7 @@ check_func:
                             fcc->function_handler->type == ZEND_OVERLOADED_FUNCTION)) {
                                if (fcc->function_handler->type != ZEND_OVERLOADED_FUNCTION &&
                                        fcc->function_handler->common.function_name) {
-                                       zend_string_release(fcc->function_handler->common.function_name);
+                                       zend_string_release_ex(fcc->function_handler->common.function_name, 0);
                                }
                                zend_free_trampoline(fcc->function_handler);
                        }
@@ -3504,7 +3504,7 @@ ZEND_API zend_bool zend_make_callable(zval *callable, zend_string **callable_nam
                     fcc.function_handler->type == ZEND_OVERLOADED_FUNCTION_TEMPORARY ||
                     fcc.function_handler->type == ZEND_OVERLOADED_FUNCTION)) {
                        if (fcc.function_handler->type != ZEND_OVERLOADED_FUNCTION) {
-                               zend_string_release(fcc.function_handler->common.function_name);
+                               zend_string_release_ex(fcc.function_handler->common.function_name, 0);
                        }
                        zend_free_trampoline(fcc.function_handler);
                }
@@ -4209,7 +4209,7 @@ ZEND_API zval *zend_read_property(zend_class_entry *scope, zval *object, const c
 
        str = zend_string_init(name, name_length, 0);
        value = zend_read_property_ex(scope, object, str, silent, rv);
-       zend_string_release(str);
+       zend_string_release_ex(str, 0);
        return value;
 }
 /* }}} */
index aae042f8206b3494f619e76e1acde641e3361257..245a153308476a63c838651562d27122c5c846ae 100644 (file)
@@ -783,15 +783,15 @@ tail_call:
                        goto tail_call;
                }
        } else if (EXPECTED(ast->kind == ZEND_AST_CONSTANT)) {
-               zend_string_release(zend_ast_get_constant_name(ast));
+               zend_string_release_ex(zend_ast_get_constant_name(ast), 0);
        } else if (EXPECTED(ast->kind >= ZEND_AST_FUNC_DECL)) {
                zend_ast_decl *decl = (zend_ast_decl *) ast;
 
                if (decl->name) {
-                   zend_string_release(decl->name);
+                   zend_string_release_ex(decl->name, 0);
                }
                if (decl->doc_comment) {
-                       zend_string_release(decl->doc_comment);
+                       zend_string_release_ex(decl->doc_comment, 0);
                }
                zend_ast_destroy(decl->child[0]);
                zend_ast_destroy(decl->child[1]);
@@ -1193,7 +1193,7 @@ static ZEND_COLD void zend_ast_export_zval(smart_str *str, zval *zv, int priorit
                case IS_DOUBLE:
                        key = zend_strpprintf(0, "%.*G", (int) EG(precision), Z_DVAL_P(zv));
                        smart_str_appendl(str, ZSTR_VAL(key), ZSTR_LEN(key));
-                       zend_string_release(key);
+                       zend_string_release_ex(key, 0);
                        break;
                case IS_STRING:
                        smart_str_appendc(str, '\'');
index 987d70ab3ef1583481e6ef984d28f8bf71e9ed5d..ac6a460ed668d7239c9fdcf7b5a88eacc87e1b5a 100644 (file)
@@ -371,7 +371,7 @@ ZEND_FUNCTION(gc_enable)
 {
        zend_string *key = zend_string_init("zend.enable_gc", sizeof("zend.enable_gc")-1, 0);
        zend_alter_ini_entry_chars(key, "1", sizeof("1")-1, ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
-       zend_string_release(key);
+       zend_string_release_ex(key, 0);
 }
 /* }}} */
 
@@ -381,7 +381,7 @@ ZEND_FUNCTION(gc_disable)
 {
        zend_string *key = zend_string_init("zend.enable_gc", sizeof("zend.enable_gc")-1, 0);
        zend_alter_ini_entry_chars(key, "0", sizeof("0")-1, ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
-       zend_string_release(key);
+       zend_string_release_ex(key, 0);
 }
 /* }}} */
 
@@ -704,7 +704,7 @@ ZEND_FUNCTION(error_reporting)
                                        p->modified = 1;
                                }
                        } else if (p->orig_value != p->value) {
-                               zend_string_release(p->value);
+                               zend_string_release_ex(p->value, 0);
                        }
 
                        p->value = new_val;
@@ -1194,7 +1194,7 @@ static int same_name(zend_string *key, zend_string *name) /* {{{ */
        }
        lcname = zend_string_tolower(name);
        ret = memcmp(ZSTR_VAL(lcname), ZSTR_VAL(key), ZSTR_LEN(key)) == 0;
-       zend_string_release(lcname);
+       zend_string_release_ex(lcname, 0);
        return ret;
 }
 /* }}} */
@@ -1286,7 +1286,7 @@ ZEND_FUNCTION(method_exists)
 
        lcname = zend_string_tolower(method_name);
        if (zend_hash_exists(&ce->function_table, lcname)) {
-               zend_string_release(lcname);
+               zend_string_release_ex(lcname, 0);
                RETURN_TRUE;
        } else {
                union _zend_function *func = NULL;
@@ -1300,16 +1300,16 @@ ZEND_FUNCTION(method_exists)
                                RETVAL_BOOL(func->common.scope == zend_ce_closure
                                        && zend_string_equals_literal(method_name, ZEND_INVOKE_FUNC_NAME));
 
-                               zend_string_release(lcname);
-                               zend_string_release(func->common.function_name);
+                               zend_string_release_ex(lcname, 0);
+                               zend_string_release_ex(func->common.function_name, 0);
                                zend_free_trampoline(func);
                                return;
                        }
-                       zend_string_release(lcname);
+                       zend_string_release_ex(lcname, 0);
                        RETURN_TRUE;
                }
        }
-       zend_string_release(lcname);
+       zend_string_release_ex(lcname, 0);
        RETURN_FALSE;
 }
 /* }}} */
@@ -1385,7 +1385,7 @@ ZEND_FUNCTION(class_exists)
                }
 
                ce = zend_hash_find_ptr(EG(class_table), lc_name);
-               zend_string_release(lc_name);
+               zend_string_release_ex(lc_name, 0);
        } else {
                ce = zend_lookup_class(class_name);
        }
@@ -1421,7 +1421,7 @@ ZEND_FUNCTION(interface_exists)
                        lc_name = zend_string_tolower(iface_name);
                }
                ce = zend_hash_find_ptr(EG(class_table), lc_name);
-               zend_string_release(lc_name);
+               zend_string_release_ex(lc_name, 0);
                RETURN_BOOL(ce && ce->ce_flags & ZEND_ACC_INTERFACE);
        }
 
@@ -1458,7 +1458,7 @@ ZEND_FUNCTION(trait_exists)
                }
 
                ce = zend_hash_find_ptr(EG(class_table), lc_name);
-               zend_string_release(lc_name);
+               zend_string_release_ex(lc_name, 0);
        } else {
                ce = zend_lookup_class(trait_name);
        }
@@ -1492,7 +1492,7 @@ ZEND_FUNCTION(function_exists)
        }
 
        func = zend_hash_find_ptr(EG(function_table), lcname);
-       zend_string_release(lcname);
+       zend_string_release_ex(lcname, 0);
 
        /*
         * A bit of a hack, but not a bad one: we see if the handler of the function
@@ -1602,7 +1602,7 @@ ZEND_FUNCTION(set_error_handler)
                        zend_string *error_handler_name = zend_get_callable_name(error_handler);
                        zend_error(E_WARNING, "%s() expects the argument (%s) to be a valid callback",
                                           get_active_function_name(), error_handler_name?ZSTR_VAL(error_handler_name):"unknown");
-                       zend_string_release(error_handler_name);
+                       zend_string_release_ex(error_handler_name, 0);
                        return;
                }
        }
@@ -1669,7 +1669,7 @@ ZEND_FUNCTION(set_exception_handler)
                zend_string *exception_handler_name = zend_get_callable_name(exception_handler);
                        zend_error(E_WARNING, "%s() expects the argument (%s) to be a valid callback",
                                           get_active_function_name(), exception_handler_name?ZSTR_VAL(exception_handler_name):"unknown");
-                       zend_string_release(exception_handler_name);
+                       zend_string_release_ex(exception_handler_name, 0);
                        return;
                }
        }
@@ -2356,7 +2356,7 @@ ZEND_FUNCTION(debug_print_backtrace)
                        if (object
                          && !func->common.scope
                          && object->handlers->get_class_name != std_object_handlers.get_class_name) {
-                               zend_string_release(class_name);
+                               zend_string_release_ex(class_name, 0);
                        }
                }
                zend_printf("%s(", function_name);
@@ -2644,7 +2644,7 @@ ZEND_FUNCTION(extension_loaded)
        } else {
                RETVAL_FALSE;
        }
-       zend_string_release(lcname);
+       zend_string_release_ex(lcname, 0);
 }
 /* }}} */
 
@@ -2664,7 +2664,7 @@ ZEND_FUNCTION(get_extension_funcs)
        if (strncasecmp(ZSTR_VAL(extension_name), "zend", sizeof("zend"))) {
                lcname = zend_string_tolower(extension_name);
                module = zend_hash_find_ptr(&module_registry, lcname);
-               zend_string_release(lcname);
+               zend_string_release_ex(lcname, 0);
        } else {
                module = zend_hash_str_find_ptr(&module_registry, "core", sizeof("core") - 1);
        }
index 3de41b5bef631e4dfbb4e69521a069f150a79edb..f69592e223e39bcdcb178d31c6934e4a8bb4c529 100644 (file)
@@ -56,7 +56,7 @@ ZEND_METHOD(Closure, __invoke) /* {{{ */
        }
 
        /* destruct the function also, then - we have allocated it in get_method */
-       zend_string_release(func->internal_function.function_name);
+       zend_string_release_ex(func->internal_function.function_name, 0);
        efree(func);
 #if ZEND_DEBUG
        execute_data->func = NULL;
@@ -202,7 +202,7 @@ ZEND_METHOD(Closure, bind)
                                ce = closure->func.common.scope;
                        } else if ((ce = zend_lookup_class_ex(class_name, NULL, 1)) == NULL) {
                                zend_error(E_WARNING, "Class '%s' not found", ZSTR_VAL(class_name));
-                               zend_string_release(class_name);
+                               zend_string_release_ex(class_name, 0);
                                RETURN_NULL();
                        }
                        zend_tmp_string_release(tmp_class_name);
@@ -540,7 +540,7 @@ static HashTable *zend_closure_get_debug_info(zval *object, int *is_temp) /* {{{
                        }
                        ZVAL_NEW_STR(&info, zend_strpprintf(0, "%s", i >= required ? "<optional>" : "<required>"));
                        zend_hash_update(Z_ARRVAL(val), name, &info);
-                       zend_string_release(name);
+                       zend_string_release_ex(name, 0);
                        arg_info++;
                }
                zend_hash_str_update(debug_info, "parameter", sizeof("parameter")-1, &val);
index 08c530d363d8feacabdf762cdc1b47b5dbbf21ba..64f798f31c96918688cd70c114856d6ba7437e83 100644 (file)
@@ -126,7 +126,7 @@ static void zend_destroy_property_info_internal(zval *zv) /* {{{ */
 {
        zend_property_info *property_info = Z_PTR_P(zv);
 
-       zend_string_release(property_info->name);
+       zend_string_release_ex(property_info->name, 1);
        free(property_info);
 }
 /* }}} */
@@ -300,7 +300,7 @@ static void zend_end_namespace(void) /* {{{ */ {
        FC(in_namespace) = 0;
        zend_reset_import_tables();
        if (FC(current_namespace)) {
-               zend_string_release(FC(current_namespace));
+               zend_string_release_ex(FC(current_namespace), 0);
                FC(current_namespace) = NULL;
        }
 }
@@ -980,7 +980,7 @@ static void label_ptr_dtor(zval *zv) /* {{{ */
 /* }}} */
 
 static void str_dtor(zval *zv)  /* {{{ */ {
-       zend_string_release(Z_STR_P(zv));
+       zend_string_release_ex(Z_STR_P(zv), 0);
 }
 /* }}} */
 
@@ -1785,7 +1785,7 @@ zend_ast *zend_ast_append_str(zend_ast *left_ast, zend_ast *right_ast) /* {{{ */
        ZSTR_VAL(result)[left_len] = '\\';
        memcpy(&ZSTR_VAL(result)[left_len + 1], ZSTR_VAL(right), ZSTR_LEN(right));
        ZSTR_VAL(result)[len] = '\0';
-       zend_string_release(right);
+       zend_string_release_ex(right, 0);
 
        ZVAL_STR(left_zv, result);
        return left_ast;
@@ -2463,7 +2463,7 @@ static zend_op *zend_compile_class_ref(znode *result, zend_ast *name_ast, int th
                        zend_ensure_valid_class_fetch_type(fetch_type);
                }
 
-               zend_string_release(name);
+               zend_string_release_ex(name, 0);
        } else {
                opline = zend_emit_op(result, ZEND_FETCH_CLASS, NULL, &name_node);
                opline->op1.num = ZEND_FETCH_CLASS_DEFAULT | (throw_exception ? ZEND_FETCH_CLASS_EXCEPTION : 0);
@@ -2501,7 +2501,7 @@ static void zend_compile_class_ref_ex(znode *result, zend_ast *name_ast, uint32_
                                result->u.op.num = fetch_type | fetch_flags;
                        }
 
-                       zend_string_release(name);
+                       zend_string_release_ex(name, 0);
                } else {
                        zend_op *opline = zend_emit_op(result, ZEND_FETCH_CLASS, NULL, &name_node);
                        opline->op1.num = ZEND_FETCH_CLASS_DEFAULT | fetch_flags;
@@ -2549,7 +2549,7 @@ static int zend_try_compile_cv(znode *result, zend_ast *ast) /* {{{ */
                result->u.op.var = lookup_cv(CG(active_op_array), name);
 
                if (UNEXPECTED(Z_TYPE_P(zv) != IS_STRING)) {
-                       zend_string_release(name);
+                       zend_string_release_ex(name, 0);
                }
 
                return SUCCESS;
@@ -2896,8 +2896,8 @@ zend_bool zend_is_assign_to_self(zend_ast *var_ast, zend_ast *expr_ast) /* {{{ *
                zend_string *name1 = zval_get_string(zend_ast_get_zval(var_ast->child[0]));
                zend_string *name2 = zval_get_string(zend_ast_get_zval(expr_ast->child[0]));
                zend_bool result = zend_string_equals(name1, name2);
-               zend_string_release(name1);
-               zend_string_release(name2);
+               zend_string_release_ex(name1, 0);
+               zend_string_release_ex(name2, 0);
                return result;
        }
 }
@@ -2925,7 +2925,7 @@ zend_bool zend_list_has_assign_to(zend_ast *list_ast, zend_string *name) /* {{{
                if (var_ast->kind == ZEND_AST_VAR && var_ast->child[0]->kind == ZEND_AST_ZVAL) {
                        zend_string *var_name = zval_get_string(zend_ast_get_zval(var_ast->child[0]));
                        zend_bool result = zend_string_equals(var_name, name);
-                       zend_string_release(var_name);
+                       zend_string_release_ex(var_name, 0);
                        if (result) {
                                return 1;
                        }
@@ -2943,7 +2943,7 @@ zend_bool zend_list_has_assign_to_self(zend_ast *list_ast, zend_ast *expr_ast) /
        if (expr_ast->kind == ZEND_AST_VAR && expr_ast->child[0]->kind == ZEND_AST_ZVAL) {
                zend_string *name = zval_get_string(zend_ast_get_zval(expr_ast->child[0]));
                zend_bool result = zend_list_has_assign_to(list_ast, name);
-               zend_string_release(name);
+               zend_string_release_ex(name, 0);
                return result;
        }
        return 0;
@@ -3462,12 +3462,12 @@ int zend_compile_func_defined(znode *result, zend_ast_list *args) /* {{{ */
 
        name = zval_get_string(zend_ast_get_zval(args->child[0]));
        if (zend_memrchr(ZSTR_VAL(name), '\\', ZSTR_LEN(name)) || zend_memrchr(ZSTR_VAL(name), ':', ZSTR_LEN(name))) {
-               zend_string_release(name);
+               zend_string_release_ex(name, 0);
                return FAILURE;
        }
 
        if (zend_try_ct_eval_const(&result->u.constant, name, 0)) {
-               zend_string_release(name);
+               zend_string_release_ex(name, 0);
                zval_ptr_dtor(&result->u.constant);
                ZVAL_TRUE(&result->u.constant);
                result->op_type = IS_CONST;
@@ -3542,7 +3542,7 @@ static int zend_try_compile_ct_bound_init_user_func(zend_ast *name_ast, uint32_t
         || (fbc->type == ZEND_INTERNAL_FUNCTION && (CG(compiler_options) & ZEND_COMPILE_IGNORE_INTERNAL_FUNCTIONS))
         || (fbc->type == ZEND_USER_FUNCTION && (CG(compiler_options) & ZEND_COMPILE_IGNORE_USER_FUNCTIONS))
        ) {
-               zend_string_release(lcname);
+               zend_string_release_ex(lcname, 0);
                return FAILURE;
        }
 
@@ -3610,11 +3610,11 @@ int zend_compile_func_cufa(znode *result, zend_ast_list *args, zend_string *lcna
                                opline = zend_emit_op(NULL, ZEND_SEND_ARRAY, &arg_node, &len_node);
                                opline->extended_value = Z_LVAL_P(zv);
                                zend_emit_op(result, ZEND_DO_FCALL, NULL, NULL);
-                               zend_string_release(name);
+                               zend_string_release_ex(name, 0);
                                return SUCCESS;
                        }
                }
-               zend_string_release(name);
+               zend_string_release_ex(name, 0);
        }
        zend_compile_expr(&arg_node, args->child[1]);
        zend_emit_op(NULL, ZEND_SEND_ARRAY, &arg_node, NULL);
@@ -3689,7 +3689,7 @@ static int zend_compile_assert(znode *result, zend_ast_list *args, zend_string *
                SET_NODE(opline->result, result);
        } else {
                if (!fbc) {
-                       zend_string_release(name);
+                       zend_string_release_ex(name, 0);
                }
                result->op_type = IS_CONST;
                ZVAL_TRUE(&result->u.constant);
@@ -3716,11 +3716,11 @@ static int zend_compile_func_in_array(znode *result, zend_ast_list *args) /* {{{
                                zend_ast_get_str(name_ast), name_ast->attr, &is_fully_qualified);
 
                        if (!zend_try_ct_eval_const(&value, resolved_name, is_fully_qualified)) {
-                               zend_string_release(resolved_name);
+                               zend_string_release_ex(resolved_name, 0);
                                return FAILURE;
                        }
 
-                       zend_string_release(resolved_name);
+                       zend_string_release_ex(resolved_name, 0);
                        strict = zend_is_true(&value);
                        zval_ptr_dtor(&value);
                } else {
@@ -3887,10 +3887,10 @@ int zend_compile_func_array_slice(znode *result, zend_ast_list *args) /* {{{ */
                        first.op_type = IS_CONST;
                        ZVAL_LONG(&first.u.constant, Z_LVAL_P(zv));
                        zend_emit_op_tmp(result, ZEND_FUNC_GET_ARGS, &first, NULL);
-                       zend_string_release(name);
+                       zend_string_release_ex(name, 0);
                        return SUCCESS;
                }
-               zend_string_release(name);
+               zend_string_release_ex(name, 0);
        }
        return FAILURE;
 }
@@ -4014,7 +4014,7 @@ void zend_compile_call(znode *result, zend_ast *ast, uint32_t type) /* {{{ */
                 || (fbc->type == ZEND_INTERNAL_FUNCTION && (CG(compiler_options) & ZEND_COMPILE_IGNORE_INTERNAL_FUNCTIONS))
                 || (fbc->type == ZEND_USER_FUNCTION && (CG(compiler_options) & ZEND_COMPILE_IGNORE_USER_FUNCTIONS))
                ) {
-                       zend_string_release(lcname);
+                       zend_string_release_ex(lcname, 0);
                        zend_compile_dynamic_call(result, &name_node, args_ast);
                        return;
                }
@@ -4022,7 +4022,7 @@ void zend_compile_call(znode *result, zend_ast *ast, uint32_t type) /* {{{ */
                if (zend_try_compile_special_func(result, lcname,
                                zend_ast_get_list(args_ast), fbc, type) == SUCCESS
                ) {
-                       zend_string_release(lcname);
+                       zend_string_release_ex(lcname, 0);
                        zval_ptr_dtor(&name_node.u.constant);
                        return;
                }
@@ -5279,7 +5279,7 @@ void zend_handle_encoding_declaration(zend_ast *ast) /* {{{ */
                                        }
                                }
 
-                               zend_string_release(encoding_name);
+                               zend_string_release_ex(encoding_name, 0);
                        } else {
                                zend_error(E_COMPILE_WARNING, "declare(encoding=...) ignored because "
                                        "Zend multibyte feature is turned off by settings");
@@ -5874,7 +5874,7 @@ void zend_begin_method_decl(zend_op_array *op_array, zend_string *name, zend_boo
                }
        }
 
-       zend_string_release(lcname);
+       zend_string_release_ex(lcname, 0);
 }
 /* }}} */
 
@@ -5923,7 +5923,7 @@ static void zend_begin_func_decl(znode *result, zend_op_array *op_array, zend_as
                zend_add_literal_string(CG(active_op_array), &key);
        }
 
-       zend_string_release(lcname);
+       zend_string_release_ex(lcname, 0);
 }
 /* }}} */
 
@@ -6601,8 +6601,8 @@ void zend_compile_use(zend_ast *ast) /* {{{ */
                                "is already in use", zend_get_use_type_str(type), ZSTR_VAL(old_name), ZSTR_VAL(new_name));
                }
 
-               zend_string_release(lookup_name);
-               zend_string_release(new_name);
+               zend_string_release_ex(lookup_name, 0);
+               zend_string_release_ex(new_name, 0);
        }
 }
 /* }}} */
@@ -6618,7 +6618,7 @@ void zend_compile_group_use(zend_ast *ast) /* {{{ */
                zval *name_zval = zend_ast_get_zval(use->child[0]);
                zend_string *name = Z_STR_P(name_zval);
                zend_string *compound_ns = zend_concat_names(ZSTR_VAL(ns), ZSTR_LEN(ns), ZSTR_VAL(name), ZSTR_LEN(name));
-               zend_string_release(name);
+               zend_string_release_ex(name, 0);
                ZVAL_STR(name_zval, compound_ns);
                inline_use = zend_ast_create_list(1, ZEND_AST_USE, use);
                inline_use->attr = ast->attr ? ast->attr : use->attr;
@@ -6713,7 +6713,7 @@ void zend_compile_namespace(zend_ast *ast) /* {{{ */
        }
 
        if (FC(current_namespace)) {
-               zend_string_release(FC(current_namespace));
+               zend_string_release_ex(FC(current_namespace), 0);
        }
 
        if (name_ast) {
@@ -6760,7 +6760,7 @@ void zend_compile_halt_compiler(zend_ast *ast) /* {{{ */
                ZSTR_VAL(filename), ZSTR_LEN(filename), 0);
 
        zend_register_long_constant(ZSTR_VAL(name), ZSTR_LEN(name), offset, CONST_CS, 0);
-       zend_string_release(name);
+       zend_string_release_ex(name, 0);
 }
 /* }}} */
 
@@ -7663,14 +7663,14 @@ void zend_compile_const(znode *result, zend_ast *ast) /* {{{ */
                if (last->kind == ZEND_AST_HALT_COMPILER) {
                        result->op_type = IS_CONST;
                        ZVAL_LONG(&result->u.constant, Z_LVAL_P(zend_ast_get_zval(last->child[0])));
-                       zend_string_release(resolved_name);
+                       zend_string_release_ex(resolved_name, 0);
                        return;
                }
        }
 
        if (zend_try_ct_eval_const(&result->u.constant, resolved_name, is_fully_qualified)) {
                result->op_type = IS_CONST;
-               zend_string_release(resolved_name);
+               zend_string_release_ex(resolved_name, 0);
                return;
        }
 
@@ -7725,10 +7725,10 @@ void zend_compile_class_const(znode *result, zend_ast *ast) /* {{{ */
                resolved_name = zend_resolve_class_name_ast(class_ast);
                if (const_ast->kind == ZEND_AST_ZVAL && zend_try_ct_eval_class_const(&result->u.constant, resolved_name, zend_ast_get_str(const_ast))) {
                        result->op_type = IS_CONST;
-                       zend_string_release(resolved_name);
+                       zend_string_release_ex(resolved_name, 0);
                        return;
                }
-               zend_string_release(resolved_name);
+               zend_string_release_ex(resolved_name, 0);
        }
        if (const_ast->kind == ZEND_AST_ZVAL && zend_string_equals_literal_ci(zend_ast_get_str(const_ast), "class")) {
                zend_error_noreturn(E_COMPILE_ERROR,
@@ -7981,7 +7981,7 @@ void zend_compile_const_expr_class_const(zend_ast **ast_ptr) /* {{{ */
                ZSTR_VAL(class_name), ZSTR_LEN(class_name), "::", 2, ZSTR_VAL(const_name), ZSTR_LEN(const_name));
 
        zend_ast_destroy(ast);
-       zend_string_release(class_name);
+       zend_string_release_ex(class_name, 0);
 
        *ast_ptr = zend_ast_create_constant(name, fetch_type);
 }
@@ -8000,7 +8000,7 @@ void zend_compile_const_expr_const(zend_ast **ast_ptr) /* {{{ */
                orig_name, name_ast->attr, &is_fully_qualified);
 
        if (zend_try_ct_eval_const(&result, resolved_name, is_fully_qualified)) {
-               zend_string_release(resolved_name);
+               zend_string_release_ex(resolved_name, 0);
                zend_ast_destroy(ast);
                *ast_ptr = zend_ast_create_zval(&result);
                return;
@@ -8607,11 +8607,11 @@ void zend_eval_const_expr(zend_ast **ast_ptr) /* {{{ */
                                zend_ast_get_str(name_ast), name_ast->attr, &is_fully_qualified);
 
                        if (!zend_try_ct_eval_const(&result, resolved_name, is_fully_qualified)) {
-                               zend_string_release(resolved_name);
+                               zend_string_release_ex(resolved_name, 0);
                                return;
                        }
 
-                       zend_string_release(resolved_name);
+                       zend_string_release_ex(resolved_name, 0);
                        break;
                }
                case ZEND_AST_CLASS_CONST:
@@ -8649,11 +8649,11 @@ void zend_eval_const_expr(zend_ast **ast_ptr) /* {{{ */
                        resolved_name = zend_resolve_class_name_ast(class_ast);
 
                        if (!zend_try_ct_eval_class_const(&result, resolved_name, zend_ast_get_str(name_ast))) {
-                               zend_string_release(resolved_name);
+                               zend_string_release_ex(resolved_name, 0);
                                return;
                        }
 
-                       zend_string_release(resolved_name);
+                       zend_string_release_ex(resolved_name, 0);
                        break;
                }
 
index 623f37eac5b709428bb0f034be8d371f38d6aa5e..532534736d0d4d5b8e273b604e743d9079bb040e 100644 (file)
@@ -45,7 +45,7 @@
 
 #define RESET_DOC_COMMENT() do { \
        if (CG(doc_comment)) { \
-               zend_string_release(CG(doc_comment)); \
+               zend_string_release_ex(CG(doc_comment), 0); \
                CG(doc_comment) = NULL; \
        } \
 } while (0)
index b07901c47057b59696403f4926d644da08ff717d..c64de9839b1edfe3c2aa0d285e98c61184509d5c 100644 (file)
@@ -41,13 +41,17 @@ void free_zend_constant(zval *zv)
 
        if (!(c->flags & CONST_PERSISTENT)) {
                zval_ptr_dtor(&c->value);
+               if (c->name) {
+                       zend_string_release_ex(c->name, 0);
+               }
+               efree(c);
        } else {
                zval_internal_dtor(&c->value);
+               if (c->name) {
+                       zend_string_release_ex(c->name, 1);
+               }
+               free(c);
        }
-       if (c->name) {
-               zend_string_release(c->name);
-       }
-       pefree(c, c->flags & CONST_PERSISTENT);
 }
 
 
@@ -378,7 +382,7 @@ ZEND_API zval *zend_get_constant_ex(zend_string *cname, zend_class_entry *scope,
                        }
                }
 failure:
-               zend_string_release(class_name);
+               zend_string_release_ex(class_name, 0);
                zend_string_efree(constant_name);
                return ret_constant;
        }
index 626932826ebe62068e9fc13f7d647591b81f56a6..02a3b972b2cc9164dab26e85b2b7f952a21cdd7a 100644 (file)
@@ -531,7 +531,7 @@ static void _build_trace_args(zval *arg, smart_str *str) /* {{{ */
                        smart_str_appends(str, "Object(");
                        smart_str_appends(str, ZSTR_VAL(class_name));
                        smart_str_appends(str, "), ");
-                       zend_string_release(class_name);
+                       zend_string_release_ex(class_name, 0);
                        break;
                }
        }
@@ -687,7 +687,7 @@ ZEND_METHOD(exception, __toString)
 
                if ((Z_OBJCE_P(exception) == zend_ce_type_error || Z_OBJCE_P(exception) == zend_ce_argument_count_error) && strstr(ZSTR_VAL(message), ", called in ")) {
                        zend_string *real_message = zend_strpprintf(0, "%s and defined", ZSTR_VAL(message));
-                       zend_string_release(message);
+                       zend_string_release_ex(message, 0);
                        message = real_message;
                }
 
@@ -705,9 +705,9 @@ ZEND_METHOD(exception, __toString)
                                        ZSTR_LEN(prev_str) ? "\n\nNext " : "", ZSTR_VAL(prev_str));
                }
 
-               zend_string_release(prev_str);
-               zend_string_release(message);
-               zend_string_release(file);
+               zend_string_release_ex(prev_str, 0);
+               zend_string_release_ex(message, 0);
+               zend_string_release_ex(file, 0);
                zval_ptr_dtor(&trace);
 
                Z_PROTECT_RECURSION_P(exception);
@@ -716,7 +716,7 @@ ZEND_METHOD(exception, __toString)
                        break;
                }
        }
-       zend_string_release(fname);
+       zend_string_release_ex(fname, 0);
 
        exception = getThis();
        /* Reset apply counts */
@@ -970,8 +970,8 @@ ZEND_API ZEND_COLD void zend_exception_error(zend_object *ex, int severity) /* {
 
                zend_error_helper(E_PARSE, ZSTR_VAL(file), line, "%s", ZSTR_VAL(message));
 
-               zend_string_release(file);
-               zend_string_release(message);
+               zend_string_release_ex(file, 0);
+               zend_string_release_ex(message, 0);
        } else if (instanceof_function(ce_exception, zend_ce_throwable)) {
                zval tmp, rv;
                zend_string *str, *file = NULL;
@@ -1002,7 +1002,7 @@ ZEND_API ZEND_COLD void zend_exception_error(zend_object *ex, int severity) /* {
                                ZSTR_VAL(Z_OBJCE(zv)->name), ZSTR_VAL(ce_exception->name));
 
                        if (file) {
-                               zend_string_release(file);
+                               zend_string_release_ex(file, 0);
                        }
                }
 
@@ -1013,8 +1013,8 @@ ZEND_API ZEND_COLD void zend_exception_error(zend_object *ex, int severity) /* {
                zend_error_va(severity, (file && ZSTR_LEN(file) > 0) ? ZSTR_VAL(file) : NULL, line,
                        "Uncaught %s\n  thrown", ZSTR_VAL(str));
 
-               zend_string_release(str);
-               zend_string_release(file);
+               zend_string_release_ex(str, 0);
+               zend_string_release_ex(file, 0);
        } else {
                zend_error(severity, "Uncaught exception '%s'", ZSTR_VAL(ce_exception->name));
        }
index 99519ddfd568d3c2765b6f16b840716f6f919a1f..354b3f3eba9db5113f45adcb09443a09ddafa21e 100644 (file)
@@ -1397,7 +1397,7 @@ static zend_never_inline void zend_assign_to_string_offset(zval *str, zval *dim,
 
                string_len = ZSTR_LEN(tmp);
                c = (zend_uchar)ZSTR_VAL(tmp)[0];
-               zend_string_release(tmp);
+               zend_string_release_ex(tmp, 0);
        } else {
                string_len = Z_STRLEN_P(value);
                c = (zend_uchar)Z_STRVAL_P(value)[0];
@@ -2774,7 +2774,7 @@ static void cleanup_unfinished_calls(zend_execute_data *execute_data, uint32_t o
                        if (call->func->common.fn_flags & ZEND_ACC_CLOSURE) {
                                zend_object_release(ZEND_CLOSURE_OBJECT(call->func));
                        } else if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
-                               zend_string_release(call->func->common.function_name);
+                               zend_string_release_ex(call->func->common.function_name, 0);
                                zend_free_trampoline(call->func);
                        }
 
@@ -2831,11 +2831,11 @@ static void cleanup_live_vars(zend_execute_data *execute_data, uint32_t op_num,
                                                last--;
                                        }
                                        if (last->opcode == ZEND_ROPE_INIT) {
-                                               zend_string_release(*rope);
+                                               zend_string_release_ex(*rope, 0);
                                        } else {
                                                int j = last->extended_value;
                                                do {
-                                                       zend_string_release(rope[j]);
+                                                       zend_string_release_ex(rope[j], 0);
                                                } while (j--);
                                        }
                                } else if (kind == ZEND_LIVE_SILENCE) {
@@ -2889,7 +2889,7 @@ static zend_never_inline zend_execute_data *zend_init_dynamic_call_string(zend_s
 
                called_scope = zend_fetch_class_by_name(lcname, NULL, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
                if (UNEXPECTED(called_scope == NULL)) {
-                       zend_string_release(lcname);
+                       zend_string_release_ex(lcname, 0);
                        return NULL;
                }
 
@@ -2904,13 +2904,13 @@ static zend_never_inline zend_execute_data *zend_init_dynamic_call_string(zend_s
                        if (EXPECTED(!EG(exception))) {
                                zend_undefined_method(called_scope, mname);
                        }
-                       zend_string_release(lcname);
-                       zend_string_release(mname);
+                       zend_string_release_ex(lcname, 0);
+                       zend_string_release_ex(mname, 0);
                        return NULL;
                }
 
-               zend_string_release(lcname);
-               zend_string_release(mname);
+               zend_string_release_ex(lcname, 0);
+               zend_string_release_ex(mname, 0);
 
                if (UNEXPECTED(!(fbc->common.fn_flags & ZEND_ACC_STATIC))) {
                        zend_non_static_method_call(fbc);
@@ -2927,10 +2927,10 @@ static zend_never_inline zend_execute_data *zend_init_dynamic_call_string(zend_s
                }
                if (UNEXPECTED((func = zend_hash_find(EG(function_table), lcname)) == NULL)) {
                        zend_throw_error(NULL, "Call to undefined function %s()", ZSTR_VAL(function));
-                       zend_string_release(lcname);
+                       zend_string_release_ex(lcname, 0);
                        return NULL;
                }
-               zend_string_release(lcname);
+               zend_string_release_ex(lcname, 0);
 
                fbc = Z_FUNC_P(func);
                called_scope = NULL;
@@ -3111,9 +3111,9 @@ static zend_never_inline zend_op_array* ZEND_FASTCALL zend_include_or_eval(zval
                                                if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path)) {
                                                        zend_op_array *op_array = zend_compile_file(&file_handle, (type==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE));
                                                        zend_destroy_file_handle(&file_handle);
-                                                       zend_string_release(resolved_path);
+                                                       zend_string_release_ex(resolved_path, 0);
                                                        if (Z_TYPE(tmp_inc_filename) != IS_UNDEF) {
-                                                               zend_string_release(Z_STR(tmp_inc_filename));
+                                                               zend_string_release_ex(Z_STR(tmp_inc_filename), 0);
                                                        }
                                                        return op_array;
                                                } else {
@@ -3128,7 +3128,7 @@ already_compiled:
                                                        zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename));
                                                }
                                        }
-                                       zend_string_release(resolved_path);
+                                       zend_string_release_ex(resolved_path, 0);
                                }
                                break;
                        case ZEND_INCLUDE:
@@ -3145,7 +3145,7 @@ already_compiled:
                }
        }
        if (Z_TYPE(tmp_inc_filename) != IS_UNDEF) {
-               zend_string_release(Z_STR(tmp_inc_filename));
+               zend_string_release_ex(Z_STR(tmp_inc_filename), 0);
        }
        return new_op_array;
 }
@@ -3160,7 +3160,7 @@ ZEND_API int ZEND_FASTCALL zend_do_fcall_overloaded(zend_execute_data *call, zva
        if (UNEXPECTED(Z_TYPE(call->This) != IS_OBJECT)) {
                zend_vm_stack_free_args(call);
                if (fbc->type == ZEND_OVERLOADED_FUNCTION_TEMPORARY) {
-                       zend_string_release(fbc->common.function_name);
+                       zend_string_release_ex(fbc->common.function_name, 0);
                }
                efree(fbc);
                zend_vm_stack_free_call_frame(call);
@@ -3180,7 +3180,7 @@ ZEND_API int ZEND_FASTCALL zend_do_fcall_overloaded(zend_execute_data *call, zva
        zend_vm_stack_free_args(call);
 
        if (fbc->type == ZEND_OVERLOADED_FUNCTION_TEMPORARY) {
-               zend_string_release(fbc->common.function_name);
+               zend_string_release_ex(fbc->common.function_name, 0);
        }
        efree(fbc);
 
index ab0459507c8c733f0087537298bc049c1ab86dc1..4f394df21a38e89e946ce01615d2c146c862dce8 100644 (file)
@@ -337,10 +337,10 @@ void shutdown_executor(void) /* {{{ */
                                }
                                zval_ptr_dtor_nogc(&c->value);
                                if (c->name) {
-                                       zend_string_release(c->name);
+                                       zend_string_release_ex(c->name, 0);
                                }
                                efree(c);
-                               zend_string_release(key);
+                               zend_string_release_ex(key, 0);
                        } ZEND_HASH_FOREACH_END_DEL();
                        ZEND_HASH_REVERSE_FOREACH_STR_KEY_VAL(EG(function_table), key, zv) {
                                zend_function *func = Z_PTR_P(zv);
@@ -348,7 +348,7 @@ void shutdown_executor(void) /* {{{ */
                                        break;
                                }
                                destroy_op_array(&func->op_array);
-                               zend_string_release(key);
+                               zend_string_release_ex(key, 0);
                        } ZEND_HASH_FOREACH_END_DEL();
                        ZEND_HASH_REVERSE_FOREACH_STR_KEY_VAL(EG(class_table), key, zv) {
                                zend_class_entry *ce = Z_PTR_P(zv);
@@ -356,7 +356,7 @@ void shutdown_executor(void) /* {{{ */
                                        break;
                                }
                                destroy_zend_class(zv);
-                               zend_string_release(key);
+                               zend_string_release_ex(key, 0);
                        } ZEND_HASH_FOREACH_END_DEL();
                }
 
@@ -684,7 +684,7 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache) /
                                        = zend_get_callable_name_ex(&fci->function_name, fci->object);
                                zend_error(E_WARNING, "Invalid callback %s, %s", ZSTR_VAL(callable_name), error);
                                efree(error);
-                               zend_string_release(callable_name);
+                               zend_string_release_ex(callable_name, 0);
                        }
                        if (EG(current_execute_data) == &dummy_execute_data) {
                                EG(current_execute_data) = dummy_execute_data.prev_execute_data;
@@ -829,7 +829,7 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache) /
                zend_vm_stack_free_args(call);
 
                if (func->type == ZEND_OVERLOADED_FUNCTION_TEMPORARY) {
-                       zend_string_release(func->common.function_name);
+                       zend_string_release_ex(func->common.function_name, 0);
                }
                efree(func);
 
@@ -885,7 +885,7 @@ ZEND_API zend_class_entry *zend_lookup_class_ex(zend_string *name, const zval *k
        zv = zend_hash_find(EG(class_table), lc_name);
        if (zv) {
                if (!key) {
-                       zend_string_release(lc_name);
+                       zend_string_release_ex(lc_name, 0);
                }
                return (zend_class_entry*)Z_PTR_P(zv);
        }
@@ -895,7 +895,7 @@ ZEND_API zend_class_entry *zend_lookup_class_ex(zend_string *name, const zval *k
        */
        if (!use_autoload || zend_is_compiling()) {
                if (!key) {
-                       zend_string_release(lc_name);
+                       zend_string_release_ex(lc_name, 0);
                }
                return NULL;
        }
@@ -906,7 +906,7 @@ ZEND_API zend_class_entry *zend_lookup_class_ex(zend_string *name, const zval *k
                        EG(autoload_func) = (zend_function*)Z_PTR_P(zv);
                } else {
                        if (!key) {
-                               zend_string_release(lc_name);
+                               zend_string_release_ex(lc_name, 0);
                        }
                        return NULL;
                }
@@ -915,7 +915,7 @@ ZEND_API zend_class_entry *zend_lookup_class_ex(zend_string *name, const zval *k
 
        /* Verify class name before passing it to __autoload() */
        if (!key && strspn(ZSTR_VAL(name), "0123456789_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377\\") != ZSTR_LEN(name)) {
-               zend_string_release(lc_name);
+               zend_string_release_ex(lc_name, 0);
                return NULL;
        }
 
@@ -926,7 +926,7 @@ ZEND_API zend_class_entry *zend_lookup_class_ex(zend_string *name, const zval *k
 
        if (zend_hash_add_empty_element(EG(in_autoload), lc_name) == NULL) {
                if (!key) {
-                       zend_string_release(lc_name);
+                       zend_string_release_ex(lc_name, 0);
                }
                return NULL;
        }
@@ -965,7 +965,7 @@ ZEND_API zend_class_entry *zend_lookup_class_ex(zend_string *name, const zval *k
        zval_ptr_dtor(&local_retval);
 
        if (!key) {
-               zend_string_release(lc_name);
+               zend_string_release_ex(lc_name, 0);
        }
        return ce;
 }
index 817254774ccc6db73656e4e1b7ace9d143fd077f..14eda992a8e36a9ef5ad727562d86edb9e2eff4d 100644 (file)
@@ -1456,7 +1456,7 @@ ZEND_API void ZEND_FASTCALL zend_array_destroy(HashTable *ht)
                        do {
                                i_zval_ptr_dtor(&p->val ZEND_FILE_LINE_CC);
                                if (EXPECTED(p->key)) {
-                                       zend_string_release(p->key);
+                                       zend_string_release_ex(p->key, 0);
                                }
                        } while (++p != end);
                } else {
@@ -1464,7 +1464,7 @@ ZEND_API void ZEND_FASTCALL zend_array_destroy(HashTable *ht)
                                if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF)) {
                                        i_zval_ptr_dtor(&p->val ZEND_FILE_LINE_CC);
                                        if (EXPECTED(p->key)) {
-                                               zend_string_release(p->key);
+                                               zend_string_release_ex(p->key, 0);
                                        }
                                }
                        } while (++p != end);
index 0df5b98c583733644590448ae4b18b11c068938a..2f4737952e62619fb8cec2e79a5878f9d9474de6 100644 (file)
@@ -156,7 +156,7 @@ ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini
                                case T_DOC_COMMENT:
                                        break;
                                default:
-                                       zend_string_release(Z_STR(token));
+                                       zend_string_release_ex(Z_STR(token), 0);
                                        break;
                        }
                }
@@ -219,7 +219,7 @@ ZEND_API void zend_strip(void)
                                        break;
 
                                default:
-                                       zend_string_release(Z_STR(token));
+                                       zend_string_release_ex(Z_STR(token), 0);
                                        break;
                        }
                }
index 8af706a1d03718deb4cf1b6aa41c092d7efe0a75..4fa0f51e4c21937bca88661addf37a0663ae9d80 100644 (file)
@@ -1158,7 +1158,7 @@ static void zend_add_magic_methods(zend_class_entry* ce, zend_string* mname, zen
                        ce->constructor = fe;
                        fe->common.fn_flags |= ZEND_ACC_CTOR;
                }
-               zend_string_release(lowercase_name);
+               zend_string_release_ex(lowercase_name, 0);
        }
 }
 /* }}} */
@@ -1288,7 +1288,7 @@ static int zend_traits_copy_functions(zend_string *fnname, zend_function *fn, ze
 
                                lcname = zend_string_tolower(alias->alias);
                                zend_add_trait_method(ce, ZSTR_VAL(alias->alias), lcname, &fn_copy, overriden);
-                               zend_string_release(lcname);
+                               zend_string_release_ex(lcname, 0);
 
                                /* Record the trait from which this alias was resolved. */
                                if (!alias->trait_method->ce) {
@@ -1380,7 +1380,7 @@ static void zend_traits_init_trait_structures(zend_class_entry *ce) /* {{{ */
                                lcname = zend_string_tolower(cur_method_ref->method_name);
                                method_exists = zend_hash_exists(&cur_method_ref->ce->function_table,
                                                                                                 lcname);
-                               zend_string_release(lcname);
+                               zend_string_release_ex(lcname, 0);
                                if (!method_exists) {
                                        zend_error_noreturn(E_COMPILE_ERROR,
                                                           "A precedence rule was defined for %s::%s but this method does not exist",
@@ -1414,7 +1414,7 @@ static void zend_traits_init_trait_structures(zend_class_entry *ce) /* {{{ */
                                                                   ZSTR_VAL(cur_precedence->trait_method->ce->name));
                                        }
 
-                                       zend_string_release(class_name);
+                                       zend_string_release_ex(class_name, 0);
                                        j++;
                                }
                        }
@@ -1438,7 +1438,7 @@ static void zend_traits_init_trait_structures(zend_class_entry *ce) /* {{{ */
                                lcname = zend_string_tolower(cur_method_ref->method_name);
                                method_exists = zend_hash_exists(&cur_method_ref->ce->function_table,
                                                lcname);
-                               zend_string_release(lcname);
+                               zend_string_release_ex(lcname, 0);
 
                                if (!method_exists) {
                                        zend_error_noreturn(E_COMPILE_ERROR, "An alias was defined for %s::%s but this method does not exist", ZSTR_VAL(cur_method_ref->ce->name), ZSTR_VAL(cur_method_ref->method_name));
@@ -1465,10 +1465,10 @@ static void zend_traits_compile_exclude_table(HashTable* exclude_table, zend_tra
                                        zend_string *lcname =
                                                zend_string_tolower(precedences[i]->trait_method->method_name);
                                        if (zend_hash_add_empty_element(exclude_table, lcname) == NULL) {
-                                               zend_string_release(lcname);
+                                               zend_string_release_ex(lcname, 0);
                                                zend_error_noreturn(E_COMPILE_ERROR, "Failed to evaluate a trait precedence (%s). Method of trait %s was defined to be excluded multiple times", ZSTR_VAL(precedences[i]->trait_method->method_name), ZSTR_VAL(trait->name));
                                        }
-                                       zend_string_release(lcname);
+                                       zend_string_release_ex(lcname, 0);
                                }
                                ++j;
                        }
@@ -1587,9 +1587,9 @@ static void zend_do_traits_property_binding(zend_class_entry *ce) /* {{{ */
                        /* next: check for conflicts with current class */
                        if ((coliding_prop = zend_hash_find_ptr(&ce->properties_info, prop_name)) != NULL) {
                                if (coliding_prop->flags & ZEND_ACC_SHADOW) {
-                                       zend_string_release(coliding_prop->name);
+                                       zend_string_release_ex(coliding_prop->name, 0);
                                        if (coliding_prop->doc_comment) {
-                                               zend_string_release(coliding_prop->doc_comment);
+                                               zend_string_release_ex(coliding_prop->doc_comment, 0);
                     }
                                        zend_hash_del(&ce->properties_info, prop_name);
                                        flags |= ZEND_ACC_CHANGED;
@@ -1643,7 +1643,7 @@ static void zend_do_traits_property_binding(zend_class_entry *ce) /* {{{ */
                                                                ZSTR_VAL(ce->name));
                                        }
 
-                                       zend_string_release(prop_name);
+                                       zend_string_release_ex(prop_name, 0);
                                        continue;
                                }
                        }
@@ -1660,7 +1660,7 @@ static void zend_do_traits_property_binding(zend_class_entry *ce) /* {{{ */
                        zend_declare_property_ex(ce, prop_name,
                                                                         prop_value, flags,
                                                                     doc_comment);
-                       zend_string_release(prop_name);
+                       zend_string_release_ex(prop_name, 0);
                } ZEND_HASH_FOREACH_END();
        }
 }
@@ -1697,12 +1697,12 @@ static void zend_do_check_for_inconsistent_traits_aliasing(zend_class_entry *ce)
                                                cur_alias->trait_method->method_name);
                                        if (zend_hash_exists(&ce->function_table,
                                                                                 lc_method_name)) {
-                                               zend_string_release(lc_method_name);
+                                               zend_string_release_ex(lc_method_name, 0);
                                                zend_error_noreturn(E_COMPILE_ERROR,
                                                                   "The modifiers for the trait alias %s() need to be changed in the same statement in which the alias is defined. Error",
                                                                   ZSTR_VAL(cur_alias->trait_method->method_name));
                                        } else {
-                                               zend_string_release(lc_method_name);
+                                               zend_string_release_ex(lc_method_name, 0);
                                                zend_error_noreturn(E_COMPILE_ERROR,
                                                                   "The modifiers of the trait method %s() are changed, but this method does not exist. Error",
                                                                   ZSTR_VAL(cur_alias->trait_method->method_name));
index 70db810819c4a90478d1b84e2d470243da532a21..7c94eb903d3e401321972581014e553dfdae26f6 100644 (file)
@@ -88,12 +88,12 @@ static void free_ini_entry(zval *zv) /* {{{ */
 {
        zend_ini_entry *entry = (zend_ini_entry*)Z_PTR_P(zv);
 
-       zend_string_release(entry->name);
+       zend_string_release_ex(entry->name, 1);
        if (entry->value) {
                zend_string_release(entry->value);
        }
        if (entry->orig_value) {
-               zend_string_release(entry->orig_value);
+               zend_string_release_ex(entry->orig_value, 1);
        }
        free(entry);
 }
@@ -252,7 +252,7 @@ ZEND_API int zend_register_ini_entries(const zend_ini_entry_def *ini_entry, int
 
                if (zend_hash_add_ptr(directives, p->name, (void*)p) == NULL) {
                        if (p->name) {
-                               zend_string_release(p->name);
+                               zend_string_release_ex(p->name, 1);
                        }
                        zend_unregister_ini_entries(module_number);
                        return FAILURE;
index 0da2622000ceeeef3e5d651bf8513ed91b175469..4a2c45741660804c16f83f4549f1cdedd14a3292 100644 (file)
@@ -276,6 +276,16 @@ ZEND_API int zend_parse_ini_string(char *str, zend_bool unbuffered_errors, int s
 }
 /* }}} */
 
+/* {{{ zval_ini_dtor()
+*/
+static int zval_ini_dtor(zval *zv)
+{
+       if (Z_TYPE_P(zv) == IS_STRING) {
+               zend_string_release(Z_STR_P(zv));
+       }
+}
+/* }}} */
+
 %}
 
 %expect 0
@@ -300,7 +310,7 @@ ZEND_API int zend_parse_ini_string(char *str, zend_bool unbuffered_errors, int s
 %left '|' '&' '^'
 %right '~' '!'
 
-%destructor { zval_ptr_dtor(&$$); } TC_RAW TC_CONSTANT TC_NUMBER TC_STRING TC_WHITESPACE TC_LABEL TC_OFFSET TC_VARNAME BOOL_TRUE BOOL_FALSE NULL_NULL
+%destructor { zval_ini_dtor(&$$); } TC_RAW TC_CONSTANT TC_NUMBER TC_STRING TC_WHITESPACE TC_LABEL TC_OFFSET TC_VARNAME BOOL_TRUE BOOL_FALSE NULL_NULL
 
 %%
 
@@ -323,7 +333,7 @@ statement:
 #endif
                        ZEND_INI_PARSER_CB(&$1, &$3, NULL, ZEND_INI_PARSER_ENTRY, ZEND_INI_PARSER_ARG);
                        zend_string_release(Z_STR($1));
-                       zval_ptr_dtor(&$3);
+                       zval_ini_dtor(&$3);
                }
        |       TC_OFFSET option_offset ']' '=' string_or_value {
 #if DEBUG_CFG_PARSER
@@ -331,12 +341,8 @@ statement:
 #endif
                        ZEND_INI_PARSER_CB(&$1, &$5, &$2, ZEND_INI_PARSER_POP_ENTRY, ZEND_INI_PARSER_ARG);
                        zend_string_release(Z_STR($1));
-                       if (Z_TYPE($2) == IS_STRING) {
-                               zend_string_release(Z_STR($2));
-                       } else {
-                               zval_dtor(&$2);
-                       }
-                       zval_ptr_dtor(&$5);
+                       zval_ini_dtor(&$2);
+                       zval_ini_dtor(&$5);
                }
        |       TC_LABEL        { ZEND_INI_PARSER_CB(&$1, NULL, NULL, ZEND_INI_PARSER_ENTRY, ZEND_INI_PARSER_ARG); zend_string_release(Z_STR($1)); }
        |       END_OF_LINE
index 30b262b95707530ca669e39c4821e2c9bd4c1380..2776426feb104b61aac75f409bb8afc3f925ff1d 100644 (file)
@@ -50,7 +50,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
 }
 
 %destructor { zend_ast_destroy($$); } <ast>
-%destructor { if ($$) zend_string_release($$); } <str>
+%destructor { if ($$) zend_string_release_ex($$, 0); } <str>
 
 %left T_INCLUDE T_INCLUDE_ONCE T_EVAL T_REQUIRE T_REQUIRE_ONCE
 %left ','
index f9a316ac230dd1b1681abe09ac3ae3a91e5272fd..65995f0f35a23f7a6134b5a8db1566089251d410 100644 (file)
@@ -562,7 +562,7 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle)
        }
 
        zend_set_compiled_filename(compiled_filename);
-       zend_string_release(compiled_filename);
+       zend_string_release_ex(compiled_filename, 0);
 
        if (CG(start_lineno)) {
                CG(zend_lineno) = CG(start_lineno);
@@ -670,7 +670,7 @@ zend_op_array *compile_filename(int type, zval *filename)
                zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path);
 
                if (opened_path) {
-                       zend_string_release(opened_path);
+                       zend_string_release_ex(opened_path, 0);
                }
        }
        zend_destroy_file_handle(&file_handle);
@@ -720,7 +720,7 @@ ZEND_API int zend_prepare_string_for_scanning(zval *str, char *filename)
 
        new_compiled_filename = zend_string_init(filename, strlen(filename), 0);
        zend_set_compiled_filename(new_compiled_filename);
-       zend_string_release(new_compiled_filename);
+       zend_string_release_ex(new_compiled_filename, 0);
        CG(zend_lineno) = 1;
        CG(increment_lineno) = 0;
        RESET_DOC_COMMENT();
index fb4b7386e5b74f9b7ee576260a8baafd5f29bbe8..e1182d25e09cb62e33c2d5e3d421226d2378b101 100644 (file)
@@ -560,7 +560,7 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle)
        }
 
        zend_set_compiled_filename(compiled_filename);
-       zend_string_release(compiled_filename);
+       zend_string_release_ex(compiled_filename, 0);
 
        if (CG(start_lineno)) {
                CG(zend_lineno) = CG(start_lineno);
@@ -668,7 +668,7 @@ zend_op_array *compile_filename(int type, zval *filename)
                zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path);
 
                if (opened_path) {
-                       zend_string_release(opened_path);
+                       zend_string_release_ex(opened_path, 0);
                }
        }
        zend_destroy_file_handle(&file_handle);
@@ -718,7 +718,7 @@ ZEND_API int zend_prepare_string_for_scanning(zval *str, char *filename)
 
        new_compiled_filename = zend_string_init(filename, strlen(filename), 0);
        zend_set_compiled_filename(new_compiled_filename);
-       zend_string_release(new_compiled_filename);
+       zend_string_release_ex(new_compiled_filename, 0);
        CG(zend_lineno) = 1;
        CG(increment_lineno) = 0;
        RESET_DOC_COMMENT();
index 42d3a97b7a44f295a801b6940df94b739e994e29..cf6e1006b47df717e9dfc99ad81d31a427031ca9 100644 (file)
@@ -360,7 +360,7 @@ ZEND_API zend_resource* zend_register_persistent_resource(const char *key, size_
        zend_string *str = zend_string_init(key, key_len, 1);
        zend_resource *ret  = zend_register_persistent_resource_ex(str, rsrc_pointer, rsrc_type);
 
-       zend_string_release(str);
+       zend_string_release_ex(str, 1);
        return ret;
 }
 
index 5b88af597538ea0ce235ac05cc8da3f442ffd08a..07a684780450f97d92bce789c347e16eb0ef3b97 100644 (file)
@@ -456,7 +456,7 @@ ZEND_API int zend_check_property_access(zend_object *zobj, zend_string *prop_inf
                member = zend_string_copy(prop_info_name);
        }
        property_info = zend_get_property_info(zobj->ce, member, 1);
-       zend_string_release(member);
+       zend_string_release_ex(member, 0);
        if (property_info == NULL) {
                /* undefined public property */
                if (class_name && class_name[0] != '*') {
@@ -504,7 +504,7 @@ ZEND_API uint32_t *zend_get_property_guard(zend_object *zobj, zend_string *membe
                     EXPECTED(zend_string_equal_content(str, member)))) {
                        return &Z_PROPERTY_GUARD_P(zv);
                } else if (EXPECTED(Z_PROPERTY_GUARD_P(zv) == 0)) {
-                       zend_string_release(Z_STR_P(zv));
+                       zend_string_release_ex(Z_STR_P(zv), 0);
                        ZVAL_STR_COPY(zv, member);
                        return &Z_PROPERTY_GUARD_P(zv);
                } else {
@@ -513,7 +513,7 @@ ZEND_API uint32_t *zend_get_property_guard(zend_object *zobj, zend_string *membe
                        /* mark pointer as "special" using low bit */
                        zend_hash_add_new_ptr(guards, str,
                                (void*)(((zend_uintptr_t)&Z_PROPERTY_GUARD_P(zv)) | 1));
-                       zend_string_release(Z_STR_P(zv));
+                       zend_string_release_ex(Z_STR_P(zv), 0);
                        ZVAL_ARR(zv, guards);
                }
        } else if (EXPECTED(Z_TYPE_P(zv) == IS_ARRAY)) {
@@ -1282,7 +1282,7 @@ ZEND_API zend_function *zend_std_get_static_method(zend_class_entry *ce, zend_st
                        fbc = ce->constructor;
                } else {
                        if (UNEXPECTED(!key)) {
-                               zend_string_release(lc_function_name);
+                               zend_string_release_ex(lc_function_name, 0);
                        }
                        if (ce->__call &&
                                (object = zend_get_this_object(EG(current_execute_data))) != NULL &&
@@ -1345,7 +1345,7 @@ ZEND_API zend_function *zend_std_get_static_method(zend_class_entry *ce, zend_st
        }
 
        if (UNEXPECTED(!key)) {
-               zend_string_release(lc_function_name);
+               zend_string_release_ex(lc_function_name, 0);
        }
 
        return fbc;
index 47dd658e3611cbe356c82cf7c12bcd617a38ae09..00d124ff24789440b46ab64769930eba43f2a6fa 100644 (file)
@@ -60,7 +60,7 @@ ZEND_API void zend_object_std_dtor(zend_object *object)
        }
        if (UNEXPECTED(object->ce->ce_flags & ZEND_ACC_USE_GUARDS)) {
                if (EXPECTED(Z_TYPE_P(p) == IS_STRING)) {
-                       zend_string_release(Z_STR_P(p));
+                       zend_string_release_ex(Z_STR_P(p), 0);
                } else if (Z_TYPE_P(p) == IS_ARRAY) {
                        HashTable *guards;
 
index 869baae0205da50bed8baa8a1cc1bc11165e1413..ddb78c79244d16227c2140ce46cdad8be89c2a88 100644 (file)
@@ -102,7 +102,7 @@ ZEND_API void destroy_zend_function(zend_function *function)
        } else {
                ZEND_ASSERT(function->type == ZEND_INTERNAL_FUNCTION);
                ZEND_ASSERT(function->common.function_name);
-               zend_string_release(function->common.function_name);
+               zend_string_release_ex(function->common.function_name, 1);
 
                if (function->common.arg_info &&
                    (function->common.fn_flags & (ZEND_ACC_HAS_RETURN_TYPE|ZEND_ACC_HAS_TYPE_HINTS))) {
@@ -115,7 +115,7 @@ ZEND_API void destroy_zend_function(zend_function *function)
                        }
                        for (i = 0 ; i < num_args; i++) {
                                if (ZEND_TYPE_IS_CLASS(arg_info[i].type)) {
-                                       zend_string_release(ZEND_TYPE_NAME(arg_info[i].type));
+                                       zend_string_release_ex(ZEND_TYPE_NAME(arg_info[i].type), 1);
                                }
                        }
                        free(arg_info);
@@ -134,7 +134,7 @@ ZEND_API void zend_function_dtor(zval *zv)
        } else {
                ZEND_ASSERT(function->type == ZEND_INTERNAL_FUNCTION);
                ZEND_ASSERT(function->common.function_name);
-               zend_string_release(function->common.function_name);
+               zend_string_release_ex(function->common.function_name, 1);
 
                if ((function->common.fn_flags & (ZEND_ACC_HAS_RETURN_TYPE|ZEND_ACC_HAS_TYPE_HINTS)) &&
                    !function->common.scope && function->common.arg_info) {
@@ -148,7 +148,7 @@ ZEND_API void zend_function_dtor(zval *zv)
                        }
                        for (i = 0 ; i < num_args; i++) {
                                if (ZEND_TYPE_IS_CLASS(arg_info[i].type)) {
-                                       zend_string_release(ZEND_TYPE_NAME(arg_info[i].type));
+                                       zend_string_release_ex(ZEND_TYPE_NAME(arg_info[i].type), 1);
                                }
                        }
                        free(arg_info);
@@ -192,16 +192,16 @@ void _destroy_zend_class_traits_info(zend_class_entry *ce)
                while (ce->trait_aliases[i]) {
                        if (ce->trait_aliases[i]->trait_method) {
                                if (ce->trait_aliases[i]->trait_method->method_name) {
-                                       zend_string_release(ce->trait_aliases[i]->trait_method->method_name);
+                                       zend_string_release_ex(ce->trait_aliases[i]->trait_method->method_name, 0);
                                }
                                if (ce->trait_aliases[i]->trait_method->class_name) {
-                                       zend_string_release(ce->trait_aliases[i]->trait_method->class_name);
+                                       zend_string_release_ex(ce->trait_aliases[i]->trait_method->class_name, 0);
                                }
                                efree(ce->trait_aliases[i]->trait_method);
                        }
 
                        if (ce->trait_aliases[i]->alias) {
-                               zend_string_release(ce->trait_aliases[i]->alias);
+                               zend_string_release_ex(ce->trait_aliases[i]->alias, 0);
                        }
 
                        efree(ce->trait_aliases[i]);
@@ -215,15 +215,15 @@ void _destroy_zend_class_traits_info(zend_class_entry *ce)
                size_t i = 0;
 
                while (ce->trait_precedences[i]) {
-                       zend_string_release(ce->trait_precedences[i]->trait_method->method_name);
-                       zend_string_release(ce->trait_precedences[i]->trait_method->class_name);
+                       zend_string_release_ex(ce->trait_precedences[i]->trait_method->method_name, 0);
+                       zend_string_release_ex(ce->trait_precedences[i]->trait_method->class_name, 0);
                        efree(ce->trait_precedences[i]->trait_method);
 
                        if (ce->trait_precedences[i]->exclude_from_classes) {
                                size_t j = 0;
                                zend_trait_precedence *cur_precedence = ce->trait_precedences[i];
                                while (cur_precedence->exclude_from_classes[j].class_name) {
-                                       zend_string_release(cur_precedence->exclude_from_classes[j].class_name);
+                                       zend_string_release_ex(cur_precedence->exclude_from_classes[j].class_name, 0);
                                        j++;
                                }
                                efree(ce->trait_precedences[i]->exclude_from_classes);
@@ -268,14 +268,14 @@ ZEND_API void destroy_zend_class(zval *zv)
                        }
                        ZEND_HASH_FOREACH_PTR(&ce->properties_info, prop_info) {
                                if (prop_info->ce == ce || (prop_info->flags & ZEND_ACC_SHADOW)) {
-                                       zend_string_release(prop_info->name);
+                                       zend_string_release_ex(prop_info->name, 0);
                                        if (prop_info->doc_comment) {
-                                               zend_string_release(prop_info->doc_comment);
+                                               zend_string_release_ex(prop_info->doc_comment, 0);
                                        }
                                }
                        } ZEND_HASH_FOREACH_END();
                        zend_hash_destroy(&ce->properties_info);
-                       zend_string_release(ce->name);
+                       zend_string_release_ex(ce->name, 0);
                        zend_hash_destroy(&ce->function_table);
                        if (zend_hash_num_elements(&ce->constants_table)) {
                                zend_class_constant *c;
@@ -284,7 +284,7 @@ ZEND_API void destroy_zend_class(zval *zv)
                                        if (c->ce == ce) {
                                                zval_ptr_dtor_nogc(&c->value);
                                                if (c->doc_comment) {
-                                                       zend_string_release(c->doc_comment);
+                                                       zend_string_release_ex(c->doc_comment, 0);
                                                }
                                        }
                                } ZEND_HASH_FOREACH_END();
@@ -294,7 +294,7 @@ ZEND_API void destroy_zend_class(zval *zv)
                                efree(ce->interfaces);
                        }
                        if (ce->info.user.doc_comment) {
-                               zend_string_release(ce->info.user.doc_comment);
+                               zend_string_release_ex(ce->info.user.doc_comment, 0);
                        }
 
                        _destroy_zend_class_traits_info(ce);
@@ -322,7 +322,7 @@ ZEND_API void destroy_zend_class(zval *zv)
                                free(ce->default_static_members_table);
                        }
                        zend_hash_destroy(&ce->properties_info);
-                       zend_string_release(ce->name);
+                       zend_string_release_ex(ce->name, 1);
 
                        /* TODO: eliminate this loop for classes without functions with arg_info */
                        ZEND_HASH_FOREACH_PTR(&ce->function_table, fn) {
@@ -341,7 +341,7 @@ ZEND_API void destroy_zend_class(zval *zv)
                                        if (c->ce == ce) {
                                                zval_internal_ptr_dtor(&c->value);
                                                if (c->doc_comment) {
-                                                       zend_string_release(c->doc_comment);
+                                                       zend_string_release_ex(c->doc_comment, 1);
                                                }
                                        }
                                        free(c);
@@ -389,7 +389,7 @@ ZEND_API void destroy_op_array(zend_op_array *op_array)
                i = op_array->last_var;
                while (i > 0) {
                        i--;
-                       zend_string_release(op_array->vars[i]);
+                       zend_string_release_ex(op_array->vars[i], 0);
                }
                efree(op_array->vars);
        }
@@ -409,10 +409,10 @@ ZEND_API void destroy_op_array(zend_op_array *op_array)
        efree(op_array->opcodes);
 
        if (op_array->function_name) {
-               zend_string_release(op_array->function_name);
+               zend_string_release_ex(op_array->function_name, 0);
        }
        if (op_array->doc_comment) {
-               zend_string_release(op_array->doc_comment);
+               zend_string_release_ex(op_array->doc_comment, 0);
        }
        if (op_array->live_range) {
                efree(op_array->live_range);
@@ -438,10 +438,10 @@ ZEND_API void destroy_op_array(zend_op_array *op_array)
                }
                for (i = 0 ; i < num_args; i++) {
                        if (arg_info[i].name) {
-                               zend_string_release(arg_info[i].name);
+                               zend_string_release_ex(arg_info[i].name, 0);
                        }
                        if (ZEND_TYPE_IS_CLASS(arg_info[i].type)) {
-                               zend_string_release(ZEND_TYPE_NAME(arg_info[i].type));
+                               zend_string_release_ex(ZEND_TYPE_NAME(arg_info[i].type), 0);
                        }
                }
                efree(arg_info);
index d7c6bbb25a69c690bfadcab78def1df301255de1..d7abf1325445f6e77a9c6b718d627fde157f6956 100644 (file)
@@ -174,7 +174,7 @@ try_again:
                                                zend_error(E_WARNING, "A non-numeric value encountered");
                                        }
                                }
-                               zend_string_release(str);
+                               zend_string_release_ex(str, 0);
                                break;
                        }
                case IS_NULL:
@@ -351,7 +351,7 @@ try_again:
                                } else {
                                        ZVAL_LONG(op, ZEND_STRTOL(ZSTR_VAL(str), NULL, base));
                                }
-                               zend_string_release(str);
+                               zend_string_release_ex(str, 0);
                        }
                        break;
                case IS_ARRAY:
@@ -411,7 +411,7 @@ try_again:
                                zend_string *str = Z_STR_P(op);
 
                                ZVAL_DOUBLE(op, zend_strtod(ZSTR_VAL(str), NULL));
-                               zend_string_release(str);
+                               zend_string_release_ex(str, 0);
                        }
                        break;
                case IS_ARRAY:
@@ -483,7 +483,7 @@ try_again:
                                } else {
                                        ZVAL_TRUE(op);
                                }
-                               zend_string_release(str);
+                               zend_string_release_ex(str, 0);
                        }
                        break;
                case IS_ARRAY:
@@ -1418,7 +1418,7 @@ ZEND_API int ZEND_FASTCALL bitwise_or_function(zval *result, zval *op1, zval *op
                        if (EXPECTED(Z_STRLEN_P(op1) == Z_STRLEN_P(op2)) && Z_STRLEN_P(op1) == 1) {
                                zend_uchar or = (zend_uchar) (*Z_STRVAL_P(op1) | *Z_STRVAL_P(op2));
                                if (result==op1) {
-                                       zend_string_release(Z_STR_P(result));
+                                       zend_string_release_ex(Z_STR_P(result), 0);
                                }
                                ZVAL_INTERNED_STR(result, ZSTR_CHAR(or));
                                return SUCCESS;
@@ -1436,7 +1436,7 @@ ZEND_API int ZEND_FASTCALL bitwise_or_function(zval *result, zval *op1, zval *op
                }
                memcpy(ZSTR_VAL(str) + i, Z_STRVAL_P(longer) + i, Z_STRLEN_P(longer) - i + 1);
                if (result==op1) {
-                       zend_string_release(Z_STR_P(result));
+                       zend_string_release_ex(Z_STR_P(result), 0);
                }
                ZVAL_NEW_STR(result, str);
                return SUCCESS;
@@ -1496,7 +1496,7 @@ ZEND_API int ZEND_FASTCALL bitwise_and_function(zval *result, zval *op1, zval *o
                        if (EXPECTED(Z_STRLEN_P(op1) == Z_STRLEN_P(op2)) && Z_STRLEN_P(op1) == 1) {
                                zend_uchar and = (zend_uchar) (*Z_STRVAL_P(op1) & *Z_STRVAL_P(op2));
                                if (result==op1) {
-                                       zend_string_release(Z_STR_P(result));
+                                       zend_string_release_ex(Z_STR_P(result), 0);
                                }
                                ZVAL_INTERNED_STR(result, ZSTR_CHAR(and));
                                return SUCCESS;
@@ -1514,7 +1514,7 @@ ZEND_API int ZEND_FASTCALL bitwise_and_function(zval *result, zval *op1, zval *o
                }
                ZSTR_VAL(str)[i] = 0;
                if (result==op1) {
-                       zend_string_release(Z_STR_P(result));
+                       zend_string_release_ex(Z_STR_P(result), 0);
                }
                ZVAL_NEW_STR(result, str);
                return SUCCESS;
@@ -1574,7 +1574,7 @@ ZEND_API int ZEND_FASTCALL bitwise_xor_function(zval *result, zval *op1, zval *o
                        if (EXPECTED(Z_STRLEN_P(op1) == Z_STRLEN_P(op2)) && Z_STRLEN_P(op1) == 1) {
                                zend_uchar xor = (zend_uchar) (*Z_STRVAL_P(op1) ^ *Z_STRVAL_P(op2));
                                if (result==op1) {
-                                       zend_string_release(Z_STR_P(result));
+                                       zend_string_release_ex(Z_STR_P(result), 0);
                                }
                                ZVAL_INTERNED_STR(result, ZSTR_CHAR(xor));
                                return SUCCESS;
@@ -1592,7 +1592,7 @@ ZEND_API int ZEND_FASTCALL bitwise_xor_function(zval *result, zval *op1, zval *o
                }
                ZSTR_VAL(str)[i] = 0;
                if (result==op1) {
-                       zend_string_release(Z_STR_P(result));
+                       zend_string_release_ex(Z_STR_P(result), 0);
                }
                ZVAL_NEW_STR(result, str);
                return SUCCESS;
@@ -2301,7 +2301,7 @@ static void ZEND_FASTCALL increment_string(zval *str) /* {{{ */
        int ch;
 
        if (Z_STRLEN_P(str) == 0) {
-               zend_string_release(Z_STR_P(str));
+               zend_string_release_ex(Z_STR_P(str), 0);
                ZVAL_INTERNED_STR(str, ZSTR_CHAR('1'));
                return;
        }
@@ -2395,7 +2395,7 @@ try_again:
 
                                switch (is_numeric_string(Z_STRVAL_P(op1), Z_STRLEN_P(op1), &lval, &dval, 0)) {
                                        case IS_LONG:
-                                               zend_string_release(Z_STR_P(op1));
+                                               zend_string_release_ex(Z_STR_P(op1), 0);
                                                if (lval == ZEND_LONG_MAX) {
                                                        /* switch to double */
                                                        double d = (double)lval;
@@ -2405,7 +2405,7 @@ try_again:
                                                }
                                                break;
                                        case IS_DOUBLE:
-                                               zend_string_release(Z_STR_P(op1));
+                                               zend_string_release_ex(Z_STR_P(op1), 0);
                                                ZVAL_DOUBLE(op1, dval+1);
                                                break;
                                        default:
@@ -2463,13 +2463,13 @@ try_again:
                        break;
                case IS_STRING:         /* Like perl we only support string increment */
                        if (Z_STRLEN_P(op1) == 0) { /* consider as 0 */
-                               zend_string_release(Z_STR_P(op1));
+                               zend_string_release_ex(Z_STR_P(op1), 0);
                                ZVAL_LONG(op1, -1);
                                break;
                        }
                        switch (is_numeric_string(Z_STRVAL_P(op1), Z_STRLEN_P(op1), &lval, &dval, 0)) {
                                case IS_LONG:
-                                       zend_string_release(Z_STR_P(op1));
+                                       zend_string_release_ex(Z_STR_P(op1), 0);
                                        if (lval == ZEND_LONG_MIN) {
                                                double d = (double)lval;
                                                ZVAL_DOUBLE(op1, d-1);
@@ -2478,7 +2478,7 @@ try_again:
                                        }
                                        break;
                                case IS_DOUBLE:
-                                       zend_string_release(Z_STR_P(op1));
+                                       zend_string_release_ex(Z_STR_P(op1), 0);
                                        ZVAL_DOUBLE(op1, dval - 1);
                                        break;
                        }
index 17c24ab306d1c5e16b18d9eaf40c349bdb72bce8..b142bc94dd11f67df56d000905e09ac972e73c7e 100644 (file)
@@ -284,7 +284,7 @@ static zend_always_inline zend_string *zval_get_tmp_string(zval *op, zend_string
 }
 static zend_always_inline void zend_tmp_string_release(zend_string *tmp) {
        if (UNEXPECTED(tmp)) {
-               zend_string_release(tmp);
+               zend_string_release_ex(tmp, 0);
        }
 }
 
index 411371ab10123186356ae25ae3b56f3b6cb0ec36..efcc3e12efbfbe4daba163a7c6fbd846c3ad6712 100644 (file)
@@ -41,6 +41,8 @@
        smart_str_append_long_ex((dest), (val), 0)
 #define smart_str_append_unsigned(dest, val) \
        smart_str_append_unsigned_ex((dest), (val), 0)
+#define smart_str_free(dest) \
+       smart_str_free_ex((dest), 0)
 
 BEGIN_EXTERN_C()
 
@@ -69,9 +71,9 @@ do_smart_str_realloc:
        return len;
 }
 
-static zend_always_inline void smart_str_free(smart_str *str) {
+static zend_always_inline void smart_str_free_ex(smart_str *str, zend_bool persistent) {
        if (str->s) {
-               zend_string_release(str->s);
+               zend_string_release_ex(str->s, persistent);
                str->s = NULL;
        }
        str->a = 0;
index e14dc68eddc573f3f1b96afe1aae9f99b43f7f73..849abe80a2b1f4381c6c1cbfb10414dc7583a589 100644 (file)
@@ -313,7 +313,7 @@ ZEND_API void zend_file_handle_dtor(zend_file_handle *fh) /* {{{ */
                        break;
        }
        if (fh->opened_path) {
-               zend_string_release(fh->opened_path);
+               zend_string_release_ex(fh->opened_path, 0);
                fh->opened_path = NULL;
        }
        if (fh->free_filename && fh->filename) {
index d517b740207a86a7586632af62623b02387bd055..78de28f7f49379c0407cae57ef3ccf8a26ba3514 100644 (file)
@@ -281,6 +281,21 @@ static zend_always_inline void zend_string_release(zend_string *s)
        }
 }
 
+static zend_always_inline void zend_string_release_ex(zend_string *s, int persistent)
+{
+       if (!ZSTR_IS_INTERNED(s)) {
+               if (GC_DELREF(s) == 0) {
+                       if (persistent) {
+                               ZEND_ASSERT(GC_FLAGS(s) & IS_STR_PERSISTENT);
+                               free(s);
+                       } else {
+                               ZEND_ASSERT(!(GC_FLAGS(s) & IS_STR_PERSISTENT));
+                               efree(s);
+                       }
+               }
+       }
+}
+
 #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
 ZEND_API zend_bool ZEND_FASTCALL zend_string_equal_val(zend_string *s1, zend_string *s2);
 #else
index 7f0e818fcc73813f9a6d942ea052a3186fd94b22..15df7486512d19289e11decd5d309bed7f73091f 100644 (file)
@@ -72,7 +72,8 @@ static void ZEND_FASTCALL zend_string_destroy(zend_string *str ZEND_FILE_LINE_DC
        CHECK_ZVAL_STRING_REL(str);
        ZEND_ASSERT(!ZSTR_IS_INTERNED(str));
        ZEND_ASSERT(GC_REFCOUNT(str) == 0);
-       pefree(str, UNEXPECTED(GC_FLAGS(str) & IS_STR_PERSISTENT));
+       ZEND_ASSERT(!(GC_FLAGS(str) & IS_STR_PERSISTENT));
+       efree(str);
 }
 
 static void ZEND_FASTCALL zend_reference_destroy(zend_reference *ref ZEND_FILE_LINE_DC)
@@ -112,7 +113,7 @@ ZEND_API void _zval_internal_dtor(zval *zvalue ZEND_FILE_LINE_DC)
        switch (Z_TYPE_P(zvalue)) {
                case IS_STRING:
                        CHECK_ZVAL_STRING_REL(Z_STR_P(zvalue));
-                       zend_string_release(Z_STR_P(zvalue));
+                       zend_string_release_ex(Z_STR_P(zvalue), 1);
                        break;
                case IS_ARRAY:
                case IS_CONSTANT_AST:
index d756e97bc9ccab282c853828754c770921152d2e..e29162fa10d84f305445d813f5e52c7e2ec3f740 100644 (file)
@@ -1368,7 +1368,7 @@ ZEND_VM_HANDLER(40, ZEND_ECHO, CONST|TMPVAR|CV, ANY)
                } else if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
                        GET_OP1_UNDEF_CV(z, BP_VAR_R);
                }
-               zend_string_release(str);
+               zend_string_release_ex(str, 0);
        }
 
        FREE_OP1();
@@ -2760,7 +2760,7 @@ ZEND_VM_HANDLER(53, ZEND_FAST_CONCAT, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
                                        }
                                }
                                ZVAL_STR(EX_VAR(opline->result.var), op2_str);
-                               zend_string_release(op1_str);
+                               zend_string_release_ex(op1_str, 0);
                                break;
                        }
                }
@@ -2772,7 +2772,7 @@ ZEND_VM_HANDLER(53, ZEND_FAST_CONCAT, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
                                        }
                                }
                                ZVAL_STR(EX_VAR(opline->result.var), op1_str);
-                               zend_string_release(op2_str);
+                               zend_string_release_ex(op2_str, 0);
                                break;
                        }
                }
@@ -2781,10 +2781,10 @@ ZEND_VM_HANDLER(53, ZEND_FAST_CONCAT, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
                memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
                ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
                if (OP1_TYPE != IS_CONST) {
-                       zend_string_release(op1_str);
+                       zend_string_release_ex(op1_str, 0);
                }
                if (OP2_TYPE != IS_CONST) {
-                       zend_string_release(op2_str);
+                       zend_string_release_ex(op2_str, 0);
                }
        } while (0);
        FREE_OP1();
@@ -2898,7 +2898,7 @@ ZEND_VM_HANDLER(56, ZEND_ROPE_END, TMP, CONST|TMPVAR|CV, NUM)
                        FREE_OP2();
                        if (UNEXPECTED(EG(exception))) {
                                for (i = 0; i <= opline->extended_value; i++) {
-                                       zend_string_release(rope[i]);
+                                       zend_string_release_ex(rope[i], 0);
                                }
                                ZVAL_UNDEF(EX_VAR(opline->result.var));
                                HANDLE_EXCEPTION();
@@ -2914,7 +2914,7 @@ ZEND_VM_HANDLER(56, ZEND_ROPE_END, TMP, CONST|TMPVAR|CV, NUM)
        for (i = 0; i <= opline->extended_value; i++) {
                memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
                target += ZSTR_LEN(rope[i]);
-               zend_string_release(rope[i]);
+               zend_string_release_ex(rope[i], 0);
        }
        *target = '\0';
 
@@ -3310,7 +3310,7 @@ ZEND_VM_C_LABEL(try_function_name):
                if (UNEXPECTED(EG(exception))) {
                        if (call) {
                                 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
-                                       zend_string_release(call->func->common.function_name);
+                                       zend_string_release_ex(call->func->common.function_name, 0);
                                        zend_free_trampoline(call->func);
                                }
                                zend_vm_stack_free_call_frame(call);
@@ -4517,7 +4517,7 @@ ZEND_VM_C_LABEL(send_again):
                                        if (Z_TYPE(key) == IS_STRING) {
                                                zend_throw_error(NULL,
                                                        "Cannot unpack Traversable with string keys");
-                                               zend_string_release(Z_STR(key));
+                                               zend_string_release_ex(Z_STR(key), 0);
                                                break;
                                        }
 
index 56aadaca3ac0a5451d00b76e2e04c6c072d44ee2..17f3e386d7963e20f7b69e1554018f25d51b4fbf 100644 (file)
@@ -1359,7 +1359,7 @@ send_again:
                                        if (Z_TYPE(key) == IS_STRING) {
                                                zend_throw_error(NULL,
                                                        "Cannot unpack Traversable with string keys");
-                                               zend_string_release(Z_STR(key));
+                                               zend_string_release_ex(Z_STR(key), 0);
                                                break;
                                        }
 
@@ -2143,7 +2143,7 @@ try_function_name:
                if (UNEXPECTED(EG(exception))) {
                        if (call) {
                                 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
-                                       zend_string_release(call->func->common.function_name);
+                                       zend_string_release_ex(call->func->common.function_name, 0);
                                        zend_free_trampoline(call->func);
                                }
                                zend_vm_stack_free_call_frame(call);
@@ -2339,7 +2339,7 @@ try_function_name:
                if (UNEXPECTED(EG(exception))) {
                        if (call) {
                                 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
-                                       zend_string_release(call->func->common.function_name);
+                                       zend_string_release_ex(call->func->common.function_name, 0);
                                        zend_free_trampoline(call->func);
                                }
                                zend_vm_stack_free_call_frame(call);
@@ -2501,7 +2501,7 @@ try_function_name:
                if (UNEXPECTED(EG(exception))) {
                        if (call) {
                                 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
-                                       zend_string_release(call->func->common.function_name);
+                                       zend_string_release_ex(call->func->common.function_name, 0);
                                        zend_free_trampoline(call->func);
                                }
                                zend_vm_stack_free_call_frame(call);
@@ -2585,7 +2585,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_O
                } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
                        GET_OP1_UNDEF_CV(z, BP_VAR_R);
                }
-               zend_string_release(str);
+               zend_string_release_ex(str, 0);
        }
 
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -5113,7 +5113,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CONST_H
                                        }
                                }
                                ZVAL_STR(EX_VAR(opline->result.var), op2_str);
-                               zend_string_release(op1_str);
+                               zend_string_release_ex(op1_str, 0);
                                break;
                        }
                }
@@ -5125,7 +5125,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CONST_H
                                        }
                                }
                                ZVAL_STR(EX_VAR(opline->result.var), op1_str);
-                               zend_string_release(op2_str);
+                               zend_string_release_ex(op2_str, 0);
                                break;
                        }
                }
@@ -5134,10 +5134,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CONST_H
                memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
                ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
                if (IS_CONST != IS_CONST) {
-                       zend_string_release(op1_str);
+                       zend_string_release_ex(op1_str, 0);
                }
                if (IS_CONST != IS_CONST) {
-                       zend_string_release(op2_str);
+                       zend_string_release_ex(op2_str, 0);
                }
        } while (0);
 
@@ -7250,7 +7250,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_
                                        }
                                }
                                ZVAL_STR(EX_VAR(opline->result.var), op2_str);
-                               zend_string_release(op1_str);
+                               zend_string_release_ex(op1_str, 0);
                                break;
                        }
                }
@@ -7262,7 +7262,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_
                                        }
                                }
                                ZVAL_STR(EX_VAR(opline->result.var), op1_str);
-                               zend_string_release(op2_str);
+                               zend_string_release_ex(op2_str, 0);
                                break;
                        }
                }
@@ -7271,10 +7271,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_
                memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
                ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
                if (IS_CONST != IS_CONST) {
-                       zend_string_release(op1_str);
+                       zend_string_release_ex(op1_str, 0);
                }
                if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
-                       zend_string_release(op2_str);
+                       zend_string_release_ex(op2_str, 0);
                }
        } while (0);
 
@@ -10310,7 +10310,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HAND
                                        }
                                }
                                ZVAL_STR(EX_VAR(opline->result.var), op2_str);
-                               zend_string_release(op1_str);
+                               zend_string_release_ex(op1_str, 0);
                                break;
                        }
                }
@@ -10322,7 +10322,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HAND
                                        }
                                }
                                ZVAL_STR(EX_VAR(opline->result.var), op1_str);
-                               zend_string_release(op2_str);
+                               zend_string_release_ex(op2_str, 0);
                                break;
                        }
                }
@@ -10331,10 +10331,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HAND
                memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
                ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
                if (IS_CONST != IS_CONST) {
-                       zend_string_release(op1_str);
+                       zend_string_release_ex(op1_str, 0);
                }
                if (IS_CV != IS_CONST) {
-                       zend_string_release(op2_str);
+                       zend_string_release_ex(op2_str, 0);
                }
        } while (0);
 
@@ -12386,7 +12386,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_
                } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
                        GET_OP1_UNDEF_CV(z, BP_VAR_R);
                }
-               zend_string_release(str);
+               zend_string_release_ex(str, 0);
        }
 
        zval_ptr_dtor_nogc(free_op1);
@@ -13943,7 +13943,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_
                                        }
                                }
                                ZVAL_STR(EX_VAR(opline->result.var), op2_str);
-                               zend_string_release(op1_str);
+                               zend_string_release_ex(op1_str, 0);
                                break;
                        }
                }
@@ -13955,7 +13955,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_
                                        }
                                }
                                ZVAL_STR(EX_VAR(opline->result.var), op1_str);
-                               zend_string_release(op2_str);
+                               zend_string_release_ex(op2_str, 0);
                                break;
                        }
                }
@@ -13964,10 +13964,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_
                memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
                ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
                if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
-                       zend_string_release(op1_str);
+                       zend_string_release_ex(op1_str, 0);
                }
                if (IS_CONST != IS_CONST) {
-                       zend_string_release(op2_str);
+                       zend_string_release_ex(op2_str, 0);
                }
        } while (0);
        zval_ptr_dtor_nogc(free_op1);
@@ -15529,7 +15529,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR
                                        }
                                }
                                ZVAL_STR(EX_VAR(opline->result.var), op2_str);
-                               zend_string_release(op1_str);
+                               zend_string_release_ex(op1_str, 0);
                                break;
                        }
                }
@@ -15541,7 +15541,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR
                                        }
                                }
                                ZVAL_STR(EX_VAR(opline->result.var), op1_str);
-                               zend_string_release(op2_str);
+                               zend_string_release_ex(op2_str, 0);
                                break;
                        }
                }
@@ -15550,10 +15550,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR
                memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
                ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
                if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
-                       zend_string_release(op1_str);
+                       zend_string_release_ex(op1_str, 0);
                }
                if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
-                       zend_string_release(op2_str);
+                       zend_string_release_ex(op2_str, 0);
                }
        } while (0);
        zval_ptr_dtor_nogc(free_op1);
@@ -17380,7 +17380,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HAN
                                        }
                                }
                                ZVAL_STR(EX_VAR(opline->result.var), op2_str);
-                               zend_string_release(op1_str);
+                               zend_string_release_ex(op1_str, 0);
                                break;
                        }
                }
@@ -17392,7 +17392,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HAN
                                        }
                                }
                                ZVAL_STR(EX_VAR(opline->result.var), op1_str);
-                               zend_string_release(op2_str);
+                               zend_string_release_ex(op2_str, 0);
                                break;
                        }
                }
@@ -17401,10 +17401,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HAN
                memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
                ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
                if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
-                       zend_string_release(op1_str);
+                       zend_string_release_ex(op1_str, 0);
                }
                if (IS_CV != IS_CONST) {
-                       zend_string_release(op2_str);
+                       zend_string_release_ex(op2_str, 0);
                }
        } while (0);
        zval_ptr_dtor_nogc(free_op1);
@@ -18743,7 +18743,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CONST_HANDLE
 
                        if (UNEXPECTED(EG(exception))) {
                                for (i = 0; i <= opline->extended_value; i++) {
-                                       zend_string_release(rope[i]);
+                                       zend_string_release_ex(rope[i], 0);
                                }
                                ZVAL_UNDEF(EX_VAR(opline->result.var));
                                HANDLE_EXCEPTION();
@@ -18759,7 +18759,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CONST_HANDLE
        for (i = 0; i <= opline->extended_value; i++) {
                memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
                target += ZSTR_LEN(rope[i]);
-               zend_string_release(rope[i]);
+               zend_string_release_ex(rope[i], 0);
        }
        *target = '\0';
 
@@ -19157,7 +19157,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDL
                        zval_ptr_dtor_nogc(free_op2);
                        if (UNEXPECTED(EG(exception))) {
                                for (i = 0; i <= opline->extended_value; i++) {
-                                       zend_string_release(rope[i]);
+                                       zend_string_release_ex(rope[i], 0);
                                }
                                ZVAL_UNDEF(EX_VAR(opline->result.var));
                                HANDLE_EXCEPTION();
@@ -19173,7 +19173,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDL
        for (i = 0; i <= opline->extended_value; i++) {
                memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
                target += ZSTR_LEN(rope[i]);
-               zend_string_release(rope[i]);
+               zend_string_release_ex(rope[i], 0);
        }
        *target = '\0';
 
@@ -20117,7 +20117,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(Z
 
                        if (UNEXPECTED(EG(exception))) {
                                for (i = 0; i <= opline->extended_value; i++) {
-                                       zend_string_release(rope[i]);
+                                       zend_string_release_ex(rope[i], 0);
                                }
                                ZVAL_UNDEF(EX_VAR(opline->result.var));
                                HANDLE_EXCEPTION();
@@ -20133,7 +20133,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(Z
        for (i = 0; i <= opline->extended_value; i++) {
                memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
                target += ZSTR_LEN(rope[i]);
-               zend_string_release(rope[i]);
+               zend_string_release_ex(rope[i], 0);
        }
        *target = '\0';
 
@@ -36664,7 +36664,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCO
                } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
                        GET_OP1_UNDEF_CV(z, BP_VAR_R);
                }
-               zend_string_release(str);
+               zend_string_release_ex(str, 0);
        }
 
        ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -40877,7 +40877,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HAND
                                        }
                                }
                                ZVAL_STR(EX_VAR(opline->result.var), op2_str);
-                               zend_string_release(op1_str);
+                               zend_string_release_ex(op1_str, 0);
                                break;
                        }
                }
@@ -40889,7 +40889,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HAND
                                        }
                                }
                                ZVAL_STR(EX_VAR(opline->result.var), op1_str);
-                               zend_string_release(op2_str);
+                               zend_string_release_ex(op2_str, 0);
                                break;
                        }
                }
@@ -40898,10 +40898,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HAND
                memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
                ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
                if (IS_CV != IS_CONST) {
-                       zend_string_release(op1_str);
+                       zend_string_release_ex(op1_str, 0);
                }
                if (IS_CONST != IS_CONST) {
-                       zend_string_release(op2_str);
+                       zend_string_release_ex(op2_str, 0);
                }
        } while (0);
 
@@ -44544,7 +44544,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HAN
                                        }
                                }
                                ZVAL_STR(EX_VAR(opline->result.var), op2_str);
-                               zend_string_release(op1_str);
+                               zend_string_release_ex(op1_str, 0);
                                break;
                        }
                }
@@ -44556,7 +44556,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HAN
                                        }
                                }
                                ZVAL_STR(EX_VAR(opline->result.var), op1_str);
-                               zend_string_release(op2_str);
+                               zend_string_release_ex(op2_str, 0);
                                break;
                        }
                }
@@ -44565,10 +44565,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HAN
                memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
                ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
                if (IS_CV != IS_CONST) {
-                       zend_string_release(op1_str);
+                       zend_string_release_ex(op1_str, 0);
                }
                if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
-                       zend_string_release(op2_str);
+                       zend_string_release_ex(op2_str, 0);
                }
        } while (0);
 
@@ -50152,7 +50152,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER
                                        }
                                }
                                ZVAL_STR(EX_VAR(opline->result.var), op2_str);
-                               zend_string_release(op1_str);
+                               zend_string_release_ex(op1_str, 0);
                                break;
                        }
                }
@@ -50164,7 +50164,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER
                                        }
                                }
                                ZVAL_STR(EX_VAR(opline->result.var), op1_str);
-                               zend_string_release(op2_str);
+                               zend_string_release_ex(op2_str, 0);
                                break;
                        }
                }
@@ -50173,10 +50173,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER
                memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
                ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
                if (IS_CV != IS_CONST) {
-                       zend_string_release(op1_str);
+                       zend_string_release_ex(op1_str, 0);
                }
                if (IS_CV != IS_CONST) {
-                       zend_string_release(op2_str);
+                       zend_string_release_ex(op2_str, 0);
                }
        } while (0);
 
index e7843e23e40c6d226be05524c3af13a945edf7b1..28814de09d9d3018ce2cb3a6a23518fdf56a88f7 100644 (file)
@@ -238,7 +238,7 @@ static void function_dtor(zval *zv)
 {
        zend_internal_function *f = (zend_internal_function*)Z_PTR_P(zv);
 
-       zend_string_release(f->function_name);
+       zend_string_release_ex(f->function_name, 0);
        if (f->arg_info) {
                efree(f->arg_info);
        }
index a0e90df9869fe636da2e50b80ead3b99d135f2b3..a5c820f7743a2eb1e526a6ee5bf5ff2bf692aa36 100644 (file)
@@ -201,7 +201,7 @@ PHP_COM_DOTNET_API int php_com_import_typelib(ITypeLib *TL, int mode, int codepa
                                        if (COMG(autoreg_verbose) && !compare_function(&results, &c.value, exists)) {
                                                php_error_docref(NULL, E_WARNING, "Type library constant %s is already defined", c.name);
                                        }
-                                       zend_string_release(c.name);
+                                       zend_string_release_ex(c.name, 1);
                                        ITypeInfo_ReleaseVarDesc(TypeInfo, pVarDesc);
                                        continue;
                                }
index 347a495831533488793a6608445b4bec7ae405ad..5312c20a6cf93471120cb9eeb334a1f524357fab 100644 (file)
@@ -476,7 +476,7 @@ static void generate_dispids(php_dispatchex *disp)
 
                        /* Find the existing id */
                        if ((tmp = zend_hash_find(disp->name_to_dispid, name)) != NULL) {
-                               zend_string_release(name);
+                               zend_string_release_ex(name, 0);
                                continue;
                        }
 
@@ -488,7 +488,7 @@ static void generate_dispids(php_dispatchex *disp)
                        ZVAL_LONG(&tmp2, pid);
                        zend_hash_update(disp->name_to_dispid, name, &tmp2);
 
-                       zend_string_release(name);
+                       zend_string_release_ex(name, 0);
                }
        }
 
@@ -511,7 +511,7 @@ static void generate_dispids(php_dispatchex *disp)
 
                        /* Find the existing id */
                        if ((tmp = zend_hash_find(disp->name_to_dispid, name)) != NULL) {
-                               zend_string_release(name);
+                               zend_string_release_ex(name, 0);
                                continue;
                        }
 
@@ -523,7 +523,7 @@ static void generate_dispids(php_dispatchex *disp)
                        ZVAL_LONG(&tmp2, pid);
                        zend_hash_update(disp->name_to_dispid, name, &tmp2);
 
-                       zend_string_release(name);
+                       zend_string_release_ex(name, 0);
                }
        }
 }
index 13d2075d90dd96827ddc24097723960e715c30e1..4c2f7e52dbfc1e2e18dd78e16e68dd8ffd0cbf52 100644 (file)
@@ -1698,7 +1698,7 @@ static int curl_debug(CURL *cp, curl_infotype type, char *buf, size_t buf_len, v
 
        if (type == CURLINFO_HEADER_OUT) {
                if (ch->header.str) {
-                       zend_string_release(ch->header.str);
+                       zend_string_release_ex(ch->header.str, 0);
                }
                if (buf_len > 0) {
                        ch->header.str = zend_string_init(buf, buf_len, 0);
@@ -2628,7 +2628,7 @@ static int _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue) /* {{{
                                                        }
                                                }
 
-                                               zend_string_release(string_key);
+                                               zend_string_release_ex(string_key, 0);
                                                continue;
                                        }
 
@@ -2649,7 +2649,7 @@ static int _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue) /* {{{
                                                error = (CURLcode)form_error;
                                        }
                                        zend_tmp_string_release(tmp_postval);
-                                       zend_string_release(string_key);
+                                       zend_string_release_ex(string_key, 0);
                                } ZEND_HASH_FOREACH_END();
 
                                SAVE_CURL_ERROR(ch, error);
@@ -2889,7 +2889,7 @@ void _php_curl_cleanup_handle(php_curl *ch)
 {
        smart_str_free(&ch->handlers->write->buf);
        if (ch->header.str) {
-               zend_string_release(ch->header.str);
+               zend_string_release_ex(ch->header.str, 0);
                ch->header.str = NULL;
        }
 
@@ -3274,7 +3274,7 @@ static void _php_curl_close_ex(php_curl *ch)
        zval_ptr_dtor(&ch->handlers->write_header->func_name);
        zval_ptr_dtor(&ch->handlers->std_err);
        if (ch->header.str) {
-               zend_string_release(ch->header.str);
+               zend_string_release_ex(ch->header.str, 0);
        }
 
        zval_ptr_dtor(&ch->handlers->write_header->stream);
index 71b3a35750f743577a505e8b2ad9c3b9284cdfcb..0e3dce4e61803d97f9436842719a67508cb5aa01 100644 (file)
@@ -901,7 +901,7 @@ restart:
                        } else {
                                if (opened_path) {
                                        info->lock.name = pestrndup(ZSTR_VAL(opened_path), ZSTR_LEN(opened_path), persistent);
-                                       zend_string_release(opened_path);
+                                       zend_string_release_ex(opened_path, 0);
                                }
                        }
                }
@@ -915,7 +915,7 @@ restart:
                                }
                                /* now store the name of the lock */
                                info->lock.name = pestrndup(ZSTR_VAL(opened_path), ZSTR_LEN(opened_path), persistent);
-                               zend_string_release(opened_path);
+                               zend_string_release_ex(opened_path, 0);
                        }
                }
                if (!lock_dbf) {
index 13238c9bddcccefafde04f02861f873eb781f5fa..930a2de827a3f1282ea9d4a45f2dd4c4e12d47d4 100644 (file)
@@ -171,7 +171,7 @@ int dom_attr_value_write(dom_object *obj, zval *newval)
 
        xmlNodeSetContentLen((xmlNodePtr) attrp, (xmlChar *) ZSTR_VAL(str), ZSTR_LEN(str) + 1);
 
-       zend_string_release(str);
+       zend_string_release_ex(str, 0);
        return SUCCESS;
 }
 
index 671f4033eec9d4428114068f233921414a1f01ce..bd801733c49193f60627d2661ba9f60ddd4cc476 100644 (file)
@@ -110,7 +110,7 @@ int dom_characterdata_data_write(dom_object *obj, zval *newval)
 
        xmlNodeSetContentLen(nodep, (xmlChar *) ZSTR_VAL(str), ZSTR_LEN(str) + 1);
 
-       zend_string_release(str);
+       zend_string_release_ex(str, 0);
        return SUCCESS;
 }
 
index 2d70338994af35b6110f3cc8a13996492c4b64e2..262a88896e1475feaed0b535a7a3594f3ef363a0 100644 (file)
@@ -353,7 +353,7 @@ int dom_document_encoding_write(dom_object *obj, zval *newval)
                php_error_docref(NULL, E_WARNING, "Invalid Document Encoding");
     }
 
-       zend_string_release(str);
+       zend_string_release_ex(str, 0);
        return SUCCESS;
 }
 
@@ -441,7 +441,7 @@ int dom_document_version_write(dom_object *obj, zval *newval)
 
        docp->version = xmlStrdup((const xmlChar *) ZSTR_VAL(str));
 
-       zend_string_release(str);
+       zend_string_release_ex(str, 0);
        return SUCCESS;
 }
 
@@ -669,7 +669,7 @@ int dom_document_document_uri_write(dom_object *obj, zval *newval)
 
        docp->URL = xmlStrdup((const xmlChar *) ZSTR_VAL(str));
 
-       zend_string_release(str);
+       zend_string_release_ex(str, 0);
        return SUCCESS;
 }
 
index 7d640ff6c5869045f53597d3296ae5e6cc89fb44..3048ecef07351251a572e47d7efd66262136b5b7 100644 (file)
@@ -347,7 +347,7 @@ int dom_node_node_value_write(dom_object *obj, zval *newval)
                        {
                                zend_string *str = zval_get_string(newval);
                                xmlNodeSetContentLen(nodep, (xmlChar *) ZSTR_VAL(str), ZSTR_LEN(str) + 1);
-                               zend_string_release(str);
+                               zend_string_release_ex(str, 0);
                                break;
                        }
                default:
@@ -748,14 +748,14 @@ int dom_node_prefix_write(dom_object *obj, zval *newval)
                                }
 
                                if (ns == NULL) {
-                                       zend_string_release(str);
+                                       zend_string_release_ex(str, 0);
                                        php_dom_throw_error(NAMESPACE_ERR, dom_get_strict_error(obj->document));
                                        return FAILURE;
                                }
 
                                xmlSetNs(nodep, ns);
                        }
-                       zend_string_release(str);
+                       zend_string_release_ex(str, 0);
                        break;
                default:
                        break;
@@ -868,7 +868,7 @@ int dom_node_text_content_write(dom_object *obj, zval *newval)
        /* we have to use xmlNodeAddContent() to get the same behavior as with xmlNewText() */
        xmlNodeSetContent(nodep, (xmlChar *) "");
        xmlNodeAddContent(nodep, (xmlChar *) ZSTR_VAL(str));
-       zend_string_release(str);
+       zend_string_release_ex(str, 0);
 
        return SUCCESS;
 }
index 69da603247db51941c20e30cdc07d161fa044398..61346cd5908051b38deed63976fd70e59055d0b2 100644 (file)
@@ -308,7 +308,7 @@ static void dom_register_prop_handler(HashTable *prop_handler, char *name, size_
        hnd.write_func = write_func ? write_func : dom_write_na;
        str = zend_string_init_interned(name, name_len, 1);
        zend_hash_add_mem(prop_handler, str, &hnd, sizeof(dom_prop_handler));
-       zend_string_release(str);
+       zend_string_release_ex(str, 1);
 }
 /* }}} */
 
@@ -323,7 +323,7 @@ static zval *dom_get_property_ptr_ptr(zval *object, zval *member, int type, void
                retval = std_hnd->get_property_ptr_ptr(object, member, type, cache_slot);
        }
 
-       zend_string_release(member_str);
+       zend_string_release_ex(member_str, 0);
        return retval;
 }
 /* }}} */
@@ -354,7 +354,7 @@ zval *dom_read_property(zval *object, zval *member, int type, void **cache_slot,
                retval = std_hnd->read_property(object, member, type, cache_slot, rv);
        }
 
-       zend_string_release(member_str);
+       zend_string_release_ex(member_str, 0);
        return retval;
 }
 /* }}} */
@@ -376,7 +376,7 @@ void dom_write_property(zval *object, zval *member, zval *value, void **cache_sl
                std_hnd->write_property(object, member, value, cache_slot);
        }
 
-       zend_string_release(member_str);
+       zend_string_release_ex(member_str, 0);
 }
 /* }}} */
 
@@ -409,7 +409,7 @@ static int dom_property_exists(zval *object, zval *member, int check_empty, void
                retval = std_hnd->has_property(object, member, check_empty, cache_slot);
        }
 
-       zend_string_release(member_str);
+       zend_string_release_ex(member_str, 0);
        return retval;
 }
 /* }}} */
@@ -451,7 +451,7 @@ static HashTable* dom_get_debug_info_helper(zval *object, int *is_temp) /* {{{ *
                zend_hash_add(debug_info, string_key, &value);
        } ZEND_HASH_FOREACH_END();
 
-       zend_string_release(object_str);
+       zend_string_release_ex(object_str, 0);
 
        return debug_info;
 }
index dca6c2e8f7e0f73dc4639220175f1b74062aaf0d..f8fde2b807d1e373baf27bb1ae8d4a2a9ee562ce 100644 (file)
@@ -145,7 +145,7 @@ int dom_processinginstruction_data_write(dom_object *obj, zval *newval)
 
        xmlNodeSetContentLen(nodep, (xmlChar *) ZSTR_VAL(str), ZSTR_LEN(str) + 1);
 
-       zend_string_release(str);
+       zend_string_release_ex(str, 0);
        return SUCCESS;
 }
 
index 27d88055d08d3c8ca57346cb5571e632d2fa4569..a63abaf6cde37ad4d1fce17291de3e2ccebc4486 100644 (file)
@@ -221,12 +221,12 @@ static void dom_xpath_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs,
                        } else {
                                zend_string *str = zval_get_string(&retval);
                                valuePush(ctxt, xmlXPathNewString((xmlChar *) ZSTR_VAL(str)));
-                               zend_string_release(str);
+                               zend_string_release_ex(str, 0);
                        }
                        zval_ptr_dtor(&retval);
                }
        }
-       zend_string_release(callable);
+       zend_string_release_ex(callable, 0);
        zval_dtor(&fci.function_name);
        if (fci.param_count > 0) {
                for (i = 0; i < nargs - 1; i++) {
@@ -520,7 +520,7 @@ PHP_FUNCTION(dom_xpath_register_php_functions)
                        zend_string *str = zval_get_string(entry);
                        ZVAL_LONG(&new_string,1);
                        zend_hash_update(intern->registered_phpfunctions, str, &new_string);
-                       zend_string_release(str);
+                       zend_string_release_ex(str, 0);
                } ZEND_HASH_FOREACH_END();
                intern->registerPhpFunctions = 2;
                RETURN_TRUE;
index 3671c892b3490e14a226be2139811d0e12d3ddad..6562e04ba8af6bb287897148c8c08b42cb2cbc97 100644 (file)
@@ -4308,7 +4308,7 @@ static int exif_read_from_impl(image_info_type *ImageInfo, php_stream *stream, i
                        base = php_basename(stream->orig_path, strlen(stream->orig_path), NULL, 0);
                        ImageInfo->FileName = estrndup(ZSTR_VAL(base), ZSTR_LEN(base));
 
-                       zend_string_release(base);
+                       zend_string_release_ex(base, 0);
 
                        /* Store file date/time. */
                        ImageInfo->FileDateTime = st.st_mtime;
index 6e12bf63382b601ac63f04dc583d9810f46deed0..972d8d6c4068ec81664170042d5d9d4cf84fed0a 100644 (file)
@@ -486,7 +486,7 @@ file_replace(struct magic_set *ms, const char *pat, const char *rep)
        repl = zend_string_init(rep, strlen(rep), 0);
        res = php_pcre_replace_impl(pce, NULL, ms->o.buf, strlen(ms->o.buf), repl, -1, &rep_cnt);
 
-       zend_string_release(repl);
+       zend_string_release_ex(repl, 0);
        if (NULL == res) {
                rep_cnt = -1;
                goto out;
@@ -495,7 +495,7 @@ file_replace(struct magic_set *ms, const char *pat, const char *rep)
        strncpy(ms->o.buf, ZSTR_VAL(res), ZSTR_LEN(res));
        ms->o.buf[ZSTR_LEN(res)] = '\0';
 
-       zend_string_release(res);
+       zend_string_release_ex(res, 0);
 
 out:
        (void)setlocale(LC_CTYPE, "");
index d44411525530cdced7f629242b00199aad809efe..816482bc2d6052fafb28089e9aebbdc1c537e2d4 100644 (file)
@@ -441,7 +441,7 @@ check_fmt(struct magic_set *ms, const char *fmt)
                        php_pcre_free_match_data(match_data);
                }
        }
-       zend_string_release(pattern);
+       zend_string_release_ex(pattern, 0);
        (void)setlocale(LC_CTYPE, "");
        return rv;
 }
index 4dec0bba143a61404199754ecf01c5f0e1ffbc06..0fe324268dda11578bdeede3e69c6ef0b5fe0298 100644 (file)
@@ -644,11 +644,10 @@ void php_filter_validate_email(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
 
        sregexp = zend_string_init(regexp, regexp_len, 0);
        re = pcre_get_compiled_regex(sregexp, &capture_count, &preg_options);
+       zend_string_release_ex(sregexp, 0);
        if (!re) {
-               zend_string_release(sregexp);
                RETURN_VALIDATION_FAILED
        }
-       zend_string_release(sregexp);
        match_data = php_pcre_create_match_data(capture_count, re);
        if (!match_data) {
                RETURN_VALIDATION_FAILED
index 95794108993b82bf903a03e3bdb8e212f712e6d2..08e06e29a75eb68e23013c82e0e10c2e901ca1a2 100644 (file)
@@ -2426,7 +2426,7 @@ static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type,
                io_ctx = gdNewDynamicCtxEx(ZSTR_LEN(buff), pstr, 0);
                if (!io_ctx) {
                        pefree(pstr, 1);
-                       zend_string_release(buff);
+                       zend_string_release_ex(buff, 0);
                        php_error_docref(NULL, E_WARNING,"Cannot allocate GD IO context");
                        goto out_err;
                }
@@ -2438,7 +2438,7 @@ static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type,
                }
                io_ctx->gd_free(io_ctx);
                pefree(pstr, 1);
-               zend_string_release(buff);
+               zend_string_release_ex(buff, 0);
        }
        else if (php_stream_can_cast(stream, PHP_STREAM_AS_STDIO)) {
                /* try and force the stream to be FILE* */
@@ -2723,7 +2723,7 @@ static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char
 
                fclose(tmp);
                VCWD_UNLINK((const char *)ZSTR_VAL(path)); /* make sure that the temporary file is removed */
-               zend_string_release(path);
+               zend_string_release_ex(path, 0);
        }
        RETURN_TRUE;
 }
index dc2b649746377328baae93a5ac1f21ce7117f222..1f496e846935518414665befc61455cf2b266a8f 100644 (file)
@@ -585,7 +585,7 @@ static int gmp_serialize(zval *object, unsigned char **buffer, size_t *buf_len,
        PHP_VAR_SERIALIZE_DESTROY(serialize_data);
        *buffer = (unsigned char *) estrndup(ZSTR_VAL(buf.s), ZSTR_LEN(buf.s));
        *buf_len = ZSTR_LEN(buf.s);
-       zend_string_release(buf.s);
+       zend_string_release_ex(buf.s, 0);
 
        return SUCCESS;
 }
index 25d022a6e368b6581b4e2f46cbcbbd76bee5ff47..6819b32c82a9fd1b9e900c802ef5b41cdad6b09d 100644 (file)
@@ -172,7 +172,7 @@ static void php_hash_do_hash(INTERNAL_FUNCTION_PARAMETERS, int isfilename, zend_
 
                php_hash_bin2hex(ZSTR_VAL(hex_digest), (unsigned char *) ZSTR_VAL(digest), ops->digest_size);
                ZSTR_VAL(hex_digest)[2 * ops->digest_size] = 0;
-               zend_string_release(digest);
+               zend_string_release_ex(digest, 0);
                RETURN_NEW_STR(hex_digest);
        }
 }
@@ -307,7 +307,7 @@ static void php_hash_do_hash_hmac(INTERNAL_FUNCTION_PARAMETERS, int isfilename,
 
                php_hash_bin2hex(ZSTR_VAL(hex_digest), (unsigned char *) ZSTR_VAL(digest), ops->digest_size);
                ZSTR_VAL(hex_digest)[2 * ops->digest_size] = 0;
-               zend_string_release(digest);
+               zend_string_release_ex(digest, 0);
                RETURN_NEW_STR(hex_digest);
        }
 }
@@ -561,7 +561,7 @@ PHP_FUNCTION(hash_final)
 
                php_hash_bin2hex(ZSTR_VAL(hex_digest), (unsigned char *) ZSTR_VAL(digest), digest_len);
                ZSTR_VAL(hex_digest)[2 * digest_len] = 0;
-               zend_string_release(digest);
+               zend_string_release_ex(digest, 0);
                RETURN_NEW_STR(hex_digest);
        }
 }
index 34641d882c55c9dd8066bd0ef7f65a632c00878a..7070454433b34253543d4b7631283edae1c9fc51 100644 (file)
@@ -1340,7 +1340,7 @@ static php_iconv_err_t _php_iconv_mime_encode(smart_str *pretval, const char *fn
                                smart_str_appendl(pretval, "?=", sizeof("?=") - 1);
                                char_cnt -= 2;
 
-                               zend_string_release(encoded);
+                               zend_string_release_ex(encoded, 0);
                                encoded = NULL;
                        } break; /* case PHP_ICONV_ENC_SCHEME_BASE64: */
 
@@ -1462,7 +1462,7 @@ out:
                iconv_close(cd_pl);
        }
        if (encoded != NULL) {
-               zend_string_release(encoded);
+               zend_string_release_ex(encoded, 0);
        }
        if (buf != NULL) {
                efree(buf);
@@ -1844,7 +1844,7 @@ static php_iconv_err_t _php_iconv_mime_decode(smart_str *pretval, const char *st
                                                }
 
                                                err = _php_iconv_appendl(pretval, ZSTR_VAL(decoded_text), ZSTR_LEN(decoded_text), cd);
-                                               zend_string_release(decoded_text);
+                                               zend_string_release_ex(decoded_text, 0);
 
                                                if (err != PHP_ICONV_ERR_SUCCESS) {
                                                        if ((mode & PHP_ICONV_MIME_DECODE_CONTINUE_ON_ERROR)) {
@@ -2298,7 +2298,7 @@ PHP_FUNCTION(iconv_mime_encode)
        }
 
        if (tmp_str) {
-               zend_string_release(tmp_str);
+               zend_string_release_ex(tmp_str, 0);
        }
 }
 /* }}} */
@@ -2501,7 +2501,7 @@ PHP_FUNCTION(iconv_set_encoding)
        }
 
        retval = zend_alter_ini_entry(name, charset, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
-       zend_string_release(name);
+       zend_string_release_ex(name, 0);
 
        if (retval == SUCCESS) {
                RETURN_TRUE;
index d1f01f342f221c0456281289663c1a143989e028..b96e0b820adc2b285d806d53230e8448ad960c50 100644 (file)
@@ -320,7 +320,7 @@ PHP_FUNCTION(ibase_set_event_handler)
        if (!zend_is_callable(cb_arg, 0, NULL)) {
                zend_string *cb_name = zend_get_callable_name(cb_arg);
                _php_ibase_module_error("Callback argument %s is not a callable function", ZSTR_VAL(cb_name));
-               zend_string_release(cb_name);
+               zend_string_release_ex(cb_name, 0);
                RETURN_FALSE;
        }
 
index e26173b10aa409e722ca9469081c537c4df87380..3d1d12dacce8fc131640d35e94ba02655ec3676e 100644 (file)
@@ -1061,7 +1061,7 @@ static zend_object *php_converter_clone_object(zval *object) {
 
                err_msg = intl_error_get_message(&oldobj->error);
                zend_throw_exception(NULL, ZSTR_VAL(err_msg), 0);
-               zend_string_release(err_msg);
+               zend_string_release_ex(err_msg, 0);
 
                return retval;
        }
index f08e0ed3f30aa74c8c26771295813d0826c2c36d..b85f10ecc9f4f8f59aa7cb0e12760a845d8e12d0 100644 (file)
@@ -218,7 +218,7 @@ U_CFUNC PHP_METHOD( IntlDateFormatter, __construct )
                if (!EG(exception)) {
                        zend_string *err = intl_error_get_message(NULL);
                        zend_throw_exception(IntlException_ce_ptr, ZSTR_VAL(err), intl_error_get_code(NULL));
-                       zend_string_release(err);
+                       zend_string_release_ex(err, 0);
                }
        }
        zend_restore_error_handling(&error_handling);
index f80eea106a063fcca84906b49144306c4aaa1998..d802eb9c26067bdfa5a750d2c01641f90e300588 100644 (file)
@@ -280,7 +280,7 @@ smart_str intl_parse_error_to_string( UParseError* pe )
                }
                else {
                        smart_str_append( &ret, u8str );
-                       zend_string_release( u8str );
+                       zend_string_release_ex( u8str, 0 );
                }
                smart_str_appends( &ret, "\"" );
                any = 1;
@@ -300,7 +300,7 @@ smart_str intl_parse_error_to_string( UParseError* pe )
                else
                {
                        smart_str_append( &ret, u8str );
-                       zend_string_release( u8str );
+                       zend_string_release_ex( u8str, 0 );
                }
                smart_str_appends( &ret, "\"" );
                any = 1;
index f300fa88ff606a23a8134f98a1c9ace8497a901c..437b9e404dee125711afeffc38e1b8839b5243e1 100644 (file)
@@ -242,9 +242,9 @@ PHP_NAMED_FUNCTION(zif_locale_set_default)
 
        ini_name = zend_string_init(LOCALE_INI_NAME, sizeof(LOCALE_INI_NAME) - 1, 0);
        zend_alter_ini_entry(ini_name, locale_name, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
-       zend_string_release(ini_name);
+       zend_string_release_ex(ini_name, 0);
        if (default_locale != NULL) {
-               zend_string_release(locale_name);
+               zend_string_release_ex(locale_name, 0);
        }
 
        RETURN_TRUE;
@@ -345,7 +345,7 @@ static zend_string* get_icu_value_internal( const char* loc_name , char* tag_nam
                        /* Error in retriving data */
                        *result = 0;
                        if( tag_value ){
-                               zend_string_release( tag_value );
+                               zend_string_release_ex( tag_value, 0 );
                        }
                        if( mod_loc_name ){
                                efree( mod_loc_name);
@@ -358,7 +358,7 @@ static zend_string* get_icu_value_internal( const char* loc_name , char* tag_nam
                /* No value found */
                *result = -1;
                if( tag_value ){
-                       zend_string_release( tag_value );
+                       zend_string_release_ex( tag_value, 0 );
                }
                if( mod_loc_name ){
                        efree( mod_loc_name);
@@ -419,7 +419,7 @@ static void get_icu_value_src_php( char* tag_name, INTERNAL_FUNCTION_PARAMETERS)
        /* No value found */
        if( result == -1 ) {
                if( tag_value){
-                       zend_string_release( tag_value);
+                       zend_string_release_ex( tag_value, 0 );
                }
                RETURN_STRING( empty_result);
        }
@@ -1074,14 +1074,14 @@ static int add_array_entry(const char* loc_name, zval* hash_arr, char* key_name)
 */
                }
                if (key_value) {
-                       zend_string_release(key_value);
+                       zend_string_release_ex(key_value, 0);
                }
        } else {
                if( result == 1 ){
                        add_assoc_str( hash_arr, key_name , key_value);
                        cur_result = 1;
                } else if (key_value) {
-                       zend_string_release(key_value);
+                       zend_string_release_ex(key_value, 0);
                }
        }
 
@@ -1192,7 +1192,7 @@ PHP_FUNCTION(locale_get_all_variants)
                        }
                }
                if( variant ){
-                       zend_string_release( variant );
+                       zend_string_release_ex( variant, 0 );
                }
        }
 
@@ -1308,7 +1308,7 @@ PHP_FUNCTION(locale_filter_matches)
                result = strToMatch( can_lang_tag->val , cur_lang_tag);
                if( result == 0) {
                        efree( cur_lang_tag );
-                       zend_string_release( can_lang_tag );
+                       zend_string_release_ex( can_lang_tag, 0 );
                        RETURN_FALSE;
                }
 
@@ -1316,9 +1316,9 @@ PHP_FUNCTION(locale_filter_matches)
                result = strToMatch( can_loc_range->val , cur_loc_range );
                if( result == 0) {
                        efree( cur_lang_tag );
-                       zend_string_release( can_lang_tag );
+                       zend_string_release_ex( can_lang_tag, 0 );
                        efree( cur_loc_range );
-                       zend_string_release( can_loc_range );
+                       zend_string_release_ex( can_loc_range, 0 );
                        RETURN_FALSE;
                }
 
@@ -1332,10 +1332,10 @@ PHP_FUNCTION(locale_filter_matches)
                                efree( cur_lang_tag );
                                efree( cur_loc_range );
                                if( can_lang_tag){
-                                       zend_string_release( can_lang_tag );
+                                       zend_string_release_ex( can_lang_tag, 0 );
                                }
                                if( can_loc_range){
-                                       zend_string_release( can_loc_range );
+                                       zend_string_release_ex( can_loc_range, 0 );
                                }
                                RETURN_TRUE;
                        }
@@ -1349,10 +1349,10 @@ PHP_FUNCTION(locale_filter_matches)
                        efree( cur_loc_range );
                }
                if( can_lang_tag){
-                       zend_string_release( can_lang_tag );
+                       zend_string_release_ex( can_lang_tag, 0 );
                }
                if( can_loc_range){
-                       zend_string_release( can_loc_range );
+                       zend_string_release_ex( can_loc_range, 0 );
                }
                RETURN_FALSE;
 
@@ -1455,14 +1455,14 @@ static zend_string* lookup_loc_range(const char* loc_range, HashTable* hash_arr,
                        lang_tag = get_icu_value_internal(cur_arr[i*2], LOC_CANONICALIZE_TAG, &result, 0);
                        if(result != 1 || lang_tag == NULL || !lang_tag->val[0]) {
                                if(lang_tag) {
-                                       zend_string_release(lang_tag);
+                                       zend_string_release_ex(lang_tag, 0);
                                }
                                intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR, "lookup_loc_range: unable to canonicalize lang_tag" , 0);
                                LOOKUP_CLEAN_RETURN(NULL);
                        }
                        cur_arr[i*2] = erealloc(cur_arr[i*2], lang_tag->len+1);
                        result = strToMatch(lang_tag->val, cur_arr[i*2]);
-                       zend_string_release(lang_tag);
+                       zend_string_release_ex(lang_tag, 0);
                        if(result == 0) {
                                intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR, "lookup_loc_range: unable to canonicalize lang_tag" , 0);
                                LOOKUP_CLEAN_RETURN(NULL);
@@ -1478,7 +1478,7 @@ static zend_string* lookup_loc_range(const char* loc_range, HashTable* hash_arr,
                        /* Error */
                        intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR, "lookup_loc_range: unable to canonicalize loc_range" , 0 );
                        if(can_loc_range) {
-                               zend_string_release(can_loc_range);
+                               zend_string_release_ex(can_loc_range, 0);
                        }
                        LOOKUP_CLEAN_RETURN(NULL);
                } else {
@@ -1490,7 +1490,7 @@ static zend_string* lookup_loc_range(const char* loc_range, HashTable* hash_arr,
        /* convert to lower and replace hyphens */
        result = strToMatch(loc_range, cur_loc_range);
        if(can_loc_range) {
-               zend_string_release(can_loc_range);
+               zend_string_release_ex(can_loc_range, 0);
        }
        if(result == 0) {
                intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR, "lookup_loc_range: unable to canonicalize lang_tag" , 0);
index 90d60acbd2fd5f4fa46a5d073fad3de513990869..65a00289b515574cd1ad809362907e2f50e16fcf 100644 (file)
@@ -548,7 +548,7 @@ U_CFUNC void umsg_format_helper(MessageFormatter_object *mfo,
                                                        spprintf(&message, 0, "The argument for key '%s' "
                                                                "cannot be used as a date or time", ZSTR_VAL(u8key));
                                                        intl_errors_set(&err, err.code, message, 1);
-                                                       zend_string_release(u8key);
+                                                       zend_string_release_ex(u8key, 0);
                                                        efree(message);
                                                }
                                                continue;
@@ -594,7 +594,7 @@ U_CFUNC void umsg_format_helper(MessageFormatter_object *mfo,
                                                        "is available", ZSTR_VAL(u8key));
                                                intl_errors_set(&err,
                                                        U_ILLEGAL_ARGUMENT_ERROR, message, 1);
-                                               zend_string_release(u8key);
+                                               zend_string_release_ex(u8key, 0);
                                                efree(message);
                                        }
                                }
index 08e3e2b7683fdcc6713ce4ae4d3eeef5548bbfa0..c165a19e53a039270ba8e7116b655d20f60047b0 100644 (file)
@@ -139,8 +139,8 @@ int json_yydebug = 1;
 
 /* In a future release of Bison, this section will be replaced
    by #include "json_parser.tab.h".  */
-#ifndef YY_PHP_JSON_YY_HOME_HUIXINCHEN_OPENSOURCE_TRUNK_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED
-# define YY_PHP_JSON_YY_HOME_HUIXINCHEN_OPENSOURCE_TRUNK_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED
+#ifndef YY_PHP_JSON_YY_HOME_DMITRY_PHP_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED
+# define YY_PHP_JSON_YY_HOME_DMITRY_PHP_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
@@ -201,7 +201,7 @@ typedef union YYSTYPE YYSTYPE;
 
 int php_json_yyparse (php_json_parser *parser);
 
-#endif /* !YY_PHP_JSON_YY_HOME_HUIXINCHEN_OPENSOURCE_TRUNK_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED  */
+#endif /* !YY_PHP_JSON_YY_HOME_DMITRY_PHP_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED  */
 
 /* Copy the second part of user declarations.  */
 
@@ -1140,7 +1140,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, php_json_parser *p
 
     case 25: /* pair  */
 
-      { zend_string_release(((*yyvaluep).pair).key); zval_dtor(&((*yyvaluep).pair).val); }
+      { zend_string_release_ex(((*yyvaluep).pair).key, 0); zval_dtor(&((*yyvaluep).pair).val); }
 
         break;
 
@@ -1885,7 +1885,7 @@ static int php_json_parser_object_update(php_json_parser *parser, zval *object,
                zval zkey;
                if (ZSTR_LEN(key) > 0 && ZSTR_VAL(key)[0] == '\0') {
                        parser->scanner.errcode = PHP_JSON_ERROR_INVALID_PROPERTY_NAME;
-                       zend_string_release(key);
+                       zend_string_release_ex(key, 0);
                        zval_dtor(zvalue);
                        zval_dtor(object);
                        return FAILURE;
@@ -1894,7 +1894,7 @@ static int php_json_parser_object_update(php_json_parser *parser, zval *object,
                zend_std_write_property(object, &zkey, zvalue, NULL);
                Z_TRY_DELREF_P(zvalue);
        }
-       zend_string_release(key);
+       zend_string_release_ex(key, 0);
 
        return SUCCESS;
 }
index 3f126dc9c783a3558d6fdf96325b1e10e1e14e24..4349b7040612d997d2738b8d493c5105b57e2f66 100644 (file)
@@ -30,8 +30,8 @@
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
-#ifndef YY_PHP_JSON_YY_HOME_HUIXINCHEN_OPENSOURCE_TRUNK_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED
-# define YY_PHP_JSON_YY_HOME_HUIXINCHEN_OPENSOURCE_TRUNK_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED
+#ifndef YY_PHP_JSON_YY_HOME_DMITRY_PHP_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED
+# define YY_PHP_JSON_YY_HOME_DMITRY_PHP_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
@@ -92,4 +92,4 @@ typedef union YYSTYPE YYSTYPE;
 
 int php_json_yyparse (php_json_parser *parser);
 
-#endif /* !YY_PHP_JSON_YY_HOME_HUIXINCHEN_OPENSOURCE_TRUNK_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED  */
+#endif /* !YY_PHP_JSON_YY_HOME_DMITRY_PHP_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED  */
index 4c0dfa67d742973bd30e83de4fc4eca94176d3c9..489cec1a5eca659f0632da20f0c400cf21196050 100644 (file)
@@ -75,7 +75,7 @@ int json_yydebug = 1;
 %type <pair> pair
 
 %destructor { zval_dtor(&$$); } <value>
-%destructor { zend_string_release($$.key); zval_dtor(&$$.val); } <pair>
+%destructor { zend_string_release_ex($$.key, 0); zval_dtor(&$$.val); } <pair>
 
 %code {
 static int php_json_yylex(union YYSTYPE *value, php_json_parser *parser);
@@ -277,7 +277,7 @@ static int php_json_parser_object_update(php_json_parser *parser, zval *object,
                zval zkey;
                if (ZSTR_LEN(key) > 0 && ZSTR_VAL(key)[0] == '\0') {
                        parser->scanner.errcode = PHP_JSON_ERROR_INVALID_PROPERTY_NAME;
-                       zend_string_release(key);
+                       zend_string_release_ex(key, 0);
                        zval_dtor(zvalue);
                        zval_dtor(object);
                        return FAILURE;
@@ -286,7 +286,7 @@ static int php_json_parser_object_update(php_json_parser *parser, zval *object,
                zend_std_write_property(object, &zkey, zvalue, NULL);
                Z_TRY_DELREF_P(zvalue);
        }
-       zend_string_release(key);
+       zend_string_release_ex(key, 0);
 
        return SUCCESS;
 }
index 15f7adf571fb31523c02f8e4cabfc191d3575c67..cc2c6a7bd7e11f0535c9e41f0233de27d7162172 100644 (file)
@@ -3759,7 +3759,7 @@ PHP_FUNCTION(ldap_set_rebind_proc)
        if (!zend_is_callable(callback, 0, NULL)) {
                zend_string *callback_name = zend_get_callable_name(callback);
                php_error_docref(NULL, E_WARNING, "Two arguments expected for '%s' to be a valid callback", ZSTR_VAL(callback_name));
-               zend_string_release(callback_name);
+               zend_string_release_ex(callback_name, 0);
                RETURN_FALSE;
        }
 
index 582a29f8657ff5daeb2265d7560ff6eb49ed7417..a77df00e247238f648c6ee5f9b8a42903ed258c3 100644 (file)
@@ -379,7 +379,7 @@ SAPI_POST_HANDLER_FUNC(php_mb_post_handler)
        post_data_str = php_stream_copy_to_mem(SG(request_info).request_body, PHP_STREAM_COPY_ALL, 0);
        detected = _php_mb_encoding_handler_ex(&info, arg, post_data_str ? ZSTR_VAL(post_data_str) : NULL);
        if (post_data_str) {
-               zend_string_release(post_data_str);
+               zend_string_release_ex(post_data_str, 0);
        }
 
        MBSTRG(http_input_identify) = detected;
index 171430f778742792a694041a0baf2a4dfae5f85e..8ed185c76a1913e4790ec36cfd6ef43530e1bdbe 100644 (file)
@@ -1451,7 +1451,7 @@ static PHP_INI_MH(OnUpdate_mbstring_http_output_conv_mimetypes)
 
        if (ZSTR_LEN(tmp) > 0) {
                if (!(re = _php_mb_compile_regex(ZSTR_VAL(tmp)))) {
-                       zend_string_release(tmp);
+                       zend_string_release_ex(tmp, 0);
                        return FAILURE;
                }
        }
@@ -1462,7 +1462,7 @@ static PHP_INI_MH(OnUpdate_mbstring_http_output_conv_mimetypes)
 
        MBSTRG(http_output_conv_mimetypes) = re;
 
-       zend_string_release(tmp);
+       zend_string_release_ex(tmp, 0);
        return SUCCESS;
 }
 /* }}} */
@@ -1624,12 +1624,12 @@ ZEND_TSRMLS_CACHE_UPDATE();
                                        ZEND_ASSERT(orig->type == ZEND_INTERNAL_FUNCTION);
                                        str = zend_string_init_interned(p->save_func, strlen(p->save_func), 1);
                                        zend_hash_add_mem(CG(function_table), str, orig, sizeof(zend_internal_function));
-                                       zend_string_release(str);
+                                       zend_string_release_ex(str, 1);
                                        function_add_ref(orig);
 
                                        str = zend_string_init_interned(p->orig_func, strlen(p->orig_func), 1);
                                        ret = zend_hash_update_mem(CG(function_table), str, func, sizeof(zend_internal_function));
-                                       zend_string_release(str);
+                                       zend_string_release_ex(str, 1);
                                        if (ret == NULL) {
                                                php_error_docref("ref.mbstring", E_WARNING, "mbstring couldn't replace function %s.", p->orig_func);
                                                return FAILURE;
@@ -1792,7 +1792,7 @@ PHP_FUNCTION(mb_language)
                } else {
                        RETVAL_TRUE;
                }
-               zend_string_release(ini_name);
+               zend_string_release_ex(ini_name, 0);
        }
 }
 /* }}} */
@@ -4113,7 +4113,7 @@ static int _php_mbstr_parse_mail_headers(HashTable *ht, const char *str, size_t
 
                                                                zend_hash_update(ht, fld_name, &val);
 
-                                                               zend_string_release(fld_name);
+                                                               zend_string_release_ex(fld_name, 0);
                                                        }
 
                                                        fld_name = fld_val = NULL;
@@ -4161,7 +4161,7 @@ out:
 
                        zend_hash_update(ht, fld_name, &val);
 
-                       zend_string_release(fld_name);
+                       zend_string_release_ex(fld_name, 0);
                }
        }
        return state;
@@ -4231,7 +4231,7 @@ PHP_FUNCTION(mb_send_mail)
                                tmp_headers = zend_string_init(Z_STRVAL_P(headers), Z_STRLEN_P(headers), 0);
                                MAIL_ASCIIZ_CHECK_MBSTRING(ZSTR_VAL(tmp_headers), ZSTR_LEN(tmp_headers));
                                str_headers = php_trim(tmp_headers, NULL, 0, 2);
-                               zend_string_release(tmp_headers);
+                               zend_string_release_ex(tmp_headers, 0);
                                break;
                        case IS_ARRAY:
                                str_headers = php_mail_build_headers(headers);
@@ -4382,7 +4382,7 @@ PHP_FUNCTION(mb_send_mail)
                if (n > 0 && p[n - 1] != '\n') {
                        mbfl_memory_device_strncat(&device, "\n", 1);
                }
-               zend_string_release(str_headers);
+               zend_string_release_ex(str_headers, 0);
        }
 
        if (!zend_hash_str_exists(&ht_headers, "MIME-VERSION", sizeof("MIME-VERSION") - 1)) {
@@ -4427,7 +4427,7 @@ PHP_FUNCTION(mb_send_mail)
        }
 
        if (extra_cmd) {
-               zend_string_release(extra_cmd);
+               zend_string_release_ex(extra_cmd, 0);
        }
 
        if (to_r != to) {
@@ -4442,7 +4442,7 @@ PHP_FUNCTION(mb_send_mail)
        mbfl_memory_device_clear(&device);
        zend_hash_destroy(&ht_headers);
        if (str_headers) {
-               zend_string_release(str_headers);
+               zend_string_release_ex(str_headers, 0);
        }
 }
 
index 0c97ec33e8aab5066ec3a783697e2a9b8dca221f..60d9631d30e0a8bf2cced3a3f569d1861fd46e74 100644 (file)
@@ -185,7 +185,7 @@ void php_clear_stmt_bind(MY_STMT *stmt)
 /* {{{ php_clear_mysql */
 void php_clear_mysql(MY_MYSQL *mysql) {
        if (mysql->hash_key) {
-               zend_string_release(mysql->hash_key);
+               zend_string_release_ex(mysql->hash_key, 0);
                mysql->hash_key = NULL;
        }
        if (!Z_ISUNDEF(mysql->li_read)) {
@@ -372,7 +372,7 @@ void mysqli_add_property(HashTable *h, const char *pname, size_t pname_len, mysq
        p.read_func = (r_func) ? r_func : mysqli_read_na;
        p.write_func = (w_func) ? w_func : mysqli_write_na;
        zend_hash_add_mem(h, p.name, &p, sizeof(mysqli_prop_handler));
-       zend_string_release(p.name);
+       zend_string_release_ex(p.name, 1);
 }
 /* }}} */
 
index 3de335cf2cc017f74553b8a32a153389e99064f6..12b6ad5449100433afdcd428434299db9f17ec48 100644 (file)
@@ -290,7 +290,7 @@ end:
 
 err:
        if (mysql->hash_key) {
-               zend_string_release(mysql->hash_key);
+               zend_string_release_ex(mysql->hash_key, 0);
                mysql->hash_key = NULL;
                mysql->persistent = FALSE;
        }
index c5d610c1ebf350a195bc0b2a3728d209e70b279f..e56ea2038081418577e0ea99bf1e4cd71a93495a 100644 (file)
@@ -734,7 +734,7 @@ mysqlnd_sha256_get_rsa_key(MYSQLND_CONN_DATA * conn,
                                BIO_free(bio);
                                DBG_INF("Successfully loaded");
                                DBG_INF_FMT("Public key:%*.s", ZSTR_LEN(key_str), ZSTR_VAL(key_str));
-                               zend_string_release(key_str);
+                               zend_string_release_ex(key_str, 0);
                        }
                        php_stream_close(stream);
                }
index 1e21e46ed06c8fdce9883bc4aa418541e0157ad1..9f8e1fb5b96f48245440de28e874e1cb00d64394 100644 (file)
@@ -1805,7 +1805,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, set_client_option_2d)(MYSQLND_CONN_DATA * cons
                                if (!conn->options->connect_attr) {
                                        goto oom;
                                }
-                               zend_hash_init(conn->options->connect_attr, 0, NULL, ZVAL_PTR_DTOR, conn->persistent);
+                               zend_hash_init(conn->options->connect_attr, 0, NULL, conn->persistent ? ZVAL_INTERNAL_PTR_DTOR : ZVAL_PTR_DTOR, conn->persistent);
                        }
                        DBG_INF_FMT("Adding [%s][%s]", key, value);
                        {
@@ -1815,7 +1815,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, set_client_option_2d)(MYSQLND_CONN_DATA * cons
                                ZVAL_NEW_STR(&attrz, zend_string_init(value, strlen(value), conn->persistent));
                                GC_MAKE_PERSISTENT_LOCAL(Z_COUNTED(attrz));
                                zend_hash_update(conn->options->connect_attr, str, &attrz);
-                               zend_string_release(str);
+                               zend_string_release_ex(str, 1);
                        }
                        break;
                default:
index afc9839a49d459bd58354b2f54d688c448c05705..6fb9c5fde2dd79d8cf1ae5183a328733e7ac2ec4 100644 (file)
@@ -206,7 +206,7 @@ MYSQLND_METHOD(mysqlnd_net, open_tcp_or_unix)(MYSQLND_NET * const net, const cha
                                                 UNKNOWN_SQLSTATE,
                                                 errstr? ZSTR_VAL(errstr):"Unknown error while connecting");
                if (errstr) {
-                       zend_string_release(errstr);
+                       zend_string_release_ex(errstr, 0);
                }
                DBG_RETURN(NULL);
        }
index 5aa8b0d23dd17bbac1a1f2e9bd60b3a8526b9772..0141cec4f0f1f7a65a0c9e9e9ca953c02d191f2a 100644 (file)
@@ -36,7 +36,7 @@ php_mysqlnd_free_field_metadata(MYSQLND_FIELD *meta)
                meta->root = NULL;
                meta->def = NULL;
                if (meta->sname) {
-                       zend_string_release(meta->sname);
+                       zend_string_release_ex(meta->sname, 0);
                }
        }
 }
index a6a7f5c4d143fd11d14ecff7d0379d734e16f30c..997fbd4d6823d03b7608275b410d924665a6555a 100644 (file)
@@ -196,7 +196,7 @@ MYSQLND_METHOD(mysqlnd_vio, open_tcp_or_unix)(MYSQLND_VIO * const vio, const MYS
                                                 UNKNOWN_SQLSTATE,
                                                 errstr? ZSTR_VAL(errstr):"Unknown error while connecting");
                if (errstr) {
-                       zend_string_release(errstr);
+                       zend_string_release_ex(errstr, 0);
                }
                DBG_RETURN(NULL);
        }
index cd17386b5fe325985f9077640e6da1a01e037f63..ceeaefeb778ef6ed29f3eae6f7cdc3d846dafaa3 100644 (file)
@@ -60,16 +60,16 @@ PHP_FUNCTION(oci_register_taf_callback)
                if (!zend_is_callable(callback, 0, 0)) {
                        callback_name = zend_get_callable_name(callback);
                        php_error_docref(NULL, E_WARNING, "function '%s' is not callable", ZSTR_VAL(callback_name));
-                       zend_string_release(callback_name);
+                       zend_string_release_ex(callback_name, 0);
                        RETURN_FALSE;
                }
 #else
                if (!zend_is_callable(callback, 0, &callback_name)) {
                        php_error_docref(NULL, E_WARNING, "function '%s' is not callable", ZSTR_VAL(callback_name));
-                       zend_string_release(callback_name);
+                       zend_string_release_ex(callback_name, 0);
                        RETURN_FALSE;
                }
-               zend_string_release(callback_name);
+               zend_string_release_ex(callback_name, 0);
 #endif
        }
 
@@ -141,10 +141,10 @@ PHP_FUNCTION(oci_define_by_name)
        /* if (zend_hash_add(statement->defines, name, name_len, define, sizeof(php_oci_define), (void **)&tmp_define) == SUCCESS) { */
        zvtmp = zend_string_init(name, name_len, 0);
        if ((define = zend_hash_add_new_ptr(statement->defines, zvtmp, define)) != NULL) {
-               zend_string_release(zvtmp);
+               zend_string_release_ex(zvtmp, 0);
        } else {
                efree(define);
-               zend_string_release(zvtmp);
+               zend_string_release_ex(zvtmp, 0);
                RETURN_FALSE;
        }
 
@@ -1472,7 +1472,7 @@ PHP_FUNCTION(oci_fetch_all)
                                        zend_string *zvtmp;
                                        zvtmp = zend_string_init(columns[ i ]->name, columns[ i ]->name_len, 0);
                                        zend_symtable_update(Z_ARRVAL(row), zvtmp, &element);
-                                       zend_string_release(zvtmp);
+                                       zend_string_release_ex(zvtmp, 0);
                                }
                        }
 
@@ -1507,7 +1507,7 @@ PHP_FUNCTION(oci_fetch_all)
                                array_init(&tmp);
                                zvtmp = zend_string_init(columns[ i ]->name, columns[ i ]->name_len, 0);
                                outarrs[ i ] = zend_symtable_update(Z_ARRVAL_P(array), zvtmp, &tmp);
-                               zend_string_release(zvtmp);
+                               zend_string_release_ex(zvtmp, 0);
                        }
                }
 
index 743561428c8e21d94ee052e55b7915638b825506..8d259eebfa2f28abb8b105a7b0ad23d3e5eac6a8 100644 (file)
@@ -1256,7 +1256,7 @@ int php_oci_bind_by_name(php_oci_statement *statement, char *name, size_t name_l
                zvtmp = zend_string_init(name, name_len, 0);
                bindp = (php_oci_bind *) ecalloc(1, sizeof(php_oci_bind));
                bindp = zend_hash_update_ptr(statement->binds, zvtmp, bindp);
-               zend_string_release(zvtmp);
+               zend_string_release_ex(zvtmp, 0);
        }
 
        /* Make sure the minimum of value_sz is 1 to avoid ORA-3149
@@ -1702,7 +1702,7 @@ int php_oci_bind_array_by_name(php_oci_statement *statement, char *name, size_t
 
        zvtmp = zend_string_init(name, name_len, 0);
        zend_hash_update_ptr(statement->binds, zvtmp, bind);
-       zend_string_release(zvtmp);
+       zend_string_release_ex(zvtmp, 0);
 
        statement->errcode = 0; /* retain backwards compat with OCI8 1.4 */
        return 0;
index d2db5181dd31a9e8726d5c16f39a3ba0a9f43fac..621236fc08a95bfe25d200988397daa9f4299cdd 100644 (file)
@@ -704,7 +704,7 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
                                                Z_TYPE_INFO(ZEND_OP2_LITERAL(src)) = IS_STRING_EX;
                                                memcpy(Z_STRVAL(ZEND_OP2_LITERAL(src)) + old_len, Z_STRVAL(ZEND_OP2_LITERAL(opline)), Z_STRLEN(ZEND_OP2_LITERAL(opline)));
                                                Z_STRVAL(ZEND_OP2_LITERAL(src))[l] = '\0';
-                                               zend_string_release(Z_STR(ZEND_OP2_LITERAL(opline)));
+                                               zend_string_release_ex(Z_STR(ZEND_OP2_LITERAL(opline)), 0);
                                                ZVAL_STR(&ZEND_OP2_LITERAL(opline), zend_new_interned_string(Z_STR(ZEND_OP2_LITERAL(src))));
                                                ZVAL_NULL(&ZEND_OP2_LITERAL(src));
                                                MAKE_NOP(src);
index b2f463c65aca69a0a667ca892f2c22974663426c..d9e5f919e9dfd10dbbe3212a55fe5d2304cb9b16 100644 (file)
@@ -111,7 +111,7 @@ static uint32_t add_static_slot(HashTable     *hash,
                ZVAL_LONG(&tmp, ret);
                zend_hash_add(hash, key, &tmp);
        }
-       zend_string_release(key);
+       zend_string_release_ex(key, 0);
        return ret;
 }
 
@@ -379,7 +379,7 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx
                                            (LITERAL_NUM_RELATED(info[i].flags) != 2 ||
                                             ((info[i].flags & LITERAL_KIND_MASK) != LITERAL_VALUE &&
                                              (info[Z_LVAL_P(pos)].flags & LITERAL_KIND_MASK) != LITERAL_VALUE))) {
-                                               zend_string_release(key);
+                                               zend_string_release_ex(key, 0);
                                                map[i] = Z_LVAL_P(pos);
                                                zval_ptr_dtor_nogc(&op_array->literals[i]);
                                                n = LITERAL_NUM_RELATED(info[i].flags);
@@ -392,7 +392,7 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx
                                                map[i] = j;
                                                ZVAL_LONG(&zv, j);
                                                zend_hash_add_new(&hash, key, &zv);
-                                               zend_string_release(key);
+                                               zend_string_release_ex(key, 0);
                                                if (i != j) {
                                                        op_array->literals[j] = op_array->literals[i];
                                                        info[j] = info[i];
index ab4dd12614c1b59ea25265d4082ab9e0bf94956f..c7bda48c8823dbac58b3b42e2955130dd959e43f 100644 (file)
@@ -112,14 +112,14 @@ void zend_optimizer_compact_vars(zend_op_array *op_array) {
                                if (vars_map[i] != (uint32_t) -1) {
                                        names[vars_map[i]] = op_array->vars[i];
                                } else {
-                                       zend_string_release(op_array->vars[i]);
+                                       zend_string_release_ex(op_array->vars[i], 0);
                                }
                        }
                        efree(op_array->vars);
                        op_array->vars = names;
                } else {
                        for (i = 0; i < op_array->last_var; i++) {
-                               zend_string_release(op_array->vars[i]);
+                               zend_string_release_ex(op_array->vars[i], 0);
                        }
                        efree(op_array->vars);
                        op_array->vars = NULL;
index 7eb80317e2e10f3705d76ded9e9c2cf901699de5..8a157c447dd08d5111aadf0b0e1ffd560344e905 100644 (file)
@@ -175,7 +175,7 @@ void zend_optimizer_pass1(zend_op_array *op_array, zend_optimizer_ctx *ctx)
                                } else { /* ZEND_ADD_STRING */
                                        memcpy(ptr, Z_STRVAL(ZEND_OP2_LITERAL(opline)), Z_STRLEN(ZEND_OP2_LITERAL(opline)));
                                        ptr += Z_STRLEN(ZEND_OP2_LITERAL(opline));
-                                       zend_string_release(Z_STR(ZEND_OP2_LITERAL(opline)));
+                                       zend_string_release_ex(Z_STR(ZEND_OP2_LITERAL(opline)), 0);
                                        ZVAL_NEW_STR(&ZEND_OP2_LITERAL(opline), str);
                                }
                                next_op = opline + 1;
@@ -451,7 +451,7 @@ void zend_optimizer_pass1(zend_op_array *op_array, zend_optimizer_ctx *ctx)
                                                        zend_optimizer_update_op1_const(op_array, opline, &t);
                                                }
                                        }
-                                       zend_string_release(lc_name);
+                                       zend_string_release_ex(lc_name, 0);
                                        break;
                                } else if (Z_STRLEN(ZEND_OP2_LITERAL(init_opline)) == sizeof("extension_loaded")-1 &&
                                        !memcmp(Z_STRVAL(ZEND_OP2_LITERAL(init_opline)),
@@ -463,7 +463,7 @@ void zend_optimizer_pass1(zend_op_array *op_array, zend_optimizer_ctx *ctx)
                                        zend_module_entry *m = zend_hash_find_ptr(&module_registry,
                                                        lc_name);
 
-                                       zend_string_release(lc_name);
+                                       zend_string_release_ex(lc_name, 0);
                                        if (!m) {
                                                if (PG(enable_dl)) {
                                                        break;
@@ -541,7 +541,7 @@ void zend_optimizer_pass1(zend_op_array *op_array, zend_optimizer_ctx *ctx)
                                                        zend_optimizer_update_op1_const(op_array, opline, &t);
                                                }
                                        } else {
-                                               zend_string_release(dirname);
+                                               zend_string_release_ex(dirname, 0);
                                        }
                                        break;
                                }
index 5f5f7da3d860529f71e3c9b33192157c18f81264..23c5d5ac534032803c84062a04e45aa95b770b96 100644 (file)
@@ -547,7 +547,7 @@ static inline int ct_eval_assign_dim(zval *result, zval *value, zval *key) {
                        value_str = zval_get_string(value);
                        ZVAL_STR(result, new_str);
                        Z_STRVAL_P(result)[index] = ZSTR_VAL(value_str)[0];
-                       zend_string_release(value_str);
+                       zend_string_release_ex(value_str, 0);
 #endif
                        return FAILURE;
                default:
index 8ec91955118c303915d3a19931a3a4034ea657c5..e823f8859b1f50a65c4fe8dec3757dd32ce72a51 100644 (file)
@@ -1762,7 +1762,7 @@ int zend_func_info_startup(void)
                        if (zend_hash_add_ptr(&func_info, key, (void**)&func_infos[i]) == NULL) {
                                fprintf(stderr, "ERROR: Duplicate function info for \"%s\"\n", func_infos[i].name);
                        }
-                       zend_string_release(key);
+                       zend_string_release_ex(key, 1);
                }
        }
 
index c3cbef84cd899335b4471b577a37b3ccc31f7855..4414fb78d8359a46de397b1cd673b7e4f580cc04 100644 (file)
@@ -2237,7 +2237,7 @@ static uint32_t zend_fetch_arg_info(const zend_script *script, zend_arg_info *ar
                zend_string *lcname = zend_string_tolower(ZEND_TYPE_NAME(arg_info->type));
                tmp |= MAY_BE_OBJECT;
                *pce = get_class_entry(script, lcname);
-               zend_string_release(lcname);
+               zend_string_release_ex(lcname, 0);
        } else if (ZEND_TYPE_IS_CODE(arg_info->type)) {
                zend_uchar type_hint = ZEND_TYPE_CODE(arg_info->type);
 
index c70f55ec27a84751451192d805d748f4dd03d4ba..acec6aabf6861a47f3e8420cce10dd1ff441fc4f 100644 (file)
@@ -173,12 +173,12 @@ static ZEND_FUNCTION(accel_chdir)
        orig_chdir(INTERNAL_FUNCTION_PARAM_PASSTHRU);
        if (VCWD_GETCWD(cwd, MAXPATHLEN)) {
                if (ZCG(cwd)) {
-                       zend_string_release(ZCG(cwd));
+                       zend_string_release_ex(ZCG(cwd), 0);
                }
                ZCG(cwd) = zend_string_init(cwd, strlen(cwd), 0);
        } else {
                if (ZCG(cwd)) {
-                       zend_string_release(ZCG(cwd));
+                       zend_string_release_ex(ZCG(cwd), 0);
                        ZCG(cwd) = NULL;
                }
        }
@@ -1045,7 +1045,7 @@ static inline int do_validate_timestamps(zend_persistent_script *persistent_scri
                if (full_path_ptr &&
                    persistent_script->script.filename != full_path_ptr &&
                    !zend_string_equal_content(persistent_script->script.filename, full_path_ptr)) {
-                       zend_string_release(full_path_ptr);
+                       zend_string_release_ex(full_path_ptr, 0);
                        return FAILURE;
                }
                file_handle->opened_path = full_path_ptr;
@@ -1053,7 +1053,7 @@ static inline int do_validate_timestamps(zend_persistent_script *persistent_scri
 
        if (persistent_script->timestamp == 0) {
                if (full_path_ptr) {
-                       zend_string_release(full_path_ptr);
+                       zend_string_release_ex(full_path_ptr, 0);
                        file_handle->opened_path = NULL;
                }
                return FAILURE;
@@ -1061,13 +1061,13 @@ static inline int do_validate_timestamps(zend_persistent_script *persistent_scri
 
        if (zend_get_file_handle_timestamp(file_handle, NULL) == persistent_script->timestamp) {
                if (full_path_ptr) {
-                       zend_string_release(full_path_ptr);
+                       zend_string_release_ex(full_path_ptr, 0);
                        file_handle->opened_path = NULL;
                }
                return SUCCESS;
        }
        if (full_path_ptr) {
-               zend_string_release(full_path_ptr);
+               zend_string_release_ex(full_path_ptr, 0);
                file_handle->opened_path = NULL;
        }
 
@@ -1156,7 +1156,7 @@ char *accel_make_persistent_key(const char *path, size_t path_length, int *key_l
                                                zend_shared_alloc_lock();
                                                str = accel_new_interned_string(zend_string_copy(cwd_str));
                                                if (str == cwd_str) {
-                                                       zend_string_release(str);
+                                                       zend_string_release_ex(str, 0);
                                                        str = NULL;
                                                }
                                                zend_shared_alloc_unlock();
@@ -1317,7 +1317,7 @@ int zend_accel_invalidate(const char *filename, size_t filename_len, zend_bool f
        }
 
        accelerator_shm_read_unlock();
-       zend_string_release(realpath);
+       zend_string_release_ex(realpath, 0);
 
        return SUCCESS;
 }
@@ -2311,7 +2311,7 @@ static void accel_activate(void)
                                if (ZCG(root_hash) != buf.st_ino) {
                                        zend_string *key = zend_string_init("opcache.enable", sizeof("opcache.enable")-1, 0);
                                        zend_alter_ini_entry_chars(key, "0", 1, ZEND_INI_SYSTEM, ZEND_INI_STAGE_RUNTIME);
-                                       zend_string_release(key);
+                                       zend_string_release_ex(key, 0);
                                        zend_accel_error(ACCEL_LOG_WARNING, "Can't cache files in chroot() directory with too big inode");
                                        return;
                                }
@@ -2413,7 +2413,7 @@ static void accel_deactivate(void)
         */
 
        if (ZCG(cwd)) {
-               zend_string_release(ZCG(cwd));
+               zend_string_release_ex(ZCG(cwd), 0);
                ZCG(cwd) = NULL;
        }
 
index a6d9b543a6e6550072186c4a125c629f38581aca..1fc8c5a8b9647672ca1dbdc56604c20a20b5e2af 100644 (file)
@@ -94,7 +94,7 @@ void free_persistent_script(zend_persistent_script *persistent_script, int destr
        zend_hash_destroy(&persistent_script->script.class_table);
 
        if (persistent_script->script.filename) {
-               zend_string_release(persistent_script->script.filename);
+               zend_string_release_ex(persistent_script->script.filename, 0);
        }
 
        efree(persistent_script);
@@ -824,7 +824,7 @@ zend_op_array* zend_accel_load_script(zend_persistent_script *persistent_script,
                        if (!zend_hash_exists(EG(zend_constants), name)) {
                                zend_register_long_constant(ZSTR_VAL(name), ZSTR_LEN(name), persistent_script->compiler_halt_offset, CONST_CS, 0);
                        }
-                       zend_string_release(name);
+                       zend_string_release_ex(name, 0);
                }
 
                zend_hash_destroy(&ZCG(bind_hash));
index ca7b9cf92e87d77dadb21817ecd783103047b820..05ec90ad2f528390baa880ec9bb6d44693f7d30b 100644 (file)
@@ -877,7 +877,7 @@ int zend_file_cache_script_store(zend_persistent_script *script, int in_shm)
 
        if (writev(fd, vec, 3) != (ssize_t)(sizeof(info) + script->size + info.str_size)) {
                zend_accel_error(ACCEL_LOG_WARNING, "opcache cannot write to file '%s'\n", filename);
-               zend_string_release((zend_string*)ZCG(mem));
+               zend_string_release_ex((zend_string*)ZCG(mem), 0);
                close(fd);
                efree(mem);
                unlink(filename);
@@ -891,7 +891,7 @@ int zend_file_cache_script_store(zend_persistent_script *script, int in_shm)
                write(fd, ((zend_string*)ZCG(mem))->val, info.str_size) != info.str_size
                ) {
                zend_accel_error(ACCEL_LOG_WARNING, "opcache cannot write to file '%s'\n", filename);
-               zend_string_release((zend_string*)ZCG(mem));
+               zend_string_release_ex((zend_string*)ZCG(mem), 0);
                close(fd);
                efree(mem);
                unlink(filename);
@@ -900,7 +900,7 @@ int zend_file_cache_script_store(zend_persistent_script *script, int in_shm)
        }
 #endif
 
-       zend_string_release((zend_string*)ZCG(mem));
+       zend_string_release_ex((zend_string*)ZCG(mem), 0);
        efree(mem);
        if (zend_file_cache_flock(fd, LOCK_UN) != 0) {
                zend_accel_error(ACCEL_LOG_WARNING, "opcache cannot unlock file '%s'\n", filename);
index d40f1886e47adee006577ecf3509357dfb420be1..231c509571fa4bdba75e03ac374f081b0d9872c7 100644 (file)
 #define zend_accel_store_string(str) do { \
                zend_string *new_str = zend_shared_alloc_get_xlat_entry(str); \
                if (new_str) { \
-                       zend_string_release(str); \
+                       zend_string_release_ex(str, 0); \
                        str = new_str; \
                } else { \
                new_str = zend_accel_memdup((void*)str, _ZSTR_STRUCT_SIZE(ZSTR_LEN(str))); \
-                       zend_string_release(str); \
+                       zend_string_release_ex(str, 0); \
                str = new_str; \
                zend_string_hash_val(str); \
                zend_set_str_gc_flags(str); \
@@ -572,7 +572,7 @@ static void zend_persist_op_array_ex(zend_op_array *op_array, zend_persistent_sc
                        }
                } else {
                        if (!already_stored) {
-                               zend_string_release(op_array->doc_comment);
+                               zend_string_release_ex(op_array->doc_comment, 0);
                        }
                        op_array->doc_comment = NULL;
                }
@@ -661,7 +661,7 @@ static void zend_persist_property_info(zval *zv)
                        if (!zend_shared_alloc_get_xlat_entry(prop->doc_comment)) {
                                zend_shared_alloc_register_xlat_entry(prop->doc_comment, prop->doc_comment);
                        }
-                       zend_string_release(prop->doc_comment);
+                       zend_string_release_ex(prop->doc_comment, 0);
                        prop->doc_comment = NULL;
                }
        }
@@ -693,7 +693,7 @@ static void zend_persist_class_constant(zval *zv)
                        zend_string *doc_comment = zend_shared_alloc_get_xlat_entry(c->doc_comment);
                        if (!doc_comment) {
                                zend_shared_alloc_register_xlat_entry(c->doc_comment, c->doc_comment);
-                               zend_string_release(c->doc_comment);
+                               zend_string_release_ex(c->doc_comment, 0);
                        }
                        c->doc_comment = NULL;
                }
@@ -741,7 +741,7 @@ static void zend_persist_class_entry(zval *zv)
                        } else {
                                if (!zend_shared_alloc_get_xlat_entry(ce->info.user.doc_comment)) {
                                        zend_shared_alloc_register_xlat_entry(ce->info.user.doc_comment, ce->info.user.doc_comment);
-                                       zend_string_release(ce->info.user.doc_comment);
+                                       zend_string_release_ex(ce->info.user.doc_comment, 0);
                                }
                                ce->info.user.doc_comment = NULL;
                        }
index 4dee76b3a356e37e775b50b1d7fc8f15c87f4053..6feedc6e6f1927bbda0342aec441d70210215fd5 100644 (file)
@@ -39,9 +39,6 @@
                } else if (!IS_ACCEL_INTERNED(str)) { \
                        zend_string *tmp = accel_new_interned_string(str); \
                        if (tmp != (str)) { \
-                               if (do_free) { \
-                                       /*zend_string_release(str);*/ \
-                               } \
                                (str) = tmp; \
                        } else { \
                                ADD_STRING(str); \
index c2cd1d32fb6a09d4361dea8564de81ce7d7a47eb..4aae81dbd7478eb0238a73c7ed1b32f15821e803 100644 (file)
@@ -1897,7 +1897,7 @@ cleanup:
        }
 
        if (keyresource == NULL && s != NULL) {
-               zend_string_release(s);
+               zend_string_release_ex(s, 0);
        }
 }
 /* }}} */
@@ -4930,10 +4930,10 @@ PHP_FUNCTION(openssl_dh_compute_key)
        if (len >= 0) {
                ZSTR_LEN(data) = len;
                ZSTR_VAL(data)[len] = 0;
-               RETVAL_STR(data);
+               RETVAL_NEW_STR(data);
        } else {
                php_openssl_store_errors();
-               zend_string_release(data);
+               zend_string_release_ex(data, 0);
                RETVAL_FALSE;
        }
 
@@ -4975,10 +4975,10 @@ PHP_FUNCTION(openssl_pkey_derive)
                if (EVP_PKEY_derive(ctx, (unsigned char*)ZSTR_VAL(result), &key_size) > 0) {
                        ZSTR_LEN(result) = key_size;
                        ZSTR_VAL(result)[key_size] = 0;
-                       RETVAL_STR(result);
+                       RETVAL_NEW_STR(result);
                } else {
                        php_openssl_store_errors();
-                       zend_string_release(result);
+                       zend_string_release_ex(result, 0);
                        RETVAL_FALSE;
                }
        } else {
@@ -5039,7 +5039,7 @@ PHP_FUNCTION(openssl_pbkdf2)
                RETURN_NEW_STR(out_buffer);
        } else {
                php_openssl_store_errors();
-               zend_string_release(out_buffer);
+               zend_string_release_ex(out_buffer, 0);
                RETURN_FALSE;
        }
 }
@@ -5681,7 +5681,7 @@ PHP_FUNCTION(openssl_private_encrypt)
                php_openssl_store_errors();
        }
        if (cryptedbuf) {
-               zend_string_release(cryptedbuf);
+               zend_string_release_ex(cryptedbuf, 0);
        }
        if (keyresource == NULL) {
                EVP_PKEY_free(pkey);
@@ -5754,7 +5754,7 @@ PHP_FUNCTION(openssl_private_decrypt)
                EVP_PKEY_free(pkey);
        }
        if (cryptedbuf) {
-               zend_string_release(cryptedbuf);
+               zend_string_release_ex(cryptedbuf, 0);
        }
 }
 /* }}} */
@@ -5815,7 +5815,7 @@ PHP_FUNCTION(openssl_public_encrypt)
                EVP_PKEY_free(pkey);
        }
        if (cryptedbuf) {
-               zend_string_release(cryptedbuf);
+               zend_string_release_ex(cryptedbuf, 0);
        }
 }
 /* }}} */
@@ -5884,7 +5884,7 @@ PHP_FUNCTION(openssl_public_decrypt)
        }
 
        if (cryptedbuf) {
-               zend_string_release(cryptedbuf);
+               zend_string_release_ex(cryptedbuf, 0);
        }
        if (keyresource == NULL) {
                EVP_PKEY_free(pkey);
@@ -6371,12 +6371,12 @@ PHP_FUNCTION(openssl_digest)
 
                        make_digest_ex(ZSTR_VAL(digest_str), (unsigned char*)ZSTR_VAL(sigbuf), siglen);
                        ZSTR_VAL(digest_str)[digest_str_len] = '\0';
-                       zend_string_release(sigbuf);
-                       RETVAL_STR(digest_str);
+                       zend_string_release_ex(sigbuf, 0);
+                       RETVAL_NEW_STR(digest_str);
                }
        } else {
                php_openssl_store_errors();
-               zend_string_release(sigbuf);
+               zend_string_release_ex(sigbuf, 0);
                RETVAL_FALSE;
        }
 
@@ -6572,7 +6572,7 @@ static int php_openssl_cipher_update(const EVP_CIPHER *cipher_type,
                }
                */
                php_openssl_store_errors();
-               zend_string_release(*poutbuf);
+               zend_string_release_ex(*poutbuf, 0);
                return FAILURE;
        }
 
@@ -6636,7 +6636,7 @@ PHP_FUNCTION(openssl_encrypt)
                        zend_string *base64_str;
 
                        base64_str = php_base64_encode((unsigned char*)ZSTR_VAL(outbuf), outlen);
-                       zend_string_release(outbuf);
+                       zend_string_release_ex(outbuf, 0);
                        outbuf = base64_str;
                        RETVAL_STR(base64_str);
                }
@@ -6650,8 +6650,8 @@ PHP_FUNCTION(openssl_encrypt)
                                ZVAL_NEW_STR(tag, tag_str);
                        } else {
                                php_error_docref(NULL, E_WARNING, "Retrieving verification tag failed");
-                               zend_string_release(tag_str);
-                               zend_string_release(outbuf);
+                               zend_string_release_ex(tag_str, 0);
+                               zend_string_release_ex(outbuf, 0);
                                RETVAL_FALSE;
                        }
                } else if (tag) {
@@ -6661,12 +6661,12 @@ PHP_FUNCTION(openssl_encrypt)
                                        "The authenticated tag cannot be provided for cipher that doesn not support AEAD");
                } else if (mode.is_aead) {
                        php_error_docref(NULL, E_WARNING, "A tag should be provided when using AEAD mode");
-                       zend_string_release(outbuf);
+                       zend_string_release_ex(outbuf, 0);
                        RETVAL_FALSE;
                }
        } else {
                php_openssl_store_errors();
-               zend_string_release(outbuf);
+               zend_string_release_ex(outbuf, 0);
                RETVAL_FALSE;
        }
 
@@ -6750,7 +6750,7 @@ PHP_FUNCTION(openssl_decrypt)
                RETVAL_STR(outbuf);
        } else {
                php_openssl_store_errors();
-               zend_string_release(outbuf);
+               zend_string_release_ex(outbuf, 0);
                RETVAL_FALSE;
        }
 
@@ -6761,7 +6761,7 @@ PHP_FUNCTION(openssl_decrypt)
                efree(iv);
        }
        if (base64_str) {
-               zend_string_release(base64_str);
+               zend_string_release_ex(base64_str, 0);
        }
        EVP_CIPHER_CTX_cleanup(cipher_ctx);
        EVP_CIPHER_CTX_free(cipher_ctx);
@@ -6824,7 +6824,7 @@ PHP_FUNCTION(openssl_random_pseudo_bytes)
 #ifdef PHP_WIN32
        /* random/urandom equivalent on Windows */
        if (php_win32_get_random_bytes((unsigned char*)buffer->val, (size_t) buffer_length) == FAILURE){
-               zend_string_release(buffer);
+               zend_string_release_ex(buffer, 0);
                if (zstrong_result_returned) {
                        ZVAL_FALSE(zstrong_result_returned);
                }
@@ -6836,7 +6836,7 @@ PHP_FUNCTION(openssl_random_pseudo_bytes)
        PHP_OPENSSL_RAND_ADD_TIME();
        /* FIXME loop if requested size > INT_MAX */
        if (RAND_bytes((unsigned char*)ZSTR_VAL(buffer), (int)buffer_length) <= 0) {
-               zend_string_release(buffer);
+               zend_string_release_ex(buffer, 0);
                if (zstrong_result_returned) {
                        ZVAL_FALSE(zstrong_result_returned);
                }
@@ -6847,7 +6847,7 @@ PHP_FUNCTION(openssl_random_pseudo_bytes)
 #endif
 
        ZSTR_VAL(buffer)[buffer_length] = 0;
-       RETVAL_STR(buffer);
+       RETVAL_NEW_STR(buffer);
 
        if (zstrong_result_returned) {
                ZVAL_BOOL(zstrong_result_returned, 1);
index 9225f676683c514f2a0056b29dd40654a50b1a5a..0d5027f41e01bc9de423a573960ead0134454830 100644 (file)
@@ -313,7 +313,7 @@ static int php_openssl_x509_fingerprint_cmp(X509 *peer, const char *method, cons
        fingerprint = php_openssl_x509_fingerprint(peer, method, 0);
        if (fingerprint) {
                result = strcasecmp(expected, ZSTR_VAL(fingerprint));
-               zend_string_release(fingerprint);
+               zend_string_release_ex(fingerprint, 0);
        }
 
        return result;
index 82a4a454e2dfc17ddf0b4f543b63bff02e879b43..c65e1ecd66c423b2d15a9fef2b9ee32a449a5de2 100644 (file)
@@ -972,7 +972,7 @@ PHP_FUNCTION(pcntl_exec)
                        strlcat(*pair, Z_STRVAL_P(element), pair_length);
 
                        /* Cleanup */
-                       zend_string_release(key);
+                       zend_string_release_ex(key, 0);
                        envi++;
                        pair++;
                } ZEND_HASH_FOREACH_END();
@@ -1049,7 +1049,7 @@ PHP_FUNCTION(pcntl_signal)
                zend_string *func_name = zend_get_callable_name(handle);
                PCNTL_G(last_error) = EINVAL;
                php_error_docref(NULL, E_WARNING, "%s is not a callable function name error", ZSTR_VAL(func_name));
-               zend_string_release(func_name);
+               zend_string_release_ex(func_name, 0);
                RETURN_FALSE;
        }
 
index 350b7c35657a1ad3506f7724df5d7d3552871bb4..ffecc394221fd5f70d5f963e7db67fa778b502cc 100644 (file)
@@ -558,7 +558,7 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex)
        if (zv) {
 #if HAVE_SETLOCALE
                if (key != regex) {
-                       zend_string_release(key);
+                       zend_string_release_ex(key, 0);
                }
 #endif
                return (pcre_cache_entry*)Z_PTR_P(zv);
@@ -572,7 +572,7 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex)
        if (*p == 0) {
 #if HAVE_SETLOCALE
                if (key != regex) {
-                       zend_string_release(key);
+                       zend_string_release_ex(key, 0);
                }
 #endif
                php_error_docref(NULL, E_WARNING,
@@ -587,7 +587,7 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex)
        if (isalnum((int)*(unsigned char *)&delimiter) || delimiter == '\\') {
 #if HAVE_SETLOCALE
                if (key != regex) {
-                       zend_string_release(key);
+                       zend_string_release_ex(key, 0);
                }
 #endif
                php_error_docref(NULL,E_WARNING, "Delimiter must not be alphanumeric or backslash");
@@ -632,7 +632,7 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex)
        if (*pp == 0) {
 #if HAVE_SETLOCALE
                if (key != regex) {
-                       zend_string_release(key);
+                       zend_string_release_ex(key, 0);
                }
 #endif
                if (pp < ZSTR_VAL(regex) + ZSTR_LEN(regex)) {
@@ -696,7 +696,7 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex)
                                efree(pattern);
 #if HAVE_SETLOCALE
                                if (key != regex) {
-                                       zend_string_release(key);
+                                       zend_string_release_ex(key, 0);
                                }
 #endif
                                return NULL;
@@ -732,7 +732,7 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex)
        if (re == NULL) {
 #if HAVE_SETLOCALE
                if (key != regex) {
-                       zend_string_release(key);
+                       zend_string_release_ex(key, 0);
                }
 #endif
                pcre2_get_error_message(errnumber, error, sizeof(error));
@@ -787,7 +787,7 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex)
        if (rc < 0) {
 #if HAVE_SETLOCALE
                if (key != regex) {
-                       zend_string_release(key);
+                       zend_string_release_ex(key, 0);
                }
 #endif
                php_error_docref(NULL, E_WARNING, "Internal pcre2_pattern_info() error %d", rc);
@@ -799,7 +799,7 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex)
        if (rc < 0) {
 #if HAVE_SETLOCALE
                if (key != regex) {
-                       zend_string_release(key);
+                       zend_string_release_ex(key, 0);
                }
 #endif
                php_error_docref(NULL, E_WARNING, "Internal pcre_pattern_info() error %d", rc);
@@ -821,7 +821,7 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex)
                GC_MAKE_PERSISTENT_LOCAL(str);
 #if HAVE_SETLOCALE
                if (key != regex) {
-                       zend_string_release(key);
+                       zend_string_release_ex(key, 0);
                }
 #endif
                key = str;
@@ -1717,7 +1717,7 @@ PHPAPI zend_string *php_pcre_replace_impl(pcre_cache_entry *pce, zend_string *su
                } else {
                        pcre_handle_exec_error(count);
                        if (result) {
-                               zend_string_release(result);
+                               zend_string_release_ex(result, 0);
                                result = NULL;
                        }
                        break;
@@ -1866,7 +1866,7 @@ static zend_string *php_pcre_replace_func_impl(pcre_cache_entry *pce, zend_strin
                        /* If using custom function, copy result to the buffer and clean up. */
                        memcpy(ZSTR_VAL(result) + result_len, ZSTR_VAL(eval_result), ZSTR_LEN(eval_result));
                        result_len += ZSTR_LEN(eval_result);
-                       zend_string_release(eval_result);
+                       zend_string_release_ex(eval_result, 0);
 
                        if (limit) {
                                limit--;
@@ -1917,7 +1917,7 @@ static zend_string *php_pcre_replace_func_impl(pcre_cache_entry *pce, zend_strin
                } else {
                        pcre_handle_exec_error(count);
                        if (result) {
-                               zend_string_release(result);
+                               zend_string_release_ex(result, 0);
                                result = NULL;
                        }
                        break;
@@ -2004,7 +2004,7 @@ static zend_string *php_pcre_replace_array(HashTable *regex, zval *replace, zend
                                                                          replace_count);
                        zend_tmp_string_release(tmp_replace_str);
                        zend_tmp_string_release(tmp_regex_str);
-                       zend_string_release(subject_str);
+                       zend_string_release_ex(subject_str, 0);
                        subject_str = result;
                        if (UNEXPECTED(result == NULL)) {
                                break;
@@ -2030,7 +2030,7 @@ static zend_string *php_pcre_replace_array(HashTable *regex, zval *replace, zend
                                                                          limit,
                                                                          replace_count);
                        zend_tmp_string_release(tmp_regex_str);
-                       zend_string_release(subject_str);
+                       zend_string_release_ex(subject_str, 0);
                        subject_str = result;
 
                        if (UNEXPECTED(result == NULL)) {
@@ -2058,7 +2058,7 @@ static zend_always_inline zend_string *php_replace_in_subject(zval *regex, zval
                                                                  Z_STR_P(replace),
                                                                  limit,
                                                                  replace_count);
-               zend_string_release(subject_str);
+               zend_string_release_ex(subject_str, 0);
        } else {
                result = php_pcre_replace_array(Z_ARRVAL_P(regex),
                                                                                replace,
@@ -2083,7 +2083,7 @@ static zend_string *php_replace_in_subject_func(zval *regex, zend_fcall_info *fc
                                                                  fci, fcc,
                                                                  limit,
                                                                  replace_count);
-               zend_string_release(subject_str);
+               zend_string_release_ex(subject_str, 0);
                return result;
        } else {
                zval            *regex_entry;
@@ -2104,7 +2104,7 @@ static zend_string *php_replace_in_subject_func(zval *regex, zend_fcall_info *fc
                                                                                   limit,
                                                                                   replace_count);
                        zend_tmp_string_release(tmp_regex_str);
-                       zend_string_release(subject_str);
+                       zend_string_release_ex(subject_str, 0);
                        subject_str = result;
                        if (UNEXPECTED(result == NULL)) {
                                break;
@@ -2205,7 +2205,7 @@ static void preg_replace_common(INTERNAL_FUNCTION_PARAMETERS, int is_filter)
                        if (!is_filter || replace_count > old_replace_count) {
                                RETVAL_STR(result);
                        } else {
-                               zend_string_release(result);
+                               zend_string_release_ex(result, 0);
                                RETVAL_NULL();
                        }
                } else {
@@ -2238,7 +2238,7 @@ static void preg_replace_common(INTERNAL_FUNCTION_PARAMETERS, int is_filter)
                                                zend_hash_index_add_new(Z_ARRVAL_P(return_value), num_key, &zv);
                                        }
                                } else {
-                                       zend_string_release(result);
+                                       zend_string_release_ex(result, 0);
                                }
                        }
                } ZEND_HASH_FOREACH_END();
@@ -2282,7 +2282,7 @@ static PHP_FUNCTION(preg_replace_callback)
        if (!zend_is_callable_ex(replace, NULL, 0, NULL, &fcc, NULL)) {
                zend_string     *callback_name = zend_get_callable_name(replace);
                php_error_docref(NULL, E_WARNING, "Requires argument 2, '%s', to be a valid callback", ZSTR_VAL(callback_name));
-               zend_string_release(callback_name);
+               zend_string_release_ex(callback_name, 0);
                ZVAL_STR(return_value, zval_get_string(subject));
                return;
        }
@@ -2334,7 +2334,7 @@ static PHP_FUNCTION(preg_replace_callback_array)
                if (!zend_is_callable_ex(replace, NULL, 0, NULL, &fcc, NULL)) {
                        zend_string *callback_name = zend_get_callable_name(replace);
                        php_error_docref(NULL, E_WARNING, "'%s' is not a valid callback", ZSTR_VAL(callback_name));
-                       zend_string_release(callback_name);
+                       zend_string_release_ex(callback_name, 0);
                        zval_ptr_dtor(&regex);
                        zval_ptr_dtor(return_value);
                        ZVAL_COPY(return_value, subject);
@@ -2789,7 +2789,7 @@ PHPAPI void  php_pcre_grep_impl(pcre_cache_entry *pce, zval *input, zval *return
                        count = num_subpats;
                } else if (count < 0 && count != PCRE2_ERROR_NOMATCH) {
                        pcre_handle_exec_error(count);
-                       zend_string_release(subject_str);
+                       zend_string_release_ex(subject_str, 0);
                        break;
                }
 
@@ -2805,7 +2805,7 @@ PHPAPI void  php_pcre_grep_impl(pcre_cache_entry *pce, zval *input, zval *return
                        }
                }
 
-               zend_string_release(subject_str);
+               zend_string_release_ex(subject_str, 0);
        } ZEND_HASH_FOREACH_END();
        if (match_data != mdata) {
                pcre2_match_data_free(match_data);
index e78baea7627784ca5e7a443bfc9051c7be92fcc8..3428b6386ca06edc168eca948302df475cb26001 100644 (file)
@@ -169,7 +169,7 @@ PDO_API void pdo_handle_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt) /* {{{ */
        }
 
        if (message) {
-               zend_string_release(message);
+               zend_string_release_ex(message, 0);
        }
 
        if (supp) {
@@ -1253,7 +1253,7 @@ const zend_function_entry pdo_dbh_functions[] = /* {{{ */ {
 static void cls_method_dtor(zval *el) /* {{{ */ {
        zend_function *func = (zend_function*)Z_PTR_P(el);
        if (func->common.function_name) {
-               zend_string_release(func->common.function_name);
+               zend_string_release_ex(func->common.function_name, 0);
        }
        efree(func);
 }
@@ -1262,7 +1262,7 @@ static void cls_method_dtor(zval *el) /* {{{ */ {
 static void cls_method_pdtor(zval *el) /* {{{ */ {
        zend_function *func = (zend_function*)Z_PTR_P(el);
        if (func->common.function_name) {
-               zend_string_release(func->common.function_name);
+               zend_string_release_ex(func->common.function_name, 1);
        }
        pefree(func, 1);
 }
@@ -1356,7 +1356,7 @@ static union _zend_function *dbh_method_get(zend_object **object, zend_string *m
 
                lc_method_name = zend_string_tolower(method_name);
                fbc = zend_hash_find_ptr(dbh_obj->inner->cls_methods[PDO_DBH_DRIVER_METHOD_KIND_DBH], lc_method_name);
-               zend_string_release(lc_method_name);
+               zend_string_release_ex(lc_method_name, 0);
        }
 
 out:
index a1aabf7d86621bf4957f70b55b7aa96337cdd2f7..2a2cff7946fea884ffdcfb1181b32ca99d34860e 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 1.0.3 */
+/* Generated by re2c 0.16 */
 #line 1 "ext/pdo/pdo_sql_parser.re"
 /*
   +----------------------------------------------------------------------+
@@ -111,7 +111,7 @@ yy8:
        if (yych <= 0x00) goto yy7;
        goto yy21;
 yy9:
-       ++YYCURSOR;
+       yych = *++YYCURSOR;
        goto yy7;
 yy10:
        yych = *++YYCURSOR;
@@ -120,7 +120,7 @@ yy10:
        default:        goto yy7;
        }
 yy11:
-       yych = *++YYCURSOR;
+       yych = *(YYMARKER = ++YYCURSOR);
        switch (yych) {
        case '*':       goto yy28;
        default:        goto yy7;
@@ -195,8 +195,8 @@ yy12:
        default:        goto yy7;
        }
 yy13:
-       yych = *++YYCURSOR;
-       switch (yych) {
+       ++YYCURSOR;
+       switch ((yych = *YYCURSOR)) {
        case '?':       goto yy36;
        default:        goto yy14;
        }
@@ -374,6 +374,7 @@ yy38:
        }
 yy40:
        ++YYCURSOR;
+       yych = *YYCURSOR;
        goto yy27;
 }
 #line 66 "ext/pdo/pdo_sql_parser.re"
@@ -540,12 +541,12 @@ safe:
                                                        ret = -1;
                                                        strncpy(stmt->error_code, stmt->dbh->error_code, 6);
                                                        if (buf) {
-                                                               zend_string_release(buf);
+                                                               zend_string_release_ex(buf, 0);
                                                        }
                                                        goto clean_up;
                                                }
                                                if (buf) {
-                                                       zend_string_release(buf);
+                                                       zend_string_release_ex(buf, 0);
                                                }
                                        } else {
                                                pdo_raise_impl_error(stmt->dbh, stmt, "HY105", "Expected a stream resource");
@@ -592,7 +593,7 @@ safe:
                                                                ret = -1;
                                                                strncpy(stmt->error_code, stmt->dbh->error_code, 6);
                                                                if (buf) {
-                                                                       zend_string_release(buf);
+                                                                       zend_string_release_ex(buf, 0);
                                                                }
                                                                goto clean_up;
                                                        }
@@ -600,7 +601,7 @@ safe:
                                        }
 
                                        if (buf) {
-                                               zend_string_release(buf);
+                                               zend_string_release_ex(buf, 0);
                                        }
                                }
                        } else {
index 76e4190ac4204954f40c5bf5e37671d7b865f72f..648358180c18ea916e82374e0f73a6d745b810fa 100644 (file)
@@ -226,12 +226,12 @@ safe:
                                                        ret = -1;
                                                        strncpy(stmt->error_code, stmt->dbh->error_code, 6);
                                                        if (buf) {
-                                                               zend_string_release(buf);
+                                                               zend_string_release_ex(buf, 0);
                                                        }
                                                        goto clean_up;
                                                }
                                                if (buf) {
-                                                       zend_string_release(buf);
+                                                       zend_string_release_ex(buf, 0);
                                                }
                                        } else {
                                                pdo_raise_impl_error(stmt->dbh, stmt, "HY105", "Expected a stream resource");
@@ -278,7 +278,7 @@ safe:
                                                                ret = -1;
                                                                strncpy(stmt->error_code, stmt->dbh->error_code, 6);
                                                                if (buf) {
-                                                                       zend_string_release(buf);
+                                                                       zend_string_release_ex(buf, 0);
                                                                }
                                                                goto clean_up;
                                                        }
@@ -286,7 +286,7 @@ safe:
                                        }
 
                                        if (buf) {
-                                               zend_string_release(buf);
+                                               zend_string_release_ex(buf, 0);
                                        }
                                }
                        } else {
index 01c429c8ce3fc44fe453022cb0bf866cf2080b80..b1b58b4cc671988c91bc2eb10661a43dadf6afe6 100644 (file)
@@ -263,7 +263,7 @@ static void param_dtor(zval *el) /* {{{ */
        }
 
        if (param->name) {
-               zend_string_release(param->name);
+               zend_string_release_ex(param->name, 0);
        }
 
        if (!Z_ISUNDEF(param->parameter)) {
@@ -359,7 +359,7 @@ static int really_register_bound_param(struct pdo_bound_param_data *param, pdo_s
 
        if (is_param && !rewrite_name_to_position(stmt, param)) {
                if (param->name) {
-                       zend_string_release(param->name);
+                       zend_string_release_ex(param->name, 0);
                        param->name = NULL;
                }
                return 0;
@@ -373,7 +373,7 @@ static int really_register_bound_param(struct pdo_bound_param_data *param, pdo_s
                if (!stmt->methods->param_hook(stmt, param, PDO_PARAM_EVT_NORMALIZE
                                )) {
                        if (param->name) {
-                               zend_string_release(param->name);
+                               zend_string_release_ex(param->name, 0);
                                param->name = NULL;
                        }
                        return 0;
@@ -2016,7 +2016,7 @@ static int pdo_stmt_do_next_rowset(pdo_stmt_t *stmt)
 
                for (i = 0; i < stmt->column_count; i++) {
                        if (cols[i].name) {
-                               zend_string_release(cols[i].name);
+                               zend_string_release_ex(cols[i].name, 0);
                        }
                }
                efree(stmt->columns);
@@ -2246,7 +2246,7 @@ static union _zend_function *dbstmt_method_get(zend_object **object_pp, zend_str
        }
 
 out:
-       zend_string_release(lc_method_name);
+       zend_string_release_ex(lc_method_name, 0);
        if (!fbc) {
                fbc = std_object_handlers.get_method(object_pp, method_name, key);
        }
@@ -2340,7 +2340,7 @@ PDO_API void php_pdo_free_statement(pdo_stmt_t *stmt)
 
                for (i = 0; i < stmt->column_count; i++) {
                        if (cols[i].name) {
-                               zend_string_release(cols[i].name);
+                               zend_string_release_ex(cols[i].name, 0);
                                cols[i].name = NULL;
                        }
                }
@@ -2637,11 +2637,11 @@ static union _zend_function *row_method_get(
        lc_method_name = zend_string_tolower(method_name);
 
        if ((fbc = zend_hash_find_ptr(&pdo_row_ce->function_table, lc_method_name)) == NULL) {
-               zend_string_release(lc_method_name);
+               zend_string_release_ex(lc_method_name, 0);
                return NULL;
        }
 
-       zend_string_release(lc_method_name);
+       zend_string_release_ex(lc_method_name, 0);
 
        return fbc;
 }
index 9b12527968124e49b5173c21bdc5e7a7d59e3760..6138c5aee7a9c415f7f112c2d58027346de0267f 100644 (file)
@@ -470,7 +470,7 @@ static int firebird_handle_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *v
                                        efree(H->date_format);
                                }
                                spprintf(&H->date_format, 0, "%s", ZSTR_VAL(str));
-                               zend_string_release(str);
+                               zend_string_release_ex(str, 0);
                        }
                        return 1;
 
@@ -481,7 +481,7 @@ static int firebird_handle_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *v
                                        efree(H->time_format);
                                }
                                spprintf(&H->time_format, 0, "%s", ZSTR_VAL(str));
-                               zend_string_release(str);
+                               zend_string_release_ex(str, 0);
                        }
                        return 1;
 
@@ -492,7 +492,7 @@ static int firebird_handle_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *v
                                        efree(H->timestamp_format);
                                }
                                spprintf(&H->timestamp_format, 0, "%s", ZSTR_VAL(str));
-                               zend_string_release(str);
+                               zend_string_release_ex(str, 0);
                        }
                        return 1;
        }
index d9c05302adc1be0641c484f55de24015cb0a8de1..3cfd32f6ada706a3016548980bb56f67527abc84 100644 (file)
@@ -662,31 +662,31 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options)
                init_cmd = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_INIT_COMMAND, NULL);
                if (init_cmd) {
                        if (mysql_options(H->server, MYSQL_INIT_COMMAND, (const char *)ZSTR_VAL(init_cmd))) {
-                               zend_string_release(init_cmd);
+                               zend_string_release_ex(init_cmd, 0);
                                pdo_mysql_error(dbh);
                                goto cleanup;
                        }
-                       zend_string_release(init_cmd);
+                       zend_string_release_ex(init_cmd, 0);
                }
 #ifndef PDO_USE_MYSQLND
                default_file = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_READ_DEFAULT_FILE, NULL);
                if (default_file) {
                        if (mysql_options(H->server, MYSQL_READ_DEFAULT_FILE, (const char *)ZSTR_VAL(default_file))) {
-                               zend_string_release(default_file);
+                               zend_string_release_ex(default_file, 0);
                                pdo_mysql_error(dbh);
                                goto cleanup;
                        }
-                       zend_string_release(default_file);
+                       zend_string_release_ex(default_file, 0);
                }
 
                default_group = pdo_attr_strval(driver_options, PDO_MYSQL_ATTR_READ_DEFAULT_GROUP, NULL);
                if (default_group) {
                        if (mysql_options(H->server, MYSQL_READ_DEFAULT_GROUP, (const char *)ZSTR_VAL(default_group))) {
-                               zend_string_release(default_group);
+                               zend_string_release_ex(default_group, 0);
                                pdo_mysql_error(dbh);
                                goto cleanup;
                        }
-                       zend_string_release(default_group);
+                       zend_string_release_ex(default_group, 0);
                }
 #endif
                compress = pdo_attr_lval(driver_options, PDO_MYSQL_ATTR_COMPRESS, 0);
@@ -711,19 +711,19 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options)
                                        ssl_capath? ZSTR_VAL(ssl_capath) : NULL,
                                        ssl_cipher? ZSTR_VAL(ssl_cipher) : NULL);
                        if (ssl_key) {
-                               zend_string_release(ssl_key);
+                               zend_string_release_ex(ssl_key, 0);
                        }
                        if (ssl_cert) {
-                               zend_string_release(ssl_cert);
+                               zend_string_release_ex(ssl_cert, 0);
                        }
                        if (ssl_ca) {
-                               zend_string_release(ssl_ca);
+                               zend_string_release_ex(ssl_ca, 0);
                        }
                        if (ssl_capath) {
-                               zend_string_release(ssl_capath);
+                               zend_string_release_ex(ssl_capath, 0);
                        }
                        if (ssl_cipher) {
-                               zend_string_release(ssl_cipher);
+                               zend_string_release_ex(ssl_cipher, 0);
                        }
                }
 
@@ -733,10 +733,10 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options)
                        if (public_key) {
                                if (mysql_options(H->server, MYSQL_SERVER_PUBLIC_KEY, ZSTR_VAL(public_key))) {
                                        pdo_mysql_error(dbh);
-                                       zend_string_release(public_key);
+                                       zend_string_release_ex(public_key, 0);
                                        goto cleanup;
                                }
-                               zend_string_release(public_key);
+                               zend_string_release_ex(public_key, 0);
                        }
                }
 #endif
index 7d7b5e034d14f950157a0871734ac4a3dc252d72..4c067b3092ad99506577be20f565520430ea6162 100644 (file)
@@ -1229,10 +1229,10 @@ static int pdo_pgsql_handle_factory(pdo_dbh_t *dbh, zval *driver_options) /* {{{
        H->server = PQconnectdb(conn_str);
 
        if (tmp_user) {
-               zend_string_release(tmp_user);
+               zend_string_release_ex(tmp_user, 0);
        }
        if (tmp_pass) {
-               zend_string_release(tmp_pass);
+               zend_string_release_ex(tmp_pass, 0);
        }
 
        efree(conn_str);
index 6ab6f9eb7713b594fc816611f11a3cec5c22dcdc..ab696d821164b8d6cdf06be0aff0ad27d6beec8d 100644 (file)
@@ -537,7 +537,7 @@ static PHP_METHOD(SQLite, sqliteCreateFunction)
        if (!zend_is_callable(callback, 0, NULL)) {
                zend_string *cbname = zend_get_callable_name(callback);
                php_error_docref(NULL, E_WARNING, "function '%s' is not callable", ZSTR_VAL(cbname));
-               zend_string_release(cbname);
+               zend_string_release_ex(cbname, 0);
                RETURN_FALSE;
        }
 
@@ -609,14 +609,14 @@ static PHP_METHOD(SQLite, sqliteCreateAggregate)
        if (!zend_is_callable(step_callback, 0, NULL)) {
                zend_string *cbname = zend_get_callable_name(step_callback);
                php_error_docref(NULL, E_WARNING, "function '%s' is not callable", ZSTR_VAL(cbname));
-               zend_string_release(cbname);
+               zend_string_release_ex(cbname, 0);
                RETURN_FALSE;
        }
 
        if (!zend_is_callable(fini_callback, 0, NULL)) {
                zend_string *cbname = zend_get_callable_name(fini_callback);
                php_error_docref(NULL, E_WARNING, "function '%s' is not callable", ZSTR_VAL(cbname));
-               zend_string_release(cbname);
+               zend_string_release_ex(cbname, 0);
                RETURN_FALSE;
        }
 
@@ -669,7 +669,7 @@ static PHP_METHOD(SQLite, sqliteCreateCollation)
        if (!zend_is_callable(callback, 0, NULL)) {
                zend_string *cbname = zend_get_callable_name(callback);
                php_error_docref(NULL, E_WARNING, "function '%s' is not callable", ZSTR_VAL(cbname));
-               zend_string_release(cbname);
+               zend_string_release_ex(cbname, 0);
                RETURN_FALSE;
        }
 
index e82a75721d95cb1bbd3bbeeb3448b26e00337b4d..01004a7611e99993b3367c9434b3fc021b0b5b28 100644 (file)
@@ -190,7 +190,7 @@ phar_it:
                        }
                        stream = php_stream_open_wrapper_ex(name, "rb", 0 | REPORT_ERRORS, NULL, context);
                        if (entry_str) {
-                               zend_string_release(entry_str);
+                               zend_string_release_ex(entry_str, 0);
                        } else {
                                efree(name);
                        }
@@ -210,7 +210,7 @@ phar_it:
                        if (contents && ZSTR_LEN(contents) > 0) {
                                RETVAL_STR(contents);
                        } else if (contents) {
-                               zend_string_release(contents);
+                               zend_string_release_ex(contents, 0);
                                RETVAL_EMPTY_STRING();
                        } else {
                                RETVAL_FALSE;
@@ -308,7 +308,7 @@ notfound:
                context = php_stream_context_from_zval(zcontext, 0);
                stream = php_stream_open_wrapper_ex(name, "rb", 0 | REPORT_ERRORS, NULL, context);
                if (entry_str) {
-                       zend_string_release(entry_str);
+                       zend_string_release_ex(entry_str, 0);
                } else {
                        efree(name);
                }
@@ -410,7 +410,7 @@ notfound:
                context = php_stream_context_from_zval(zcontext, 0);
                stream = php_stream_open_wrapper_ex(name, mode, 0 | REPORT_ERRORS, NULL, context);
                if (entry_str) {
-                       zend_string_release(entry_str);
+                       zend_string_release_ex(entry_str, 0);
                } else {
                        efree(name);
                }
index 2a3fcb21617060d119223422adc410973f825536..21f08c7b045fa4249b4355a0d54acc55b022f186 100644 (file)
@@ -1365,20 +1365,20 @@ int phar_create_or_parse_filename(char *fname, size_t fname_len, char *alias, si
                                (*pphar)->is_writeable = 1;
                        }
                        if (actual) {
-                               zend_string_release(actual);
+                               zend_string_release_ex(actual, 0);
                        }
                        return SUCCESS;
                } else {
                        /* file exists, but is either corrupt or not a phar archive */
                        if (actual) {
-                               zend_string_release(actual);
+                               zend_string_release_ex(actual, 0);
                        }
                        return FAILURE;
                }
        }
 
        if (actual) {
-               zend_string_release(actual);
+               zend_string_release_ex(actual, 0);
        }
 
        if (PHAR_G(readonly) && !is_data) {
@@ -1519,7 +1519,7 @@ int phar_open_from_filename(char *fname, size_t fname_len, char *alias, size_t a
                        }
                }
                if (actual) {
-                       zend_string_release(actual);
+                       zend_string_release_ex(actual, 0);
                }
                return FAILURE;
        }
@@ -1532,7 +1532,7 @@ int phar_open_from_filename(char *fname, size_t fname_len, char *alias, size_t a
        ret =  phar_open_from_fp(fp, fname, fname_len, alias, alias_len, options, pphar, is_data, error);
 
        if (actual) {
-               zend_string_release(actual);
+               zend_string_release_ex(actual, 0);
        }
 
        return ret;
@@ -2314,7 +2314,7 @@ int phar_open_executed_filename(char *alias, size_t alias_len, char **error) /*
                        spprintf(error, 0, "unable to open phar for reading \"%s\"", fname);
                }
                if (actual) {
-                       zend_string_release(actual);
+                       zend_string_release_ex(actual, 0);
                }
                return FAILURE;
        }
@@ -2327,7 +2327,7 @@ int phar_open_executed_filename(char *alias, size_t alias_len, char **error) /*
        ret = phar_open_from_fp(fp, fname, fname_len, alias, alias_len, REPORT_ERRORS, NULL, 0, error);
 
        if (actual) {
-               zend_string_release(actual);
+               zend_string_release_ex(actual, 0);
        }
 
        return ret;
index 41fb6b4e01fc9a154b4d01d73820bcb1c9950878..32a7a31e7fde989e685b03e01b9a77781fd5ad35 100644 (file)
@@ -1632,7 +1632,7 @@ after_open_fp:
                }
 
                if (opened) {
-                       zend_string_release(opened);
+                       zend_string_release_ex(opened, 0);
                }
 
                if (close_fp) {
@@ -1651,7 +1651,7 @@ after_open_fp:
                }
 
                if (opened) {
-                       zend_string_release(opened);
+                       zend_string_release_ex(opened, 0);
                }
 
                if (temp) {
@@ -3963,7 +3963,7 @@ carry_on:
                }
                zend_throw_exception_ex(spl_ce_RuntimeException, 0,
                        "Unable to read stub");
-               zend_string_release(buf);
+               zend_string_release_ex(buf, 0);
                return;
        }
 
index 4e17e3a54358b562717b999ca5dd233d5c7ec0af..b1ccd53cc36d3da5396d7769c229b21b5275132b 100644 (file)
@@ -907,7 +907,7 @@ static int phar_wrapper_rename(php_stream_wrapper *wrapper, const char *url_from
                                entry->filename = estrndup(ZSTR_VAL(new_str_key), ZSTR_LEN(new_str_key));
                                entry->filename_len = ZSTR_LEN(new_str_key);
 
-                               zend_string_release(str_key);
+                               zend_string_release_ex(str_key, 0);
                                b->h = zend_string_hash_val(new_str_key);
                                b->key = new_str_key;
                        }
@@ -925,7 +925,7 @@ static int phar_wrapper_rename(php_stream_wrapper *wrapper, const char *url_from
                                memcpy(ZSTR_VAL(new_str_key) + to_len, ZSTR_VAL(str_key) + from_len, ZSTR_LEN(str_key) - from_len);
                                ZSTR_VAL(new_str_key)[ZSTR_LEN(new_str_key)] = 0;
 
-                               zend_string_release(str_key);
+                               zend_string_release_ex(str_key, 0);
                                b->h = zend_string_hash_val(new_str_key);
                                b->key = new_str_key;
                        }
@@ -943,7 +943,7 @@ static int phar_wrapper_rename(php_stream_wrapper *wrapper, const char *url_from
                                memcpy(ZSTR_VAL(new_str_key) + to_len, ZSTR_VAL(str_key) + from_len, ZSTR_LEN(str_key) - from_len);
                                ZSTR_VAL(new_str_key)[ZSTR_LEN(new_str_key)] = 0;
 
-                               zend_string_release(str_key);
+                               zend_string_release_ex(str_key, 0);
                                b->h = zend_string_hash_val(new_str_key);
                                b->key = new_str_key;
                        }
index 6385483914840457bced9a6825d62aa16334cacb..d673cc0f68636b68c074945cd82640bdb9414326 100644 (file)
@@ -1036,7 +1036,7 @@ int phar_tar_flush(phar_archive_data *phar, char *user_stub, zend_long len, int
                                if (str) {
                                        len = ZSTR_LEN(str);
                                        user_stub = estrndup(ZSTR_VAL(str), ZSTR_LEN(str));
-                                       zend_string_release(str);
+                                       zend_string_release_ex(str, 0);
                                } else {
                                        user_stub = NULL;
                                        len = 0;
index 349fc6be575ef1ddb351f3fd0a59876346ad1190..7652846ecafd33e0f4fab55240faf97fada5d387 100644 (file)
@@ -1523,7 +1523,7 @@ int phar_verify_signature(php_stream *fp, size_t end_of_phar, uint32_t sig_type,
 
                        if (FAILURE == phar_call_openssl_signverify(0, fp, end_of_phar, pubkey ? ZSTR_VAL(pubkey) : NULL, pubkey ? ZSTR_LEN(pubkey) : 0, &sig, &tempsig)) {
                                if (pubkey) {
-                                       zend_string_release(pubkey);
+                                       zend_string_release_ex(pubkey, 0);
                                }
 
                                if (error) {
@@ -1534,7 +1534,7 @@ int phar_verify_signature(php_stream *fp, size_t end_of_phar, uint32_t sig_type,
                        }
 
                        if (pubkey) {
-                               zend_string_release(pubkey);
+                               zend_string_release_ex(pubkey, 0);
                        }
 
                        sig_len = tempsig;
@@ -1542,7 +1542,7 @@ int phar_verify_signature(php_stream *fp, size_t end_of_phar, uint32_t sig_type,
                        in = BIO_new_mem_buf(pubkey ? ZSTR_VAL(pubkey) : NULL, pubkey ? ZSTR_LEN(pubkey) : 0);
 
                        if (NULL == in) {
-                               zend_string_release(pubkey);
+                               zend_string_release_ex(pubkey, 0);
                                if (error) {
                                        spprintf(error, 0, "openssl signature could not be processed");
                                }
@@ -1551,7 +1551,7 @@ int phar_verify_signature(php_stream *fp, size_t end_of_phar, uint32_t sig_type,
 
                        key = PEM_read_bio_PUBKEY(in, NULL,NULL, NULL);
                        BIO_free(in);
-                       zend_string_release(pubkey);
+                       zend_string_release_ex(pubkey, 0);
 
                        if (NULL == key) {
                                if (error) {
index ae99154241d9bf114486747a3e8c915f4e4531c8..40171203d5617ecb2803ddd3aa00589b7cbfdbfb 100644 (file)
@@ -589,7 +589,7 @@ foundit:
                                        if (str) {
                                                entry.uncompressed_filesize = ZSTR_LEN(str);
                                                actual_alias = estrndup(ZSTR_VAL(str), ZSTR_LEN(str));
-                                               zend_string_release(str);
+                                               zend_string_release_ex(str, 0);
                                        } else {
                                                actual_alias = NULL;
                                                entry.uncompressed_filesize = 0;
@@ -621,7 +621,7 @@ foundit:
                                        if (str) {
                                                entry.uncompressed_filesize = ZSTR_LEN(str);
                                                actual_alias = estrndup(ZSTR_VAL(str), ZSTR_LEN(str));
-                                               zend_string_release(str);
+                                               zend_string_release_ex(str, 0);
                                        } else {
                                                actual_alias = NULL;
                                                entry.uncompressed_filesize = 0;
@@ -643,7 +643,7 @@ foundit:
                                        if (str) {
                                                entry.uncompressed_filesize = ZSTR_LEN(str);
                                                actual_alias = estrndup(ZSTR_VAL(str), ZSTR_LEN(str));
-                                               zend_string_release(str);
+                                               zend_string_release_ex(str, 0);
                                        } else {
                                                actual_alias = NULL;
                                                entry.uncompressed_filesize = 0;
@@ -1276,7 +1276,7 @@ int phar_zip_flush(phar_archive_data *phar, char *user_stub, zend_long len, int
                                if (str) {
                                        len = ZSTR_LEN(str);
                                        user_stub = estrndup(ZSTR_VAL(str), ZSTR_LEN(str));
-                                       zend_string_release(str);
+                                       zend_string_release_ex(str, 0);
                                } else {
                                        user_stub = NULL;
                                        len = 0;
index 7026b020f68e486670b7cad714fcdf71b21c1432..1067ef3f281a8f6a217ea3017649235cf820f084 100644 (file)
@@ -550,7 +550,7 @@ PHP_FUNCTION(readline_completion_function)
        if (!zend_is_callable(arg, 0, NULL)) {
                zend_string *name = zend_get_callable_name(arg);
                php_error_docref(NULL, E_WARNING, "%s is not callable", ZSTR_VAL(name));
-               zend_string_release(name);
+               zend_string_release_ex(name, 0);
                RETURN_FALSE;
        }
 
@@ -598,7 +598,7 @@ PHP_FUNCTION(readline_callback_handler_install)
        if (!zend_is_callable(callback, 0, NULL)) {
                zend_string *name = zend_get_callable_name(callback);
                php_error_docref(NULL, E_WARNING, "%s is not callable", ZSTR_VAL(name));
-               zend_string_release(name);
+               zend_string_release_ex(name, 0);
                RETURN_FALSE;
        }
 
index 66cb34c900e40ba7c7a22299c804910254c9e356..eb5c78ee282a0775075e40f13576e46a47266aa3 100644 (file)
@@ -529,7 +529,7 @@ TODO:
                        class_name = zend_string_alloc(class_name_len, 0);
                        zend_str_tolower_copy(ZSTR_VAL(class_name), text, class_name_len);
                        if ((ce = zend_lookup_class(class_name)) == NULL) {
-                               zend_string_release(class_name);
+                               zend_string_release_ex(class_name, 0);
                                return NULL;
                        }
                        lc_text = zend_str_tolower_dup(class_name_end + 2, textlen - 2 - class_name_len);
@@ -560,7 +560,7 @@ TODO:
                }
                efree(lc_text);
                if (class_name_end) {
-                       zend_string_release(class_name);
+                       zend_string_release_ex(class_name, 0);
                }
                if (ce && retval) {
                        int len = class_name_len + 2 + strlen(retval) + 1;
@@ -637,10 +637,10 @@ static int readline_shell_run(void) /* {{{ */
                                cmd = zend_string_init(&line[1], param - &line[1] - 1, 0);
 
                                zend_alter_ini_entry_chars_ex(cmd, param, strlen(param), PHP_INI_USER, PHP_INI_STAGE_RUNTIME, 0);
-                               zend_string_release(cmd);
+                               zend_string_release_ex(cmd, 0);
                                add_history(line);
 
-                               zend_string_release(prompt);
+                               zend_string_release_ex(prompt, 0);
                                /* TODO: This might be wrong! */
                                prompt = cli_get_prompt("php", '>');
                                continue;
@@ -662,7 +662,7 @@ static int readline_shell_run(void) /* {{{ */
                }
 
                free(line);
-               zend_string_release(prompt);
+               zend_string_release_ex(prompt, 0);
 
                if (!cli_is_valid_code(code, pos, &prompt)) {
                        continue;
@@ -704,7 +704,7 @@ static int readline_shell_run(void) /* {{{ */
        free(history_file);
 #endif
        efree(code);
-       zend_string_release(prompt);
+       zend_string_release_ex(prompt, 0);
        return EG(exit_status);
 }
 /* }}} */
index 87ffeba666ccde783749927c43ba542dce19430a..0364c064419b398486f3352dde5b162389c998ee 100644 (file)
@@ -211,7 +211,7 @@ static void _free_function(zend_function *fptr) /* {{{ */
        if (fptr
                && (fptr->internal_function.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE))
        {
-               zend_string_release(fptr->internal_function.function_name);
+               zend_string_release_ex(fptr->internal_function.function_name, 0);
                zend_free_trampoline(fptr);
        }
 }
@@ -244,7 +244,7 @@ static void reflection_free_objects_storage(zend_object *object) /* {{{ */
                        break;
                case REF_TYPE_DYNAMIC_PROPERTY:
                        prop_reference = (property_reference*)intern->ptr;
-                       zend_string_release(prop_reference->prop.name);
+                       zend_string_release_ex(prop_reference->prop.name, 0);
                        efree(intern->ptr);
                        break;
                case REF_TYPE_GENERATOR:
@@ -528,7 +528,7 @@ static void _class_string(smart_str *str, zend_class_entry *ce, zval *obj, char
        smart_str_append_printf(str, "%s  }\n", indent);
 
        smart_str_append_printf(str, "%s}\n", indent);
-       zend_string_release(sub_indent);
+       zend_string_release_ex(sub_indent, 0);
 }
 /* }}} */
 
@@ -760,7 +760,7 @@ static void _function_string(smart_str *str, zend_function *fptr, zend_class_ent
                                        smart_str_append_printf(str, ", overwrites %s", ZSTR_VAL(overwrites->common.scope->name));
                                }
                        }
-                       zend_string_release(lc_name);
+                       zend_string_release_ex(lc_name, 0);
                }
        }
        if (fptr->common.prototype && fptr->common.prototype->common.scope) {
@@ -1060,7 +1060,7 @@ static void _extension_string(smart_str *str, zend_module_entry *module, char *i
                        smart_str_append_printf(str, "%s  }\n", indent);
                }
                smart_str_free(&str_classes);
-               zend_string_release(sub_indent);
+               zend_string_release_ex(sub_indent, 0);
        }
 
        smart_str_append_printf(str, "%s}\n", indent);
@@ -2391,7 +2391,7 @@ ZEND_METHOD(reflection_parameter, __construct)
                if (position < 0 || (uint32_t)position >= num_args) {
                        if (fptr->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
                                if (fptr->type != ZEND_OVERLOADED_FUNCTION) {
-                                       zend_string_release(fptr->common.function_name);
+                                       zend_string_release_ex(fptr->common.function_name, 0);
                                }
                                zend_free_trampoline(fptr);
                        }
@@ -2430,7 +2430,7 @@ ZEND_METHOD(reflection_parameter, __construct)
                if (position == -1) {
                        if (fptr->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
                                if (fptr->type != ZEND_OVERLOADED_FUNCTION) {
-                                       zend_string_release(fptr->common.function_name);
+                                       zend_string_release_ex(fptr->common.function_name, 0);
                                }
                                zend_free_trampoline(fptr);
                        }
@@ -4337,10 +4337,10 @@ ZEND_METHOD(reflection_class, getProperty)
                        if (!EG(exception)) {
                                zend_throw_exception_ex(reflection_exception_ptr, -1, "Class %s does not exist", ZSTR_VAL(classname));
                        }
-                       zend_string_release(classname);
+                       zend_string_release_ex(classname, 0);
                        return;
                }
-               zend_string_release(classname);
+               zend_string_release_ex(classname, 0);
 
                if (!instanceof_function(ce, ce2)) {
                        zend_throw_exception_ex(reflection_exception_ptr, -1, "Fully qualified property name %s::%s does not specify a base class of %s", ZSTR_VAL(ce2->name), str_name, ZSTR_VAL(ce->name));
index 1c87018043c540aedf4f940caaec1b5f51e96f6b..cec67df148a134507e69a01277ab6a3cfe1c7970 100644 (file)
@@ -528,7 +528,7 @@ PS_READ_FUNC(files)
                } else {
                        php_error_docref(NULL, E_WARNING, "read returned less bytes than requested");
                }
-               zend_string_release(*val);
+               zend_string_release_ex(*val, 0);
                *val =  ZSTR_EMPTY_ALLOC();
                return FAILURE;
        }
@@ -692,7 +692,7 @@ PS_CREATE_SID_FUNC(files)
                /* FIXME: mod_data(data) should not be NULL (User handler could be NULL) */
                if (data && ps_files_key_exists(data, ZSTR_VAL(sid)) == SUCCESS) {
                        if (sid) {
-                               zend_string_release(sid);
+                               zend_string_release_ex(sid, 0);
                                sid = NULL;
                        }
                        if (--maxfail < 0) {
index 2c2fd224cf3d4e383093e5faf34af37068b6d303..e1e3c54d208bb1d730e0904271ae2dc26294fc1d 100644 (file)
@@ -482,7 +482,7 @@ PS_CREATE_SID_FUNC(mm)
                /* Check collision */
                if (ps_mm_key_exists(data, sid->val) == SUCCESS) {
                        if (sid) {
-                               zend_string_release(sid);
+                               zend_string_release_ex(sid, 0);
                                sid = NULL;
                        }
                        if (!(maxfail--)) {
index 4e5985e7ad377ea6ea9ad1ac02e1ec88026575ed..3482768781806a1e42bf504efe28d52e297d044c 100644 (file)
@@ -140,12 +140,12 @@ static inline void php_rshutdown_session_globals(void) /* {{{ */
                } zend_end_try();
        }
        if (PS(id)) {
-               zend_string_release(PS(id));
+               zend_string_release_ex(PS(id), 0);
                PS(id) = NULL;
        }
 
        if (PS(session_vars)) {
-               zend_string_release(PS(session_vars));
+               zend_string_release_ex(PS(session_vars), 0);
                PS(session_vars) = NULL;
        }
 
@@ -225,7 +225,7 @@ static void php_session_track_init(void) /* {{{ */
        ZVAL_NEW_REF(&PS(http_session_vars), &session_vars);
        Z_ADDREF_P(&PS(http_session_vars));
        zend_hash_update_ind(&EG(symbol_table), var_name, &PS(http_session_vars));
-       zend_string_release(var_name);
+       zend_string_release_ex(var_name, 0);
 }
 /* }}} */
 
@@ -406,7 +406,7 @@ static int php_session_initialize(void) /* {{{ */
        /* If there is no ID, use session module to create one */
        if (!PS(id) || !ZSTR_VAL(PS(id))[0]) {
                if (PS(id)) {
-                       zend_string_release(PS(id));
+                       zend_string_release_ex(PS(id), 0);
                }
                PS(id) = PS(mod)->s_create_sid(&PS(mod_data));
                if (!PS(id)) {
@@ -420,7 +420,7 @@ static int php_session_initialize(void) /* {{{ */
        } else if (PS(use_strict_mode) && PS(mod)->s_validate_sid &&
                PS(mod)->s_validate_sid(&PS(mod_data), PS(id)) == FAILURE) {
                if (PS(id)) {
-                       zend_string_release(PS(id));
+                       zend_string_release_ex(PS(id), 0);
                }
                PS(id) = PS(mod)->s_create_sid(&PS(mod_data));
                if (!PS(id)) {
@@ -449,7 +449,7 @@ static int php_session_initialize(void) /* {{{ */
        php_session_gc(0);
 
        if (PS(session_vars)) {
-               zend_string_release(PS(session_vars));
+               zend_string_release_ex(PS(session_vars), 0);
                PS(session_vars) = NULL;
        }
        if (val) {
@@ -457,7 +457,7 @@ static int php_session_initialize(void) /* {{{ */
                        PS(session_vars) = zend_string_copy(val);
                }
                php_session_decode(val);
-               zend_string_release(val);
+               zend_string_release_ex(val, 0);
        }
        return SUCCESS;
 }
@@ -484,7 +484,7 @@ static void php_session_save_current_state(int write) /* {{{ */
                                        } else {
                                                ret = PS(mod)->s_write(&PS(mod_data), PS(id), val, PS(gc_maxlifetime));
                                        }
-                                       zend_string_release(val);
+                                       zend_string_release_ex(val, 0);
                                } else {
                                        ret = PS(mod)->s_write(&PS(mod_data), PS(id), ZSTR_EMPTY_ALLOC(), PS(gc_maxlifetime));
                                }
@@ -877,7 +877,7 @@ PS_SERIALIZER_DECODE_FUNC(php_serialize) /* {{{ */
        ZVAL_NEW_REF(&PS(http_session_vars), &session_vars);
        Z_ADDREF_P(&PS(http_session_vars));
        zend_hash_update_ind(&EG(symbol_table), var_name, &PS(http_session_vars));
-       zend_string_release(var_name);
+       zend_string_release_ex(var_name, 0);
        return SUCCESS;
 }
 /* }}} */
@@ -935,12 +935,12 @@ PS_SERIALIZER_DECODE_FUNC(php_binary) /* {{{ */
                        ZVAL_PTR(&rv, current);
                        php_set_session_var(name, &rv, &var_hash);
                } else {
-                       zend_string_release(name);
+                       zend_string_release_ex(name, 0);
                        php_session_normalize_vars();
                        PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
                        return FAILURE;
                }
-               zend_string_release(name);
+               zend_string_release_ex(name, 0);
        }
 
        php_session_normalize_vars();
@@ -1007,11 +1007,11 @@ PS_SERIALIZER_DECODE_FUNC(php) /* {{{ */
                        ZVAL_PTR(&rv, current);
                        php_set_session_var(name, &rv, &var_hash);
                } else {
-                       zend_string_release(name);
+                       zend_string_release_ex(name, 0);
                        retval = FAILURE;
                        goto break_outer_loop;
                }
-               zend_string_release(name);
+               zend_string_release_ex(name, 0);
                p = q;
        }
 
@@ -1323,8 +1323,8 @@ static int php_session_send_cookie(void) /* {{{ */
        smart_str_appendc(&ncookie, '=');
        smart_str_appendl(&ncookie, ZSTR_VAL(e_id), ZSTR_LEN(e_id));
 
-       zend_string_release(e_session_name);
-       zend_string_release(e_id);
+       zend_string_release_ex(e_session_name, 0);
+       zend_string_release_ex(e_id, 0);
 
        if (PS(cookie_lifetime) > 0) {
                struct timeval tv;
@@ -1337,7 +1337,7 @@ static int php_session_send_cookie(void) /* {{{ */
                        date_fmt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, d-M-Y H:i:s T")-1, t, 0);
                        smart_str_appends(&ncookie, COOKIE_EXPIRES);
                        smart_str_appendl(&ncookie, ZSTR_VAL(date_fmt), ZSTR_LEN(date_fmt));
-                       zend_string_release(date_fmt);
+                       zend_string_release_ex(date_fmt, 0);
 
                        smart_str_appends(&ncookie, COOKIE_MAX_AGE);
                        smart_str_append_long(&ncookie, PS(cookie_lifetime));
@@ -1446,7 +1446,7 @@ PHPAPI int php_session_reset_id(void) /* {{{ */
                smart_str_appends(&var, ZSTR_VAL(PS(id)));
                smart_str_0(&var);
                if (sid) {
-                       zend_string_release(Z_STR_P(sid));
+                       zend_string_release_ex(Z_STR_P(sid), 0);
                        ZVAL_NEW_STR(sid, var.s);
                } else {
                        REGISTER_STRINGL_CONSTANT("SID", ZSTR_VAL(var.s), ZSTR_LEN(var.s), 0);
@@ -1454,7 +1454,7 @@ PHPAPI int php_session_reset_id(void) /* {{{ */
                }
        } else {
                if (sid) {
-                       zend_string_release(Z_STR_P(sid));
+                       zend_string_release_ex(Z_STR_P(sid), 0);
                        ZVAL_EMPTY_STRING(sid);
                } else {
                        REGISTER_STRINGL_CONSTANT("SID", "", 0, 0);
@@ -1479,7 +1479,7 @@ PHPAPI int php_session_reset_id(void) /* {{{ */
                zend_string *sname;
                sname = zend_string_init(PS(session_name), strlen(PS(session_name)), 0);
                php_url_scanner_reset_session_var(sname, 1); /* This may fail when session name has changed */
-               zend_string_release(sname);
+               zend_string_release_ex(sname, 0);
                php_url_scanner_add_session_var(PS(session_name), strlen(PS(session_name)), ZSTR_VAL(PS(id)), ZSTR_LEN(PS(id)), 1);
        }
        return SUCCESS;
@@ -1584,7 +1584,7 @@ PHPAPI int php_session_start(void) /* {{{ */
                                Z_STRLEN_P(data) != 0 &&
                                strstr(Z_STRVAL_P(data), PS(extern_referer_chk)) == NULL
                        ) {
-                               zend_string_release(PS(id));
+                               zend_string_release_ex(PS(id), 0);
                                PS(id) = NULL;
                        }
                }
@@ -1593,7 +1593,7 @@ PHPAPI int php_session_start(void) /* {{{ */
        /* Finally check session id for dangerous characters
         * Security note: session id may be embedded in HTML pages.*/
        if (PS(id) && strpbrk(ZSTR_VAL(PS(id)), "\r\n\t <>'\"\\")) {
-               zend_string_release(PS(id));
+               zend_string_release_ex(PS(id), 0);
                PS(id) = NULL;
        }
 
@@ -1601,7 +1601,7 @@ PHPAPI int php_session_start(void) /* {{{ */
                || php_session_cache_limiter() == -2) {
                PS(session_status) = php_session_none;
                if (PS(id)) {
-                       zend_string_release(PS(id));
+                       zend_string_release_ex(PS(id), 0);
                        PS(id) = NULL;
                }
                return FAILURE;
@@ -1690,43 +1690,43 @@ static PHP_FUNCTION(session_set_cookie_params)
 
        ini_name = zend_string_init("session.cookie_lifetime", sizeof("session.cookie_lifetime") - 1, 0);
        if (zend_alter_ini_entry(ini_name,  Z_STR_P(lifetime), PHP_INI_USER, PHP_INI_STAGE_RUNTIME) == FAILURE) {
-               zend_string_release(ini_name);
+               zend_string_release_ex(ini_name, 0);
                RETURN_FALSE;
        }
-       zend_string_release(ini_name);
+       zend_string_release_ex(ini_name, 0);
 
        if (path) {
                ini_name = zend_string_init("session.cookie_path", sizeof("session.cookie_path") - 1, 0);
                if (zend_alter_ini_entry(ini_name, path, PHP_INI_USER, PHP_INI_STAGE_RUNTIME) == FAILURE) {
-                       zend_string_release(ini_name);
+                       zend_string_release_ex(ini_name, 0);
                        RETURN_FALSE;
                }
-               zend_string_release(ini_name);
+               zend_string_release_ex(ini_name, 0);
        }
        if (domain) {
                ini_name = zend_string_init("session.cookie_domain", sizeof("session.cookie_domain") - 1, 0);
                if (zend_alter_ini_entry(ini_name, domain, PHP_INI_USER, PHP_INI_STAGE_RUNTIME) == FAILURE) {
-                       zend_string_release(ini_name);
+                       zend_string_release_ex(ini_name, 0);
                        RETURN_FALSE;
                }
-               zend_string_release(ini_name);
+               zend_string_release_ex(ini_name, 0);
        }
 
        if (argc > 3) {
                ini_name = zend_string_init("session.cookie_secure", sizeof("session.cookie_secure") - 1, 0);
                if (zend_alter_ini_entry_chars(ini_name, secure ? "1" : "0", 1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME) == FAILURE) {
-                       zend_string_release(ini_name);
+                       zend_string_release_ex(ini_name, 0);
                        RETURN_FALSE;
                }
-               zend_string_release(ini_name);
+               zend_string_release_ex(ini_name, 0);
        }
        if (argc > 4) {
                ini_name = zend_string_init("session.cookie_httponly", sizeof("session.cookie_httponly") - 1, 0);
                if (zend_alter_ini_entry_chars(ini_name, httponly ? "1" : "0", 1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME) == FAILURE) {
-                       zend_string_release(ini_name);
+                       zend_string_release_ex(ini_name, 0);
                        RETURN_FALSE;
                }
-               zend_string_release(ini_name);
+               zend_string_release_ex(ini_name, 0);
        }
 
        RETURN_TRUE;
@@ -1777,7 +1777,7 @@ static PHP_FUNCTION(session_name)
        if (name) {
                ini_name = zend_string_init("session.name", sizeof("session.name") - 1, 0);
                zend_alter_ini_entry(ini_name, name, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
-               zend_string_release(ini_name);
+               zend_string_release_ex(ini_name, 0);
        }
 }
 /* }}} */
@@ -1824,7 +1824,7 @@ static PHP_FUNCTION(session_module_name)
 
                ini_name = zend_string_init("session.save_handler", sizeof("session.save_handler") - 1, 0);
                zend_alter_ini_entry(ini_name, name, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
-               zend_string_release(ini_name);
+               zend_string_release_ex(ini_name, 0);
        }
 }
 /* }}} */
@@ -1943,8 +1943,8 @@ static PHP_FUNCTION(session_set_save_handler)
                        PS(set_handler) = 1;
                        zend_alter_ini_entry(ini_name, ini_val, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
                        PS(set_handler) = 0;
-                       zend_string_release(ini_val);
-                       zend_string_release(ini_name);
+                       zend_string_release_ex(ini_val, 0);
+                       zend_string_release_ex(ini_name, 0);
                }
 
                RETURN_TRUE;
@@ -1967,7 +1967,7 @@ static PHP_FUNCTION(session_set_save_handler)
                if (!zend_is_callable(&args[i], 0, NULL)) {
                        zend_string *name = zend_get_callable_name(&args[i]);
                        php_error_docref(NULL, E_WARNING, "Argument %d is not a valid callback", i+1);
-                       zend_string_release(name);
+                       zend_string_release_ex(name, 0);
                        RETURN_FALSE;
                }
        }
@@ -1978,8 +1978,8 @@ static PHP_FUNCTION(session_set_save_handler)
                PS(set_handler) = 1;
                zend_alter_ini_entry(ini_name, ini_val, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
                PS(set_handler) = 0;
-               zend_string_release(ini_val);
-               zend_string_release(ini_name);
+               zend_string_release_ex(ini_val, 0);
+               zend_string_release_ex(ini_name, 0);
        }
 
        for (i = 0; i < argc; i++) {
@@ -2024,7 +2024,7 @@ static PHP_FUNCTION(session_save_path)
                }
                ini_name = zend_string_init("session.save_path", sizeof("session.save_path") - 1, 0);
                zend_alter_ini_entry(ini_name, name, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
-               zend_string_release(ini_name);
+               zend_string_release_ex(ini_name, 0);
        }
 }
 /* }}} */
@@ -2065,7 +2065,7 @@ static PHP_FUNCTION(session_id)
 
        if (name) {
                if (PS(id)) {
-                       zend_string_release(PS(id));
+                       zend_string_release_ex(PS(id), 0);
                }
                PS(id) = zend_string_copy(name);
        }
@@ -2106,7 +2106,7 @@ static PHP_FUNCTION(session_regenerate_id)
                data = php_session_encode();
                if (data) {
                        ret = PS(mod)->s_write(&PS(mod_data), PS(id), data, PS(gc_maxlifetime));
-                       zend_string_release(data);
+                       zend_string_release_ex(data, 0);
                } else {
                        ret = PS(mod)->s_write(&PS(mod_data), PS(id), ZSTR_EMPTY_ALLOC(), PS(gc_maxlifetime));
                }
@@ -2121,10 +2121,10 @@ static PHP_FUNCTION(session_regenerate_id)
 
        /* New session data */
        if (PS(session_vars)) {
-               zend_string_release(PS(session_vars));
+               zend_string_release_ex(PS(session_vars), 0);
                PS(session_vars) = NULL;
        }
-       zend_string_release(PS(id));
+       zend_string_release_ex(PS(id), 0);
        PS(id) = NULL;
 
        if (PS(mod)->s_open(&PS(mod_data), PS(save_path), PS(session_name)) == FAILURE) {
@@ -2141,7 +2141,7 @@ static PHP_FUNCTION(session_regenerate_id)
        }
        if (PS(use_strict_mode) && PS(mod)->s_validate_sid &&
                PS(mod)->s_validate_sid(&PS(mod_data), PS(id)) == FAILURE) {
-               zend_string_release(PS(id));
+               zend_string_release_ex(PS(id), 0);
                PS(id) = PS(mod)->s_create_sid(&PS(mod_data));
                if (!PS(id)) {
                        PS(mod)->s_close(&PS(mod_data));
@@ -2158,7 +2158,7 @@ static PHP_FUNCTION(session_regenerate_id)
                RETURN_FALSE;
        }
        if (data) {
-               zend_string_release(data);
+               zend_string_release_ex(data, 0);
        }
 
        if (PS(use_cookies)) {
@@ -2203,7 +2203,7 @@ static PHP_FUNCTION(session_create_id)
                        } else {
                                /* Detect collision and retry */
                                if (PS(mod)->s_validate_sid(&PS(mod_data), new_id) == FAILURE) {
-                                       zend_string_release(new_id);
+                                       zend_string_release_ex(new_id, 0);
                                        continue;
                                }
                                break;
@@ -2215,7 +2215,7 @@ static PHP_FUNCTION(session_create_id)
 
        if (new_id) {
                smart_str_append(&id, new_id);
-               zend_string_release(new_id);
+               zend_string_release_ex(new_id, 0);
        } else {
                smart_str_free(&id);
                php_error_docref(NULL, E_WARNING, "Failed to create new ID");
@@ -2252,7 +2252,7 @@ static PHP_FUNCTION(session_cache_limiter)
        if (limiter) {
                ini_name = zend_string_init("session.cache_limiter", sizeof("session.cache_limiter") - 1, 0);
                zend_alter_ini_entry(ini_name, limiter, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
-               zend_string_release(ini_name);
+               zend_string_release_ex(ini_name, 0);
        }
 }
 /* }}} */
@@ -2284,7 +2284,7 @@ static PHP_FUNCTION(session_cache_expire)
                convert_to_string_ex(expires);
                ini_name = zend_string_init("session.cache_expire", sizeof("session.cache_expire") - 1, 0);
                zend_alter_ini_entry(ini_name, Z_STR_P(expires), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
-               zend_string_release(ini_name);
+               zend_string_release_ex(ini_name, 0);
        }
 }
 /* }}} */
index d7a482a0555fa95cf0c4ecb1042532ca03df3951..605c9e883e01bc8fc99499a8d9c50b8e2d159b3e 100644 (file)
@@ -465,7 +465,7 @@ long_dim:
                        if (Z_TYPE_P(member) != IS_STRING) {
                                trim_str = zval_get_string_func(member);
                                ZVAL_STR(&tmp_zv, php_trim(trim_str, NULL, 0, 3));
-                               zend_string_release(trim_str);
+                               zend_string_release_ex(trim_str, 0);
                                member = &tmp_zv;
                        }
 
@@ -1013,7 +1013,7 @@ static void sxe_properties_add(HashTable *rv, char *name, int namelen, zval *val
        } else {
                zend_hash_add_new(rv, key, value);
        }
-       zend_string_release(key);
+       zend_string_release_ex(key, 0);
 }
 /* }}} */
 
@@ -1506,7 +1506,7 @@ static inline void sxe_add_namespace_name(zval *return_value, xmlNsPtr ns) /* {{
                ZVAL_STRING(&zv, (char*)ns->href);
                zend_hash_add_new(Z_ARRVAL_P(return_value), key, &zv);
        }
-       zend_string_release(key);
+       zend_string_release_ex(key, 0);
 }
 /* }}} */
 
index 59c820a8be82236bfd61905b6c6b38c0c61c75e2..0bdbcdf80b5851b23d0bc9346e87f4a0ad3252cd 100644 (file)
@@ -1907,7 +1907,7 @@ void php_snmp_add_property(HashTable *h, const char *name, size_t name_length, p
        p.write_func = (write_func) ? write_func : NULL;
        str = zend_string_init_interned(name, name_length, 1);
        zend_hash_add_mem(h, str, &p, sizeof(php_snmp_prop_handler));
-       zend_string_release(str);
+       zend_string_release_ex(str, 1);
 }
 /* }}} */
 
index 8ab613ac11d1116604085e493ebd2e2e127e98df..c2aaf367972a0f1e7a51505e04a7e91c9af1404f 100644 (file)
@@ -848,7 +848,7 @@ static xmlNodePtr to_xml_string(encodeTypePtr type, zval *data, int style, xmlNo
                zend_string *tmp = zval_get_string_func(data);
                str = estrndup(ZSTR_VAL(tmp), ZSTR_LEN(tmp));
                new_len = ZSTR_LEN(tmp);
-               zend_string_release(tmp);
+               zend_string_release_ex(tmp, 0);
        }
 
        if (SOAP_GLOBAL(encoding) != NULL) {
@@ -930,12 +930,12 @@ static xmlNodePtr to_xml_base64(encodeTypePtr type, zval *data, int style, xmlNo
        } else {
                zend_string *tmp = zval_get_string_func(data);
                str = php_base64_encode((unsigned char*) ZSTR_VAL(tmp), ZSTR_LEN(tmp));
-               zend_string_release(tmp);
+               zend_string_release_ex(tmp, 0);
        }
 
        text = xmlNewTextLen(BAD_CAST(ZSTR_VAL(str)), ZSTR_LEN(str));
        xmlAddChild(ret, text);
-       zend_string_release(str);
+       zend_string_release_ex(str, 0);
 
        if (style == SOAP_ENCODED) {
                set_ns_and_type(ret, type);
@@ -1066,7 +1066,7 @@ static xmlNodePtr to_xml_long(encodeTypePtr type, zval *data, int style, xmlNode
        } else {
                zend_string *str = zend_long_to_str(zval_get_long(data));
                xmlNodeSetContentLen(ret, BAD_CAST(ZSTR_VAL(str)), ZSTR_LEN(str));
-               zend_string_release(str);
+               zend_string_release_ex(str, 0);
        }
 
        if (style == SOAP_ENCODED) {
@@ -3142,7 +3142,7 @@ static xmlNodePtr to_xml_any(encodeTypePtr type, zval *data, int style, xmlNodeP
        } else {
                zend_string *tmp = zval_get_string_func(data);
                ret = xmlNewTextLen(BAD_CAST(ZSTR_VAL(tmp)), ZSTR_LEN(tmp));
-               zend_string_release(tmp);
+               zend_string_release_ex(tmp, 0);
        }
 
        ret->name = xmlStringTextNoenc;
index 3be02235a6b4e676f5c1f57c5bc0f5893966d243..e2095621d05716d451635adf7b6ac8a89becb792 100644 (file)
@@ -52,7 +52,7 @@ int proxy_authentication(zval* this_ptr, smart_str* soap_headers)
                smart_str_append_const(soap_headers, "Proxy-Authorization: Basic ");
                smart_str_appendl(soap_headers, (char*)ZSTR_VAL(buf), ZSTR_LEN(buf));
                smart_str_append_const(soap_headers, "\r\n");
-               zend_string_release(buf);
+               zend_string_release_ex(buf, 0);
                smart_str_free(&auth);
                return 1;
        }
@@ -81,7 +81,7 @@ int basic_authentication(zval* this_ptr, smart_str* soap_headers)
                smart_str_append_const(soap_headers, "Authorization: Basic ");
                smart_str_appendl(soap_headers, (char*)ZSTR_VAL(buf), ZSTR_LEN(buf));
                smart_str_append_const(soap_headers, "\r\n");
-               zend_string_release(buf);
+               zend_string_release_ex(buf, 0);
                smart_str_free(&auth);
                return 1;
        }
@@ -408,7 +408,7 @@ int make_http_soap_request(zval        *this_ptr,
                                zval_ptr_dtor(&params[0]);
                                zval_ptr_dtor(&func);
                                if (request != buf) {
-                                       zend_string_release(request);
+                                       zend_string_release_ex(request, 0);
                                }
                                smart_str_free(&soap_headers_z);
                                return FALSE;
@@ -446,7 +446,7 @@ try_again:
        if (phpurl == NULL || phpurl->host == NULL) {
          if (phpurl != NULL) {php_url_free(phpurl);}
                if (request != buf) {
-                       zend_string_release(request);
+                       zend_string_release_ex(request, 0);
                }
                add_soap_fault(this_ptr, "HTTP", "Unable to parse URL", NULL, NULL);
                smart_str_free(&soap_headers_z);
@@ -459,7 +459,7 @@ try_again:
        } else if (phpurl->scheme == NULL || !zend_string_equals_literal(phpurl->scheme, "http")) {
                php_url_free(phpurl);
                if (request != buf) {
-                       zend_string_release(request);
+                       zend_string_release_ex(request, 0);
                }
                add_soap_fault(this_ptr, "HTTP", "Unknown protocol. Only http and https are allowed.", NULL, NULL);
                smart_str_free(&soap_headers_z);
@@ -471,7 +471,7 @@ try_again:
        if (use_ssl && php_stream_locate_url_wrapper("https://", NULL, STREAM_LOCATE_WRAPPERS_ONLY) == NULL) {
                php_url_free(phpurl);
                if (request != buf) {
-                       zend_string_release(request);
+                       zend_string_release_ex(request, 0);
                }
                add_soap_fault(this_ptr, "HTTP", "SSL support is not available in this build", NULL, NULL);
                PG(allow_url_fopen) = old_allow_url_fopen;
@@ -524,7 +524,7 @@ try_again:
                } else {
                        php_url_free(phpurl);
                        if (request != buf) {
-                               zend_string_release(request);
+                               zend_string_release_ex(request, 0);
                        }
                        add_soap_fault(this_ptr, "HTTP", "Could not connect to host", NULL, NULL);
                        PG(allow_url_fopen) = old_allow_url_fopen;
@@ -800,7 +800,7 @@ try_again:
                                smart_str_append_const(&soap_headers, "Authorization: Basic ");
                                smart_str_appendl(&soap_headers, (char*)ZSTR_VAL(buf), ZSTR_LEN(buf));
                                smart_str_append_const(&soap_headers, "\r\n");
-                               zend_string_release(buf);
+                               zend_string_release_ex(buf, 0);
                                smart_str_free(&auth);
                        }
                }
@@ -867,7 +867,7 @@ try_again:
                err = php_stream_write(stream, ZSTR_VAL(soap_headers.s), ZSTR_LEN(soap_headers.s));
                if (err != ZSTR_LEN(soap_headers.s)) {
                        if (request != buf) {
-                               zend_string_release(request);
+                               zend_string_release_ex(request, 0);
                        }
                        php_stream_close(stream);
                        zend_hash_str_del(Z_OBJPROP_P(this_ptr), "httpurl", sizeof("httpurl")-1);
@@ -896,7 +896,7 @@ try_again:
                http_headers = get_http_headers(stream);
                if (!http_headers) {
                        if (request != buf) {
-                               zend_string_release(request);
+                               zend_string_release_ex(request, 0);
                        }
                        php_stream_close(stream);
                        zend_hash_str_del(Z_OBJPROP_P(this_ptr), "httpsocket", sizeof("httpsocket")-1);
@@ -939,7 +939,7 @@ try_again:
 
                        /* Try and get headers again */
                        if (http_status == 100) {
-                               zend_string_release(http_headers);
+                               zend_string_release_ex(http_headers, 0);
                        }
                }
        } while (http_status == 100);
@@ -1072,10 +1072,10 @@ try_again:
        http_body = get_http_body(stream, http_close, ZSTR_VAL(http_headers));
        if (!http_body) {
                if (request != buf) {
-                       zend_string_release(request);
+                       zend_string_release_ex(request, 0);
                }
                php_stream_close(stream);
-               zend_string_release(http_headers);
+               zend_string_release_ex(http_headers, 0);
                zend_hash_str_del(Z_OBJPROP_P(this_ptr), "httpsocket", sizeof("httpsocket")-1);
                zend_hash_str_del(Z_OBJPROP_P(this_ptr), "_use_proxy", sizeof("_use_proxy")-1);
                add_soap_fault(this_ptr, "HTTP", "Error Fetching http body, No Content-Length, connection closed or chunked data", NULL, NULL);
@@ -1087,7 +1087,7 @@ try_again:
        }
 
        if (request != buf) {
-               zend_string_release(request);
+               zend_string_release_ex(request, 0);
        }
 
        if (http_close) {
@@ -1105,8 +1105,8 @@ try_again:
                        php_url *new_url  = php_url_parse(loc);
 
                        if (new_url != NULL) {
-                               zend_string_release(http_headers);
-                               zend_string_release(http_body);
+                               zend_string_release_ex(http_headers, 0);
+                               zend_string_release_ex(http_body, 0);
                                efree(loc);
                                if (new_url->scheme == NULL && new_url->path != NULL) {
                                        new_url->scheme = phpurl->scheme ? zend_string_copy(phpurl->scheme) : NULL;
@@ -1121,7 +1121,7 @@ try_again:
                                                                strncpy(ZSTR_VAL(s), t, (p - t) + 1);
                                                                ZSTR_VAL(s)[(p - t) + 1] = 0;
                                                                strcat(ZSTR_VAL(s), ZSTR_VAL(new_url->path));
-                                                               zend_string_release(new_url->path);
+                                                               zend_string_release_ex(new_url->path, 0);
                                                                new_url->path = s;
                                                        }
                                                } else {
@@ -1129,7 +1129,7 @@ try_again:
                                                        ZSTR_VAL(s)[0] = '/';
                                                        ZSTR_VAL(s)[1] = 0;
                                                        strcat(ZSTR_VAL(s), ZSTR_VAL(new_url->path));
-                                                       zend_string_release(new_url->path);
+                                                       zend_string_release_ex(new_url->path, 0);
                                                        new_url->path = s;
                                                }
                                        }
@@ -1214,8 +1214,8 @@ try_again:
                                phpurl = new_url;
 
                                efree(auth);
-                               zend_string_release(http_headers);
-                               zend_string_release(http_body);
+                               zend_string_release_ex(http_headers, 0);
+                               zend_string_release_ex(http_body, 0);
 
                                goto try_again;
                        }
@@ -1245,7 +1245,7 @@ try_again:
                                ZVAL_STRINGL(err, http_body, http_body_size, 1);
                                add_soap_fault(this_ptr, "HTTP", "Didn't receive an xml document", NULL, err);
                                efree(content_type);
-                               zend_string_release(http_headers);
+                               zend_string_release_ex(http_headers, 0);
                                efree(http_body);
                                return FALSE;
                        }
@@ -1272,8 +1272,8 @@ try_again:
                        ZVAL_STR_COPY(&params[0], http_body);
                } else {
                        efree(content_encoding);
-                       zend_string_release(http_headers);
-                       zend_string_release(http_body);
+                       zend_string_release_ex(http_headers, 0);
+                       zend_string_release_ex(http_body, 0);
                        if (http_msg) {
                                efree(http_msg);
                        }
@@ -1284,14 +1284,14 @@ try_again:
                    Z_TYPE(retval) == IS_STRING) {
                        zval_ptr_dtor(&params[0]);
                        zval_ptr_dtor(&func);
-                       zend_string_release(http_body);
+                       zend_string_release_ex(http_body, 0);
                        ZVAL_COPY_VALUE(return_value, &retval);
                } else {
                        zval_ptr_dtor(&params[0]);
                        zval_ptr_dtor(&func);
                        efree(content_encoding);
-                       zend_string_release(http_headers);
-                       zend_string_release(http_body);
+                       zend_string_release_ex(http_headers, 0);
+                       zend_string_release_ex(http_body, 0);
                        add_soap_fault(this_ptr, "HTTP", "Can't uncompress compressed response", NULL, NULL);
                        if (http_msg) {
                                efree(http_msg);
@@ -1303,7 +1303,7 @@ try_again:
                ZVAL_STR(return_value, http_body);
        }
 
-       zend_string_release(http_headers);
+       zend_string_release_ex(http_headers, 0);
 
        if (http_status >= 400) {
                int error = 0;
@@ -1420,7 +1420,7 @@ static zend_string* get_http_body(php_stream *stream, int close, char *headers)
 
                                        if (http_buf_size + buf_size + 1 < 0) {
                                                if (http_buf) {
-                                                       zend_string_release(http_buf);
+                                                       zend_string_release_ex(http_buf, 0);
                                                }
                                                return NULL;
                                        }
@@ -1450,7 +1450,7 @@ static zend_string* get_http_body(php_stream *stream, int close, char *headers)
                                        if (ch != '\n') {
                                                /* Somthing wrong in chunked encoding */
                                                if (http_buf) {
-                                                       zend_string_release(http_buf);
+                                                       zend_string_release_ex(http_buf, 0);
                                                }
                                                return NULL;
                                        }
@@ -1458,7 +1458,7 @@ static zend_string* get_http_body(php_stream *stream, int close, char *headers)
                        } else {
                                /* Somthing wrong in chunked encoding */
                                if (http_buf) {
-                                       zend_string_release(http_buf);
+                                       zend_string_release_ex(http_buf, 0);
                                }
                                return NULL;
                        }
index 9da58ea17aad9a332e3e167f660a46e15d03cef2..b72bde97f5ce455308601f1728cf5375a12584bf 100644 (file)
@@ -236,10 +236,10 @@ int parse_packet_soap(zval *this_ptr, char *buffer, int buffer_size, sdlFunction
                }
                add_soap_fault(this_ptr, faultcode, faultstring ? ZSTR_VAL(faultstring) : NULL, faultactor ? ZSTR_VAL(faultactor) : NULL, &details);
                if (faultstring) {
-                       zend_string_release(faultstring);
+                       zend_string_release_ex(faultstring, 0);
                }
                if (faultactor) {
-                       zend_string_release(faultactor);
+                       zend_string_release_ex(faultactor, 0);
                }
                if (Z_REFCOUNTED(details)) {
                        Z_DELREF(details);
index 394a96b3920bb9267aac58ba274310171998ff48..fae7d2a4441e34f2ecd1483ff6db6b8171b72166 100644 (file)
@@ -962,9 +962,9 @@ PHP_METHOD(SoapFault, __toString)
                       ZSTR_VAL(faultcode_val), ZSTR_VAL(faultstring_val), ZSTR_VAL(file_val), line_val,
                       Z_STRLEN(trace) ? Z_STRVAL(trace) : "#0 {main}\n");
 
-       zend_string_release(file_val);
-       zend_string_release(faultstring_val);
-       zend_string_release(faultcode_val);
+       zend_string_release_ex(file_val, 0);
+       zend_string_release_ex(faultstring_val, 0);
+       zend_string_release_ex(faultcode_val, 0);
        zval_ptr_dtor(&trace);
 
        RETVAL_STR(str);
@@ -1433,7 +1433,7 @@ PHP_METHOD(SoapServer, addFunction)
                                ZVAL_STR_COPY(&function_copy, f->common.function_name);
                                zend_hash_update(service->soap_functions.ft, key, &function_copy);
 
-                               zend_string_release(key);
+                               zend_string_release_ex(key, 0);
                        } ZEND_HASH_FOREACH_END();
                }
        } else if (Z_TYPE_P(function_name) == IS_STRING) {
@@ -1453,7 +1453,7 @@ PHP_METHOD(SoapServer, addFunction)
 
                ZVAL_STR_COPY(&function_copy, f->common.function_name);
                zend_hash_update(service->soap_functions.ft, key, &function_copy);
-               zend_string_release(key);
+               zend_string_release_ex(key, 0);
        } else if (Z_TYPE_P(function_name) == IS_LONG) {
                if (Z_LVAL_P(function_name) == SOAP_FUNCTIONS_ALL) {
                        if (service->soap_functions.ft != NULL) {
@@ -1484,7 +1484,7 @@ static void _soap_server_exception(soapServicePtr service, sdlFunctionPtr functi
                        zval rv;
                        zend_string *msg = zval_get_string(zend_read_property(zend_ce_error, &exception_object, "message", sizeof("message")-1, 0, &rv));
                        add_soap_fault_ex(&exception_object, this_ptr, "Server", ZSTR_VAL(msg), NULL, NULL);
-                       zend_string_release(msg);
+                       zend_string_release_ex(msg, 0);
                } else {
                        add_soap_fault_ex(&exception_object, this_ptr, "Server", "Internal Error", NULL, NULL);
                }
@@ -1607,16 +1607,16 @@ PHP_METHOD(SoapServer, handle)
                                                php_stream_filter_append(&SG(request_info).request_body->readfilters, zf);
                                        } else {
                                                php_error_docref(NULL, E_WARNING,"Can't uncompress compressed request");
-                                               zend_string_release(server);
+                                               zend_string_release_ex(server, 0);
                                                return;
                                        }
                                } else {
                                        php_error_docref(NULL, E_WARNING,"Request is compressed with unknown compression '%s'",Z_STRVAL_P(encoding));
-                                       zend_string_release(server);
+                                       zend_string_release_ex(server, 0);
                                        return;
                                }
                        }
-                       zend_string_release(server);
+                       zend_string_release_ex(server, 0);
 
                        doc_request = soap_xmlParseFile("php://input");
 
@@ -2550,7 +2550,7 @@ static int do_request(zval *this_ptr, xmlDoc *request, char *location, char *act
                                /* change class */
                                EG(exception)->ce = soap_fault_class_entry;
                                set_soap_fault(&exception_object, NULL, "Client", ZSTR_VAL(msg), NULL, NULL, NULL);
-                               zend_string_release(msg);
+                               zend_string_release_ex(msg, 0);
                        } else if ((fault = zend_hash_str_find(Z_OBJPROP_P(this_ptr), "__soap_fault", sizeof("__soap_fault")-1)) == NULL) {
                                add_soap_fault(this_ptr, "Client", "SoapClient::__doRequest() returned non string value", NULL, NULL);
                        }
@@ -3957,7 +3957,7 @@ static xmlDocPtr serialize_response_call(sdlFunctionPtr function, char *function
                                } else {
                                        xmlNodeSetContentLen(node, BAD_CAST(ZSTR_VAL(str)), (int)ZSTR_LEN(str));
                                }
-                               zend_string_release(str);
+                               zend_string_release_ex(str, 0);
                        }
                        if ((tmp = zend_hash_str_find(prop, "faultstring", sizeof("faultstring")-1)) != NULL) {
                                xmlNodePtr node = master_to_xml(get_conversion(IS_STRING), tmp, SOAP_LITERAL, param);
@@ -3982,7 +3982,7 @@ static xmlDocPtr serialize_response_call(sdlFunctionPtr function, char *function
                                } else {
                                        xmlNodeSetContentLen(node, BAD_CAST(ZSTR_VAL(str)), (int)ZSTR_LEN(str));
                                }
-                               zend_string_release(str);
+                               zend_string_release_ex(str, 0);
                        }
                        if ((tmp = zend_hash_str_find(prop, "faultstring", sizeof("faultstring")-1)) != NULL) {
                                xmlNodePtr node = xmlNewChild(param, ns, BAD_CAST("Reason"), NULL);
index 7d918602bfa21c2793acf7abb7107ceaed921784..5b5525f6223ee7b00cda1021483c70eacbe91b71 100644 (file)
@@ -2861,7 +2861,7 @@ PHP_FUNCTION(socket_wsaprotocol_info_export)
                DWORD err = GetLastError();
                php_error_docref(NULL, E_WARNING, "Unable to create file mapping [0x%08lx]", err);
        }
-       zend_string_release(seg_name);
+       zend_string_release_ex(seg_name, 0);
 
        RETURN_FALSE;
 }
index 2ae1d0de9abc3fd5d71add83e4327c6897fd960f..5287bc2745e6d68ffec457c4d8005e0f0cb64325 100644 (file)
@@ -281,7 +281,7 @@ static int spl_autoload(zend_string *class_name, zend_string *lc_name, const cha
                        new_op_array = NULL;
                        zend_file_handle_dtor(&file_handle);
                }
-               zend_string_release(opened_path);
+               zend_string_release_ex(opened_path, 0);
                if (new_op_array) {
                        ZVAL_UNDEF(&result);
                        zend_execute(new_op_array, &result);
@@ -348,7 +348,7 @@ PHP_FUNCTION(spl_autoload_extensions)
        }
        if (file_exts) {
                if (SPL_G(autoload_extensions)) {
-                       zend_string_release(SPL_G(autoload_extensions));
+                       zend_string_release_ex(SPL_G(autoload_extensions), 0);
                }
                SPL_G(autoload_extensions) = zend_string_copy(file_exts);
        }
@@ -376,7 +376,7 @@ static void autoload_func_info_dtor(zval *element)
        }
        if (alfi->func_ptr &&
                UNEXPECTED(alfi->func_ptr->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
-               zend_string_release(alfi->func_ptr->common.function_name);
+               zend_string_release_ex(alfi->func_ptr->common.function_name, 0);
                zend_free_trampoline(alfi->func_ptr);
        }
        if (!Z_ISUNDEF(alfi->closure)) {
@@ -457,7 +457,7 @@ PHP_FUNCTION(spl_autoload_call)
                        }
                        zend_hash_move_forward_ex(SPL_G(autoload_functions), &pos);
                }
-               zend_string_release(lc_name);
+               zend_string_release_ex(lc_name, 0);
                SPL_G(autoload_running) = l_autoload_running;
        } else {
                /* do not use or overwrite &EG(autoload_func) here */
@@ -506,7 +506,7 @@ PHP_FUNCTION(spl_autoload_register)
                                        if (error) {
                                                efree(error);
                                        }
-                                       zend_string_release(func_name);
+                                       zend_string_release_ex(func_name, 0);
                                        RETURN_FALSE;
                                } else if (do_throw) {
                                        zend_throw_exception_ex(spl_ce_LogicException, 0, "Passed array does not specify %s %smethod (%s)", alfi.func_ptr ? "a callable" : "an existing", !obj_ptr ? "static " : "", error);
@@ -514,7 +514,7 @@ PHP_FUNCTION(spl_autoload_register)
                                if (error) {
                                        efree(error);
                                }
-                               zend_string_release(func_name);
+                               zend_string_release_ex(func_name, 0);
                                RETURN_FALSE;
                        } else if (Z_TYPE_P(zcallable) == IS_STRING) {
                                if (do_throw) {
@@ -523,7 +523,7 @@ PHP_FUNCTION(spl_autoload_register)
                                if (error) {
                                        efree(error);
                                }
-                               zend_string_release(func_name);
+                               zend_string_release_ex(func_name, 0);
                                RETURN_FALSE;
                        } else {
                                if (do_throw) {
@@ -532,7 +532,7 @@ PHP_FUNCTION(spl_autoload_register)
                                if (error) {
                                        efree(error);
                                }
-                               zend_string_release(func_name);
+                               zend_string_release_ex(func_name, 0);
                                RETURN_FALSE;
                        }
                } else if (fcc.function_handler->type == ZEND_INTERNAL_FUNCTION &&
@@ -543,7 +543,7 @@ PHP_FUNCTION(spl_autoload_register)
                        if (error) {
                                efree(error);
                        }
-                       zend_string_release(func_name);
+                       zend_string_release_ex(func_name, 0);
                        RETURN_FALSE;
                }
                alfi.ce = fcc.calling_scope;
@@ -570,7 +570,7 @@ PHP_FUNCTION(spl_autoload_register)
                                lc_name = zend_string_tolower(func_name);
                        }
                }
-               zend_string_release(func_name);
+               zend_string_release_ex(func_name, 0);
 
                if (SPL_G(autoload_functions) && zend_hash_exists(SPL_G(autoload_functions), lc_name)) {
                        if (!Z_ISUNDEF(alfi.closure)) {
@@ -627,7 +627,7 @@ PHP_FUNCTION(spl_autoload_register)
                                Z_DELREF(alfi.closure);
                        }
                        if (UNEXPECTED(alfi.func_ptr->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
-                               zend_string_release(alfi.func_ptr->common.function_name);
+                               zend_string_release_ex(alfi.func_ptr->common.function_name, 0);
                                zend_free_trampoline(alfi.func_ptr);
                        }
                }
@@ -636,7 +636,7 @@ PHP_FUNCTION(spl_autoload_register)
                        HT_MOVE_TAIL_TO_HEAD(SPL_G(autoload_functions));
                }
 skip:
-               zend_string_release(lc_name);
+               zend_string_release_ex(lc_name, 0);
        }
 
        if (SPL_G(autoload_functions)) {
@@ -671,7 +671,7 @@ PHP_FUNCTION(spl_autoload_unregister)
                        efree(error);
                }
                if (func_name) {
-                       zend_string_release(func_name);
+                       zend_string_release_ex(func_name, 0);
                }
                RETURN_FALSE;
        }
@@ -694,7 +694,7 @@ PHP_FUNCTION(spl_autoload_unregister)
                        lc_name = zend_string_tolower(func_name);
                }
        }
-       zend_string_release(func_name);
+       zend_string_release_ex(func_name, 0);
 
        if (SPL_G(autoload_functions)) {
                if (ZSTR_LEN(lc_name) == sizeof("spl_autoload_call") - 1 && !strcmp(ZSTR_VAL(lc_name), "spl_autoload_call")) {
@@ -728,7 +728,7 @@ PHP_FUNCTION(spl_autoload_unregister)
                }
        }
 
-       zend_string_release(lc_name);
+       zend_string_release_ex(lc_name, 0);
        RETURN_BOOL(success == SUCCESS);
 } /* }}} */
 
@@ -995,7 +995,7 @@ PHP_RINIT_FUNCTION(spl) /* {{{ */
 PHP_RSHUTDOWN_FUNCTION(spl) /* {{{ */
 {
        if (SPL_G(autoload_extensions)) {
-               zend_string_release(SPL_G(autoload_extensions));
+               zend_string_release_ex(SPL_G(autoload_extensions), 0);
                SPL_G(autoload_extensions) = NULL;
        }
        if (SPL_G(autoload_functions)) {
index ec6d7d5fb18d1105b951f1f95203a2cd82c98cdd..2b4e5b8098e6d67f7cb3b9d36e6cd0715dfd7d3b 100644 (file)
@@ -852,7 +852,7 @@ static HashTable* spl_array_get_debug_info(zval *obj, int *is_temp) /* {{{ */
                        ? spl_ce_ArrayIterator : spl_ce_ArrayObject;
                zname = spl_gen_private_prop_name(base, "storage", sizeof("storage")-1);
                zend_symtable_update(debug_info, zname, storage);
-               zend_string_release(zname);
+               zend_string_release_ex(zname, 0);
 
                return debug_info;
        }
index 56e51dfe5ba47199ded0768386f1670af94c3585..54bd6762bca49c5f1f1de176e8c43c848966659a 100644 (file)
@@ -615,7 +615,7 @@ static HashTable *spl_filesystem_object_get_debug_info(zval *object, int *is_tem
        path = spl_filesystem_object_get_pathname(intern, &path_len);
        ZVAL_STRINGL(&tmp, path, path_len);
        zend_symtable_update(rv, pnstr, &tmp);
-       zend_string_release(pnstr);
+       zend_string_release_ex(pnstr, 0);
 
        if (intern->file_name) {
                pnstr = spl_gen_private_prop_name(spl_ce_SplFileInfo, "fileName", sizeof("fileName")-1);
@@ -627,7 +627,7 @@ static HashTable *spl_filesystem_object_get_debug_info(zval *object, int *is_tem
                        ZVAL_STRINGL(&tmp, intern->file_name, intern->file_name_len);
                }
                zend_symtable_update(rv, pnstr, &tmp);
-               zend_string_release(pnstr);
+               zend_string_release_ex(pnstr, 0);
        }
        if (intern->type == SPL_FS_DIR) {
 #ifdef HAVE_GLOB
@@ -638,7 +638,7 @@ static HashTable *spl_filesystem_object_get_debug_info(zval *object, int *is_tem
                        ZVAL_FALSE(&tmp);
                }
                zend_symtable_update(rv, pnstr, &tmp);
-               zend_string_release(pnstr);
+               zend_string_release_ex(pnstr, 0);
 #endif
                pnstr = spl_gen_private_prop_name(spl_ce_RecursiveDirectoryIterator, "subPathName", sizeof("subPathName")-1);
                if (intern->u.dir.sub_path) {
@@ -647,24 +647,24 @@ static HashTable *spl_filesystem_object_get_debug_info(zval *object, int *is_tem
                        ZVAL_EMPTY_STRING(&tmp);
                }
                zend_symtable_update(rv, pnstr, &tmp);
-               zend_string_release(pnstr);
+               zend_string_release_ex(pnstr, 0);
        }
        if (intern->type == SPL_FS_FILE) {
                pnstr = spl_gen_private_prop_name(spl_ce_SplFileObject, "openMode", sizeof("openMode")-1);
                ZVAL_STRINGL(&tmp, intern->u.file.open_mode, intern->u.file.open_mode_len);
                zend_symtable_update(rv, pnstr, &tmp);
-               zend_string_release(pnstr);
+               zend_string_release_ex(pnstr, 0);
                stmp[1] = '\0';
                stmp[0] = intern->u.file.delimiter;
                pnstr = spl_gen_private_prop_name(spl_ce_SplFileObject, "delimiter", sizeof("delimiter")-1);
                ZVAL_STRINGL(&tmp, stmp, 1);
                zend_symtable_update(rv, pnstr, &tmp);
-               zend_string_release(pnstr);
+               zend_string_release_ex(pnstr, 0);
                stmp[0] = intern->u.file.enclosure;
                pnstr = spl_gen_private_prop_name(spl_ce_SplFileObject, "enclosure", sizeof("enclosure")-1);
                ZVAL_STRINGL(&tmp, stmp, 1);
                zend_symtable_update(rv, pnstr, &tmp);
-               zend_string_release(pnstr);
+               zend_string_release_ex(pnstr, 0);
        }
 
        return rv;
@@ -679,7 +679,7 @@ zend_function *spl_filesystem_object_get_method_check(zend_object **object, zend
                zend_function *func;
                zend_string *tmp = zend_string_init("_bad_state_ex", sizeof("_bad_state_ex") - 1, 0);
                func = zend_get_std_object_handlers()->get_method(object, tmp, NULL);
-               zend_string_release(tmp);
+               zend_string_release_ex(tmp, 0);
                return func;
        }
 
@@ -958,10 +958,10 @@ SPL_METHOD(SplFileInfo, getExtension)
        if (p) {
                idx = p - ZSTR_VAL(ret);
                RETVAL_STRINGL(ZSTR_VAL(ret) + idx + 1, ZSTR_LEN(ret) - idx - 1);
-               zend_string_release(ret);
+               zend_string_release_ex(ret, 0);
                return;
        } else {
-               zend_string_release(ret);
+               zend_string_release_ex(ret, 0);
                RETURN_EMPTY_STRING();
        }
 }
@@ -986,9 +986,9 @@ SPL_METHOD(DirectoryIterator, getExtension)
        if (p) {
                idx = p - ZSTR_VAL(fname);
                RETVAL_STRINGL(ZSTR_VAL(fname) + idx + 1, ZSTR_LEN(fname) - idx - 1);
-               zend_string_release(fname);
+               zend_string_release_ex(fname, 0);
        } else {
-               zend_string_release(fname);
+               zend_string_release_ex(fname, 0);
                RETURN_EMPTY_STRING();
        }
 }
index 03a4f4b5fede38b06d5de15845d1cabfbe4cb27b..b0ce0e508fa732743d779eb81f2b3e0288f2e136 100644 (file)
@@ -512,7 +512,7 @@ static HashTable* spl_dllist_object_get_debug_info(zval *obj, int *is_temp) /* {
        pnstr = spl_gen_private_prop_name(spl_ce_SplDoublyLinkedList, "flags", sizeof("flags")-1);
        ZVAL_LONG(&tmp, intern->flags);
        zend_hash_add(debug_info, pnstr, &tmp);
-       zend_string_release(pnstr);
+       zend_string_release_ex(pnstr, 0);
 
        array_init(&dllist_array);
 
@@ -530,7 +530,7 @@ static HashTable* spl_dllist_object_get_debug_info(zval *obj, int *is_temp) /* {
 
        pnstr = spl_gen_private_prop_name(spl_ce_SplDoublyLinkedList, "dllist", sizeof("dllist")-1);
        zend_hash_add(debug_info, pnstr, &dllist_array);
-       zend_string_release(pnstr);
+       zend_string_release_ex(pnstr, 0);
 
        return debug_info;
 }
index 6429a892ead18ce0df798a1a3e9e63665484b283..3031a5028b27b654c47a829296da743dfe5ea37b 100644 (file)
@@ -494,12 +494,12 @@ static HashTable* spl_heap_object_get_debug_info_helper(zend_class_entry *ce, zv
        pnstr = spl_gen_private_prop_name(ce, "flags", sizeof("flags")-1);
        ZVAL_LONG(&tmp, intern->flags);
        zend_hash_update(debug_info, pnstr, &tmp);
-       zend_string_release(pnstr);
+       zend_string_release_ex(pnstr, 0);
 
        pnstr = spl_gen_private_prop_name(ce, "isCorrupted", sizeof("isCorrupted")-1);
        ZVAL_BOOL(&tmp, intern->heap->flags&SPL_HEAP_CORRUPTED);
        zend_hash_update(debug_info, pnstr, &tmp);
-       zend_string_release(pnstr);
+       zend_string_release_ex(pnstr, 0);
 
        array_init(&heap_array);
 
@@ -512,7 +512,7 @@ static HashTable* spl_heap_object_get_debug_info_helper(zend_class_entry *ce, zv
 
        pnstr = spl_gen_private_prop_name(ce, "heap", sizeof("heap")-1);
        zend_hash_update(debug_info, pnstr, &heap_array);
-       zend_string_release(pnstr);
+       zend_string_release_ex(pnstr, 0);
 
        return debug_info;
 }
index 2cf658af29272341d62a779631981430c91099dd..2cea85549b25504c05bfbad6b6f02dc287504b61 100644 (file)
@@ -2117,7 +2117,7 @@ SPL_METHOD(RegexIterator, accept)
        if (intern->u.regex.flags & REGIT_INVERTED) {
                RETVAL_BOOL(Z_TYPE_P(return_value) != IS_TRUE);
        }
-       zend_string_release(subject);
+       zend_string_release_ex(subject, 0);
 } /* }}} */
 
 /* {{{ proto string RegexIterator::getRegex()
@@ -2338,7 +2338,7 @@ static void spl_dual_it_free_storage(zend_object *_object)
                        php_pcre_pce_decref(object->u.regex.pce);
                }
                if (object->u.regex.regex) {
-                       zend_string_release(object->u.regex.regex);
+                       zend_string_release_ex(object->u.regex.regex, 0);
                }
        }
 #endif
index 1c3911a25e5e0fc64b5481a8f25f814ef13c17bd..9a92a0e53df5fed702c850deeb718c47dc5da567 100644 (file)
@@ -143,7 +143,7 @@ static int spl_object_storage_get_hash(zend_hash_key *key, spl_SplObjectStorage
 
 static void spl_object_storage_free_hash(spl_SplObjectStorage *intern, zend_hash_key *key) {
        if (key->key) {
-               zend_string_release(key->key);
+               zend_string_release_ex(key->key, 0);
        }
 }
 
@@ -309,12 +309,12 @@ static HashTable* spl_object_storage_debug_info(zval *obj, int *is_temp) /* {{{
                add_assoc_zval_ex(&tmp, "obj", sizeof("obj") - 1, &element->obj);
                add_assoc_zval_ex(&tmp, "inf", sizeof("inf") - 1, &element->inf);
                zend_hash_update(Z_ARRVAL(storage), md5str, &tmp);
-               zend_string_release(md5str);
+               zend_string_release_ex(md5str, 0);
        } ZEND_HASH_FOREACH_END();
 
        zname = spl_gen_private_prop_name(spl_ce_SplObjectStorage, "storage", sizeof("storage")-1);
        zend_symtable_update(debug_info, zname, &storage);
-       zend_string_release(zname);
+       zend_string_release_ex(zname, 0);
 
        return debug_info;
 }
index eb87a5eef15c785b69c3dd362cc77c5a389e2031..1327c2056a13da65ee6eff70c3957c16cdef2710 100644 (file)
@@ -929,7 +929,7 @@ PHP_METHOD(sqlite3, createFunction)
        if (!zend_is_callable(callback_func, 0, NULL)) {
                zend_string *callback_name = zend_get_callable_name(callback_func);
                php_sqlite3_error(db_obj, "Not a valid callback function %s", ZSTR_VAL(callback_name));
-               zend_string_release(callback_name);
+               zend_string_release_ex(callback_name, 0);
                RETURN_FALSE;
        }
 
@@ -978,14 +978,14 @@ PHP_METHOD(sqlite3, createAggregate)
        if (!zend_is_callable(step_callback, 0, NULL)) {
                zend_string *callback_name = zend_get_callable_name(step_callback);
                php_sqlite3_error(db_obj, "Not a valid callback function %s", ZSTR_VAL(callback_name));
-               zend_string_release(callback_name);
+               zend_string_release_ex(callback_name, 0);
                RETURN_FALSE;
        }
 
        if (!zend_is_callable(fini_callback, 0, NULL)) {
                zend_string *callback_name = zend_get_callable_name(fini_callback);
                php_sqlite3_error(db_obj, "Not a valid callback function %s", ZSTR_VAL(callback_name));
-               zend_string_release(callback_name);
+               zend_string_release_ex(callback_name, 0);
                RETURN_FALSE;
        }
 
@@ -1034,7 +1034,7 @@ PHP_METHOD(sqlite3, createCollation)
        if (!zend_is_callable(callback_func, 0, NULL)) {
                zend_string *callback_name = zend_get_callable_name(callback_func);
                php_sqlite3_error(db_obj, "Not a valid callback function %s", ZSTR_VAL(callback_name));
-               zend_string_release(callback_name);
+               zend_string_release_ex(callback_name, 0);
                RETURN_FALSE;
        }
 
@@ -1429,7 +1429,7 @@ static int register_bound_parameter_to_sqlite(struct php_sqlite3_bound_param *pa
 
        if (param->param_number < 1) {
                if (param->name) {
-                       zend_string_release(param->name);
+                       zend_string_release_ex(param->name, 0);
                }
                return 0;
        }
@@ -1614,7 +1614,7 @@ PHP_METHOD(sqlite3stmt, execute)
 
                                        if (buffer) {
                                                sqlite3_bind_blob(stmt_obj->stmt, param->param_number, ZSTR_VAL(buffer), ZSTR_LEN(buffer), SQLITE_TRANSIENT);
-                                               zend_string_release(buffer);
+                                               zend_string_release_ex(buffer, 0);
                                        } else {
                                                sqlite3_bind_null(stmt_obj->stmt, param->param_number);
                                        }
@@ -2253,7 +2253,7 @@ static void sqlite3_param_dtor(zval *data) /* {{{ */
        struct php_sqlite3_bound_param *param = (struct php_sqlite3_bound_param*)Z_PTR_P(data);
 
        if (param->name) {
-               zend_string_release(param->name);
+               zend_string_release_ex(param->name, 0);
        }
 
        if (!Z_ISNULL(param->parameter)) {
index 7621b0616a5b36a6bd77ce2e6ecdaa82aec20350..55d338faad23093a531e01ab85977a812003a271 100644 (file)
@@ -1966,7 +1966,7 @@ static zend_long php_extract_ref_prefix_if_exists(zend_array *arr, zend_array *s
                                        count++;
                                }
                        }
-                       zend_string_release(Z_STR(final_name));
+                       zend_string_release_ex(Z_STR(final_name), 0);
                }
        } ZEND_HASH_FOREACH_END();
 
@@ -2019,7 +2019,7 @@ static zend_long php_extract_prefix_if_exists(zend_array *arr, zend_array *symbo
                                        count++;
                                }
                        }
-                       zend_string_release(Z_STR(final_name));
+                       zend_string_release_ex(Z_STR(final_name), 0);
                }
        } ZEND_HASH_FOREACH_END();
 
@@ -2081,7 +2081,7 @@ static zend_long php_extract_ref_prefix_same(zend_array *arr, zend_array *symbol
                                        count++;
                                }
                        }
-                       zend_string_release(Z_STR(final_name));
+                       zend_string_release_ex(Z_STR(final_name), 0);
                } else {
                        if (!php_valid_var_name(ZSTR_VAL(var_name), ZSTR_LEN(var_name))) {
                                continue;
@@ -2155,7 +2155,7 @@ static zend_long php_extract_prefix_same(zend_array *arr, zend_array *symbol_tab
                                        count++;
                                }
                        }
-                       zend_string_release(Z_STR(final_name));
+                       zend_string_release_ex(Z_STR(final_name), 0);
                } else {
                        if (!php_valid_var_name(ZSTR_VAL(var_name), ZSTR_LEN(var_name))) {
                                continue;
@@ -2195,7 +2195,7 @@ static zend_long php_extract_ref_prefix_all(zend_array *arr, zend_array *symbol_
                } else {
                        zend_string *str = zend_long_to_str(num_key);
                        php_prefix_varname(&final_name, prefix, ZSTR_VAL(str), ZSTR_LEN(str), 1);
-                       zend_string_release(str);
+                       zend_string_release_ex(str, 0);
                }
                if (php_valid_var_name(Z_STRVAL(final_name), Z_STRLEN(final_name))) {
                        if (zend_string_equals_literal(Z_STR(final_name), "this")) {
@@ -2221,7 +2221,7 @@ static zend_long php_extract_ref_prefix_all(zend_array *arr, zend_array *symbol_
                                count++;
                        }
                }
-               zend_string_release(Z_STR(final_name));
+               zend_string_release_ex(Z_STR(final_name), 0);
        } ZEND_HASH_FOREACH_END();
 
        return count;
@@ -2245,7 +2245,7 @@ static zend_long php_extract_prefix_all(zend_array *arr, zend_array *symbol_tabl
                } else {
                        zend_string *str = zend_long_to_str(num_key);
                        php_prefix_varname(&final_name, prefix, ZSTR_VAL(str), ZSTR_LEN(str), 1);
-                       zend_string_release(str);
+                       zend_string_release_ex(str, 0);
                }
                if (php_valid_var_name(Z_STRVAL(final_name), Z_STRLEN(final_name))) {
                        if (zend_string_equals_literal(Z_STR(final_name), "this")) {
@@ -2269,7 +2269,7 @@ static zend_long php_extract_prefix_all(zend_array *arr, zend_array *symbol_tabl
                                count++;
                        }
                }
-               zend_string_release(Z_STR(final_name));
+               zend_string_release_ex(Z_STR(final_name), 0);
        } ZEND_HASH_FOREACH_END();
 
        return count;
@@ -2289,7 +2289,7 @@ static zend_long php_extract_ref_prefix_invalid(zend_array *arr, zend_array *sym
                        if (!php_valid_var_name(ZSTR_VAL(var_name), ZSTR_LEN(var_name))) {
                                php_prefix_varname(&final_name, prefix, ZSTR_VAL(var_name), ZSTR_LEN(var_name), 1);
                                if (!php_valid_var_name(Z_STRVAL(final_name), Z_STRLEN(final_name))) {
-                                       zend_string_release(Z_STR(final_name));
+                                       zend_string_release_ex(Z_STR(final_name), 0);
                                        continue;
                                }
                        } else {
@@ -2298,9 +2298,9 @@ static zend_long php_extract_ref_prefix_invalid(zend_array *arr, zend_array *sym
                } else {
                        zend_string *str = zend_long_to_str(num_key);
                        php_prefix_varname(&final_name, prefix, ZSTR_VAL(str), ZSTR_LEN(str), 1);
-                       zend_string_release(str);
+                       zend_string_release_ex(str, 0);
                        if (!php_valid_var_name(Z_STRVAL(final_name), Z_STRLEN(final_name))) {
-                               zend_string_release(Z_STR(final_name));
+                               zend_string_release_ex(Z_STR(final_name), 0);
                                continue;
                        }
                }
@@ -2326,7 +2326,7 @@ static zend_long php_extract_ref_prefix_invalid(zend_array *arr, zend_array *sym
                        }
                        count++;
                }
-               zend_string_release(Z_STR(final_name));
+               zend_string_release_ex(Z_STR(final_name), 0);
        } ZEND_HASH_FOREACH_END();
 
        return count;
@@ -2346,7 +2346,7 @@ static zend_long php_extract_prefix_invalid(zend_array *arr, zend_array *symbol_
                        if (!php_valid_var_name(ZSTR_VAL(var_name), ZSTR_LEN(var_name))) {
                                php_prefix_varname(&final_name, prefix, ZSTR_VAL(var_name), ZSTR_LEN(var_name), 1);
                                if (!php_valid_var_name(Z_STRVAL(final_name), Z_STRLEN(final_name))) {
-                                       zend_string_release(Z_STR(final_name));
+                                       zend_string_release_ex(Z_STR(final_name), 0);
                                        continue;
                                }
                        } else {
@@ -2355,9 +2355,9 @@ static zend_long php_extract_prefix_invalid(zend_array *arr, zend_array *symbol_
                } else {
                        zend_string *str = zend_long_to_str(num_key);
                        php_prefix_varname(&final_name, prefix, ZSTR_VAL(str), ZSTR_LEN(str), 1);
-                       zend_string_release(str);
+                       zend_string_release_ex(str, 0);
                        if (!php_valid_var_name(Z_STRVAL(final_name), Z_STRLEN(final_name))) {
-                               zend_string_release(Z_STR(final_name));
+                               zend_string_release_ex(Z_STR(final_name), 0);
                                continue;
                        }
                }
@@ -2381,7 +2381,7 @@ static zend_long php_extract_prefix_invalid(zend_array *arr, zend_array *symbol_
                        }
                        count++;
                }
-               zend_string_release(Z_STR(final_name));
+               zend_string_release_ex(Z_STR(final_name), 0);
        } ZEND_HASH_FOREACH_END();
 
        return count;
@@ -3040,7 +3040,7 @@ static void php_array_data_shuffle(zval *array) /* {{{ */
        for (j = 0; j < n_elems; j++) {
                p = hash->arData + j;
                if (p->key) {
-                       zend_string_release(p->key);
+                       zend_string_release_ex(p->key, 0);
                }
                p->h = j;
                p->key = NULL;
@@ -4445,7 +4445,7 @@ PHP_FUNCTION(array_change_key_case)
                                new_key = php_string_tolower(string_key);
                        }
                        entry = zend_hash_update(Z_ARRVAL_P(return_value), new_key, entry);
-                       zend_string_release(new_key);
+                       zend_string_release_ex(new_key, 0);
                }
 
                zval_add_ref(entry);
index 3cf3a028306f87825595ec51a06c544439622dc5..4f343379e0f5e404c01c610934f4e24dc295e53e 100644 (file)
@@ -188,7 +188,7 @@ PHP_FUNCTION(assert)
                        } else {
                                zend_string *str = zval_get_string(description);
                                zend_throw_error(NULL, "Failure evaluating code: %s%s:\"%s\"", PHP_EOL, ZSTR_VAL(str), myeval);
-                               zend_string_release(str);
+                               zend_string_release_ex(str, 0);
                        }
                        if (ASSERTG(bail)) {
                                zend_bailout();
@@ -255,7 +255,7 @@ PHP_FUNCTION(assert)
                } else {
                        zend_string *str = zval_get_string(description);
                        zend_throw_exception(assertion_error_ce, ZSTR_VAL(str), E_ERROR);
-                       zend_string_release(str);
+                       zend_string_release_ex(str, 0);
                }
        } else if (ASSERTG(warning)) {
                if (!description) {
@@ -271,7 +271,7 @@ PHP_FUNCTION(assert)
                        } else {
                                php_error_docref(NULL, E_WARNING, "%s failed", ZSTR_VAL(str));
                        }
-                       zend_string_release(str);
+                       zend_string_release_ex(str, 0);
                }
        }
 
@@ -306,8 +306,8 @@ PHP_FUNCTION(assert_options)
                        zend_string *value_str = zval_get_string(value);
                        key = zend_string_init("assert.active", sizeof("assert.active")-1, 0);
                        zend_alter_ini_entry_ex(key, value_str, PHP_INI_USER, PHP_INI_STAGE_RUNTIME, 0);
-                       zend_string_release(key);
-                       zend_string_release(value_str);
+                       zend_string_release_ex(key, 0);
+                       zend_string_release_ex(value_str, 0);
                }
                RETURN_LONG(oldint);
                break;
@@ -318,8 +318,8 @@ PHP_FUNCTION(assert_options)
                        zend_string *value_str = zval_get_string(value);
                        key = zend_string_init("assert.bail", sizeof("assert.bail")-1, 0);
                        zend_alter_ini_entry_ex(key, value_str, PHP_INI_USER, PHP_INI_STAGE_RUNTIME, 0);
-                       zend_string_release(key);
-                       zend_string_release(value_str);
+                       zend_string_release_ex(key, 0);
+                       zend_string_release_ex(value_str, 0);
                }
                RETURN_LONG(oldint);
                break;
@@ -330,8 +330,8 @@ PHP_FUNCTION(assert_options)
                        zend_string *value_str = zval_get_string(value);
                        key = zend_string_init("assert.quiet_eval", sizeof("assert.quiet_eval")-1, 0);
                        zend_alter_ini_entry_ex(key, value_str, PHP_INI_USER, PHP_INI_STAGE_RUNTIME, 0);
-                       zend_string_release(key);
-                       zend_string_release(value_str);
+                       zend_string_release_ex(key, 0);
+                       zend_string_release_ex(value_str, 0);
                }
                RETURN_LONG(oldint);
                break;
@@ -342,8 +342,8 @@ PHP_FUNCTION(assert_options)
                        zend_string *value_str = zval_get_string(value);
                        key = zend_string_init("assert.warning", sizeof("assert.warning")-1, 0);
                        zend_alter_ini_entry_ex(key, value_str, PHP_INI_USER, PHP_INI_STAGE_RUNTIME, 0);
-                       zend_string_release(key);
-                       zend_string_release(value_str);
+                       zend_string_release_ex(key, 0);
+                       zend_string_release_ex(value_str, 0);
                }
                RETURN_LONG(oldint);
                break;
@@ -368,8 +368,8 @@ PHP_FUNCTION(assert_options)
                        zend_string *key = zend_string_init("assert.exception", sizeof("assert.exception")-1, 0);
                        zend_string *val = zval_get_string(value);
                        zend_alter_ini_entry_ex(key, val, PHP_INI_USER, PHP_INI_STAGE_RUNTIME, 0);
-                       zend_string_release(val);
-                       zend_string_release(key);
+                       zend_string_release_ex(val, 0);
+                       zend_string_release_ex(key, 0);
                }
                RETURN_LONG(oldint);
                break;
index 85aa81f873c89e98c20fd9142b6425c4ddf1de6a..5a4c1f4a2d8c7f0e2f288e5081d9d3cbc13db2b2 100644 (file)
@@ -3848,7 +3848,7 @@ PHP_RSHUTDOWN_FUNCTION(basic) /* {{{ */
                setlocale(LC_CTYPE, "");
                zend_update_current_locale();
                if (BG(locale_string)) {
-                       zend_string_release(BG(locale_string));
+                       zend_string_release_ex(BG(locale_string), 0);
                        BG(locale_string) = NULL;
                }
        }
@@ -5044,7 +5044,7 @@ static int user_shutdown_function_call(zval *zv) /* {{{ */
                zend_string *function_name
                        = zend_get_callable_name(&shutdown_function_entry->arguments[0]);
                php_error(E_WARNING, "(Registered shutdown functions) Unable to call %s() - function does not exist", ZSTR_VAL(function_name));
-               zend_string_release(function_name);
+               zend_string_release_ex(function_name, 0);
                return 0;
        }
 
@@ -5180,7 +5180,7 @@ PHP_FUNCTION(register_shutdown_function)
                        = zend_get_callable_name(&shutdown_function_entry.arguments[0]);
                php_error_docref(NULL, E_WARNING, "Invalid shutdown callback '%s' passed", ZSTR_VAL(callback_name));
                efree(shutdown_function_entry.arguments);
-               zend_string_release(callback_name);
+               zend_string_release_ex(callback_name, 0);
                RETVAL_FALSE;
        } else {
                if (!BG(user_shutdown_function_names)) {
@@ -5579,11 +5579,11 @@ PHP_FUNCTION(set_include_path)
 
        key = zend_string_init("include_path", sizeof("include_path") - 1, 0);
        if (zend_alter_ini_entry_ex(key, new_value, PHP_INI_USER, PHP_INI_STAGE_RUNTIME, 0) == FAILURE) {
-               zend_string_release(key);
+               zend_string_release_ex(key, 0);
                zval_dtor(return_value);
                RETURN_FALSE;
        }
-       zend_string_release(key);
+       zend_string_release_ex(key, 0);
 }
 /* }}} */
 
@@ -5677,7 +5677,7 @@ PHP_FUNCTION(ignore_user_abort)
        if (ZEND_NUM_ARGS()) {
                zend_string *key = zend_string_init("ignore_user_abort", sizeof("ignore_user_abort") - 1, 0);
                zend_alter_ini_entry_chars(key, arg ? "1" : "0", 1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
-               zend_string_release(key);
+               zend_string_release_ex(key, 0);
        }
 
        RETURN_LONG(old_setting);
@@ -5825,10 +5825,10 @@ PHP_FUNCTION(register_tick_function)
        if (!zend_is_callable(&tick_fe.arguments[0], 0, &function_name)) {
                efree(tick_fe.arguments);
                php_error_docref(NULL, E_WARNING, "Invalid tick callback '%s' passed", ZSTR_VAL(function_name));
-               zend_string_release(function_name);
+               zend_string_release_ex(function_name, 0);
                RETURN_FALSE;
        } else if (function_name) {
-               zend_string_release(function_name);
+               zend_string_release_ex(function_name, 0);
        }
 
        if (Z_TYPE(tick_fe.arguments[0]) != IS_ARRAY && Z_TYPE(tick_fe.arguments[0]) != IS_OBJECT) {
index 60c012707d3decab19e7a084773a66990ced3442..4753adfb7835531bbb642707955b951fbcaa3daf 100644 (file)
@@ -72,9 +72,9 @@ ZEND_DECLARE_MODULE_GLOBALS(browscap)
 static void browscap_entry_dtor(zval *zvalue)
 {
        browscap_entry *entry = Z_PTR_P(zvalue);
-       zend_string_release(entry->pattern);
+       zend_string_release_ex(entry->pattern, 0);
        if (entry->parent) {
-               zend_string_release(entry->parent);
+               zend_string_release_ex(entry->parent, 0);
        }
        efree(entry);
 }
@@ -82,9 +82,9 @@ static void browscap_entry_dtor(zval *zvalue)
 static void browscap_entry_dtor_persistent(zval *zvalue)
 {
        browscap_entry *entry = Z_PTR_P(zvalue);
-       zend_string_release(entry->pattern);
+       zend_string_release_ex(entry->pattern, 1);
        if (entry->parent) {
-               zend_string_release(entry->parent);
+               zend_string_release_ex(entry->parent, 1);
        }
        pefree(entry, 1);
 }
@@ -788,7 +788,7 @@ PHP_FUNCTION(get_browser)
                efree(agent_ht);
        }
 
-       zend_string_release(lookup_browser_name);
+       zend_string_release_ex(lookup_browser_name, 0);
 }
 /* }}} */
 
index b748e173ceff7ff3639888cdb16f25cecd41a9bf..b6302a0f87eda3b1708610761f9e3ecde4021863 100644 (file)
@@ -372,7 +372,7 @@ PHPAPI zend_string *php_escape_shell_cmd(char *str)
 
        if (y > cmd_max_len + 1) {
                php_error_docref(NULL, E_ERROR, "Escaped command exceeds the allowed length of %zu bytes", cmd_max_len);
-               zend_string_release(cmd);
+               zend_string_release_ex(cmd, 0);
                return ZSTR_EMPTY_ALLOC();
        }
 
@@ -459,7 +459,7 @@ PHPAPI zend_string *php_escape_shell_arg(char *str)
 
        if (y > cmd_max_len + 1) {
                php_error_docref(NULL, E_ERROR, "Escaped argument exceeds the allowed length of %zu bytes", cmd_max_len);
-               zend_string_release(cmd);
+               zend_string_release_ex(cmd, 0);
                return ZSTR_EMPTY_ALLOC();
        }
 
index 096d70e12c8083fda5817ab9604d490ce4194c7e..baefafc735daf6e16b10c161144b535c7a906ceb 100644 (file)
@@ -843,7 +843,7 @@ PHP_FUNCTION(tempnam)
                close(fd);
                RETVAL_STR(opened_path);
        }
-       zend_string_release(p);
+       zend_string_release_ex(p, 0);
 }
 /* }}} */
 
index 5444994abacd06f2180de46e0d8da77547fafc18..0c3aa4c47b8ac830043e69b739b7b8c70368226e 100644 (file)
@@ -114,14 +114,14 @@ static void php_fsockopen_stream(INTERNAL_FUNCTION_PARAMETERS, int persistent)
                        zval_ptr_dtor(zerrstr);
                        ZVAL_STR(zerrstr, errstr);
                } else if (!zerrstr && errstr) {
-                       zend_string_release(errstr);
+                       zend_string_release_ex(errstr, 0);
                }
 
                RETURN_FALSE;
        }
 
        if (errstr) {
-               zend_string_release(errstr);
+               zend_string_release_ex(errstr, 0);
        }
 
        php_stream_to_zval(stream, return_value);
index eed81e900f5f4aa22d31eb61639e854a49fee394..d49cebf57985f8aeb71329ece62e0187fe45dec2 100644 (file)
@@ -632,7 +632,7 @@ static size_t php_ftp_dirstream_read(php_stream *stream, char *buf, size_t count
        tmp_len = MIN(sizeof(ent->d_name), ZSTR_LEN(basename) - 1);
        memcpy(ent->d_name, ZSTR_VAL(basename), tmp_len);
        ent->d_name[tmp_len - 1] = '\0';
-       zend_string_release(basename);
+       zend_string_release_ex(basename, 0);
 
        /* Trim off trailing whitespace characters */
        while (tmp_len > 0 &&
index 5e21638adf9dd91e385626b4a110b5d0db2a04dd..1ddbc187a0f4b3a2d057590a51a1edd70574c050 100644 (file)
@@ -157,7 +157,7 @@ PHPAPI int php_setcookie(zend_string *name, zend_string *value, time_t expires,
                        if (!p || *(p + 5) != ' ') {
                                zend_string_free(dt);
                                efree(cookie);
-                               zend_string_release(encoded_value);
+                               zend_string_release_ex(encoded_value, 0);
                                zend_error(E_WARNING, "Expiry date cannot have a year greater than 9999");
                                return FAILURE;
                        }
@@ -175,7 +175,7 @@ PHPAPI int php_setcookie(zend_string *name, zend_string *value, time_t expires,
        }
 
        if (encoded_value) {
-               zend_string_release(encoded_value);
+               zend_string_release_ex(encoded_value, 0);
        }
 
        if (path && ZSTR_LEN(path)) {
index b94cdd672b15d01c8ef145427fc22cac312134c1..a1d472911738adb3ebf4f419cdbc312b22a293b6 100644 (file)
@@ -224,7 +224,7 @@ static php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper,
 
        if (errstr) {
                php_stream_wrapper_log_error(wrapper, options, "%s", ZSTR_VAL(errstr));
-               zend_string_release(errstr);
+               zend_string_release_ex(errstr, 0);
                errstr = NULL;
        }
 
@@ -520,7 +520,7 @@ finish:
 
                }
                if (tmp) {
-                       zend_string_release(tmp);
+                       zend_string_release_ex(tmp, 0);
                }
        }
 
@@ -864,7 +864,7 @@ finish:
                                                if (!s) {
                                                        s = ZSTR_VAL(resource->path);
                                                        if (!ZSTR_LEN(resource->path)) {
-                                                               zend_string_release(resource->path);
+                                                               zend_string_release_ex(resource->path, 0);
                                                                resource->path = zend_string_init("/", 1, 0);
                                                                s = ZSTR_VAL(resource->path);
                                                        } else {
index 189295aa4cc857af6d14f86352a587f1e3f7e079..e34f5c79e859612b1f33b7eaf31f2161fc06bb0e 100644 (file)
@@ -249,7 +249,7 @@ static struct gfxinfo *php_handle_swc(php_stream * stream)
                } while ((status==Z_BUF_ERROR)&&(factor<maxfactor));
 
                if (bufz) {
-                       zend_string_release(bufz);
+                       zend_string_release_ex(bufz, 0);
                }
 
                if (status == Z_OK) {
index b41ab8572f540176457e03cd1f93a67e93321ba3..0e34b0aa26a39a90e489307ea11760593e1cb8d8 100644 (file)
@@ -42,7 +42,7 @@ static void incomplete_class_message(zval *object, int error_type)
 
        if (class_name) {
                php_error_docref(NULL, error_type, INCOMPLETE_CLASS_MSG, ZSTR_VAL(class_name));
-               zend_string_release(class_name);
+               zend_string_release_ex(class_name, 0);
        } else {
                php_error_docref(NULL, error_type, INCOMPLETE_CLASS_MSG, "unknown");
        }
index 5c5892e6b638d085275838e2ccc9f7ab9a085551..8a9d053bf28cf7f9ff4725029f6c28662d2940b4 100644 (file)
@@ -230,7 +230,7 @@ static void php_print_gpcse_array(char *name, uint32_t name_length)
                                        php_info_print("<pre>");
                                        php_info_print_html_esc(ZSTR_VAL(str), ZSTR_LEN(str));
                                        php_info_print("</pre>");
-                                       zend_string_release(str);
+                                       zend_string_release_ex(str, 0);
                                } else {
                                        zend_print_zval_r(tmp, 0);
                                }
index 446534b336e17a5f0cf37990056ae66f332b15a1..b774922c5665e1cac8673752cc30c0e131e75d5d 100644 (file)
@@ -314,7 +314,7 @@ PHP_FUNCTION(mail)
                                tmp_headers = zend_string_init(Z_STRVAL_P(headers), Z_STRLEN_P(headers), 0);
                                MAIL_ASCIIZ_CHECK(ZSTR_VAL(tmp_headers), ZSTR_LEN(tmp_headers));
                                str_headers = php_trim(tmp_headers, NULL, 0, 2);
-                               zend_string_release(tmp_headers);
+                               zend_string_release_ex(tmp_headers, 0);
                                break;
                        case IS_ARRAY:
                                str_headers = php_mail_build_headers(headers);
@@ -381,11 +381,11 @@ PHP_FUNCTION(mail)
        }
 
        if (str_headers) {
-               zend_string_release(str_headers);
+               zend_string_release_ex(str_headers, 0);
        }
 
        if (extra_cmd) {
-               zend_string_release(extra_cmd);
+               zend_string_release_ex(extra_cmd, 0);
        }
        if (to_r != to) {
                efree(to_r);
@@ -531,7 +531,7 @@ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char
                } else {
                        spprintf(&hdr, 0, "X-PHP-Originating-Script: " ZEND_LONG_FMT ":%s", php_getuid(), ZSTR_VAL(f));
                }
-               zend_string_release(f);
+               zend_string_release_ex(f, 0);
        }
 
        if (hdr && php_mail_detect_multiple_crlf(hdr)) {
index e6f3bab87fe26f0cc1280ea1817702eb6ac164c9..56d6f85ace3eaabc2b4a5cc23a26e9ef59f5bde9 100644 (file)
@@ -1232,7 +1232,7 @@ PHPAPI zend_string *_php_math_number_format_ex(double d, int dec, char *dec_poin
        }
 
        ZSTR_LEN(res) = reslen;
-       zend_string_release(tmpbuf);
+       zend_string_release_ex(tmpbuf, 0);
        return res;
 }
 
index 105abbc56552e2a246be165bd0b9686396ddda38..d5bbd18fbd9016d7284f0e936ccc3a7cc5267926 100644 (file)
@@ -112,7 +112,7 @@ static int php_password_salt_to64(const char *str, const size_t str_len, const s
        buffer = php_base64_encode((unsigned char*) str, str_len);
        if (ZSTR_LEN(buffer) < out_len) {
                /* Too short of an encoded string generated */
-               zend_string_release(buffer);
+               zend_string_release_ex(buffer, 0);
                return FAILURE;
        }
        for (pos = 0; pos < out_len; pos++) {
@@ -142,18 +142,18 @@ static zend_string* php_password_make_salt(size_t length) /* {{{ */
        buffer = zend_string_alloc(length * 3 / 4 + 1, 0);
        if (FAILURE == php_random_bytes_silent(ZSTR_VAL(buffer), ZSTR_LEN(buffer))) {
                php_error_docref(NULL, E_WARNING, "Unable to generate salt");
-               zend_string_release(buffer);
+               zend_string_release_ex(buffer, 0);
                return NULL;
        }
 
        ret = zend_string_alloc(length, 0);
        if (php_password_salt_to64(ZSTR_VAL(buffer), ZSTR_LEN(buffer), length, ZSTR_VAL(ret)) == FAILURE) {
                php_error_docref(NULL, E_WARNING, "Generated salt too short");
-               zend_string_release(buffer);
-               zend_string_release(ret);
+               zend_string_release_ex(buffer, 0);
+               zend_string_release_ex(ret, 0);
                return NULL;
        }
-       zend_string_release(buffer);
+       zend_string_release_ex(buffer, 0);
        ZSTR_VAL(ret)[length] = 0;
        return ret;
 }
@@ -379,13 +379,13 @@ static zend_string* php_password_get_salt(zval *return_value, size_t required_sa
                the > INT_MAX check. */
        if (ZEND_SIZE_T_INT_OVFL(ZSTR_LEN(buffer))) {
                php_error_docref(NULL, E_WARNING, "Supplied salt is too long");
-               zend_string_release(buffer);
+               zend_string_release_ex(buffer, 0);
                return NULL;
        }
 
        if (ZSTR_LEN(buffer) < required_salt_len) {
                php_error_docref(NULL, E_WARNING, "Provided salt is too short: %zd expecting %zd", ZSTR_LEN(buffer), required_salt_len);
-               zend_string_release(buffer);
+               zend_string_release_ex(buffer, 0);
                return NULL;
        }
 
@@ -393,16 +393,16 @@ static zend_string* php_password_get_salt(zval *return_value, size_t required_sa
                zend_string *salt = zend_string_alloc(required_salt_len, 0);
                if (php_password_salt_to64(ZSTR_VAL(buffer), ZSTR_LEN(buffer), required_salt_len, ZSTR_VAL(salt)) == FAILURE) {
                        php_error_docref(NULL, E_WARNING, "Provided salt is too short: %zd", ZSTR_LEN(buffer));
-                       zend_string_release(salt);
-                       zend_string_release(buffer);
+                       zend_string_release_ex(salt, 0);
+                       zend_string_release_ex(buffer, 0);
                        return NULL;
                }
-               zend_string_release(buffer);
+               zend_string_release_ex(buffer, 0);
                return salt;
        } else {
                zend_string *salt = zend_string_alloc(required_salt_len, 0);
                memcpy(ZSTR_VAL(salt), ZSTR_VAL(buffer), required_salt_len);
-               zend_string_release(buffer);
+               zend_string_release_ex(buffer, 0);
                return salt;
        }
 }
@@ -450,11 +450,11 @@ PHP_FUNCTION(password_hash)
                                sprintf(ZSTR_VAL(hash), "%s%s", hash_format, ZSTR_VAL(salt));
                                ZSTR_VAL(hash)[hash_format_len + ZSTR_LEN(salt)] = 0;
 
-                               zend_string_release(salt);
+                               zend_string_release_ex(salt, 0);
 
                                /* This cast is safe, since both values are defined here in code and cannot overflow */
                                result = php_crypt(ZSTR_VAL(password), (int)ZSTR_LEN(password), ZSTR_VAL(hash), (int)ZSTR_LEN(hash), 1);
-                               zend_string_release(hash);
+                               zend_string_release_ex(hash, 0);
 
                                if (!result) {
                                        RETURN_FALSE;
@@ -540,8 +540,8 @@ PHP_FUNCTION(password_hash)
                                        ARGON2_VERSION_NUMBER
                                );
 
-                               zend_string_release(out);
-                               zend_string_release(salt);
+                               zend_string_release_ex(out, 0);
+                               zend_string_release_ex(salt, 0);
 
                                if (status != ARGON2_OK) {
                                        zend_string_efree(encoded);
index 33969e3ca43a923c2979694b3773d74702b90a42..d494c250a6963329ba9bfe8a25942ff29cf841d2 100644 (file)
@@ -39,7 +39,7 @@
        }
 
 #define PHP_CLEANUP_CLASS_ATTRIBUTES() \
-       zend_string_release(class_name)
+       zend_string_release_ex(class_name, 0)
 
 #define PHP_CLASS_ATTRIBUTES                                                                                   \
        zend_string *class_name;                                                                                        \
index 370ceee9cc69748fb1a5f7e7e38c6a87a40d5aed..85c703b475fbe3744e60f866e0993ad867c9b80b 100644 (file)
@@ -104,7 +104,7 @@ static php_process_env_t _php_array_to_envp(zval *environment, int is_persistent
                str = zval_get_string(element);
 
                if (ZSTR_LEN(str) == 0) {
-                       zend_string_release(str);
+                       zend_string_release_ex(str, 0);
                        continue;
                }
 
@@ -143,7 +143,7 @@ static php_process_env_t _php_array_to_envp(zval *environment, int is_persistent
 #endif
                        p += ZSTR_LEN(str) + 1;
                }
-               zend_string_release(str);
+               zend_string_release_ex(str, 0);
        } ZEND_HASH_FOREACH_END();
 
        assert((uint32_t)(p - env.envp) <= sizeenv);
index 627df9bdb8200c86550a7af815f9ce0150530545..691fd9a394d025116b3d4ea5871f6eccfbf73e02 100644 (file)
@@ -201,7 +201,7 @@ PHP_FUNCTION(random_bytes)
        bytes = zend_string_alloc(size, 0);
 
        if (php_random_bytes_throw(ZSTR_VAL(bytes), size) == FAILURE) {
-               zend_string_release(bytes);
+               zend_string_release_ex(bytes, 0);
                return;
        }
 
index d3f0c1cd7c8e7b70d2ab24746f44db332e9e877c..047a99892f03eefb40f797b0b9ef3e9666f3b3c5 100644 (file)
@@ -151,7 +151,7 @@ PHP_FUNCTION(stream_socket_client)
                zend_string *quoted_host = php_addslashes(host, 0);
 
                php_error_docref(NULL, E_WARNING, "unable to connect to %s (%s)", ZSTR_VAL(quoted_host), errstr == NULL ? "Unknown error" : ZSTR_VAL(errstr));
-               zend_string_release(quoted_host);
+               zend_string_release_ex(quoted_host, 0);
        }
 
        if (hashkey) {
@@ -167,13 +167,13 @@ PHP_FUNCTION(stream_socket_client)
                        zval_ptr_dtor(zerrstr);
                        ZVAL_STR(zerrstr, errstr);
                } else if (errstr) {
-                       zend_string_release(errstr);
+                       zend_string_release_ex(errstr, 0);
                }
                RETURN_FALSE;
        }
 
        if (errstr) {
-               zend_string_release(errstr);
+               zend_string_release_ex(errstr, 0);
        }
 
        php_stream_to_zval(stream, return_value);
@@ -237,13 +237,13 @@ PHP_FUNCTION(stream_socket_server)
                        zval_ptr_dtor(zerrstr);
                        ZVAL_STR(zerrstr, errstr);
                } else if (errstr) {
-                       zend_string_release(errstr);
+                       zend_string_release_ex(errstr, 0);
                }
                RETURN_FALSE;
        }
 
        if (errstr) {
-               zend_string_release(errstr);
+               zend_string_release_ex(errstr, 0);
        }
 
        php_stream_to_zval(stream, return_value);
@@ -302,7 +302,7 @@ PHP_FUNCTION(stream_socket_accept)
        }
 
        if (errstr) {
-               zend_string_release(errstr);
+               zend_string_release_ex(errstr, 0);
        }
 }
 /* }}} */
@@ -331,7 +331,7 @@ PHP_FUNCTION(stream_socket_get_name)
        }
 
        if ((ZSTR_LEN(name) == 0) || (ZSTR_VAL(name)[0] == 0)) {
-               zend_string_release(name);
+               zend_string_release_ex(name, 0);
                RETURN_FALSE;
        }
 
index f43d44929bb53108e69dfd706d960d48da7b41d9..ca432c76d67bc8a9a15f676f6a4f336ab707b67a 100644 (file)
@@ -1263,7 +1263,7 @@ PHPAPI void php_implode(const zend_string *glue, zval *pieces, zval *return_valu
                        cptr -= ZSTR_LEN(ptr->str);
                        memcpy(cptr, ZSTR_VAL(ptr->str), ZSTR_LEN(ptr->str));
                        if (ptr->lval) {
-                               zend_string_release(ptr->str);
+                               zend_string_release_ex(ptr->str, 0);
                        }
                } else {
                        char *oldPtr = cptr;
@@ -1750,7 +1750,7 @@ PHP_FUNCTION(pathinfo)
        }
 
        if (ret) {
-               zend_string_release(ret);
+               zend_string_release_ex(ret, 0);
        }
 
        if (opt == PHP_PATHINFO_ALL) {
@@ -2064,9 +2064,9 @@ PHP_FUNCTION(stripos)
                RETVAL_FALSE;
        }
 
-       zend_string_release(haystack_dup);
+       zend_string_release_ex(haystack_dup, 0);
        if (needle_dup) {
-               zend_string_release(needle_dup);
+               zend_string_release_ex(needle_dup, 0);
        }
 }
 /* }}} */
@@ -2205,7 +2205,7 @@ PHP_FUNCTION(strripos)
        haystack_dup = php_string_tolower(haystack);
        if (offset >= 0) {
                if ((size_t)offset > ZSTR_LEN(haystack)) {
-                       zend_string_release(haystack_dup);
+                       zend_string_release_ex(haystack_dup, 0);
                        ZSTR_ALLOCA_FREE(ord_needle, use_heap);
                        php_error_docref(NULL, E_WARNING, "Offset is greater than the length of haystack string");
                        RETURN_FALSE;
@@ -2214,7 +2214,7 @@ PHP_FUNCTION(strripos)
                e = ZSTR_VAL(haystack_dup) + ZSTR_LEN(haystack);
        } else {
                if (offset < -INT_MAX || (size_t)(-offset) > ZSTR_LEN(haystack)) {
-                       zend_string_release(haystack_dup);
+                       zend_string_release_ex(haystack_dup, 0);
                        ZSTR_ALLOCA_FREE(ord_needle, use_heap);
                        php_error_docref(NULL, E_WARNING, "Offset is greater than the length of haystack string");
                        RETURN_FALSE;
@@ -2230,12 +2230,12 @@ PHP_FUNCTION(strripos)
        needle_dup = php_string_tolower(needle);
        if ((found = (char *)zend_memnrstr(p, ZSTR_VAL(needle_dup), ZSTR_LEN(needle_dup), e))) {
                RETVAL_LONG(found - ZSTR_VAL(haystack_dup));
-               zend_string_release(needle_dup);
-               zend_string_release(haystack_dup);
+               zend_string_release_ex(needle_dup, 0);
+               zend_string_release_ex(haystack_dup, 0);
                ZSTR_ALLOCA_FREE(ord_needle, use_heap);
        } else {
-               zend_string_release(needle_dup);
-               zend_string_release(haystack_dup);
+               zend_string_release_ex(needle_dup, 0);
+               zend_string_release_ex(haystack_dup, 0);
                ZSTR_ALLOCA_FREE(ord_needle, use_heap);
                RETURN_FALSE;
        }
@@ -3061,7 +3061,7 @@ static void php_strtr_array(zval *return_value, zend_string *input, HashTable *p
                        }
                        zend_hash_add(&str_hash, key_used, entry);
                        if (UNEXPECTED(!str_key)) {
-                               zend_string_release(key_used);
+                               zend_string_release_ex(key_used, 0);
                        }
                } ZEND_HASH_FOREACH_END();
                pats = &str_hash;
@@ -3297,7 +3297,7 @@ static zend_string *php_str_to_str_i_ex(zend_string *haystack, const char *lc_ha
                                memcpy(ZSTR_VAL(new_str) + (r - lc_haystack), str, str_len);
                                (*replace_count)++;
                        }
-                       zend_string_release(lc_needle);
+                       zend_string_release_ex(lc_needle, 0);
 
                        if (!new_str) {
                                goto nothing_todo;
@@ -3318,7 +3318,7 @@ static zend_string *php_str_to_str_i_ex(zend_string *haystack, const char *lc_ha
                        }
                        if (count == 0) {
                                /* Needle doesn't occur, shortcircuit the actual replacement. */
-                               zend_string_release(lc_needle);
+                               zend_string_release_ex(lc_needle, 0);
                                goto nothing_todo;
                        }
 
@@ -3345,7 +3345,7 @@ static zend_string *php_str_to_str_i_ex(zend_string *haystack, const char *lc_ha
                        }
                        *e = '\0';
 
-                       zend_string_release(lc_needle);
+                       zend_string_release_ex(lc_needle, 0);
 
                        return new_str;
                }
@@ -3356,10 +3356,10 @@ nothing_todo:
                lc_needle = php_string_tolower(needle);
 
                if (memcmp(lc_haystack, ZSTR_VAL(lc_needle), ZSTR_LEN(lc_needle))) {
-                       zend_string_release(lc_needle);
+                       zend_string_release_ex(lc_needle, 0);
                        goto nothing_todo;
                }
-               zend_string_release(lc_needle);
+               zend_string_release_ex(lc_needle, 0);
 
                new_str = zend_string_init(str, str_len, 0);
 
@@ -3844,7 +3844,7 @@ PHPAPI zend_string *php_addcslashes(zend_string *str, int should_free, char *wha
                new_str = zend_string_truncate(new_str, newlen, 0);
        }
        if (should_free) {
-               zend_string_release(str);
+               zend_string_release_ex(str, 0);
        }
        return new_str;
 }
@@ -4040,7 +4040,7 @@ do_escape:
 
        *target = '\0';
        if (should_free) {
-               zend_string_release(str);
+               zend_string_release_ex(str, 0);
        }
 
        if (ZSTR_LEN(new_str) - (target - ZSTR_VAL(new_str)) > 16) {
@@ -4119,7 +4119,7 @@ do_escape:
 
        *target = '\0';
        if (should_free) {
-               zend_string_release(str);
+               zend_string_release_ex(str, 0);
        }
 
        if (ZSTR_LEN(new_str) - (target - ZSTR_VAL(new_str)) > 16) {
@@ -4330,7 +4330,7 @@ static zend_long php_str_replace_in_subject(zval *search, zval *replace, zval *s
                                                                case_sensitivity,
                                                                &replace_count);
                                if (lc_subject_str && replace_count != old_replace_count) {
-                                       zend_string_release(lc_subject_str);
+                                       zend_string_release_ex(lc_subject_str, 0);
                                        lc_subject_str = NULL;
                                }
                        } else if (ZSTR_LEN(search_str) > 1) {
@@ -4347,7 +4347,7 @@ static zend_long php_str_replace_in_subject(zval *search, zval *replace, zval *s
                                        tmp_result = php_str_to_str_i_ex(Z_STR_P(result), ZSTR_VAL(lc_subject_str),
                                                        search_str, replace_value, replace_len, &replace_count);
                                        if (replace_count != old_replace_count) {
-                                               zend_string_release(lc_subject_str);
+                                               zend_string_release_ex(lc_subject_str, 0);
                                                lc_subject_str = NULL;
                                        }
                                }
@@ -4356,22 +4356,22 @@ static zend_long php_str_replace_in_subject(zval *search, zval *replace, zval *s
                        zend_tmp_string_release(tmp_search_str);
 
                        if (tmp_replace_entry_str) {
-                               zend_string_release(tmp_replace_entry_str);
+                               zend_string_release_ex(tmp_replace_entry_str, 0);
                                tmp_replace_entry_str = NULL;
                        }
-                       zend_string_release(Z_STR_P(result));
+                       zend_string_release_ex(Z_STR_P(result), 0);
                        ZVAL_STR(result, tmp_result);
 
                        if (Z_STRLEN_P(result) == 0) {
                                if (lc_subject_str) {
-                                       zend_string_release(lc_subject_str);
+                                       zend_string_release_ex(lc_subject_str, 0);
                                }
                                zend_tmp_string_release(tmp_subject_str);
                                return replace_count;
                        }
                } ZEND_HASH_FOREACH_END();
                if (lc_subject_str) {
-                       zend_string_release(lc_subject_str);
+                       zend_string_release_ex(lc_subject_str, 0);
                }
        } else {
                ZEND_ASSERT(Z_TYPE_P(search) == IS_STRING);
@@ -4393,7 +4393,7 @@ static zend_long php_str_replace_in_subject(zval *search, zval *replace, zval *s
                                ZVAL_STR(result, php_str_to_str_i_ex(subject_str, ZSTR_VAL(lc_subject_str),
                                                Z_STR_P(search),
                                                Z_STRVAL_P(replace), Z_STRLEN_P(replace), &replace_count));
-                               zend_string_release(lc_subject_str);
+                               zend_string_release_ex(lc_subject_str, 0);
                        }
                } else {
                        ZVAL_STR_COPY(result, subject_str);
@@ -4646,7 +4646,7 @@ static void php_hebrev(INTERNAL_FUNCTION_PARAMETERS, int convert_newlines)
 
        if (convert_newlines) {
                RETVAL_STR(php_char_to_str_ex(broken_str, '\n', "<br />\n", 7, 1, NULL));
-               zend_string_release(broken_str);
+               zend_string_release_ex(broken_str, 0);
        } else {
                RETURN_NEW_STR(broken_str);
        }
@@ -4819,12 +4819,12 @@ PHP_FUNCTION(setlocale)
                loc = zval_get_string(plocale);
 
                if (!strcmp("0", ZSTR_VAL(loc))) {
-                       zend_string_release(loc);
+                       zend_string_release_ex(loc, 0);
                        loc = NULL;
                } else {
                        if (ZSTR_LEN(loc) >= 255) {
                                php_error_docref(NULL, E_WARNING, "Specified locale name is too long");
-                               zend_string_release(loc);
+                               zend_string_release_ex(loc, 0);
                                break;
                        }
                }
@@ -4839,25 +4839,25 @@ PHP_FUNCTION(setlocale)
                                BG(locale_changed) = 1;
                                if (cat == LC_CTYPE || cat == LC_ALL) {
                                        if (BG(locale_string)) {
-                                               zend_string_release(BG(locale_string));
+                                               zend_string_release_ex(BG(locale_string), 0);
                                        }
                                        if (len == ZSTR_LEN(loc) && !memcmp(ZSTR_VAL(loc), retval, len)) {
                                                BG(locale_string) = zend_string_copy(loc);
                                                RETURN_STR(BG(locale_string));
                                        } else {
                                                BG(locale_string) = zend_string_init(retval, len, 0);
-                                               zend_string_release(loc);
+                                               zend_string_release_ex(loc, 0);
                                                RETURN_STR_COPY(BG(locale_string));
                                        }
                                } else if (len == ZSTR_LEN(loc) && !memcmp(ZSTR_VAL(loc), retval, len)) {
                                        RETURN_STR(loc);
                                }
-                               zend_string_release(loc);
+                               zend_string_release_ex(loc, 0);
                        }
                        RETURN_STRING(retval);
                }
                if (loc) {
-                       zend_string_release(loc);
+                       zend_string_release_ex(loc, 0);
                }
 
                if (Z_TYPE(args[0]) == IS_ARRAY) {
index 58c5c4b91dce6904e5226ff581e896584dbe3aa0..d5ca21b6500127d4947c35b2570548ad2d25dfba 100644 (file)
 PHPAPI void php_url_free(php_url *theurl)
 {
        if (theurl->scheme)
-               zend_string_release(theurl->scheme);
+               zend_string_release_ex(theurl->scheme, 0);
        if (theurl->user)
-               zend_string_release(theurl->user);
+               zend_string_release_ex(theurl->user, 0);
        if (theurl->pass)
-               zend_string_release(theurl->pass);
+               zend_string_release_ex(theurl->pass, 0);
        if (theurl->host)
-               zend_string_release(theurl->host);
+               zend_string_release_ex(theurl->host, 0);
        if (theurl->path)
-               zend_string_release(theurl->path);
+               zend_string_release_ex(theurl->path, 0);
        if (theurl->query)
-               zend_string_release(theurl->query);
+               zend_string_release_ex(theurl->query, 0);
        if (theurl->fragment)
-               zend_string_release(theurl->fragment);
+               zend_string_release_ex(theurl->fragment, 0);
        efree(theurl);
 }
 /* }}} */
index 54995dc0b11ea2293968941ed57d726e8a7a719e..ace561cf305ca2c962653bea30b6297ab91333c2 100644 (file)
@@ -99,7 +99,7 @@ static int php_ini_on_update_tags(zend_ini_entry *entry, zend_string *new_value,
                        str = zend_string_init(key, keylen, 1);
                        GC_MAKE_PERSISTENT_LOCAL(str);
                        zend_hash_add_mem(ctx->tags, str, val, strlen(val)+1);
-                       zend_string_release(str);
+                       zend_string_release_ex(str, 1);
                }
        }
 
@@ -148,7 +148,7 @@ static int php_ini_on_update_hosts(zend_ini_entry *entry, zend_string *new_value
                if (keylen > 0) {
                        tmp_key = zend_string_init(key, keylen, 0);
                        zend_hash_add_empty_element(hosts, tmp_key);
-                       zend_string_release(tmp_key);
+                       zend_string_release_ex(tmp_key, 0);
                }
        }
        efree(tmp);
@@ -216,12 +216,12 @@ static inline void append_modified_url(smart_str *url, smart_str *dest, smart_st
        if (url_parts->host) {
                zend_string *tmp = zend_string_tolower(url_parts->host);
                if (!zend_hash_exists(&BG(url_adapt_session_hosts_ht), tmp)) {
-                       zend_string_release(tmp);
+                       zend_string_release_ex(tmp, 0);
                        smart_str_append_smart_str(dest, url);
                        php_url_free(url_parts);
                        return;
                }
-               zend_string_release(tmp);
+               zend_string_release_ex(tmp, 0);
        }
 
        /*
@@ -366,10 +366,10 @@ static int check_http_host(char *target)
                        ZSTR_VAL(host_tmp)[ZSTR_LEN(host_tmp)] = '\0';
                }
                if (!strcasecmp(ZSTR_VAL(host_tmp), target)) {
-                       zend_string_release(host_tmp);
+                       zend_string_release_ex(host_tmp, 0);
                        return SUCCESS;
                }
-               zend_string_release(host_tmp);
+               zend_string_release_ex(host_tmp, 0);
        }
        return FAILURE;
 }
index 68edab084a0d80587f79ebef915074be4e12af38..f54cdfc907610fd2ce98e837f61b6ec0bd4d9106 100644 (file)
@@ -97,7 +97,7 @@ static int php_ini_on_update_tags(zend_ini_entry *entry, zend_string *new_value,
                        str = zend_string_init(key, keylen, 1);
                        GC_MAKE_PERSISTENT_LOCAL(str);
                        zend_hash_add_mem(ctx->tags, str, val, strlen(val)+1);
-                       zend_string_release(str);
+                       zend_string_release_ex(str, 1);
                }
        }
 
@@ -146,7 +146,7 @@ static int php_ini_on_update_hosts(zend_ini_entry *entry, zend_string *new_value
                if (keylen > 0) {
                        tmp_key = zend_string_init(key, keylen, 0);
                        zend_hash_add_empty_element(hosts, tmp_key);
-                       zend_string_release(tmp_key);
+                       zend_string_release_ex(tmp_key, 0);
                }
        }
        efree(tmp);
@@ -219,12 +219,12 @@ static inline void append_modified_url(smart_str *url, smart_str *dest, smart_st
        if (url_parts->host) {
                zend_string *tmp = zend_string_tolower(url_parts->host);
                if (!zend_hash_exists(&BG(url_adapt_session_hosts_ht), tmp)) {
-                       zend_string_release(tmp);
+                       zend_string_release_ex(tmp, 0);
                        smart_str_append_smart_str(dest, url);
                        php_url_free(url_parts);
                        return;
                }
-               zend_string_release(tmp);
+               zend_string_release_ex(tmp, 0);
        }
 
        /*
@@ -369,10 +369,10 @@ static int check_http_host(char *target)
                        ZSTR_VAL(host_tmp)[ZSTR_LEN(host_tmp)] = '\0';
                }
                if (!strcasecmp(ZSTR_VAL(host_tmp), target)) {
-                       zend_string_release(host_tmp);
+                       zend_string_release_ex(host_tmp, 0);
                        return SUCCESS;
                }
-               zend_string_release(host_tmp);
+               zend_string_release_ex(host_tmp, 0);
        }
        return FAILURE;
 }
index 01bc6e4021da8e6f9f02ee0dd75fcda688bd0c51..ac7f40f3741bbcca089cb166b5a0893749e637ec 100644 (file)
@@ -387,7 +387,7 @@ static const php_stream_filter_factory user_filter_factory = {
 static void filter_item_dtor(zval *zv)
 {
        struct php_user_filter_data *fdat = Z_PTR_P(zv);
-       zend_string_release(fdat->classname);
+       zend_string_release_ex(fdat->classname, 0);
        efree(fdat);
 }
 
@@ -590,7 +590,7 @@ PHP_FUNCTION(stream_filter_register)
                        php_stream_filter_register_factory_volatile(filtername, &user_filter_factory) == SUCCESS) {
                RETVAL_TRUE;
        } else {
-               zend_string_release(classname);
+               zend_string_release_ex(classname, 0);
                efree(fdat);
        }
 }
index 643e1eaf8459fe29e42948dfae98671bf2ab0604..c6465fb89326ffe1f533d2ee8882c08504f001a5 100644 (file)
@@ -150,7 +150,7 @@ again:
                        myht = Z_OBJDEBUG_P(struc, is_temp);
                        class_name = Z_OBJ_HANDLER_P(struc, get_class_name)(Z_OBJ_P(struc));
                        php_printf("%sobject(%s)#%d (%d) {\n", COMMON, ZSTR_VAL(class_name), Z_OBJ_HANDLE_P(struc), myht ? zend_array_count(myht) : 0);
-                       zend_string_release(class_name);
+                       zend_string_release_ex(class_name, 0);
 
                        if (myht) {
                                zend_ulong num;
@@ -321,7 +321,7 @@ again:
                }
                class_name = Z_OBJ_HANDLER_P(struc, get_class_name)(Z_OBJ_P(struc));
                php_printf("%sobject(%s)#%d (%d) refcount(%u){\n", COMMON, ZSTR_VAL(class_name), Z_OBJ_HANDLE_P(struc), myht ? zend_array_count(myht) : 0, Z_REFCOUNT_P(struc));
-               zend_string_release(class_name);
+               zend_string_release_ex(class_name, 0);
                if (myht) {
                        ZEND_HASH_FOREACH_KEY_VAL_IND(myht, index, key, val) {
                                zval_object_property_dump(val, index, key, level);
@@ -425,7 +425,7 @@ static void php_object_element_export(zval *zv, zend_ulong index, zend_string *k
                smart_str_appendc(buf, '\'');
                smart_str_append(buf, pname_esc);
                smart_str_appendc(buf, '\'');
-               zend_string_release(pname_esc);
+               zend_string_release_ex(pname_esc, 0);
        } else {
                smart_str_append_long(buf, (zend_long) index);
        }
@@ -1094,7 +1094,7 @@ PHP_FUNCTION(unserialize)
                                convert_to_string_ex(entry);
                                lcname = zend_string_tolower(Z_STR_P(entry));
                                zend_hash_add_empty_element(class_hash, lcname);
-                       zend_string_release(lcname);
+                       zend_string_release_ex(lcname, 0);
                        } ZEND_HASH_FOREACH_END();
                }
                php_var_unserialize_set_allowed_classes(var_hash, class_hash);
index b6b3f57db13b1150514d39d082565562a2249001..e4b8321e6336630dc39a73a23ebad22c7a885ba4 100644 (file)
@@ -458,7 +458,7 @@ string_key:
                                                if (existing_propinfo->flags & ZEND_ACC_PROTECTED) {
                                                        new_key = zend_mangle_property_name(
                                                                "*", 1, ZSTR_VAL(unmangled), ZSTR_LEN(unmangled), 0);
-                                                       zend_string_release(unmangled);
+                                                       zend_string_release_ex(unmangled, 0);
                                                } else if (existing_propinfo->flags & ZEND_ACC_PRIVATE) {
                                                        if (unmangled_class != NULL && strcmp(unmangled_class, "*") != 0) {
                                                                new_key = zend_mangle_property_name(
@@ -471,15 +471,15 @@ string_key:
                                                                        ZSTR_VAL(unmangled), ZSTR_LEN(unmangled),
                                                                        0);
                                                        }
-                                                       zend_string_release(unmangled);
+                                                       zend_string_release_ex(unmangled, 0);
                                                } else {
                                                        ZEND_ASSERT(existing_propinfo->flags & ZEND_ACC_PUBLIC);
                                                        new_key = unmangled;
                                                }
-                                               zend_string_release(Z_STR(key));
+                                               zend_string_release_ex(Z_STR(key), 0);
                                                ZVAL_STR(&key, new_key);
                                        } else {
-                                               zend_string_release(unmangled);
+                                               zend_string_release_ex(unmangled, 0);
                                        }
                                }
 
@@ -1231,7 +1231,7 @@ yy78:
                if (ce) {
                        BG(serialize_lock)--;
                        if (EG(exception)) {
-                               zend_string_release(class_name);
+                               zend_string_release_ex(class_name, 0);
                                return 0;
                        }
                        break;
@@ -1239,7 +1239,7 @@ yy78:
                BG(serialize_lock)--;
 
                if (EG(exception)) {
-                       zend_string_release(class_name);
+                       zend_string_release_ex(class_name, 0);
                        return 0;
                }
 
@@ -1258,7 +1258,7 @@ yy78:
                if (call_user_function_ex(CG(function_table), NULL, &user_func, &retval, 1, args, 0, NULL) != SUCCESS) {
                        BG(serialize_lock)--;
                        if (EG(exception)) {
-                               zend_string_release(class_name);
+                               zend_string_release_ex(class_name, 0);
                                zval_ptr_dtor(&user_func);
                                zval_ptr_dtor(&args[0]);
                                return 0;
@@ -1273,7 +1273,7 @@ yy78:
                BG(serialize_lock)--;
                zval_ptr_dtor(&retval);
                if (EG(exception)) {
-                       zend_string_release(class_name);
+                       zend_string_release_ex(class_name, 0);
                        zval_ptr_dtor(&user_func);
                        zval_ptr_dtor(&args[0]);
                        return 0;
@@ -1303,21 +1303,21 @@ yy78:
                if (ret && incomplete_class) {
                        php_store_class_name(rval, ZSTR_VAL(class_name), len2);
                }
-               zend_string_release(class_name);
+               zend_string_release_ex(class_name, 0);
                return ret;
        }
 
        elements = object_common1(UNSERIALIZE_PASSTHRU, ce);
 
        if (elements < 0) {
-          zend_string_release(class_name);
+          zend_string_release_ex(class_name, 0);
           return 0;
        }
 
        if (incomplete_class) {
                php_store_class_name(rval, ZSTR_VAL(class_name), len2);
        }
-       zend_string_release(class_name);
+       zend_string_release_ex(class_name, 0);
 
        return object_common2(UNSERIALIZE_PASSTHRU, elements);
 }
index 8e238dae6e0da1ba98180fed14e6fe35d8d7642d..0af53592d4eb9c9edb0c6dda20babf8830ded9dd 100644 (file)
@@ -462,7 +462,7 @@ string_key:
                                                if (existing_propinfo->flags & ZEND_ACC_PROTECTED) {
                                                        new_key = zend_mangle_property_name(
                                                                "*", 1, ZSTR_VAL(unmangled), ZSTR_LEN(unmangled), 0);
-                                                       zend_string_release(unmangled);
+                                                       zend_string_release_ex(unmangled, 0);
                                                } else if (existing_propinfo->flags & ZEND_ACC_PRIVATE) {
                                                        if (unmangled_class != NULL && strcmp(unmangled_class, "*") != 0) {
                                                                new_key = zend_mangle_property_name(
@@ -475,15 +475,15 @@ string_key:
                                                                        ZSTR_VAL(unmangled), ZSTR_LEN(unmangled),
                                                                        0);
                                                        }
-                                                       zend_string_release(unmangled);
+                                                       zend_string_release_ex(unmangled, 0);
                                                } else {
                                                        ZEND_ASSERT(existing_propinfo->flags & ZEND_ACC_PUBLIC);
                                                        new_key = unmangled;
                                                }
-                                               zend_string_release(Z_STR(key));
+                                               zend_string_release_ex(Z_STR(key), 0);
                                                ZVAL_STR(&key, new_key);
                                        } else {
-                                               zend_string_release(unmangled);
+                                               zend_string_release_ex(unmangled, 0);
                                        }
                                }
 
@@ -971,7 +971,7 @@ object ":" uiv ":" ["]      {
                if (ce) {
                        BG(serialize_lock)--;
                        if (EG(exception)) {
-                               zend_string_release(class_name);
+                               zend_string_release_ex(class_name, 0);
                                return 0;
                        }
                        break;
@@ -979,7 +979,7 @@ object ":" uiv ":" ["]      {
                BG(serialize_lock)--;
 
                if (EG(exception)) {
-                       zend_string_release(class_name);
+                       zend_string_release_ex(class_name, 0);
                        return 0;
                }
 
@@ -998,7 +998,7 @@ object ":" uiv ":" ["]      {
                if (call_user_function_ex(CG(function_table), NULL, &user_func, &retval, 1, args, 0, NULL) != SUCCESS) {
                        BG(serialize_lock)--;
                        if (EG(exception)) {
-                               zend_string_release(class_name);
+                               zend_string_release_ex(class_name, 0);
                                zval_ptr_dtor(&user_func);
                                zval_ptr_dtor(&args[0]);
                                return 0;
@@ -1013,7 +1013,7 @@ object ":" uiv ":" ["]    {
                BG(serialize_lock)--;
                zval_ptr_dtor(&retval);
                if (EG(exception)) {
-                       zend_string_release(class_name);
+                       zend_string_release_ex(class_name, 0);
                        zval_ptr_dtor(&user_func);
                        zval_ptr_dtor(&args[0]);
                        return 0;
@@ -1043,21 +1043,21 @@ object ":" uiv ":" ["]  {
                if (ret && incomplete_class) {
                        php_store_class_name(rval, ZSTR_VAL(class_name), len2);
                }
-               zend_string_release(class_name);
+               zend_string_release_ex(class_name, 0);
                return ret;
        }
 
        elements = object_common1(UNSERIALIZE_PASSTHRU, ce);
 
        if (elements < 0) {
-          zend_string_release(class_name);
+          zend_string_release_ex(class_name, 0);
           return 0;
        }
 
        if (incomplete_class) {
                php_store_class_name(rval, ZSTR_VAL(class_name), len2);
        }
-       zend_string_release(class_name);
+       zend_string_release_ex(class_name, 0);
 
        return object_common2(UNSERIALIZE_PASSTHRU, elements);
 }
index 61fd0f32cb7cc4cc75de9ca2dd0788f3727dbf94..365d037eb56cc936cee785229e369df88e3aa198 100644 (file)
@@ -653,7 +653,7 @@ static void php_tidy_quick_repair(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_fil
        }
 
        if (is_file) {
-               zend_string_release(data);
+               zend_string_release_ex(data, 0);
        }
 
        tidyBufFree(errbuf);
@@ -1316,7 +1316,7 @@ static PHP_FUNCTION(tidy_parse_file)
                RETVAL_FALSE;
        }
 
-       zend_string_release(contents);
+       zend_string_release_ex(contents, 0);
 }
 /* }}} */
 
@@ -1635,7 +1635,7 @@ static TIDY_DOC_METHOD(__construct)
 
                php_tidy_parse_string(obj, ZSTR_VAL(contents), (uint32_t)ZSTR_LEN(contents), enc);
 
-               zend_string_release(contents);
+               zend_string_release_ex(contents, 0);
        }
 }
 
@@ -1675,7 +1675,7 @@ static TIDY_DOC_METHOD(parseFile)
                RETVAL_TRUE;
        }
 
-       zend_string_release(contents);
+       zend_string_release_ex(contents, 0);
 }
 
 static TIDY_DOC_METHOD(parseString)
index a4cc6dd2936e55cbb7de6a4d9570ef7f52337868..dd16313bbb2c0d44e0ed13e54766ae9712d3f316 100644 (file)
@@ -318,7 +318,7 @@ PS_SERIALIZER_DECODE_FUNC(wddx)
                                Z_TRY_ADDREF_P(ent);
                        }
                        PS_ADD_VAR(key);
-                       zend_string_release(key);
+                       zend_string_release_ex(key, 0);
                } ZEND_HASH_FOREACH_END();
        }
 
@@ -375,7 +375,7 @@ void php_wddx_packet_start(wddx_packet *packet, char *comment, size_t comment_le
                php_wddx_add_chunk_static(packet, WDDX_COMMENT_E);
                php_wddx_add_chunk_static(packet, WDDX_HEADER_E);
 
-               zend_string_release(escaped);
+               zend_string_release_ex(escaped, 0);
        } else {
                php_wddx_add_chunk_static(packet, WDDX_HEADER);
        }
@@ -410,7 +410,7 @@ static void php_wddx_serialize_string(wddx_packet *packet, zval *var)
 
                php_wddx_add_chunk_ex(packet, ZSTR_VAL(buf), ZSTR_LEN(buf));
 
-               zend_string_release(buf);
+               zend_string_release_ex(buf, 0);
        }
        php_wddx_add_chunk_static(packet, WDDX_STRING_E);
 }
@@ -423,7 +423,7 @@ static void php_wddx_serialize_number(wddx_packet *packet, zval *var)
        char tmp_buf[WDDX_BUF_LEN], *dec_point;
        zend_string *str = zval_get_string_func(var);
        snprintf(tmp_buf, sizeof(tmp_buf), WDDX_NUMBER, ZSTR_VAL(str));
-       zend_string_release(str);
+       zend_string_release_ex(str, 0);
 
        dec_point = strchr(tmp_buf, ',');
        if (dec_point) {
@@ -523,11 +523,11 @@ static void php_wddx_serialize_object(wddx_packet *packet, zval *obj)
                                zend_unmangle_property_name_ex(key, &class_name, &prop_name, &prop_name_len);
                                tmp = zend_string_init(prop_name, prop_name_len, 0);
                                php_wddx_serialize_var(packet, ent, tmp);
-                               zend_string_release(tmp);
+                               zend_string_release_ex(tmp, 0);
                        } else {
                                key = zend_long_to_str(idx);
                                php_wddx_serialize_var(packet, ent, key);
-                               zend_string_release(key);
+                               zend_string_release_ex(key, 0);
                        }
                } ZEND_HASH_FOREACH_END();
                php_wddx_add_chunk_static(packet, WDDX_STRUCT_E);
@@ -584,7 +584,7 @@ static void php_wddx_serialize_array(wddx_packet *packet, zval *arr)
                        } else {
                                key = zend_long_to_str(idx);
                                php_wddx_serialize_var(packet, ent, key);
-                               zend_string_release(key);
+                               zend_string_release_ex(key, 0);
                        }
                } else {
                        php_wddx_serialize_var(packet, ent, NULL);
@@ -612,7 +612,7 @@ void php_wddx_serialize_var(wddx_packet *packet, zval *var, zend_string *name)
                snprintf(tmp_buf, ZSTR_LEN(name_esc) + sizeof(WDDX_VAR_S), WDDX_VAR_S, ZSTR_VAL(name_esc));
                php_wddx_add_chunk(packet, tmp_buf);
                efree(tmp_buf);
-               zend_string_release(name_esc);
+               zend_string_release_ex(name_esc, 0);
        }
 
        if (Z_TYPE_P(var) == IS_INDIRECT) {
@@ -1076,7 +1076,7 @@ static void php_wddx_process_data(void *user_data, const XML_Char *s, int len)
                                        ZVAL_STR_COPY(&ent->data, str);
                                }
 
-                               zend_string_release(str);
+                               zend_string_release_ex(str, 0);
                        }
                                break;
 
index 9f73be1a96a990d645365177b6d7edc24175f8d0..f927afd764944c4d2966e37a585ae79637b6b62c 100644 (file)
@@ -735,7 +735,7 @@ void _xml_startElementHandler(void *userData, const XML_Char *name, const XML_Ch
 
                                attributes += 2;
 
-                               zend_string_release(att);
+                               zend_string_release_ex(att, 0);
                        }
 
                        xml_call_handler(parser, &parser->startElementHandler, parser->startElementPtr, 3, args, &retval);
@@ -773,7 +773,7 @@ void _xml_startElementHandler(void *userData, const XML_Char *name, const XML_Ch
                                        atcnt++;
                                        attributes += 2;
 
-                                       zend_string_release(att);
+                                       zend_string_release_ex(att, 0);
                                }
 
                                if (atcnt) {
@@ -788,7 +788,7 @@ void _xml_startElementHandler(void *userData, const XML_Char *name, const XML_Ch
                        }
                }
 
-               zend_string_release(tag_name);
+               zend_string_release_ex(tag_name, 0);
        }
 }
 /* }}} */
@@ -831,7 +831,7 @@ void _xml_endElementHandler(void *userData, const XML_Char *name)
                        parser->lastwasopen = 0;
                }
 
-               zend_string_release(tag_name);
+               zend_string_release_ex(tag_name, 0);
 
                if ((parser->ltags) && (parser->level <= XML_MAXLEVEL)) {
                        efree(parser->ltags[parser->level-1]);
@@ -887,7 +887,7 @@ void _xml_characterDataHandler(void *userData, const XML_Char *s, int len)
                                                Z_STR_P(myval) = zend_string_extend(Z_STR_P(myval), newlen, 0);
                                                strncpy(Z_STRVAL_P(myval) + Z_STRLEN_P(myval) - ZSTR_LEN(decoded_value),
                                                                ZSTR_VAL(decoded_value), ZSTR_LEN(decoded_value) + 1);
-                                               zend_string_release(decoded_value);
+                                               zend_string_release_ex(decoded_value, 0);
                                        } else {
                                                add_assoc_str(parser->ctag, "value", decoded_value);
                                        }
@@ -904,7 +904,7 @@ void _xml_characterDataHandler(void *userData, const XML_Char *s, int len)
                                                                        Z_STR_P(myval) = zend_string_extend(Z_STR_P(myval), newlen, 0);
                                                                        strncpy(Z_STRVAL_P(myval) + Z_STRLEN_P(myval) - ZSTR_LEN(decoded_value),
                                                                                        ZSTR_VAL(decoded_value), ZSTR_LEN(decoded_value) + 1);
-                                                                       zend_string_release(decoded_value);
+                                                                       zend_string_release_ex(decoded_value, 0);
                                                                        return;
                                                                }
                                                        }
@@ -928,7 +928,7 @@ void _xml_characterDataHandler(void *userData, const XML_Char *s, int len)
                                        }
                                }
                        } else {
-                               zend_string_release(decoded_value);
+                               zend_string_release_ex(decoded_value, 0);
                        }
                }
        }
index c91ea2eaa9a6896c76652ada8a98f79f4013e8df..a329cca29b653ea40b52127aadac878220c49342 100644 (file)
@@ -68,7 +68,7 @@ static void xmlreader_register_prop_handler(HashTable *prop_handler, char *name,
        hnd.type = rettype;
        str = zend_string_init_interned(name, strlen(name), 1);
        zend_hash_add_mem(prop_handler, str, &hnd, sizeof(xmlreader_prop_handler));
-       zend_string_release(str);
+       zend_string_release_ex(str, 1);
 }
 /* }}} */
 
index 96c5e1137d468d4db1acc11a8e6a693114afd40b..0a35c5ea3fc69620ff1167d2d382fa5f159aa4cb 100644 (file)
@@ -518,7 +518,7 @@ static XMLRPC_VALUE PHP_to_XMLRPC_worker (const char* key, zval* in_val, int dep
                                                if (Z_TYPE(val) != IS_STRING) {
                                                        zend_string *str = zval_get_string_func(&val);
                                                        xReturn = XMLRPC_CreateValueBase64(key, ZSTR_VAL(str), ZSTR_LEN(str));
-                                                       zend_string_release(str);
+                                                       zend_string_release_ex(str, 0);
                                                } else {
                                                        xReturn = XMLRPC_CreateValueBase64(key, Z_STRVAL(val), Z_STRLEN(val));
                                                }
@@ -948,7 +948,7 @@ static void php_xmlrpc_introspection_callback(XMLRPC_SERVER server, void* data)
                } else {
                        php_error_docref(NULL, E_WARNING, "Invalid callback '%s' passed", ZSTR_VAL(php_function_name));
                }
-               zend_string_release(php_function_name);
+               zend_string_release_ex(php_function_name, 0);
        } ZEND_HASH_FOREACH_END();
 
        /* so we don't call the same callbacks ever again */
index f155bda6300f6450fbc432509c4a07503bf47459..bde382ad1b16e7b195df85010e4f1a17c14b1a2d 100644 (file)
@@ -364,7 +364,7 @@ static void xsl_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs, int t
                        zval_ptr_dtor(&retval);
                }
        }
-       zend_string_release(callable);
+       zend_string_release_ex(callable, 0);
        zval_ptr_dtor(&handler);
        if (fci.param_count > 0) {
                for (i = 0; i < nargs - 1; i++) {
index 815f64ecb44f9fab9e166a254ddb5500641defbd..a98c8cc555ea2e4816004e0fbf61bcdf7f631182 100644 (file)
@@ -191,7 +191,7 @@ static int php_zip_extract_file(struct zip * za, char *dest, char *file, size_t
 
                if (ZIP_OPENBASEDIR_CHECKPATH(file_dirname_fullpath)) {
                        efree(file_dirname_fullpath);
-                       zend_string_release(file_basename);
+                       zend_string_release_ex(file_basename, 0);
                        CWD_STATE_FREE(new_state.cwd);
                        return 0;
                }
@@ -203,7 +203,7 @@ static int php_zip_extract_file(struct zip * za, char *dest, char *file, size_t
                if (!ret) {
                        efree(file_dirname_fullpath);
                        if (!is_dir_only) {
-                               zend_string_release(file_basename);
+                               zend_string_release_ex(file_basename, 0);
                                CWD_STATE_FREE(new_state.cwd);
                        }
                        return 0;
@@ -220,13 +220,13 @@ static int php_zip_extract_file(struct zip * za, char *dest, char *file, size_t
        len = spprintf(&fullpath, 0, "%s/%s", file_dirname_fullpath, ZSTR_VAL(file_basename));
        if (!len) {
                efree(file_dirname_fullpath);
-               zend_string_release(file_basename);
+               zend_string_release_ex(file_basename, 0);
                CWD_STATE_FREE(new_state.cwd);
                return 0;
        } else if (len > MAXPATHLEN) {
                php_error_docref(NULL, E_WARNING, "Full extraction path exceed MAXPATHLEN (%i)", MAXPATHLEN);
                efree(file_dirname_fullpath);
-               zend_string_release(file_basename);
+               zend_string_release_ex(file_basename, 0);
                CWD_STATE_FREE(new_state.cwd);
                return 0;
        }
@@ -238,7 +238,7 @@ static int php_zip_extract_file(struct zip * za, char *dest, char *file, size_t
        if (ZIP_OPENBASEDIR_CHECKPATH(fullpath)) {
                efree(fullpath);
                efree(file_dirname_fullpath);
-               zend_string_release(file_basename);
+               zend_string_release_ex(file_basename, 0);
                CWD_STATE_FREE(new_state.cwd);
                return 0;
        }
@@ -268,7 +268,7 @@ static int php_zip_extract_file(struct zip * za, char *dest, char *file, size_t
 
 done:
        efree(fullpath);
-       zend_string_release(file_basename);
+       zend_string_release_ex(file_basename, 0);
        efree(file_dirname_fullpath);
        CWD_STATE_FREE(new_state.cwd);
 
@@ -673,14 +673,14 @@ int php_zip_pcre(zend_string *regexp, char *path, int path_len, zval *return_val
 
                        if ((namelist_len == 1 && ZSTR_VAL(namelist[i])[0] == '.') ||
                                (namelist_len == 2 && ZSTR_VAL(namelist[i])[0] == '.' && ZSTR_VAL(namelist[i])[1] == '.')) {
-                               zend_string_release(namelist[i]);
+                               zend_string_release_ex(namelist[i], 0);
                                continue;
                        }
 
                        if ((path_len + namelist_len + 1) >= MAXPATHLEN) {
                                php_error_docref(NULL, E_WARNING, "add_path string too long (max: %u, %zu given)",
                                                MAXPATHLEN - 1, (path_len + namelist_len + 1));
-                               zend_string_release(namelist[i]);
+                               zend_string_release_ex(namelist[i], 0);
                                break;
                        }
 
@@ -688,31 +688,31 @@ int php_zip_pcre(zend_string *regexp, char *path, int path_len, zval *return_val
 
                        if (0 != VCWD_STAT(fullpath, &s)) {
                                php_error_docref(NULL, E_WARNING, "Cannot read <%s>", fullpath);
-                               zend_string_release(namelist[i]);
+                               zend_string_release_ex(namelist[i], 0);
                                continue;
                        }
 
                        if (S_IFDIR == (s.st_mode & S_IFMT)) {
-                               zend_string_release(namelist[i]);
+                               zend_string_release_ex(namelist[i], 0);
                                continue;
                        }
 
                        match_data = php_pcre_create_match_data(capture_count, re);
                        if (!match_data) {
                                /* Allocation failed, but can proceed to the next pattern. */
-                               zend_string_release(namelist[i]);
+                               zend_string_release_ex(namelist[i], 0);
                                continue;
                        }
                        rc = pcre2_match(re, (PCRE2_SPTR)ZSTR_VAL(namelist[i]), ZSTR_LEN(namelist[i]), 0, preg_options, match_data, mctx);
                        php_pcre_free_match_data(match_data);
                        /* 0 means that the vector is too small to hold all the captured substring offsets */
                        if (rc < 0) {
-                               zend_string_release(namelist[i]);
+                               zend_string_release_ex(namelist[i], 0);
                                continue;
                        }
 
                        add_next_index_string(return_value, fullpath);
-                       zend_string_release(namelist[i]);
+                       zend_string_release_ex(namelist[i], 0);
                }
                efree(namelist);
        }
@@ -820,7 +820,7 @@ static void php_zip_register_prop_handler(HashTable *prop_handler, char *name, z
        /* Register for reflection */
        ZVAL_NULL(&tmp);
        zend_declare_property_ex(zip_class_entry, str, &tmp, ZEND_ACC_PUBLIC, NULL);
-       zend_string_release(str);
+       zend_string_release_ex(str, 1);
 }
 /* }}} */
 
@@ -1760,7 +1760,7 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /*
                                entry_name = entry_name_buf;
                                entry_name_len = strlen(entry_name);
                                if (basename) {
-                                       zend_string_release(basename);
+                                       zend_string_release_ex(basename, 0);
                                        basename = NULL;
                                }
 
index 00caae6ccbce2dd4e70825fa147c3673871ea0ec..331ff4d9b195ccefc16bee7e0da33968d203f128 100644 (file)
@@ -161,7 +161,7 @@ static int php_zip_ops_stat(php_stream *stream, php_stream_statbuf *ssb) /* {{{
        fragment++;
 
        if (ZIP_OPENBASEDIR_CHECKPATH(file_dirname)) {
-               zend_string_release(file_basename);
+               zend_string_release_ex(file_basename, 0);
                return -1;
        }
 
@@ -170,7 +170,7 @@ static int php_zip_ops_stat(php_stream *stream, php_stream_statbuf *ssb) /* {{{
                memset(ssb, 0, sizeof(php_stream_statbuf));
                if (zip_stat(za, fragment, ZIP_FL_NOCASE, &sb) != 0) {
                        zip_close(za);
-                       zend_string_release(file_basename);
+                       zend_string_release_ex(file_basename, 0);
                        return -1;
                }
                zip_close(za);
@@ -194,7 +194,7 @@ static int php_zip_ops_stat(php_stream *stream, php_stream_statbuf *ssb) /* {{{
 #endif
                ssb->sb.st_ino = -1;
        }
-       zend_string_release(file_basename);
+       zend_string_release_ex(file_basename, 0);
        return 0;
 }
 /* }}} */
@@ -306,7 +306,7 @@ php_stream *php_stream_zip_opener(php_stream_wrapper *wrapper,
        fragment++;
 
        if (ZIP_OPENBASEDIR_CHECKPATH(file_dirname)) {
-               zend_string_release(file_basename);
+               zend_string_release_ex(file_basename, 0);
                return NULL;
        }
 
@@ -338,7 +338,7 @@ php_stream *php_stream_zip_opener(php_stream_wrapper *wrapper,
                }
        }
 
-       zend_string_release(file_basename);
+       zend_string_release_ex(file_basename, 0);
 
        if (!stream) {
                return NULL;
index dd38fa685783e60b38a6f19bebd8985bd7422473..a5028a72b0d1d0fcadc337b6758c73db79805a80 100644 (file)
@@ -811,7 +811,7 @@ static zend_bool zlib_create_dictionary_string(HashTable *options, char **dict,
                                                memcpy(dictptr, ZSTR_VAL(*ptr), ZSTR_LEN(*ptr));
                                                dictptr += ZSTR_LEN(*ptr);
                                                *dictptr++ = 0;
-                                               zend_string_release(*ptr);
+                                               zend_string_release_ex(*ptr, 0);
                                        } while (++ptr != end);
                                        efree(strings);
                                }
@@ -995,7 +995,7 @@ PHP_FUNCTION(inflate_add)
                                                case Z_DATA_ERROR:
                                                        php_error_docref(NULL, E_WARNING, "dictionary does not match expected dictionary (incorrect adler32 hash)");
                                                        efree(php_ctx->inflateDict);
-                                                       zend_string_release(out);
+                                                       zend_string_release_ex(out, 0);
                                                        php_ctx->inflateDict = NULL;
                                                        RETURN_FALSE;
                                                EMPTY_SWITCH_DEFAULT_CASE()
@@ -1006,7 +1006,7 @@ PHP_FUNCTION(inflate_add)
                                        RETURN_FALSE;
                                }
                        default:
-                               zend_string_release(out);
+                               zend_string_release_ex(out, 0);
                                php_error_docref(NULL, E_WARNING, "%s", zError(status));
                                RETURN_FALSE;
                }
@@ -1238,7 +1238,7 @@ PHP_FUNCTION(deflate_add)
                        RETURN_STR(out);
                        break;
                default:
-                       zend_string_release(out);
+                       zend_string_release_ex(out, 0);
                        php_error_docref(NULL, E_WARNING, "zlib error (%s)", zError(status));
                        RETURN_FALSE;
        }
index 5cf5892515bb869a825247f8a6c7be7d084f4c5b..b6c3329d33c97c98411e451003cad06d42dd57a5 100644 (file)
@@ -780,7 +780,7 @@ SAPI_API int sapi_header_op(sapi_header_op_enum op, void *arg)
                                if (!strncmp(ptr, "image/", sizeof("image/")-1)) {
                                        zend_string *key = zend_string_init("zlib.output_compression", sizeof("zlib.output_compression")-1, 0);
                                        zend_alter_ini_entry_chars(key, "0", sizeof("0") - 1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
-                                       zend_string_release(key);
+                                       zend_string_release_ex(key, 0);
                                }
 
                                mimetype = estrdup(ptr);
@@ -809,7 +809,7 @@ SAPI_API int sapi_header_op(sapi_header_op_enum op, void *arg)
                                zend_string *key = zend_string_init("zlib.output_compression", sizeof("zlib.output_compression")-1, 0);
                                zend_alter_ini_entry_chars(key,
                                        "0", sizeof("0") - 1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
-                               zend_string_release(key);
+                               zend_string_release_ex(key, 0);
                        } else if (!strcasecmp(header_line, "Location")) {
                                if ((SG(sapi_headers).http_response_code < 300 ||
                                        SG(sapi_headers).http_response_code > 399) &&
@@ -957,7 +957,7 @@ SAPI_API int sapi_register_post_entry(const sapi_post_entry *post_entry)
        GC_MAKE_PERSISTENT_LOCAL(key);
        ret = zend_hash_add_mem(&SG(known_post_content_types), key,
                        (void *) post_entry, sizeof(sapi_post_entry)) ? SUCCESS : FAILURE;
-       zend_string_release(key);
+       zend_string_release_ex(key, 1);
        return ret;
 }
 
index 15907111c300294790d6506fa3cab5a954058b13..c12ab3e2c02f201df0216aa84909c3a802beec6a 100644 (file)
@@ -1739,7 +1739,7 @@ void fcgi_set_mgmt_var(const char * name, size_t name_len, const char * value, s
        GC_MAKE_PERSISTENT_LOCAL(key);
        GC_MAKE_PERSISTENT_LOCAL(Z_STR(zvalue));
        zend_hash_add(&fcgi_mgmt_vars, key, &zvalue);
-       zend_string_release(key);
+       zend_string_release_ex(key, 1);
 }
 
 void fcgi_free_mgmt_var_cb(zval *zv)
index 319c9520120c0d7578eb54d24a9cfc7c05cde31e..b5c7c2ccf578ca28be8af6091d72f7f9af97a0f4 100644 (file)
@@ -439,7 +439,7 @@ PHPAPI int php_fopen_primary_script(zend_file_handle *file_handle)
                }
                return FAILURE;
        }
-       zend_string_release(resolved_path);
+       zend_string_release_ex(resolved_path, 0);
 
        orig_display_errors = PG(display_errors);
        PG(display_errors) = 0;
index 2e11aa208c68ae5ede4953e77b51c7c975441663..e8599425f0047f0885bb9c534fb42e3bcb22700f 100644 (file)
@@ -1366,7 +1366,7 @@ PHP_FUNCTION(set_time_limit)
        } else {
                RETVAL_FALSE;
        }
-       zend_string_release(key);
+       zend_string_release_ex(key, 0);
        efree(new_timeout_str);
 }
 /* }}} */
index 2297678156fb253b607ddc9512af33c88f65509f..03ceb2ad083537de77a098045cca0696fe81d0a6 100644 (file)
@@ -558,7 +558,7 @@ PHPAPI int php_network_parse_network_address_with_port(const char *addr, zend_lo
        if (n == 0) {
                if (errstr) {
                        php_error_docref(NULL, E_WARNING, "Failed to resolve `%s': %s", tmp, ZSTR_VAL(errstr));
-                       zend_string_release(errstr);
+                       zend_string_release_ex(errstr, 0);
                }
                goto out;
        }
@@ -880,7 +880,7 @@ skip_bind:
                        }
                        /* free error string received during previous iteration (if any) */
                        if (error_string && *error_string) {
-                               zend_string_release(*error_string);
+                               zend_string_release_ex(*error_string, 0);
                                *error_string = NULL;
                        }
 
index 74bc552dc642de8f57e797492cb862c6a0683ab1..63850a7cd631ed2d298fb6e96cf654d6dabe160e 100644 (file)
@@ -504,7 +504,7 @@ PHPAPI php_output_handler *php_output_handler_create_user(zval *output_handler,
                                efree(error);
                        }
                        if (handler_name) {
-                               zend_string_release(handler_name);
+                               zend_string_release_ex(handler_name, 0);
                        }
        }
 
@@ -521,7 +521,7 @@ PHPAPI php_output_handler *php_output_handler_create_internal(const char *name,
 
        handler = php_output_handler_init(str, chunk_size, (flags & ~0xf) | PHP_OUTPUT_HANDLER_INTERNAL);
        handler->func.internal = output_handler;
-       zend_string_release(str);
+       zend_string_release_ex(str, 0);
 
        return handler;
 }
@@ -618,7 +618,7 @@ PHPAPI int php_output_handler_conflict_register(const char *name, size_t name_le
        }
        str = zend_string_init_interned(name, name_len, 1);
        ret = zend_hash_update_ptr(&php_output_handler_conflicts, str, check_func) ? SUCCESS : FAILURE;
-       zend_string_release(str);
+       zend_string_release_ex(str, 1);
        return ret;
 }
 /* }}} */
@@ -647,7 +647,7 @@ PHPAPI int php_output_handler_reverse_conflict_register(const char *name, size_t
                }
                str = zend_string_init_interned(name, name_len, 1);
                ret = zend_hash_update_mem(&php_output_handler_reverse_conflicts, str, &rev, sizeof(HashTable)) ? SUCCESS : FAILURE;
-               zend_string_release(str);
+               zend_string_release_ex(str, 1);
                if (ret != SUCCESS) {
                        zend_hash_destroy(&rev);
                }
@@ -677,7 +677,7 @@ PHPAPI int php_output_handler_alias_register(const char *name, size_t name_len,
        }
        str = zend_string_init_interned(name, name_len, 1);
        ret = zend_hash_update_ptr(&php_output_handler_aliases, str, func) ? SUCCESS : FAILURE;
-       zend_string_release(str);
+       zend_string_release_ex(str, 1);
        return ret;
 }
 /* }}} */
@@ -716,7 +716,7 @@ PHPAPI int php_output_handler_hook(php_output_handler_hook_t type, void *arg)
 PHPAPI void php_output_handler_dtor(php_output_handler *handler)
 {
        if (handler->name) {
-               zend_string_release(handler->name);
+               zend_string_release_ex(handler->name, 0);
        }
        if (handler->buffer.data) {
                efree(handler->buffer.data);
index fca263e5f0686342516fd5379e07e4851a1fb2c5..ae09ba2ad150e907726bbdaac9fb80c766071837 100644 (file)
@@ -196,7 +196,7 @@ PHPAPI void config_zval_dtor(zval *zvalue)
                zend_hash_destroy(Z_ARRVAL_P(zvalue));
                free(Z_ARR_P(zvalue));
        } else if (Z_TYPE_P(zvalue) == IS_STRING) {
-               zend_string_release(Z_STR_P(zvalue));
+               zend_string_release_ex(Z_STR_P(zvalue), 1);
        }
 }
 /* Reset / free active_ini_sectin global */
@@ -637,7 +637,7 @@ int php_init_config(void)
                        ZVAL_NEW_STR(&tmp, zend_string_init(fh.filename, strlen(fh.filename), 1));
                        zend_hash_str_update(&configuration_hash, "cfg_file_path", sizeof("cfg_file_path")-1, &tmp);
                        if (opened_path) {
-                               zend_string_release(opened_path);
+                               zend_string_release_ex(opened_path, 0);
                        } else {
                                efree((char *)fh.filename);
                        }
index 09e5afcf3bbbe99705eb968c0a32cca7d177b820..d7bc81348d2a275f1a044027a1dd36e56f0f1507 100644 (file)
@@ -64,7 +64,7 @@ static zend_always_inline void php_register_variable_quick(const char *name, siz
        zend_string *key = zend_string_init_interned(name, name_len, 0);
 
        zend_hash_update_ind(ht, key, val);
-       zend_string_release(key);
+       zend_string_release_ex(key, 0);
 }
 
 PHPAPI void php_register_variable_ex(char *var_name, zval *val, zval *track_vars_array)
index bd01b34cf070fa0d9a41b9d6771280a920a74551..08358dcd5bb8e308fd36ba21be6d0f6c00513dec 100644 (file)
@@ -203,7 +203,7 @@ static int unlink_filename(zval *el) /* {{{ */
 
 static void free_filename(zval *el) {
        zend_string *filename = Z_STR_P(el);
-       zend_string_release(filename);
+       zend_string_release_ex(filename, 0);
 }
 
 PHPAPI void destroy_uploaded_files_hash(void) /* {{{ */
@@ -1113,7 +1113,7 @@ SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post_handler) /* {{{ */
                                        if (cancel_upload != UPLOAD_ERROR_E) { /* file creation failed */
                                                unlink(ZSTR_VAL(temp_filename));
                                        }
-                                       zend_string_release(temp_filename);
+                                       zend_string_release_ex(temp_filename, 0);
                                }
                                temp_filename = NULL;
                        } else {
index 9ef542086cc99e7eaa53d6d0bf1a72bcbd86fdc3..0c2510ec9a1566d502f0e7ff4848b54505d32bf9 100644 (file)
@@ -356,7 +356,7 @@ PHPAPI FILE * _php_stream_open_wrapper_as_file(char *path, char *mode, int optio
        if (php_stream_cast(stream, PHP_STREAM_AS_STDIO|PHP_STREAM_CAST_TRY_HARD|PHP_STREAM_CAST_RELEASE, (void**)&fp, REPORT_ERRORS) == FAILURE) {
                php_stream_close(stream);
                if (opened_path && *opened_path) {
-                       zend_string_release(*opened_path);
+                       zend_string_release_ex(*opened_path, 0);
                }
                return NULL;
        }
index fd7994c3f612f279be28ee268fe62b3207ec342e..2ad5dc2c0f8f33417f271ca58e9b464b4fdcaec6 100644 (file)
@@ -49,7 +49,7 @@ PHPAPI int php_stream_filter_register_factory(const char *filterpattern, const p
        int ret;
        zend_string *str = zend_string_init_interned(filterpattern, strlen(filterpattern), 1);
        ret = zend_hash_add_ptr(&stream_filters_hash, str, (void*)factory) ? SUCCESS : FAILURE;
-       zend_string_release(str);
+       zend_string_release_ex(str, 1);
        return ret;
 }
 
index 75de34ce01671499485b15ba8bed9f1d8941d3f0..7657b35faf4c49aeaedf9c2370bbc6cc1f237c2b 100644 (file)
@@ -479,7 +479,7 @@ static int php_stdiop_close(php_stream *stream, int close_handle)
                        unlink(ZSTR_VAL(data->temp_name));
 #endif
                        /* temporary streams are never persistent */
-                       zend_string_release(data->temp_name);
+                       zend_string_release_ex(data->temp_name, 0);
                        data->temp_name = NULL;
                }
        } else {
@@ -1045,7 +1045,7 @@ PHPAPI php_stream *_php_stream_fopen(const char *filename, const char *mode, zen
                                r = do_fstat(self, 0);
                                if ((r == 0 && !S_ISREG(self->sb.st_mode))) {
                                        if (opened_path) {
-                                               zend_string_release(*opened_path);
+                                               zend_string_release_ex(*opened_path, 0);
                                                *opened_path = NULL;
                                        }
                                        php_stream_close(ret);
index f8f0381eff5d8a3dddb2cad4dc3bc79ca749f535..8d6c4f727c986132e6e59298bf5afff894671cda 100644 (file)
@@ -1677,7 +1677,7 @@ PHPAPI int php_register_url_stream_wrapper(const char *protocol, const php_strea
 
        str = zend_string_init_interned(protocol, protocol_len, 1);
        ret = zend_hash_add_ptr(&url_stream_wrappers_hash, str, (void*)wrapper) ? SUCCESS : FAILURE;
-       zend_string_release(str);
+       zend_string_release_ex(str, 1);
        return ret;
 }
 
@@ -2011,7 +2011,7 @@ PHPAPI php_stream *_php_stream_open_wrapper_ex(const char *path, const char *mod
        if (options & STREAM_USE_URL && (!wrapper || !wrapper->is_url)) {
                php_error_docref(NULL, E_WARNING, "This function may only be used against URLs");
                if (resolved_path) {
-                       zend_string_release(resolved_path);
+                       zend_string_release_ex(resolved_path, 0);
                }
                return NULL;
        }
@@ -2064,7 +2064,7 @@ PHPAPI php_stream *_php_stream_open_wrapper_ex(const char *path, const char *mod
                                                ? PHP_STREAM_PREFER_STDIO : PHP_STREAM_NO_PREFERENCE)) {
                        case PHP_STREAM_UNCHANGED:
                                if (resolved_path) {
-                                       zend_string_release(resolved_path);
+                                       zend_string_release_ex(resolved_path, 0);
                                }
                                return stream;
                        case PHP_STREAM_RELEASED:
@@ -2073,7 +2073,7 @@ PHPAPI php_stream *_php_stream_open_wrapper_ex(const char *path, const char *mod
                                }
                                newstream->orig_path = pestrdup(path, persistent);
                                if (resolved_path) {
-                                       zend_string_release(resolved_path);
+                                       zend_string_release_ex(resolved_path, 0);
                                }
                                return newstream;
                        default:
@@ -2103,7 +2103,7 @@ PHPAPI php_stream *_php_stream_open_wrapper_ex(const char *path, const char *mod
        if (stream == NULL && (options & REPORT_ERRORS)) {
                php_stream_display_wrapper_errors(wrapper, path, "failed to open stream");
                if (opened_path && *opened_path) {
-                       zend_string_release(*opened_path);
+                       zend_string_release_ex(*opened_path, 0);
                        *opened_path = NULL;
                }
        }
@@ -2114,7 +2114,7 @@ PHPAPI php_stream *_php_stream_open_wrapper_ex(const char *path, const char *mod
        }
 #endif
        if (resolved_path) {
-               zend_string_release(resolved_path);
+               zend_string_release_ex(resolved_path, 0);
        }
        return stream;
 }
index 8908745ac5a48d1a00ebded3f9d4c8fa9e7d6ba6..6fc77910d46d8b2453d905cdcfe90304d76e0275 100644 (file)
@@ -35,7 +35,7 @@ PHPAPI int php_stream_xport_register(const char *protocol, php_stream_transport_
        zend_string *str = zend_string_init_interned(protocol, strlen(protocol), 1);
 
        ret = zend_hash_update_ptr(&xport_hash, str, factory) ? SUCCESS : FAILURE;
-       zend_string_release(str);
+       zend_string_release_ex(str, 1);
        return ret;
 }
 
@@ -51,7 +51,7 @@ PHPAPI int php_stream_xport_unregister(const char *protocol)
 #define ERR_RETURN(out_err, local_err, fmt) \
        if (out_err) { *out_err = local_err; } \
        else { php_error_docref(NULL, E_WARNING, fmt, local_err ? ZSTR_VAL(local_err) : "Unspecified error"); \
-               if (local_err) { zend_string_release(local_err); local_err = NULL; } \
+               if (local_err) { zend_string_release_ex(local_err, 0); local_err = NULL; } \
        }
 
 PHPAPI php_stream *_php_stream_xport_create(const char *name, size_t namelen, int options,
index 6fa1f4d1bb322254a744f44f1e8a613df05b71ca..fef1aa400d2c5c4f47031fd326d31d5e82735111 100644 (file)
@@ -360,7 +360,7 @@ static void append_essential_headers(smart_str* buffer, php_cli_server_client *c
                smart_str_appendl_ex(buffer, "Date: ", 6, persistent);
                smart_str_appends_ex(buffer, dt->val, persistent);
                smart_str_appendl_ex(buffer, "\r\n", 2, persistent);
-               zend_string_release(dt);
+               zend_string_release_ex(dt, 0);
        }
 
        smart_str_appendl_ex(buffer, "Connection: close\r\n", sizeof("Connection: close\r\n") - 1, persistent);
@@ -1580,8 +1580,8 @@ static void php_cli_server_client_save_header(php_cli_server_client *client)
        GC_MAKE_PERSISTENT_LOCAL(lc_header_name);
        zend_hash_add_ptr(&client->request.headers, lc_header_name, client->current_header_value);
        zend_hash_add_ptr(&client->request.headers_original_case, orig_header_name, client->current_header_value);
-       zend_string_release(lc_header_name);
-       zend_string_release(orig_header_name);
+       zend_string_release_ex(lc_header_name, 1);
+       zend_string_release_ex(orig_header_name, 1);
 
        if (client->current_header_name_allocated) {
                pefree(client->current_header_name, 1);
@@ -1835,7 +1835,7 @@ static int php_cli_server_client_ctor(php_cli_server_client *client, php_cli_ser
                php_network_populate_name_from_sockaddr(addr, addr_len, &addr_str, NULL, 0);
                client->addr_str = pestrndup(ZSTR_VAL(addr_str), ZSTR_LEN(addr_str), 1);
                client->addr_str_len = ZSTR_LEN(addr_str);
-               zend_string_release(addr_str);
+               zend_string_release_ex(addr_str, 0);
        }
        php_http_parser_init(&client->parser, PHP_HTTP_REQUEST);
        client->request_read = 0;
@@ -1951,7 +1951,7 @@ static int php_cli_server_send_error_page(php_cli_server *server, php_cli_server
 
                chunk = php_cli_server_chunk_heap_new(buffer.s, ZSTR_VAL(buffer.s), ZSTR_LEN(buffer.s));
                if (!chunk) {
-                       smart_str_free(&buffer);
+                       smart_str_free_ex(&buffer, 1);
                        goto fail;
                }
                php_cli_server_buffer_prepend(&client->content_sender.buffer, chunk);
@@ -2055,7 +2055,7 @@ static int php_cli_server_begin_send_static(php_cli_server *server, php_cli_serv
                smart_str_appendl_ex(&buffer, "\r\n", 2, 1);
                chunk = php_cli_server_chunk_heap_new(buffer.s, ZSTR_VAL(buffer.s), ZSTR_LEN(buffer.s));
                if (!chunk) {
-                       smart_str_free(&buffer);
+                       smart_str_free_ex(&buffer, 1);
                        php_cli_server_log_response(client, 500, NULL);
                        return FAILURE;
                }
@@ -2291,7 +2291,7 @@ static int php_cli_server_ctor(php_cli_server *server, const char *addr, const c
        if (server_sock == SOCK_ERR) {
                php_cli_server_logf("Failed to listen on %s:%d (reason: %s)", host, port, errstr ? ZSTR_VAL(errstr) : "?");
                if (errstr) {
-                       zend_string_release(errstr);
+                       zend_string_release_ex(errstr, 0);
                }
                retval = FAILURE;
                goto out;
index 11a5e25f249dbd6663db0729a1801e974034784f..d410682b9e3fac0288e81b0748c0492f1119687b 100644 (file)
@@ -43,7 +43,7 @@ static int fpm_php_zend_ini_alter_master(char *name, int name_length, char *new_
                        ini_entry->modifiable = mode;
                }
        } else {
-               zend_string_release(duplicate);
+               zend_string_release_ex(duplicate, 1);
        }
 
        return SUCCESS;
index f26600c2e86916895f4bb494a1a1381fdc1f14c3..a8cfb3fa493d2c3f053b3a70ebbeea27402185f0 100644 (file)
@@ -377,7 +377,7 @@ int fpm_status_handle_request(void) /* {{{ */
 
                PUTS(buffer);
                efree(buffer);
-               zend_string_release(_GET_str);
+               zend_string_release_ex(_GET_str, 0);
 
                if (short_post) {
                        PUTS(short_post);
index a281360c68b927137cad793f906acd6a54315476..8f2ab71cca6fb131ad7fd6cff13cfc0f4360764d 100644 (file)
@@ -594,7 +594,7 @@ static int alter_ini( const char * pKey, int keyLen, const char * pValue, int va
             zend_alter_ini_entry_chars(psKey,
                              (char *)pValue, valLen,
                              type, stage);
-            zend_string_release(psKey);
+            zend_string_release_ex(psKey, 1);
         }
     }
     return 1;
@@ -1034,7 +1034,7 @@ static int cli_main( int argc, char * argv[] )
             zend_alter_ini_entry_chars(psKey,
                                 (char *)*(ini+1), strlen( *(ini+1) ),
                                 PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE);
-            zend_string_release(psKey);
+            zend_string_release_ex(psKey, 1);
         }
 
         while (( p < argend )&&(**p == '-' )) {
index 1c4610d80717b97b8890812756777349a57c60c2..606b702b6a3261d455b6f8dd356ced3250626e89 100644 (file)
@@ -144,8 +144,8 @@ static zend_string *php_win32_mail_trim_header(char *header)
                                  -1,
                                  NULL);
 
-       zend_string_release(replace);
-       zend_string_release(regex);
+       zend_string_release_ex(replace, 0);
+       zend_string_release_ex(regex, 0);
 
        if (NULL == result) {
                return NULL;
@@ -159,9 +159,9 @@ static zend_string *php_win32_mail_trim_header(char *header)
                                   replace,
                                  -1,
                                  NULL);
-       zend_string_release(replace);
-       zend_string_release(regex);
-       zend_string_release(result);
+       zend_string_release_ex(replace, 0);
+       zend_string_release_ex(regex, 0);
+       zend_string_release_ex(result, 0);
 
        return result2;
 }
@@ -211,7 +211,7 @@ PHPAPI int TSendMail(char *host, int *error, char **error_message,
                 * insensitive when searching for a pattern. */
                headers_lc = zend_string_tolower(headers_trim);
                if (headers_lc == headers_trim) {
-                       zend_string_release(headers_lc);
+                       zend_string_release_ex(headers_lc, 0);
                }
        }