Skip to content

Commit 5eb1f92

Browse files
committed
Use zend_string_release_ex() instread of zend_string_release() in places, where we sure about string persistence.
1 parent 925f05d commit 5eb1f92

File tree

180 files changed

+1017
-992
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

180 files changed

+1017
-992
lines changed

Diff for: Zend/zend.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,7 @@ ZEND_API void zend_print_flat_zval_r(zval *expr) /* {{{ */
393393
HashTable *properties = NULL;
394394
zend_string *class_name = Z_OBJ_HANDLER_P(expr, get_class_name)(Z_OBJ_P(expr));
395395
zend_printf("%s Object (", ZSTR_VAL(class_name));
396-
zend_string_release(class_name);
396+
zend_string_release_ex(class_name, 0);
397397

398398
if (Z_IS_RECURSIVE_P(expr)) {
399399
ZEND_PUTS(" *RECURSION*");
@@ -445,7 +445,7 @@ static void zend_print_zval_r_to_buf(smart_str *buf, zval *expr, int indent) /*
445445

446446
zend_string *class_name = Z_OBJ_HANDLER_P(expr, get_class_name)(Z_OBJ_P(expr));
447447
smart_str_appends(buf, ZSTR_VAL(class_name));
448-
zend_string_release(class_name);
448+
zend_string_release_ex(class_name, 0);
449449

450450
smart_str_appends(buf, " Object\n");
451451
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) /*
479479
{
480480
zend_string *str = zval_get_string_func(expr);
481481
smart_str_append(buf, str);
482-
zend_string_release(str);
482+
zend_string_release_ex(str, 0);
483483
}
484484
break;
485485
}
@@ -499,7 +499,7 @@ ZEND_API void zend_print_zval_r(zval *expr, int indent) /* {{{ */
499499
{
500500
zend_string *str = zend_print_zval_r_to_str(expr, indent);
501501
zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
502-
zend_string_release(str);
502+
zend_string_release_ex(str, 0);
503503
}
504504
/* }}} */
505505

Diff for: Zend/zend_API.c

+18-18
Original file line numberDiff line numberDiff line change
@@ -1288,10 +1288,10 @@ ZEND_API void object_properties_load(zend_object *object, HashTable *properties)
12881288
if (class_name && class_name[0] != '*') {
12891289
zend_string *cname = zend_string_init(class_name, strlen(class_name), 0);
12901290
EG(fake_scope) = zend_lookup_class(cname);
1291-
zend_string_release(cname);
1291+
zend_string_release_ex(cname, 0);
12921292
}
12931293
property_info = zend_get_property_info(object->ce, pname, 1);
1294-
zend_string_release(pname);
1294+
zend_string_release_ex(pname, 0);
12951295
EG(fake_scope) = prev_scope;
12961296
} else {
12971297
property_info = ZEND_WRONG_PROPERTY_INFO;
@@ -2084,22 +2084,22 @@ ZEND_API zend_module_entry* zend_register_module_ex(zend_module_entry *module) /
20842084
lcname = zend_new_interned_string(lcname);
20852085
if ((module_ptr = zend_hash_add_mem(&module_registry, lcname, module, sizeof(zend_module_entry))) == NULL) {
20862086
zend_error(E_CORE_WARNING, "Module '%s' already loaded", module->name);
2087-
zend_string_release(lcname);
2087+
zend_string_release_ex(lcname, 1);
20882088
return NULL;
20892089
}
20902090
module = module_ptr;
20912091
EG(current_module) = module;
20922092

20932093
if (module->functions && zend_register_functions(NULL, module->functions, NULL, module->type)==FAILURE) {
20942094
zend_hash_del(&module_registry, lcname);
2095-
zend_string_release(lcname);
2095+
zend_string_release_ex(lcname, 1);
20962096
EG(current_module) = NULL;
20972097
zend_error(E_CORE_WARNING,"%s: Unable to register functions, unable to load", module->name);
20982098
return NULL;
20992099
}
21002100

21012101
EG(current_module) = NULL;
2102-
zend_string_release(lcname);
2102+
zend_string_release_ex(lcname, 1);
21032103
return module;
21042104
}
21052105
/* }}} */
@@ -2308,7 +2308,7 @@ ZEND_API int zend_register_functions(zend_class_entry *scope, const zend_functio
23082308
if (zend_hash_add_ptr(target_function_table, lowercase_name, reg_function) == NULL) {
23092309
unload=1;
23102310
free(reg_function);
2311-
zend_string_release(lowercase_name);
2311+
zend_string_release_ex(lowercase_name, 1);
23122312
break;
23132313
}
23142314

@@ -2398,7 +2398,7 @@ ZEND_API int zend_register_functions(zend_class_entry *scope, const zend_functio
23982398
}
23992399
ptr++;
24002400
count++;
2401-
zend_string_release(lowercase_name);
2401+
zend_string_release_ex(lowercase_name, 1);
24022402
}
24032403
if (unload) { /* before unloading, display all remaining bad function in the module */
24042404
if (scope) {
@@ -2750,7 +2750,7 @@ static zend_class_entry *do_register_internal_class(zend_class_entry *orig_class
27502750
lowercase_name = zend_string_tolower_ex(orig_class_entry->name, 1);
27512751
lowercase_name = zend_new_interned_string(lowercase_name);
27522752
zend_hash_update_ptr(CG(class_table), lowercase_name, class_entry);
2753-
zend_string_release(lowercase_name);
2753+
zend_string_release_ex(lowercase_name, 1);
27542754
return class_entry;
27552755
}
27562756
/* }}} */
@@ -2818,7 +2818,7 @@ ZEND_API int zend_register_class_alias_ex(const char *name, size_t name_len, zen
28182818

28192819
lcname = zend_new_interned_string(lcname);
28202820
ce = zend_hash_add_ptr(CG(class_table), lcname, ce);
2821-
zend_string_release(lcname);
2821+
zend_string_release_ex(lcname, 0);
28222822
if (ce) {
28232823
ce->refcount++;
28242824
return SUCCESS;
@@ -2901,7 +2901,7 @@ ZEND_API int zend_disable_class(char *class_name, size_t class_name_length) /* {
29012901
key = zend_string_alloc(class_name_length, 0);
29022902
zend_str_tolower_copy(ZSTR_VAL(key), class_name, class_name_length);
29032903
disabled_class = zend_hash_find_ptr(CG(class_table), key);
2904-
zend_string_release(key);
2904+
zend_string_release_ex(key, 0);
29052905
if (!disabled_class) {
29062906
return FAILURE;
29072907
}
@@ -3075,10 +3075,10 @@ static zend_always_inline int zend_is_callable_check_func(int check_flags, zval
30753075

30763076
cname = zend_string_init(Z_STRVAL_P(callable), clen, 0);
30773077
if (!zend_is_callable_check_class(cname, scope, fcc, &strict_class, error)) {
3078-
zend_string_release(cname);
3078+
zend_string_release_ex(cname, 0);
30793079
return 0;
30803080
}
3081-
zend_string_release(cname);
3081+
zend_string_release_ex(cname, 0);
30823082

30833083
ftable = &fcc->calling_scope->function_table;
30843084
if (ce_org && !instanceof_function(ce_org, fcc->calling_scope)) {
@@ -3164,7 +3164,7 @@ static zend_always_inline int zend_is_callable_check_func(int check_flags, zval
31643164
if (fcc->function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
31653165
if (fcc->function_handler->type != ZEND_OVERLOADED_FUNCTION &&
31663166
fcc->function_handler->common.function_name) {
3167-
zend_string_release(fcc->function_handler->common.function_name);
3167+
zend_string_release_ex(fcc->function_handler->common.function_name, 0);
31683168
}
31693169
zend_free_trampoline(fcc->function_handler);
31703170
}
@@ -3264,8 +3264,8 @@ static zend_always_inline int zend_is_callable_check_func(int check_flags, zval
32643264
if (error) zend_spprintf(error, 0, "function '%s' does not exist", ZSTR_VAL(mname));
32653265
}
32663266
}
3267-
zend_string_release(lmname);
3268-
zend_string_release(mname);
3267+
zend_string_release_ex(lmname, 0);
3268+
zend_string_release_ex(mname, 0);
32693269

32703270
if (fcc->object) {
32713271
fcc->called_scope = fcc->object->ce;
@@ -3389,7 +3389,7 @@ static zend_always_inline zend_bool zend_is_callable_impl(zval *callable, zend_o
33893389
fcc->function_handler->type == ZEND_OVERLOADED_FUNCTION)) {
33903390
if (fcc->function_handler->type != ZEND_OVERLOADED_FUNCTION &&
33913391
fcc->function_handler->common.function_name) {
3392-
zend_string_release(fcc->function_handler->common.function_name);
3392+
zend_string_release_ex(fcc->function_handler->common.function_name, 0);
33933393
}
33943394
zend_free_trampoline(fcc->function_handler);
33953395
}
@@ -3504,7 +3504,7 @@ ZEND_API zend_bool zend_make_callable(zval *callable, zend_string **callable_nam
35043504
fcc.function_handler->type == ZEND_OVERLOADED_FUNCTION_TEMPORARY ||
35053505
fcc.function_handler->type == ZEND_OVERLOADED_FUNCTION)) {
35063506
if (fcc.function_handler->type != ZEND_OVERLOADED_FUNCTION) {
3507-
zend_string_release(fcc.function_handler->common.function_name);
3507+
zend_string_release_ex(fcc.function_handler->common.function_name, 0);
35083508
}
35093509
zend_free_trampoline(fcc.function_handler);
35103510
}
@@ -4209,7 +4209,7 @@ ZEND_API zval *zend_read_property(zend_class_entry *scope, zval *object, const c
42094209

42104210
str = zend_string_init(name, name_length, 0);
42114211
value = zend_read_property_ex(scope, object, str, silent, rv);
4212-
zend_string_release(str);
4212+
zend_string_release_ex(str, 0);
42134213
return value;
42144214
}
42154215
/* }}} */

Diff for: Zend/zend_ast.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -783,15 +783,15 @@ ZEND_API void ZEND_FASTCALL zend_ast_destroy(zend_ast *ast)
783783
goto tail_call;
784784
}
785785
} else if (EXPECTED(ast->kind == ZEND_AST_CONSTANT)) {
786-
zend_string_release(zend_ast_get_constant_name(ast));
786+
zend_string_release_ex(zend_ast_get_constant_name(ast), 0);
787787
} else if (EXPECTED(ast->kind >= ZEND_AST_FUNC_DECL)) {
788788
zend_ast_decl *decl = (zend_ast_decl *) ast;
789789

790790
if (decl->name) {
791-
zend_string_release(decl->name);
791+
zend_string_release_ex(decl->name, 0);
792792
}
793793
if (decl->doc_comment) {
794-
zend_string_release(decl->doc_comment);
794+
zend_string_release_ex(decl->doc_comment, 0);
795795
}
796796
zend_ast_destroy(decl->child[0]);
797797
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
11931193
case IS_DOUBLE:
11941194
key = zend_strpprintf(0, "%.*G", (int) EG(precision), Z_DVAL_P(zv));
11951195
smart_str_appendl(str, ZSTR_VAL(key), ZSTR_LEN(key));
1196-
zend_string_release(key);
1196+
zend_string_release_ex(key, 0);
11971197
break;
11981198
case IS_STRING:
11991199
smart_str_appendc(str, '\'');

Diff for: Zend/zend_builtin_functions.c

+18-18
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ ZEND_FUNCTION(gc_enable)
371371
{
372372
zend_string *key = zend_string_init("zend.enable_gc", sizeof("zend.enable_gc")-1, 0);
373373
zend_alter_ini_entry_chars(key, "1", sizeof("1")-1, ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
374-
zend_string_release(key);
374+
zend_string_release_ex(key, 0);
375375
}
376376
/* }}} */
377377

@@ -381,7 +381,7 @@ ZEND_FUNCTION(gc_disable)
381381
{
382382
zend_string *key = zend_string_init("zend.enable_gc", sizeof("zend.enable_gc")-1, 0);
383383
zend_alter_ini_entry_chars(key, "0", sizeof("0")-1, ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
384-
zend_string_release(key);
384+
zend_string_release_ex(key, 0);
385385
}
386386
/* }}} */
387387

@@ -704,7 +704,7 @@ ZEND_FUNCTION(error_reporting)
704704
p->modified = 1;
705705
}
706706
} else if (p->orig_value != p->value) {
707-
zend_string_release(p->value);
707+
zend_string_release_ex(p->value, 0);
708708
}
709709

710710
p->value = new_val;
@@ -1194,7 +1194,7 @@ static int same_name(zend_string *key, zend_string *name) /* {{{ */
11941194
}
11951195
lcname = zend_string_tolower(name);
11961196
ret = memcmp(ZSTR_VAL(lcname), ZSTR_VAL(key), ZSTR_LEN(key)) == 0;
1197-
zend_string_release(lcname);
1197+
zend_string_release_ex(lcname, 0);
11981198
return ret;
11991199
}
12001200
/* }}} */
@@ -1286,7 +1286,7 @@ ZEND_FUNCTION(method_exists)
12861286

12871287
lcname = zend_string_tolower(method_name);
12881288
if (zend_hash_exists(&ce->function_table, lcname)) {
1289-
zend_string_release(lcname);
1289+
zend_string_release_ex(lcname, 0);
12901290
RETURN_TRUE;
12911291
} else {
12921292
union _zend_function *func = NULL;
@@ -1300,16 +1300,16 @@ ZEND_FUNCTION(method_exists)
13001300
RETVAL_BOOL(func->common.scope == zend_ce_closure
13011301
&& zend_string_equals_literal(method_name, ZEND_INVOKE_FUNC_NAME));
13021302

1303-
zend_string_release(lcname);
1304-
zend_string_release(func->common.function_name);
1303+
zend_string_release_ex(lcname, 0);
1304+
zend_string_release_ex(func->common.function_name, 0);
13051305
zend_free_trampoline(func);
13061306
return;
13071307
}
1308-
zend_string_release(lcname);
1308+
zend_string_release_ex(lcname, 0);
13091309
RETURN_TRUE;
13101310
}
13111311
}
1312-
zend_string_release(lcname);
1312+
zend_string_release_ex(lcname, 0);
13131313
RETURN_FALSE;
13141314
}
13151315
/* }}} */
@@ -1385,7 +1385,7 @@ ZEND_FUNCTION(class_exists)
13851385
}
13861386

13871387
ce = zend_hash_find_ptr(EG(class_table), lc_name);
1388-
zend_string_release(lc_name);
1388+
zend_string_release_ex(lc_name, 0);
13891389
} else {
13901390
ce = zend_lookup_class(class_name);
13911391
}
@@ -1421,7 +1421,7 @@ ZEND_FUNCTION(interface_exists)
14211421
lc_name = zend_string_tolower(iface_name);
14221422
}
14231423
ce = zend_hash_find_ptr(EG(class_table), lc_name);
1424-
zend_string_release(lc_name);
1424+
zend_string_release_ex(lc_name, 0);
14251425
RETURN_BOOL(ce && ce->ce_flags & ZEND_ACC_INTERFACE);
14261426
}
14271427

@@ -1458,7 +1458,7 @@ ZEND_FUNCTION(trait_exists)
14581458
}
14591459

14601460
ce = zend_hash_find_ptr(EG(class_table), lc_name);
1461-
zend_string_release(lc_name);
1461+
zend_string_release_ex(lc_name, 0);
14621462
} else {
14631463
ce = zend_lookup_class(trait_name);
14641464
}
@@ -1492,7 +1492,7 @@ ZEND_FUNCTION(function_exists)
14921492
}
14931493

14941494
func = zend_hash_find_ptr(EG(function_table), lcname);
1495-
zend_string_release(lcname);
1495+
zend_string_release_ex(lcname, 0);
14961496

14971497
/*
14981498
* 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)
16021602
zend_string *error_handler_name = zend_get_callable_name(error_handler);
16031603
zend_error(E_WARNING, "%s() expects the argument (%s) to be a valid callback",
16041604
get_active_function_name(), error_handler_name?ZSTR_VAL(error_handler_name):"unknown");
1605-
zend_string_release(error_handler_name);
1605+
zend_string_release_ex(error_handler_name, 0);
16061606
return;
16071607
}
16081608
}
@@ -1669,7 +1669,7 @@ ZEND_FUNCTION(set_exception_handler)
16691669
zend_string *exception_handler_name = zend_get_callable_name(exception_handler);
16701670
zend_error(E_WARNING, "%s() expects the argument (%s) to be a valid callback",
16711671
get_active_function_name(), exception_handler_name?ZSTR_VAL(exception_handler_name):"unknown");
1672-
zend_string_release(exception_handler_name);
1672+
zend_string_release_ex(exception_handler_name, 0);
16731673
return;
16741674
}
16751675
}
@@ -2356,7 +2356,7 @@ ZEND_FUNCTION(debug_print_backtrace)
23562356
if (object
23572357
&& !func->common.scope
23582358
&& object->handlers->get_class_name != std_object_handlers.get_class_name) {
2359-
zend_string_release(class_name);
2359+
zend_string_release_ex(class_name, 0);
23602360
}
23612361
}
23622362
zend_printf("%s(", function_name);
@@ -2644,7 +2644,7 @@ ZEND_FUNCTION(extension_loaded)
26442644
} else {
26452645
RETVAL_FALSE;
26462646
}
2647-
zend_string_release(lcname);
2647+
zend_string_release_ex(lcname, 0);
26482648
}
26492649
/* }}} */
26502650

@@ -2664,7 +2664,7 @@ ZEND_FUNCTION(get_extension_funcs)
26642664
if (strncasecmp(ZSTR_VAL(extension_name), "zend", sizeof("zend"))) {
26652665
lcname = zend_string_tolower(extension_name);
26662666
module = zend_hash_find_ptr(&module_registry, lcname);
2667-
zend_string_release(lcname);
2667+
zend_string_release_ex(lcname, 0);
26682668
} else {
26692669
module = zend_hash_str_find_ptr(&module_registry, "core", sizeof("core") - 1);
26702670
}

Diff for: Zend/zend_closures.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ ZEND_METHOD(Closure, __invoke) /* {{{ */
5656
}
5757

5858
/* destruct the function also, then - we have allocated it in get_method */
59-
zend_string_release(func->internal_function.function_name);
59+
zend_string_release_ex(func->internal_function.function_name, 0);
6060
efree(func);
6161
#if ZEND_DEBUG
6262
execute_data->func = NULL;
@@ -202,7 +202,7 @@ ZEND_METHOD(Closure, bind)
202202
ce = closure->func.common.scope;
203203
} else if ((ce = zend_lookup_class_ex(class_name, NULL, 1)) == NULL) {
204204
zend_error(E_WARNING, "Class '%s' not found", ZSTR_VAL(class_name));
205-
zend_string_release(class_name);
205+
zend_string_release_ex(class_name, 0);
206206
RETURN_NULL();
207207
}
208208
zend_tmp_string_release(tmp_class_name);
@@ -540,7 +540,7 @@ static HashTable *zend_closure_get_debug_info(zval *object, int *is_temp) /* {{{
540540
}
541541
ZVAL_NEW_STR(&info, zend_strpprintf(0, "%s", i >= required ? "<optional>" : "<required>"));
542542
zend_hash_update(Z_ARRVAL(val), name, &info);
543-
zend_string_release(name);
543+
zend_string_release_ex(name, 0);
544544
arg_info++;
545545
}
546546
zend_hash_str_update(debug_info, "parameter", sizeof("parameter")-1, &val);

0 commit comments

Comments
 (0)