se zval_ptr_dtor_str() instead of zend_string_release_ex(Z_STR(*), 0)

This commit is contained in:
Dmitry Stogov 2018-07-04 12:08:07 +03:00
parent 5f19816f53
commit af341213f7
12 changed files with 38 additions and 38 deletions

View file

@ -3169,7 +3169,7 @@ static zend_never_inline zend_op_array* ZEND_FASTCALL zend_include_or_eval(zval
zend_destroy_file_handle(&file_handle); zend_destroy_file_handle(&file_handle);
zend_string_release_ex(resolved_path, 0); zend_string_release_ex(resolved_path, 0);
if (Z_TYPE(tmp_inc_filename) != IS_UNDEF) { if (Z_TYPE(tmp_inc_filename) != IS_UNDEF) {
zend_string_release_ex(Z_STR(tmp_inc_filename), 0); zval_ptr_dtor_str(&tmp_inc_filename);
} }
return op_array; return op_array;
} else { } else {
@ -3207,7 +3207,7 @@ already_compiled:
} }
if (Z_TYPE(tmp_inc_filename) != IS_UNDEF) { if (Z_TYPE(tmp_inc_filename) != IS_UNDEF) {
zend_string_release_ex(Z_STR(tmp_inc_filename), 0); zval_ptr_dtor_str(&tmp_inc_filename);
} }
return new_op_array; return new_op_array;
} }

View file

@ -156,7 +156,7 @@ ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini
case T_DOC_COMMENT: case T_DOC_COMMENT:
break; break;
default: default:
zend_string_release_ex(Z_STR(token), 0); zval_ptr_dtor_str(&token);
break; break;
} }
} }
@ -219,7 +219,7 @@ ZEND_API void zend_strip(void)
break; break;
default: default:
zend_string_release_ex(Z_STR(token), 0); zval_ptr_dtor_str(&token);
break; break;
} }
} }

View file

@ -572,7 +572,7 @@ ZEND_API uint32_t *zend_get_property_guard(zend_object *zobj, zend_string *membe
EXPECTED(zend_string_equal_content(str, member)))) { EXPECTED(zend_string_equal_content(str, member)))) {
return &Z_PROPERTY_GUARD_P(zv); return &Z_PROPERTY_GUARD_P(zv);
} else if (EXPECTED(Z_PROPERTY_GUARD_P(zv) == 0)) { } else if (EXPECTED(Z_PROPERTY_GUARD_P(zv) == 0)) {
zend_string_release_ex(Z_STR_P(zv), 0); zval_ptr_dtor_str(zv);
ZVAL_STR_COPY(zv, member); ZVAL_STR_COPY(zv, member);
return &Z_PROPERTY_GUARD_P(zv); return &Z_PROPERTY_GUARD_P(zv);
} else { } else {
@ -581,7 +581,7 @@ ZEND_API uint32_t *zend_get_property_guard(zend_object *zobj, zend_string *membe
/* mark pointer as "special" using low bit */ /* mark pointer as "special" using low bit */
zend_hash_add_new_ptr(guards, str, zend_hash_add_new_ptr(guards, str,
(void*)(((zend_uintptr_t)&Z_PROPERTY_GUARD_P(zv)) | 1)); (void*)(((zend_uintptr_t)&Z_PROPERTY_GUARD_P(zv)) | 1));
zend_string_release_ex(Z_STR_P(zv), 0); zval_ptr_dtor_str(zv);
ZVAL_ARR(zv, guards); ZVAL_ARR(zv, guards);
} }
} else if (EXPECTED(Z_TYPE_P(zv) == IS_ARRAY)) { } else if (EXPECTED(Z_TYPE_P(zv) == IS_ARRAY)) {

View file

@ -60,7 +60,7 @@ ZEND_API void zend_object_std_dtor(zend_object *object)
} }
if (UNEXPECTED(object->ce->ce_flags & ZEND_ACC_USE_GUARDS)) { if (UNEXPECTED(object->ce->ce_flags & ZEND_ACC_USE_GUARDS)) {
if (EXPECTED(Z_TYPE_P(p) == IS_STRING)) { if (EXPECTED(Z_TYPE_P(p) == IS_STRING)) {
zend_string_release_ex(Z_STR_P(p), 0); zval_ptr_dtor_str(p);
} else if (Z_TYPE_P(p) == IS_ARRAY) { } else if (Z_TYPE_P(p) == IS_ARRAY) {
HashTable *guards; HashTable *guards;

View file

@ -1455,7 +1455,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) { 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)); zend_uchar or = (zend_uchar) (*Z_STRVAL_P(op1) | *Z_STRVAL_P(op2));
if (result==op1) { if (result==op1) {
zend_string_release_ex(Z_STR_P(result), 0); zval_ptr_dtor_str(result);
} }
ZVAL_INTERNED_STR(result, ZSTR_CHAR(or)); ZVAL_INTERNED_STR(result, ZSTR_CHAR(or));
return SUCCESS; return SUCCESS;
@ -1473,7 +1473,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); memcpy(ZSTR_VAL(str) + i, Z_STRVAL_P(longer) + i, Z_STRLEN_P(longer) - i + 1);
if (result==op1) { if (result==op1) {
zend_string_release_ex(Z_STR_P(result), 0); zval_ptr_dtor_str(result);
} }
ZVAL_NEW_STR(result, str); ZVAL_NEW_STR(result, str);
return SUCCESS; return SUCCESS;
@ -1533,7 +1533,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) { 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)); zend_uchar and = (zend_uchar) (*Z_STRVAL_P(op1) & *Z_STRVAL_P(op2));
if (result==op1) { if (result==op1) {
zend_string_release_ex(Z_STR_P(result), 0); zval_ptr_dtor_str(result);
} }
ZVAL_INTERNED_STR(result, ZSTR_CHAR(and)); ZVAL_INTERNED_STR(result, ZSTR_CHAR(and));
return SUCCESS; return SUCCESS;
@ -1551,7 +1551,7 @@ ZEND_API int ZEND_FASTCALL bitwise_and_function(zval *result, zval *op1, zval *o
} }
ZSTR_VAL(str)[i] = 0; ZSTR_VAL(str)[i] = 0;
if (result==op1) { if (result==op1) {
zend_string_release_ex(Z_STR_P(result), 0); zval_ptr_dtor_str(result);
} }
ZVAL_NEW_STR(result, str); ZVAL_NEW_STR(result, str);
return SUCCESS; return SUCCESS;
@ -1611,7 +1611,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) { 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)); zend_uchar xor = (zend_uchar) (*Z_STRVAL_P(op1) ^ *Z_STRVAL_P(op2));
if (result==op1) { if (result==op1) {
zend_string_release_ex(Z_STR_P(result), 0); zval_ptr_dtor_str(result);
} }
ZVAL_INTERNED_STR(result, ZSTR_CHAR(xor)); ZVAL_INTERNED_STR(result, ZSTR_CHAR(xor));
return SUCCESS; return SUCCESS;
@ -1629,7 +1629,7 @@ ZEND_API int ZEND_FASTCALL bitwise_xor_function(zval *result, zval *op1, zval *o
} }
ZSTR_VAL(str)[i] = 0; ZSTR_VAL(str)[i] = 0;
if (result==op1) { if (result==op1) {
zend_string_release_ex(Z_STR_P(result), 0); zval_ptr_dtor_str(result);
} }
ZVAL_NEW_STR(result, str); ZVAL_NEW_STR(result, str);
return SUCCESS; return SUCCESS;
@ -2332,7 +2332,7 @@ static void ZEND_FASTCALL increment_string(zval *str) /* {{{ */
int ch; int ch;
if (Z_STRLEN_P(str) == 0) { if (Z_STRLEN_P(str) == 0) {
zend_string_release_ex(Z_STR_P(str), 0); zval_ptr_dtor_str(str);
ZVAL_INTERNED_STR(str, ZSTR_CHAR('1')); ZVAL_INTERNED_STR(str, ZSTR_CHAR('1'));
return; return;
} }
@ -2426,7 +2426,7 @@ try_again:
switch (is_numeric_string(Z_STRVAL_P(op1), Z_STRLEN_P(op1), &lval, &dval, 0)) { switch (is_numeric_string(Z_STRVAL_P(op1), Z_STRLEN_P(op1), &lval, &dval, 0)) {
case IS_LONG: case IS_LONG:
zend_string_release_ex(Z_STR_P(op1), 0); zval_ptr_dtor_str(op1);
if (lval == ZEND_LONG_MAX) { if (lval == ZEND_LONG_MAX) {
/* switch to double */ /* switch to double */
double d = (double)lval; double d = (double)lval;
@ -2436,7 +2436,7 @@ try_again:
} }
break; break;
case IS_DOUBLE: case IS_DOUBLE:
zend_string_release_ex(Z_STR_P(op1), 0); zval_ptr_dtor_str(op1);
ZVAL_DOUBLE(op1, dval+1); ZVAL_DOUBLE(op1, dval+1);
break; break;
default: default:
@ -2493,13 +2493,13 @@ try_again:
break; break;
case IS_STRING: /* Like perl we only support string increment */ case IS_STRING: /* Like perl we only support string increment */
if (Z_STRLEN_P(op1) == 0) { /* consider as 0 */ if (Z_STRLEN_P(op1) == 0) { /* consider as 0 */
zend_string_release_ex(Z_STR_P(op1), 0); zval_ptr_dtor_str(op1);
ZVAL_LONG(op1, -1); ZVAL_LONG(op1, -1);
break; break;
} }
switch (is_numeric_string(Z_STRVAL_P(op1), Z_STRLEN_P(op1), &lval, &dval, 0)) { switch (is_numeric_string(Z_STRVAL_P(op1), Z_STRLEN_P(op1), &lval, &dval, 0)) {
case IS_LONG: case IS_LONG:
zend_string_release_ex(Z_STR_P(op1), 0); zval_ptr_dtor_str(op1);
if (lval == ZEND_LONG_MIN) { if (lval == ZEND_LONG_MIN) {
double d = (double)lval; double d = (double)lval;
ZVAL_DOUBLE(op1, d-1); ZVAL_DOUBLE(op1, d-1);
@ -2508,7 +2508,7 @@ try_again:
} }
break; break;
case IS_DOUBLE: case IS_DOUBLE:
zend_string_release_ex(Z_STR_P(op1), 0); zval_ptr_dtor_str(op1);
ZVAL_DOUBLE(op1, dval - 1); ZVAL_DOUBLE(op1, dval - 1);
break; break;
} }

View file

@ -4525,7 +4525,7 @@ ZEND_VM_C_LABEL(send_again):
ZEND_ASSERT(Z_TYPE(key) == IS_STRING); ZEND_ASSERT(Z_TYPE(key) == IS_STRING);
zend_throw_error(NULL, zend_throw_error(NULL,
"Cannot unpack Traversable with string keys"); "Cannot unpack Traversable with string keys");
zend_string_release_ex(Z_STR(key), 0); zval_ptr_dtor_str(&key);
break; break;
} }
} }

View file

@ -1362,7 +1362,7 @@ send_again:
ZEND_ASSERT(Z_TYPE(key) == IS_STRING); ZEND_ASSERT(Z_TYPE(key) == IS_STRING);
zend_throw_error(NULL, zend_throw_error(NULL,
"Cannot unpack Traversable with string keys"); "Cannot unpack Traversable with string keys");
zend_string_release_ex(Z_STR(key), 0); zval_ptr_dtor_str(&key);
break; break;
} }
} }

View file

@ -704,7 +704,7 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
Z_TYPE_INFO(ZEND_OP2_LITERAL(src)) = IS_STRING_EX; 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))); 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'; Z_STRVAL(ZEND_OP2_LITERAL(src))[l] = '\0';
zend_string_release_ex(Z_STR(ZEND_OP2_LITERAL(opline)), 0); zval_ptr_dtor_str(&ZEND_OP2_LITERAL(opline));
ZVAL_STR(&ZEND_OP2_LITERAL(opline), zend_new_interned_string(Z_STR(ZEND_OP2_LITERAL(src)))); ZVAL_STR(&ZEND_OP2_LITERAL(opline), zend_new_interned_string(Z_STR(ZEND_OP2_LITERAL(src))));
ZVAL_NULL(&ZEND_OP2_LITERAL(src)); ZVAL_NULL(&ZEND_OP2_LITERAL(src));
MAKE_NOP(src); MAKE_NOP(src);

View file

@ -1446,7 +1446,7 @@ PHPAPI int php_session_reset_id(void) /* {{{ */
smart_str_appends(&var, ZSTR_VAL(PS(id))); smart_str_appends(&var, ZSTR_VAL(PS(id)));
smart_str_0(&var); smart_str_0(&var);
if (sid) { if (sid) {
zend_string_release_ex(Z_STR_P(sid), 0); zval_ptr_dtor_str(sid);
ZVAL_NEW_STR(sid, var.s); ZVAL_NEW_STR(sid, var.s);
} else { } else {
REGISTER_STRINGL_CONSTANT("SID", ZSTR_VAL(var.s), ZSTR_LEN(var.s), 0); 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 { } else {
if (sid) { if (sid) {
zend_string_release_ex(Z_STR_P(sid), 0); zval_ptr_dtor_str(sid);
ZVAL_EMPTY_STRING(sid); ZVAL_EMPTY_STRING(sid);
} else { } else {
REGISTER_STRINGL_CONSTANT("SID", "", 0, 0); REGISTER_STRINGL_CONSTANT("SID", "", 0, 0);

View file

@ -1947,7 +1947,7 @@ static zend_long php_extract_ref_prefix_if_exists(zend_array *arr, zend_array *s
count++; count++;
} }
} }
zend_string_release_ex(Z_STR(final_name), 0); zval_ptr_dtor_str(&final_name);
} }
} ZEND_HASH_FOREACH_END(); } ZEND_HASH_FOREACH_END();
@ -1997,7 +1997,7 @@ static zend_long php_extract_prefix_if_exists(zend_array *arr, zend_array *symbo
count++; count++;
} }
} }
zend_string_release_ex(Z_STR(final_name), 0); zval_ptr_dtor_str(&final_name);
} }
} ZEND_HASH_FOREACH_END(); } ZEND_HASH_FOREACH_END();
@ -2056,7 +2056,7 @@ static zend_long php_extract_ref_prefix_same(zend_array *arr, zend_array *symbol
count++; count++;
} }
} }
zend_string_release_ex(Z_STR(final_name), 0); zval_ptr_dtor_str(&final_name);
} else { } else {
if (!php_valid_var_name(ZSTR_VAL(var_name), ZSTR_LEN(var_name))) { if (!php_valid_var_name(ZSTR_VAL(var_name), ZSTR_LEN(var_name))) {
continue; continue;
@ -2124,7 +2124,7 @@ static zend_long php_extract_prefix_same(zend_array *arr, zend_array *symbol_tab
count++; count++;
} }
} }
zend_string_release_ex(Z_STR(final_name), 0); zval_ptr_dtor_str(&final_name);
} else { } else {
if (!php_valid_var_name(ZSTR_VAL(var_name), ZSTR_LEN(var_name))) { if (!php_valid_var_name(ZSTR_VAL(var_name), ZSTR_LEN(var_name))) {
continue; continue;
@ -2184,7 +2184,7 @@ static zend_long php_extract_ref_prefix_all(zend_array *arr, zend_array *symbol_
count++; count++;
} }
} }
zend_string_release_ex(Z_STR(final_name), 0); zval_ptr_dtor_str(&final_name);
} ZEND_HASH_FOREACH_END(); } ZEND_HASH_FOREACH_END();
return count; return count;
@ -2229,7 +2229,7 @@ static zend_long php_extract_prefix_all(zend_array *arr, zend_array *symbol_tabl
count++; count++;
} }
} }
zend_string_release_ex(Z_STR(final_name), 0); zval_ptr_dtor_str(&final_name);
} ZEND_HASH_FOREACH_END(); } ZEND_HASH_FOREACH_END();
return count; return count;
@ -2248,7 +2248,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))) { 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); 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))) { if (!php_valid_var_name(Z_STRVAL(final_name), Z_STRLEN(final_name))) {
zend_string_release_ex(Z_STR(final_name), 0); zval_ptr_dtor_str(&final_name);
continue; continue;
} }
} else { } else {
@ -2259,7 +2259,7 @@ static zend_long php_extract_ref_prefix_invalid(zend_array *arr, zend_array *sym
php_prefix_varname(&final_name, prefix, ZSTR_VAL(str), ZSTR_LEN(str), 1); php_prefix_varname(&final_name, prefix, ZSTR_VAL(str), ZSTR_LEN(str), 1);
zend_string_release_ex(str, 0); zend_string_release_ex(str, 0);
if (!php_valid_var_name(Z_STRVAL(final_name), Z_STRLEN(final_name))) { if (!php_valid_var_name(Z_STRVAL(final_name), Z_STRLEN(final_name))) {
zend_string_release_ex(Z_STR(final_name), 0); zval_ptr_dtor_str(&final_name);
continue; continue;
} }
} }
@ -2283,7 +2283,7 @@ static zend_long php_extract_ref_prefix_invalid(zend_array *arr, zend_array *sym
} }
count++; count++;
} }
zend_string_release_ex(Z_STR(final_name), 0); zval_ptr_dtor_str(&final_name);
} ZEND_HASH_FOREACH_END(); } ZEND_HASH_FOREACH_END();
return count; return count;
@ -2302,7 +2302,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))) { 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); 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))) { if (!php_valid_var_name(Z_STRVAL(final_name), Z_STRLEN(final_name))) {
zend_string_release_ex(Z_STR(final_name), 0); zval_ptr_dtor_str(&final_name);
continue; continue;
} }
} else { } else {
@ -2313,7 +2313,7 @@ static zend_long php_extract_prefix_invalid(zend_array *arr, zend_array *symbol_
php_prefix_varname(&final_name, prefix, ZSTR_VAL(str), ZSTR_LEN(str), 1); php_prefix_varname(&final_name, prefix, ZSTR_VAL(str), ZSTR_LEN(str), 1);
zend_string_release_ex(str, 0); zend_string_release_ex(str, 0);
if (!php_valid_var_name(Z_STRVAL(final_name), Z_STRLEN(final_name))) { if (!php_valid_var_name(Z_STRVAL(final_name), Z_STRLEN(final_name))) {
zend_string_release_ex(Z_STR(final_name), 0); zval_ptr_dtor_str(&final_name);
continue; continue;
} }
} }
@ -2335,7 +2335,7 @@ static zend_long php_extract_prefix_invalid(zend_array *arr, zend_array *symbol_
} }
count++; count++;
} }
zend_string_release_ex(Z_STR(final_name), 0); zval_ptr_dtor_str(&final_name);
} ZEND_HASH_FOREACH_END(); } ZEND_HASH_FOREACH_END();
return count; return count;

View file

@ -477,7 +477,7 @@ string_key:
ZEND_ASSERT(existing_propinfo->flags & ZEND_ACC_PUBLIC); ZEND_ASSERT(existing_propinfo->flags & ZEND_ACC_PUBLIC);
new_key = unmangled; new_key = unmangled;
} }
zend_string_release_ex(Z_STR(key), 0); zval_ptr_dtor_str(&key);
ZVAL_STR(&key, new_key); ZVAL_STR(&key, new_key);
} else { } else {
zend_string_release_ex(unmangled, 0); zend_string_release_ex(unmangled, 0);

View file

@ -481,7 +481,7 @@ string_key:
ZEND_ASSERT(existing_propinfo->flags & ZEND_ACC_PUBLIC); ZEND_ASSERT(existing_propinfo->flags & ZEND_ACC_PUBLIC);
new_key = unmangled; new_key = unmangled;
} }
zend_string_release_ex(Z_STR(key), 0); zval_ptr_dtor_str(&key);
ZVAL_STR(&key, new_key); ZVAL_STR(&key, new_key);
} else { } else {
zend_string_release_ex(unmangled, 0); zend_string_release_ex(unmangled, 0);