summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2018-05-28 16:27:12 +0300
committerDmitry Stogov <dmitry@zend.com>2018-05-28 16:27:12 +0300
commit5eb1f92f31cafc48384f9096012f421b37f6d425 (patch)
tree4ed67b92229407e7b5cbab37b96428fe80eb3f94
parent925f05dd1a35eafa71eb29abb69cdfc31a23a75d (diff)
downloadphp-git-5eb1f92f31cafc48384f9096012f421b37f6d425.tar.gz
Use zend_string_release_ex() instread of zend_string_release() in places, where we sure about string persistence.
-rw-r--r--Zend/zend.c8
-rw-r--r--Zend/zend_API.c36
-rw-r--r--Zend/zend_ast.c8
-rw-r--r--Zend/zend_builtin_functions.c36
-rw-r--r--Zend/zend_closures.c6
-rw-r--r--Zend/zend_compile.c82
-rw-r--r--Zend/zend_compile.h2
-rw-r--r--Zend/zend_constants.c14
-rw-r--r--Zend/zend_exceptions.c22
-rw-r--r--Zend/zend_execute.c34
-rw-r--r--Zend/zend_execute_API.c24
-rw-r--r--Zend/zend_hash.c4
-rw-r--r--Zend/zend_highlight.c4
-rw-r--r--Zend/zend_inheritance.c26
-rw-r--r--Zend/zend_ini.c6
-rw-r--r--Zend/zend_ini_parser.y22
-rw-r--r--Zend/zend_language_parser.y2
-rw-r--r--Zend/zend_language_scanner.c6
-rw-r--r--Zend/zend_language_scanner.l6
-rw-r--r--Zend/zend_list.c2
-rw-r--r--Zend/zend_object_handlers.c10
-rw-r--r--Zend/zend_objects.c2
-rw-r--r--Zend/zend_opcode.c44
-rw-r--r--Zend/zend_operators.c32
-rw-r--r--Zend/zend_operators.h2
-rw-r--r--Zend/zend_smart_str.h6
-rw-r--r--Zend/zend_stream.c2
-rw-r--r--Zend/zend_string.h15
-rw-r--r--Zend/zend_variables.c5
-rw-r--r--Zend/zend_vm_def.h18
-rw-r--r--Zend/zend_vm_execute.h98
-rw-r--r--ext/com_dotnet/com_handlers.c2
-rw-r--r--ext/com_dotnet/com_typeinfo.c2
-rw-r--r--ext/com_dotnet/com_wrapper.c8
-rw-r--r--ext/curl/interface.c10
-rw-r--r--ext/dba/dba.c4
-rw-r--r--ext/dom/attr.c2
-rw-r--r--ext/dom/characterdata.c2
-rw-r--r--ext/dom/document.c6
-rw-r--r--ext/dom/node.c8
-rw-r--r--ext/dom/php_dom.c12
-rw-r--r--ext/dom/processinginstruction.c2
-rw-r--r--ext/dom/xpath.c6
-rw-r--r--ext/exif/exif.c2
-rw-r--r--ext/fileinfo/libmagic/funcs.c4
-rw-r--r--ext/fileinfo/libmagic/softmagic.c2
-rw-r--r--ext/filter/logical_filters.c3
-rw-r--r--ext/gd/gd.c6
-rw-r--r--ext/gmp/gmp.c2
-rw-r--r--ext/hash/hash.c6
-rw-r--r--ext/iconv/iconv.c10
-rw-r--r--ext/interbase/ibase_events.c2
-rw-r--r--ext/intl/converter/converter.c2
-rw-r--r--ext/intl/dateformat/dateformat_create.cpp2
-rw-r--r--ext/intl/intl_error.c4
-rw-r--r--ext/intl/locale/locale_methods.c38
-rw-r--r--ext/intl/msgformat/msgformat_helpers.cpp4
-rw-r--r--ext/json/json_parser.tab.c12
-rw-r--r--ext/json/json_parser.tab.h6
-rw-r--r--ext/json/json_parser.y6
-rw-r--r--ext/ldap/ldap.c2
-rw-r--r--ext/mbstring/mb_gpc.c2
-rw-r--r--ext/mbstring/mbstring.c22
-rw-r--r--ext/mysqli/mysqli.c4
-rw-r--r--ext/mysqli/mysqli_nonapi.c2
-rw-r--r--ext/mysqlnd/mysqlnd_auth.c2
-rw-r--r--ext/mysqlnd/mysqlnd_connection.c4
-rw-r--r--ext/mysqlnd/mysqlnd_net.c2
-rw-r--r--ext/mysqlnd/mysqlnd_result_meta.c2
-rw-r--r--ext/mysqlnd/mysqlnd_vio.c2
-rw-r--r--ext/oci8/oci8_interface.c14
-rw-r--r--ext/oci8/oci8_statement.c4
-rw-r--r--ext/opcache/Optimizer/block_pass.c2
-rw-r--r--ext/opcache/Optimizer/compact_literals.c6
-rw-r--r--ext/opcache/Optimizer/compact_vars.c4
-rw-r--r--ext/opcache/Optimizer/pass1_5.c8
-rw-r--r--ext/opcache/Optimizer/sccp.c2
-rw-r--r--ext/opcache/Optimizer/zend_func_info.c2
-rw-r--r--ext/opcache/Optimizer/zend_inference.c2
-rw-r--r--ext/opcache/ZendAccelerator.c20
-rw-r--r--ext/opcache/zend_accelerator_util_funcs.c4
-rw-r--r--ext/opcache/zend_file_cache.c6
-rw-r--r--ext/opcache/zend_persist.c12
-rw-r--r--ext/opcache/zend_persist_calc.c3
-rw-r--r--ext/openssl/openssl.c48
-rw-r--r--ext/openssl/xp_ssl.c2
-rw-r--r--ext/pcntl/pcntl.c4
-rw-r--r--ext/pcre/php_pcre.c46
-rw-r--r--ext/pdo/pdo_dbh.c8
-rw-r--r--ext/pdo/pdo_sql_parser.c19
-rw-r--r--ext/pdo/pdo_sql_parser.re8
-rw-r--r--ext/pdo/pdo_stmt.c16
-rw-r--r--ext/pdo_firebird/firebird_driver.c6
-rw-r--r--ext/pdo_mysql/mysql_driver.c26
-rw-r--r--ext/pdo_pgsql/pgsql_driver.c4
-rw-r--r--ext/pdo_sqlite/sqlite_driver.c8
-rw-r--r--ext/phar/func_interceptors.c8
-rw-r--r--ext/phar/phar.c14
-rw-r--r--ext/phar/phar_object.c6
-rw-r--r--ext/phar/stream.c6
-rw-r--r--ext/phar/tar.c2
-rw-r--r--ext/phar/util.c8
-rw-r--r--ext/phar/zip.c8
-rw-r--r--ext/readline/readline.c4
-rw-r--r--ext/readline/readline_cli.c12
-rw-r--r--ext/reflection/php_reflection.c18
-rw-r--r--ext/session/mod_files.c4
-rw-r--r--ext/session/mod_mm.c2
-rw-r--r--ext/session/session.c100
-rw-r--r--ext/simplexml/simplexml.c6
-rw-r--r--ext/snmp/snmp.c2
-rw-r--r--ext/soap/php_encoding.c10
-rw-r--r--ext/soap/php_http.c60
-rw-r--r--ext/soap/php_packet_soap.c4
-rw-r--r--ext/soap/soap.c24
-rw-r--r--ext/sockets/sockets.c2
-rw-r--r--ext/spl/php_spl.c32
-rw-r--r--ext/spl/spl_array.c2
-rw-r--r--ext/spl/spl_directory.c24
-rw-r--r--ext/spl/spl_dllist.c4
-rw-r--r--ext/spl/spl_heap.c6
-rw-r--r--ext/spl/spl_iterators.c4
-rw-r--r--ext/spl/spl_observer.c6
-rw-r--r--ext/sqlite3/sqlite3.c14
-rw-r--r--ext/standard/array.c36
-rw-r--r--ext/standard/assert.c26
-rw-r--r--ext/standard/basic_functions.c16
-rw-r--r--ext/standard/browscap.c10
-rw-r--r--ext/standard/exec.c4
-rw-r--r--ext/standard/file.c2
-rw-r--r--ext/standard/fsock.c4
-rw-r--r--ext/standard/ftp_fopen_wrapper.c2
-rw-r--r--ext/standard/head.c4
-rw-r--r--ext/standard/http_fopen_wrapper.c6
-rw-r--r--ext/standard/image.c2
-rw-r--r--ext/standard/incomplete_class.c2
-rw-r--r--ext/standard/info.c2
-rw-r--r--ext/standard/mail.c8
-rw-r--r--ext/standard/math.c2
-rw-r--r--ext/standard/password.c30
-rw-r--r--ext/standard/php_incomplete_class.h2
-rw-r--r--ext/standard/proc_open.c4
-rw-r--r--ext/standard/random.c2
-rw-r--r--ext/standard/streamsfuncs.c14
-rw-r--r--ext/standard/string.c66
-rw-r--r--ext/standard/url.c14
-rw-r--r--ext/standard/url_scanner_ex.c12
-rw-r--r--ext/standard/url_scanner_ex.re12
-rw-r--r--ext/standard/user_filters.c4
-rw-r--r--ext/standard/var.c8
-rw-r--r--ext/standard/var_unserializer.c22
-rw-r--r--ext/standard/var_unserializer.re22
-rw-r--r--ext/tidy/tidy.c8
-rw-r--r--ext/wddx/wddx.c18
-rw-r--r--ext/xml/xml.c14
-rw-r--r--ext/xmlreader/php_xmlreader.c2
-rw-r--r--ext/xmlrpc/xmlrpc-epi-php.c4
-rw-r--r--ext/xsl/xsltprocessor.c2
-rw-r--r--ext/zip/php_zip.c30
-rw-r--r--ext/zip/zip_stream.c10
-rw-r--r--ext/zlib/zlib.c8
-rw-r--r--main/SAPI.c6
-rw-r--r--main/fastcgi.c2
-rw-r--r--main/fopen_wrappers.c2
-rw-r--r--main/main.c2
-rw-r--r--main/network.c4
-rw-r--r--main/output.c12
-rw-r--r--main/php_ini.c4
-rw-r--r--main/php_variables.c2
-rw-r--r--main/rfc1867.c4
-rw-r--r--main/streams/cast.c2
-rw-r--r--main/streams/filter.c2
-rw-r--r--main/streams/plain_wrapper.c4
-rw-r--r--main/streams/streams.c12
-rw-r--r--main/streams/transports.c4
-rw-r--r--sapi/cli/php_cli_server.c14
-rw-r--r--sapi/fpm/fpm/fpm_php.c2
-rw-r--r--sapi/fpm/fpm/fpm_status.c2
-rw-r--r--sapi/litespeed/lsapi_main.c4
-rw-r--r--win32/sendmail.c12
180 files changed, 1017 insertions, 992 deletions
diff --git a/Zend/zend.c b/Zend/zend.c
index 98d8a803db..b29d7baa76 100644
--- a/Zend/zend.c
+++ b/Zend/zend.c
@@ -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);
}
/* }}} */
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index 7e1b1116b2..c493a3a67d 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -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;
}
/* }}} */
diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c
index aae042f820..245a153308 100644
--- a/Zend/zend_ast.c
+++ b/Zend/zend_ast.c
@@ -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, '\'');
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index 987d70ab3e..ac6a460ed6 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -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);
}
diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c
index 3de41b5bef..f69592e223 100644
--- a/Zend/zend_closures.c
+++ b/Zend/zend_closures.c
@@ -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);
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 08c530d363..64f798f31c 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -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;
}
diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h
index 623f37eac5..532534736d 100644
--- a/Zend/zend_compile.h
+++ b/Zend/zend_compile.h
@@ -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)
diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c
index b07901c470..c64de9839b 100644
--- a/Zend/zend_constants.c
+++ b/Zend/zend_constants.c
@@ -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;
}
diff --git a/Zend/zend_exceptions.c b/Zend/zend_exceptions.c
index 626932826e..02a3b972b2 100644
--- a/Zend/zend_exceptions.c
+++ b/Zend/zend_exceptions.c
@@ -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));
}
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index 99519ddfd5..354b3f3eba 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -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);
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index ab0459507c..4f394df21a 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -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;
}
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c
index 817254774c..14eda992a8 100644
--- a/Zend/zend_hash.c
+++ b/Zend/zend_hash.c
@@ -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);
diff --git a/Zend/zend_highlight.c b/Zend/zend_highlight.c
index 0df5b98c58..2f4737952e 100644
--- a/Zend/zend_highlight.c
+++ b/Zend/zend_highlight.c
@@ -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;
}
}
diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c
index 8af706a1d0..4fa0f51e4c 100644
--- a/Zend/zend_inheritance.c
+++ b/Zend/zend_inheritance.c
@@ -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));
diff --git a/Zend/zend_ini.c b/Zend/zend_ini.c
index 70db810819..7c94eb903d 100644
--- a/Zend/zend_ini.c
+++ b/Zend/zend_ini.c
@@ -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;
diff --git a/Zend/zend_ini_parser.y b/Zend/zend_ini_parser.y
index 0da2622000..4a2c457416 100644
--- a/Zend/zend_ini_parser.y
+++ b/Zend/zend_ini_parser.y
@@ -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
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
index 30b262b957..2776426feb 100644
--- a/Zend/zend_language_parser.y
+++ b/Zend/zend_language_parser.y
@@ -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 ','
diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c
index f9a316ac23..65995f0f35 100644
--- a/Zend/zend_language_scanner.c
+++ b/Zend/zend_language_scanner.c
@@ -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();
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index fb4b7386e5..e1182d25e0 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -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();
diff --git a/Zend/zend_list.c b/Zend/zend_list.c
index 42d3a97b7a..cf6e1006b4 100644
--- a/Zend/zend_list.c
+++ b/Zend/zend_list.c
@@ -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;
}
diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c
index 5b88af5975..07a6847804 100644
--- a/Zend/zend_object_handlers.c
+++ b/Zend/zend_object_handlers.c
@@ -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;
diff --git a/Zend/zend_objects.c b/Zend/zend_objects.c
index 47dd658e36..00d124ff24 100644
--- a/Zend/zend_objects.c
+++ b/Zend/zend_objects.c
@@ -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;
diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c
index 869baae020..ddb78c7924 100644
--- a/Zend/zend_opcode.c
+++ b/Zend/zend_opcode.c
@@ -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);
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c
index d7c6bbb25a..d7abf13254 100644
--- a/Zend/zend_operators.c
+++ b/Zend/zend_operators.c
@@ -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;
}
diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h
index 17c24ab306..b142bc94dd 100644
--- a/Zend/zend_operators.h
+++ b/Zend/zend_operators.h
@@ -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);
}
}
diff --git a/Zend/zend_smart_str.h b/Zend/zend_smart_str.h
index 411371ab10..efcc3e12ef 100644
--- a/Zend/zend_smart_str.h
+++ b/Zend/zend_smart_str.h
@@ -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;
diff --git a/Zend/zend_stream.c b/Zend/zend_stream.c
index e14dc68edd..849abe80a2 100644
--- a/Zend/zend_stream.c
+++ b/Zend/zend_stream.c
@@ -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) {
diff --git a/Zend/zend_string.h b/Zend/zend_string.h
index d517b74020..78de28f7f4 100644
--- a/Zend/zend_string.h
+++ b/Zend/zend_string.h
@@ -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
diff --git a/Zend/zend_variables.c b/Zend/zend_variables.c
index 7f0e818fcc..15df748651 100644
--- a/Zend/zend_variables.c
+++ b/Zend/zend_variables.c
@@ -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:
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index d756e97bc9..e29162fa10 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -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;
}
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 56aadaca3a..17f3e386d7 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -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);
diff --git a/ext/com_dotnet/com_handlers.c b/ext/com_dotnet/com_handlers.c
index e7843e23e4..28814de09d 100644
--- a/ext/com_dotnet/com_handlers.c
+++ b/ext/com_dotnet/com_handlers.c
@@ -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);
}
diff --git a/ext/com_dotnet/com_typeinfo.c b/ext/com_dotnet/com_typeinfo.c
index a0e90df986..a5c820f774 100644
--- a/ext/com_dotnet/com_typeinfo.c
+++ b/ext/com_dotnet/com_typeinfo.c
@@ -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;
}
diff --git a/ext/com_dotnet/com_wrapper.c b/ext/com_dotnet/com_wrapper.c
index 347a495831..5312c20a6c 100644
--- a/ext/com_dotnet/com_wrapper.c
+++ b/ext/com_dotnet/com_wrapper.c
@@ -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);
}
}
}
diff --git a/ext/curl/interface.c b/ext/curl/interface.c
index 13d2075d90..4c2f7e52db 100644
--- a/ext/curl/interface.c
+++ b/ext/curl/interface.c
@@ -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);
diff --git a/ext/dba/dba.c b/ext/dba/dba.c
index 71b3a35750..0e3dce4e61 100644
--- a/ext/dba/dba.c
+++ b/ext/dba/dba.c
@@ -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) {
diff --git a/ext/dom/attr.c b/ext/dom/attr.c
index 13238c9bdd..930a2de827 100644
--- a/ext/dom/attr.c
+++ b/ext/dom/attr.c
@@ -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;
}
diff --git a/ext/dom/characterdata.c b/ext/dom/characterdata.c
index 671f4033ee..bd801733c4 100644
--- a/ext/dom/characterdata.c
+++ b/ext/dom/characterdata.c
@@ -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;
}
diff --git a/ext/dom/document.c b/ext/dom/document.c
index 2d70338994..262a88896e 100644
--- a/ext/dom/document.c
+++ b/ext/dom/document.c
@@ -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;
}
diff --git a/ext/dom/node.c b/ext/dom/node.c
index 7d640ff6c5..3048ecef07 100644
--- a/ext/dom/node.c
+++ b/ext/dom/node.c
@@ -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;
}
diff --git a/ext/dom/php_dom.c b/ext/dom/php_dom.c
index 69da603247..61346cd590 100644
--- a/ext/dom/php_dom.c
+++ b/ext/dom/php_dom.c
@@ -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;
}
diff --git a/ext/dom/processinginstruction.c b/ext/dom/processinginstruction.c
index dca6c2e8f7..f8fde2b807 100644
--- a/ext/dom/processinginstruction.c
+++ b/ext/dom/processinginstruction.c
@@ -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;
}
diff --git a/ext/dom/xpath.c b/ext/dom/xpath.c
index 27d88055d0..a63abaf6cd 100644
--- a/ext/dom/xpath.c
+++ b/ext/dom/xpath.c
@@ -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;
diff --git a/ext/exif/exif.c b/ext/exif/exif.c
index 3671c892b3..6562e04ba8 100644
--- a/ext/exif/exif.c
+++ b/ext/exif/exif.c
@@ -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;
diff --git a/ext/fileinfo/libmagic/funcs.c b/ext/fileinfo/libmagic/funcs.c
index 6e12bf6338..972d8d6c40 100644
--- a/ext/fileinfo/libmagic/funcs.c
+++ b/ext/fileinfo/libmagic/funcs.c
@@ -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, "");
diff --git a/ext/fileinfo/libmagic/softmagic.c b/ext/fileinfo/libmagic/softmagic.c
index d444115255..816482bc2d 100644
--- a/ext/fileinfo/libmagic/softmagic.c
+++ b/ext/fileinfo/libmagic/softmagic.c
@@ -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;
}
diff --git a/ext/filter/logical_filters.c b/ext/filter/logical_filters.c
index 4dec0bba14..0fe324268d 100644
--- a/ext/filter/logical_filters.c
+++ b/ext/filter/logical_filters.c
@@ -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
diff --git a/ext/gd/gd.c b/ext/gd/gd.c
index 9579410899..08e06e29a7 100644
--- a/ext/gd/gd.c
+++ b/ext/gd/gd.c
@@ -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;
}
diff --git a/ext/gmp/gmp.c b/ext/gmp/gmp.c
index dc2b649746..1f496e8469 100644
--- a/ext/gmp/gmp.c
+++ b/ext/gmp/gmp.c
@@ -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;
}
diff --git a/ext/hash/hash.c b/ext/hash/hash.c
index 25d022a6e3..6819b32c82 100644
--- a/ext/hash/hash.c
+++ b/ext/hash/hash.c
@@ -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);
}
}
diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c
index 34641d882c..7070454433 100644
--- a/ext/iconv/iconv.c
+++ b/ext/iconv/iconv.c
@@ -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;
diff --git a/ext/interbase/ibase_events.c b/ext/interbase/ibase_events.c
index d1f01f342f..b96e0b820a 100644
--- a/ext/interbase/ibase_events.c
+++ b/ext/interbase/ibase_events.c
@@ -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;
}
diff --git a/ext/intl/converter/converter.c b/ext/intl/converter/converter.c
index e26173b10a..3d1d12dacc 100644
--- a/ext/intl/converter/converter.c
+++ b/ext/intl/converter/converter.c
@@ -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;
}
diff --git a/ext/intl/dateformat/dateformat_create.cpp b/ext/intl/dateformat/dateformat_create.cpp
index f08e0ed3f3..b85f10ecc9 100644
--- a/ext/intl/dateformat/dateformat_create.cpp
+++ b/ext/intl/dateformat/dateformat_create.cpp
@@ -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);
diff --git a/ext/intl/intl_error.c b/ext/intl/intl_error.c
index f80eea106a..d802eb9c26 100644
--- a/ext/intl/intl_error.c
+++ b/ext/intl/intl_error.c
@@ -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;
diff --git a/ext/intl/locale/locale_methods.c b/ext/intl/locale/locale_methods.c
index f300fa88ff..437b9e404d 100644
--- a/ext/intl/locale/locale_methods.c
+++ b/ext/intl/locale/locale_methods.c
@@ -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);
diff --git a/ext/intl/msgformat/msgformat_helpers.cpp b/ext/intl/msgformat/msgformat_helpers.cpp
index 90d60acbd2..65a00289b5 100644
--- a/ext/intl/msgformat/msgformat_helpers.cpp
+++ b/ext/intl/msgformat/msgformat_helpers.cpp
@@ -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);
}
}
diff --git a/ext/json/json_parser.tab.c b/ext/json/json_parser.tab.c
index 08e3e2b768..c165a19e53 100644
--- a/ext/json/json_parser.tab.c
+++ b/ext/json/json_parser.tab.c
@@ -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;
}
diff --git a/ext/json/json_parser.tab.h b/ext/json/json_parser.tab.h
index 3f126dc9c7..4349b70406 100644
--- a/ext/json/json_parser.tab.h
+++ b/ext/json/json_parser.tab.h
@@ -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 */
diff --git a/ext/json/json_parser.y b/ext/json/json_parser.y
index 4c0dfa67d7..489cec1a5e 100644
--- a/ext/json/json_parser.y
+++ b/ext/json/json_parser.y
@@ -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;
}
diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c
index 15f7adf571..cc2c6a7bd7 100644
--- a/ext/ldap/ldap.c
+++ b/ext/ldap/ldap.c
@@ -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;
}
diff --git a/ext/mbstring/mb_gpc.c b/ext/mbstring/mb_gpc.c
index 582a29f865..a77df00e24 100644
--- a/ext/mbstring/mb_gpc.c
+++ b/ext/mbstring/mb_gpc.c
@@ -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;
diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c
index 171430f778..8ed185c76a 100644
--- a/ext/mbstring/mbstring.c
+++ b/ext/mbstring/mbstring.c
@@ -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);
}
}
diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c
index 0c97ec33e8..60d9631d30 100644
--- a/ext/mysqli/mysqli.c
+++ b/ext/mysqli/mysqli.c
@@ -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);
}
/* }}} */
diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c
index 3de335cf2c..12b6ad5449 100644
--- a/ext/mysqli/mysqli_nonapi.c
+++ b/ext/mysqli/mysqli_nonapi.c
@@ -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;
}
diff --git a/ext/mysqlnd/mysqlnd_auth.c b/ext/mysqlnd/mysqlnd_auth.c
index c5d610c1eb..e56ea20380 100644
--- a/ext/mysqlnd/mysqlnd_auth.c
+++ b/ext/mysqlnd/mysqlnd_auth.c
@@ -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);
}
diff --git a/ext/mysqlnd/mysqlnd_connection.c b/ext/mysqlnd/mysqlnd_connection.c
index 1e21e46ed0..9f8e1fb5b9 100644
--- a/ext/mysqlnd/mysqlnd_connection.c
+++ b/ext/mysqlnd/mysqlnd_connection.c
@@ -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:
diff --git a/ext/mysqlnd/mysqlnd_net.c b/ext/mysqlnd/mysqlnd_net.c
index afc9839a49..6fb9c5fde2 100644
--- a/ext/mysqlnd/mysqlnd_net.c
+++ b/ext/mysqlnd/mysqlnd_net.c
@@ -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);
}
diff --git a/ext/mysqlnd/mysqlnd_result_meta.c b/ext/mysqlnd/mysqlnd_result_meta.c
index 5aa8b0d23d..0141cec4f0 100644
--- a/ext/mysqlnd/mysqlnd_result_meta.c
+++ b/ext/mysqlnd/mysqlnd_result_meta.c
@@ -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);
}
}
}
diff --git a/ext/mysqlnd/mysqlnd_vio.c b/ext/mysqlnd/mysqlnd_vio.c
index a6a7f5c4d1..997fbd4d68 100644
--- a/ext/mysqlnd/mysqlnd_vio.c
+++ b/ext/mysqlnd/mysqlnd_vio.c
@@ -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);
}
diff --git a/ext/oci8/oci8_interface.c b/ext/oci8/oci8_interface.c
index cd17386b5f..ceeaefeb77 100644
--- a/ext/oci8/oci8_interface.c
+++ b/ext/oci8/oci8_interface.c
@@ -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);
}
}
diff --git a/ext/oci8/oci8_statement.c b/ext/oci8/oci8_statement.c
index 743561428c..8d259eebfa 100644
--- a/ext/oci8/oci8_statement.c
+++ b/ext/oci8/oci8_statement.c
@@ -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;
diff --git a/ext/opcache/Optimizer/block_pass.c b/ext/opcache/Optimizer/block_pass.c
index d2db5181dd..621236fc08 100644
--- a/ext/opcache/Optimizer/block_pass.c
+++ b/ext/opcache/Optimizer/block_pass.c
@@ -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);
diff --git a/ext/opcache/Optimizer/compact_literals.c b/ext/opcache/Optimizer/compact_literals.c
index b2f463c65a..d9e5f919e9 100644
--- a/ext/opcache/Optimizer/compact_literals.c
+++ b/ext/opcache/Optimizer/compact_literals.c
@@ -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];
diff --git a/ext/opcache/Optimizer/compact_vars.c b/ext/opcache/Optimizer/compact_vars.c
index ab4dd12614..c7bda48c88 100644
--- a/ext/opcache/Optimizer/compact_vars.c
+++ b/ext/opcache/Optimizer/compact_vars.c
@@ -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;
diff --git a/ext/opcache/Optimizer/pass1_5.c b/ext/opcache/Optimizer/pass1_5.c
index 7eb80317e2..8a157c447d 100644
--- a/ext/opcache/Optimizer/pass1_5.c
+++ b/ext/opcache/Optimizer/pass1_5.c
@@ -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;
}
diff --git a/ext/opcache/Optimizer/sccp.c b/ext/opcache/Optimizer/sccp.c
index 5f5f7da3d8..23c5d5ac53 100644
--- a/ext/opcache/Optimizer/sccp.c
+++ b/ext/opcache/Optimizer/sccp.c
@@ -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:
diff --git a/ext/opcache/Optimizer/zend_func_info.c b/ext/opcache/Optimizer/zend_func_info.c
index 8ec9195511..e823f8859b 100644
--- a/ext/opcache/Optimizer/zend_func_info.c
+++ b/ext/opcache/Optimizer/zend_func_info.c
@@ -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);
}
}
diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c
index c3cbef84cd..4414fb78d8 100644
--- a/ext/opcache/Optimizer/zend_inference.c
+++ b/ext/opcache/Optimizer/zend_inference.c
@@ -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);
diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c
index c70f55ec27..acec6aabf6 100644
--- a/ext/opcache/ZendAccelerator.c
+++ b/ext/opcache/ZendAccelerator.c
@@ -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;
}
diff --git a/ext/opcache/zend_accelerator_util_funcs.c b/ext/opcache/zend_accelerator_util_funcs.c
index a6d9b543a6..1fc8c5a8b9 100644
--- a/ext/opcache/zend_accelerator_util_funcs.c
+++ b/ext/opcache/zend_accelerator_util_funcs.c
@@ -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));
diff --git a/ext/opcache/zend_file_cache.c b/ext/opcache/zend_file_cache.c
index ca7b9cf92e..05ec90ad2f 100644
--- a/ext/opcache/zend_file_cache.c
+++ b/ext/opcache/zend_file_cache.c
@@ -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);
diff --git a/ext/opcache/zend_persist.c b/ext/opcache/zend_persist.c
index d40f1886e4..231c509571 100644
--- a/ext/opcache/zend_persist.c
+++ b/ext/opcache/zend_persist.c
@@ -50,11 +50,11 @@
#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;
}
diff --git a/ext/opcache/zend_persist_calc.c b/ext/opcache/zend_persist_calc.c
index 4dee76b3a3..6feedc6e6f 100644
--- a/ext/opcache/zend_persist_calc.c
+++ b/ext/opcache/zend_persist_calc.c
@@ -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); \
diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c
index c2cd1d32fb..4aae81dbd7 100644
--- a/ext/openssl/openssl.c
+++ b/ext/openssl/openssl.c
@@ -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);
diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c
index 9225f67668..0d5027f41e 100644
--- a/ext/openssl/xp_ssl.c
+++ b/ext/openssl/xp_ssl.c
@@ -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;
diff --git a/ext/pcntl/pcntl.c b/ext/pcntl/pcntl.c
index 82a4a454e2..c65e1ecd66 100644
--- a/ext/pcntl/pcntl.c
+++ b/ext/pcntl/pcntl.c
@@ -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;
}
diff --git a/ext/pcre/php_pcre.c b/ext/pcre/php_pcre.c
index 350b7c3565..ffecc39422 100644
--- a/ext/pcre/php_pcre.c
+++ b/ext/pcre/php_pcre.c
@@ -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);
diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c
index e78baea762..3428b6386c 100644
--- a/ext/pdo/pdo_dbh.c
+++ b/ext/pdo/pdo_dbh.c
@@ -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:
diff --git a/ext/pdo/pdo_sql_parser.c b/ext/pdo/pdo_sql_parser.c
index a1aabf7d86..2a2cff7946 100644
--- a/ext/pdo/pdo_sql_parser.c
+++ b/ext/pdo/pdo_sql_parser.c
@@ -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 {
diff --git a/ext/pdo/pdo_sql_parser.re b/ext/pdo/pdo_sql_parser.re
index 76e4190ac4..648358180c 100644
--- a/ext/pdo/pdo_sql_parser.re
+++ b/ext/pdo/pdo_sql_parser.re
@@ -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 {
diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c
index 01c429c8ce..b1b58b4cc6 100644
--- a/ext/pdo/pdo_stmt.c
+++ b/ext/pdo/pdo_stmt.c
@@ -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;
}
diff --git a/ext/pdo_firebird/firebird_driver.c b/ext/pdo_firebird/firebird_driver.c
index 9b12527968..6138c5aee7 100644
--- a/ext/pdo_firebird/firebird_driver.c
+++ b/ext/pdo_firebird/firebird_driver.c
@@ -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;
}
diff --git a/ext/pdo_mysql/mysql_driver.c b/ext/pdo_mysql/mysql_driver.c
index d9c05302ad..3cfd32f6ad 100644
--- a/ext/pdo_mysql/mysql_driver.c
+++ b/ext/pdo_mysql/mysql_driver.c
@@ -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
diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c
index 7d7b5e034d..4c067b3092 100644
--- a/ext/pdo_pgsql/pgsql_driver.c
+++ b/ext/pdo_pgsql/pgsql_driver.c
@@ -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);
diff --git a/ext/pdo_sqlite/sqlite_driver.c b/ext/pdo_sqlite/sqlite_driver.c
index 6ab6f9eb77..ab696d8211 100644
--- a/ext/pdo_sqlite/sqlite_driver.c
+++ b/ext/pdo_sqlite/sqlite_driver.c
@@ -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;
}
diff --git a/ext/phar/func_interceptors.c b/ext/phar/func_interceptors.c
index e82a75721d..01004a7611 100644
--- a/ext/phar/func_interceptors.c
+++ b/ext/phar/func_interceptors.c
@@ -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);
}
diff --git a/ext/phar/phar.c b/ext/phar/phar.c
index 2a3fcb2161..21f08c7b04 100644
--- a/ext/phar/phar.c
+++ b/ext/phar/phar.c
@@ -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;
diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c
index 41fb6b4e01..32a7a31e7f 100644
--- a/ext/phar/phar_object.c
+++ b/ext/phar/phar_object.c
@@ -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;
}
diff --git a/ext/phar/stream.c b/ext/phar/stream.c
index 4e17e3a543..b1ccd53cc3 100644
--- a/ext/phar/stream.c
+++ b/ext/phar/stream.c
@@ -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;
}
diff --git a/ext/phar/tar.c b/ext/phar/tar.c
index 6385483914..d673cc0f68 100644
--- a/ext/phar/tar.c
+++ b/ext/phar/tar.c
@@ -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;
diff --git a/ext/phar/util.c b/ext/phar/util.c
index 349fc6be57..7652846eca 100644
--- a/ext/phar/util.c
+++ b/ext/phar/util.c
@@ -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) {
diff --git a/ext/phar/zip.c b/ext/phar/zip.c
index ae99154241..40171203d5 100644
--- a/ext/phar/zip.c
+++ b/ext/phar/zip.c
@@ -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;
diff --git a/ext/readline/readline.c b/ext/readline/readline.c
index 7026b020f6..1067ef3f28 100644
--- a/ext/readline/readline.c
+++ b/ext/readline/readline.c
@@ -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;
}
diff --git a/ext/readline/readline_cli.c b/ext/readline/readline_cli.c
index 66cb34c900..eb5c78ee28 100644
--- a/ext/readline/readline_cli.c
+++ b/ext/readline/readline_cli.c
@@ -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);
}
/* }}} */
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index 87ffeba666..0364c06441 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -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));
diff --git a/ext/session/mod_files.c b/ext/session/mod_files.c
index 1c87018043..cec67df148 100644
--- a/ext/session/mod_files.c
+++ b/ext/session/mod_files.c
@@ -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) {
diff --git a/ext/session/mod_mm.c b/ext/session/mod_mm.c
index 2c2fd224cf..e1e3c54d20 100644
--- a/ext/session/mod_mm.c
+++ b/ext/session/mod_mm.c
@@ -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--)) {
diff --git a/ext/session/session.c b/ext/session/session.c
index 4e5985e7ad..3482768781 100644
--- a/ext/session/session.c
+++ b/ext/session/session.c
@@ -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);
}
}
/* }}} */
diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c
index d7a482a055..605c9e883e 100644
--- a/ext/simplexml/simplexml.c
+++ b/ext/simplexml/simplexml.c
@@ -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);
}
/* }}} */
diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c
index 59c820a8be..0bdbcdf80b 100644
--- a/ext/snmp/snmp.c
+++ b/ext/snmp/snmp.c
@@ -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);
}
/* }}} */
diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c
index 8ab613ac11..c2aaf36797 100644
--- a/ext/soap/php_encoding.c
+++ b/ext/soap/php_encoding.c
@@ -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;
diff --git a/ext/soap/php_http.c b/ext/soap/php_http.c
index 3be02235a6..e2095621d0 100644
--- a/ext/soap/php_http.c
+++ b/ext/soap/php_http.c
@@ -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;
}
diff --git a/ext/soap/php_packet_soap.c b/ext/soap/php_packet_soap.c
index 9da58ea17a..b72bde97f5 100644
--- a/ext/soap/php_packet_soap.c
+++ b/ext/soap/php_packet_soap.c
@@ -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);
diff --git a/ext/soap/soap.c b/ext/soap/soap.c
index 394a96b392..fae7d2a444 100644
--- a/ext/soap/soap.c
+++ b/ext/soap/soap.c
@@ -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);
diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c
index 7d918602bf..5b5525f622 100644
--- a/ext/sockets/sockets.c
+++ b/ext/sockets/sockets.c
@@ -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;
}
diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c
index 2ae1d0de9a..5287bc2745 100644
--- a/ext/spl/php_spl.c
+++ b/ext/spl/php_spl.c
@@ -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)) {
diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c
index ec6d7d5fb1..2b4e5b8098 100644
--- a/ext/spl/spl_array.c
+++ b/ext/spl/spl_array.c
@@ -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;
}
diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c
index 56e51dfe5b..54bd6762bc 100644
--- a/ext/spl/spl_directory.c
+++ b/ext/spl/spl_directory.c
@@ -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();
}
}
diff --git a/ext/spl/spl_dllist.c b/ext/spl/spl_dllist.c
index 03a4f4b5fe..b0ce0e508f 100644
--- a/ext/spl/spl_dllist.c
+++ b/ext/spl/spl_dllist.c
@@ -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;
}
diff --git a/ext/spl/spl_heap.c b/ext/spl/spl_heap.c
index 6429a892ea..3031a5028b 100644
--- a/ext/spl/spl_heap.c
+++ b/ext/spl/spl_heap.c
@@ -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;
}
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c
index 2cf658af29..2cea85549b 100644
--- a/ext/spl/spl_iterators.c
+++ b/ext/spl/spl_iterators.c
@@ -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
diff --git a/ext/spl/spl_observer.c b/ext/spl/spl_observer.c
index 1c3911a25e..9a92a0e53d 100644
--- a/ext/spl/spl_observer.c
+++ b/ext/spl/spl_observer.c
@@ -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;
}
diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c
index eb87a5eef1..1327c2056a 100644
--- a/ext/sqlite3/sqlite3.c
+++ b/ext/sqlite3/sqlite3.c
@@ -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)) {
diff --git a/ext/standard/array.c b/ext/standard/array.c
index 7621b0616a..55d338faad 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -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);
diff --git a/ext/standard/assert.c b/ext/standard/assert.c
index 3cf3a02830..4f343379e0 100644
--- a/ext/standard/assert.c
+++ b/ext/standard/assert.c
@@ -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;
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
index 85aa81f873..5a4c1f4a2d 100644
--- a/ext/standard/basic_functions.c
+++ b/ext/standard/basic_functions.c
@@ -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) {
diff --git a/ext/standard/browscap.c b/ext/standard/browscap.c
index 60c012707d..4753adfb78 100644
--- a/ext/standard/browscap.c
+++ b/ext/standard/browscap.c
@@ -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);
}
/* }}} */
diff --git a/ext/standard/exec.c b/ext/standard/exec.c
index b748e173ce..b6302a0f87 100644
--- a/ext/standard/exec.c
+++ b/ext/standard/exec.c
@@ -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();
}
diff --git a/ext/standard/file.c b/ext/standard/file.c
index 096d70e12c..baefafc735 100644
--- a/ext/standard/file.c
+++ b/ext/standard/file.c
@@ -843,7 +843,7 @@ PHP_FUNCTION(tempnam)
close(fd);
RETVAL_STR(opened_path);
}
- zend_string_release(p);
+ zend_string_release_ex(p, 0);
}
/* }}} */
diff --git a/ext/standard/fsock.c b/ext/standard/fsock.c
index 5444994aba..0c3aa4c47b 100644
--- a/ext/standard/fsock.c
+++ b/ext/standard/fsock.c
@@ -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);
diff --git a/ext/standard/ftp_fopen_wrapper.c b/ext/standard/ftp_fopen_wrapper.c
index eed81e900f..d49cebf579 100644
--- a/ext/standard/ftp_fopen_wrapper.c
+++ b/ext/standard/ftp_fopen_wrapper.c
@@ -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 &&
diff --git a/ext/standard/head.c b/ext/standard/head.c
index 5e21638adf..1ddbc187a0 100644
--- a/ext/standard/head.c
+++ b/ext/standard/head.c
@@ -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)) {
diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c
index b94cdd672b..a1d4729117 100644
--- a/ext/standard/http_fopen_wrapper.c
+++ b/ext/standard/http_fopen_wrapper.c
@@ -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 {
diff --git a/ext/standard/image.c b/ext/standard/image.c
index 189295aa4c..e34f5c79e8 100644
--- a/ext/standard/image.c
+++ b/ext/standard/image.c
@@ -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) {
diff --git a/ext/standard/incomplete_class.c b/ext/standard/incomplete_class.c
index b41ab8572f..0e34b0aa26 100644
--- a/ext/standard/incomplete_class.c
+++ b/ext/standard/incomplete_class.c
@@ -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");
}
diff --git a/ext/standard/info.c b/ext/standard/info.c
index 5c5892e6b6..8a9d053bf2 100644
--- a/ext/standard/info.c
+++ b/ext/standard/info.c
@@ -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);
}
diff --git a/ext/standard/mail.c b/ext/standard/mail.c
index 446534b336..b774922c56 100644
--- a/ext/standard/mail.c
+++ b/ext/standard/mail.c
@@ -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)) {
diff --git a/ext/standard/math.c b/ext/standard/math.c
index e6f3bab87f..56d6f85ace 100644
--- a/ext/standard/math.c
+++ b/ext/standard/math.c
@@ -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;
}
diff --git a/ext/standard/password.c b/ext/standard/password.c
index 105abbc565..d5bbd18fbd 100644
--- a/ext/standard/password.c
+++ b/ext/standard/password.c
@@ -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);
diff --git a/ext/standard/php_incomplete_class.h b/ext/standard/php_incomplete_class.h
index 33969e3ca4..d494c250a6 100644
--- a/ext/standard/php_incomplete_class.h
+++ b/ext/standard/php_incomplete_class.h
@@ -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; \
diff --git a/ext/standard/proc_open.c b/ext/standard/proc_open.c
index 370ceee9cc..85c703b475 100644
--- a/ext/standard/proc_open.c
+++ b/ext/standard/proc_open.c
@@ -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);
diff --git a/ext/standard/random.c b/ext/standard/random.c
index 627df9bdb8..691fd9a394 100644
--- a/ext/standard/random.c
+++ b/ext/standard/random.c
@@ -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;
}
diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c
index d3f0c1cd7c..047a99892f 100644
--- a/ext/standard/streamsfuncs.c
+++ b/ext/standard/streamsfuncs.c
@@ -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;
}
diff --git a/ext/standard/string.c b/ext/standard/string.c
index f43d44929b..ca432c76d6 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -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) {
diff --git a/ext/standard/url.c b/ext/standard/url.c
index 58c5c4b91d..d5ca21b650 100644
--- a/ext/standard/url.c
+++ b/ext/standard/url.c
@@ -42,19 +42,19 @@
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);
}
/* }}} */
diff --git a/ext/standard/url_scanner_ex.c b/ext/standard/url_scanner_ex.c
index 54995dc0b1..ace561cf30 100644
--- a/ext/standard/url_scanner_ex.c
+++ b/ext/standard/url_scanner_ex.c
@@ -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;
}
diff --git a/ext/standard/url_scanner_ex.re b/ext/standard/url_scanner_ex.re
index 68edab084a..f54cdfc907 100644
--- a/ext/standard/url_scanner_ex.re
+++ b/ext/standard/url_scanner_ex.re
@@ -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;
}
diff --git a/ext/standard/user_filters.c b/ext/standard/user_filters.c
index 01bc6e4021..ac7f40f374 100644
--- a/ext/standard/user_filters.c
+++ b/ext/standard/user_filters.c
@@ -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);
}
}
diff --git a/ext/standard/var.c b/ext/standard/var.c
index 643e1eaf84..c6465fb893 100644
--- a/ext/standard/var.c
+++ b/ext/standard/var.c
@@ -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);
diff --git a/ext/standard/var_unserializer.c b/ext/standard/var_unserializer.c
index b6b3f57db1..e4b8321e63 100644
--- a/ext/standard/var_unserializer.c
+++ b/ext/standard/var_unserializer.c
@@ -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);
}
diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re
index 8e238dae6e..0af53592d4 100644
--- a/ext/standard/var_unserializer.re
+++ b/ext/standard/var_unserializer.re
@@ -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);
}
diff --git a/ext/tidy/tidy.c b/ext/tidy/tidy.c
index 61fd0f32cb..365d037eb5 100644
--- a/ext/tidy/tidy.c
+++ b/ext/tidy/tidy.c
@@ -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)
diff --git a/ext/wddx/wddx.c b/ext/wddx/wddx.c
index a4cc6dd293..dd16313bbb 100644
--- a/ext/wddx/wddx.c
+++ b/ext/wddx/wddx.c
@@ -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;
diff --git a/ext/xml/xml.c b/ext/xml/xml.c
index 9f73be1a96..f927afd764 100644
--- a/ext/xml/xml.c
+++ b/ext/xml/xml.c
@@ -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);
}
}
}
diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c
index c91ea2eaa9..a329cca29b 100644
--- a/ext/xmlreader/php_xmlreader.c
+++ b/ext/xmlreader/php_xmlreader.c
@@ -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);
}
/* }}} */
diff --git a/ext/xmlrpc/xmlrpc-epi-php.c b/ext/xmlrpc/xmlrpc-epi-php.c
index 96c5e1137d..0a35c5ea3f 100644
--- a/ext/xmlrpc/xmlrpc-epi-php.c
+++ b/ext/xmlrpc/xmlrpc-epi-php.c
@@ -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 */
diff --git a/ext/xsl/xsltprocessor.c b/ext/xsl/xsltprocessor.c
index f155bda630..bde382ad1b 100644
--- a/ext/xsl/xsltprocessor.c
+++ b/ext/xsl/xsltprocessor.c
@@ -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++) {
diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c
index 815f64ecb4..a98c8cc555 100644
--- a/ext/zip/php_zip.c
+++ b/ext/zip/php_zip.c
@@ -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;
}
diff --git a/ext/zip/zip_stream.c b/ext/zip/zip_stream.c
index 00caae6ccb..331ff4d9b1 100644
--- a/ext/zip/zip_stream.c
+++ b/ext/zip/zip_stream.c
@@ -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;
diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c
index dd38fa6857..a5028a72b0 100644
--- a/ext/zlib/zlib.c
+++ b/ext/zlib/zlib.c
@@ -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;
}
diff --git a/main/SAPI.c b/main/SAPI.c
index 5cf5892515..b6c3329d33 100644
--- a/main/SAPI.c
+++ b/main/SAPI.c
@@ -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;
}
diff --git a/main/fastcgi.c b/main/fastcgi.c
index 15907111c3..c12ab3e2c0 100644
--- a/main/fastcgi.c
+++ b/main/fastcgi.c
@@ -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)
diff --git a/main/fopen_wrappers.c b/main/fopen_wrappers.c
index 319c952012..b5c7c2ccf5 100644
--- a/main/fopen_wrappers.c
+++ b/main/fopen_wrappers.c
@@ -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;
diff --git a/main/main.c b/main/main.c
index 2e11aa208c..e8599425f0 100644
--- a/main/main.c
+++ b/main/main.c
@@ -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);
}
/* }}} */
diff --git a/main/network.c b/main/network.c
index 2297678156..03ceb2ad08 100644
--- a/main/network.c
+++ b/main/network.c
@@ -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;
}
diff --git a/main/output.c b/main/output.c
index 74bc552dc6..63850a7cd6 100644
--- a/main/output.c
+++ b/main/output.c
@@ -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);
diff --git a/main/php_ini.c b/main/php_ini.c
index fca263e5f0..ae09ba2ad1 100644
--- a/main/php_ini.c
+++ b/main/php_ini.c
@@ -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);
}
diff --git a/main/php_variables.c b/main/php_variables.c
index 09e5afcf3b..d7bc81348d 100644
--- a/main/php_variables.c
+++ b/main/php_variables.c
@@ -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)
diff --git a/main/rfc1867.c b/main/rfc1867.c
index bd01b34cf0..08358dcd5b 100644
--- a/main/rfc1867.c
+++ b/main/rfc1867.c
@@ -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 {
diff --git a/main/streams/cast.c b/main/streams/cast.c
index 9ef542086c..0c2510ec9a 100644
--- a/main/streams/cast.c
+++ b/main/streams/cast.c
@@ -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;
}
diff --git a/main/streams/filter.c b/main/streams/filter.c
index fd7994c3f6..2ad5dc2c0f 100644
--- a/main/streams/filter.c
+++ b/main/streams/filter.c
@@ -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;
}
diff --git a/main/streams/plain_wrapper.c b/main/streams/plain_wrapper.c
index 75de34ce01..7657b35faf 100644
--- a/main/streams/plain_wrapper.c
+++ b/main/streams/plain_wrapper.c
@@ -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);
diff --git a/main/streams/streams.c b/main/streams/streams.c
index f8f0381eff..8d6c4f727c 100644
--- a/main/streams/streams.c
+++ b/main/streams/streams.c
@@ -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;
}
diff --git a/main/streams/transports.c b/main/streams/transports.c
index 8908745ac5..6fc77910d4 100644
--- a/main/streams/transports.c
+++ b/main/streams/transports.c
@@ -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,
diff --git a/sapi/cli/php_cli_server.c b/sapi/cli/php_cli_server.c
index 6fa1f4d1bb..fef1aa400d 100644
--- a/sapi/cli/php_cli_server.c
+++ b/sapi/cli/php_cli_server.c
@@ -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;
diff --git a/sapi/fpm/fpm/fpm_php.c b/sapi/fpm/fpm/fpm_php.c
index 11a5e25f24..d410682b9e 100644
--- a/sapi/fpm/fpm/fpm_php.c
+++ b/sapi/fpm/fpm/fpm_php.c
@@ -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;
diff --git a/sapi/fpm/fpm/fpm_status.c b/sapi/fpm/fpm/fpm_status.c
index f26600c2e8..a8cfb3fa49 100644
--- a/sapi/fpm/fpm/fpm_status.c
+++ b/sapi/fpm/fpm/fpm_status.c
@@ -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);
diff --git a/sapi/litespeed/lsapi_main.c b/sapi/litespeed/lsapi_main.c
index a281360c68..8f2ab71cca 100644
--- a/sapi/litespeed/lsapi_main.c
+++ b/sapi/litespeed/lsapi_main.c
@@ -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 == '-' )) {
diff --git a/win32/sendmail.c b/win32/sendmail.c
index 1c4610d807..606b702b6a 100644
--- a/win32/sendmail.c
+++ b/win32/sendmail.c
@@ -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);
}
}