summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikic@php.net>2014-04-10 13:50:25 +0200
committerNikita Popov <nikic@php.net>2014-04-10 13:50:25 +0200
commitf449b04713ae3ab5be5024968849b35bf4fea2a4 (patch)
tree25770ded902cc7cb0e7b40d435da19bb5f32725a
parentc6eba255718269bbcdc05046fa21af2b70d407e9 (diff)
downloadphp-git-f449b04713ae3ab5be5024968849b35bf4fea2a4.tar.gz
Fix some ZTS issues and leaks
-rw-r--r--Zend/zend_builtin_functions.c2
-rw-r--r--Zend/zend_compile.c6
-rw-r--r--Zend/zend_execute.c2
-rw-r--r--Zend/zend_object_handlers.c1
-rw-r--r--Zend/zend_string.c2
5 files changed, 10 insertions, 3 deletions
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index b75343936c..0cafa71f97 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -1149,7 +1149,7 @@ ZEND_FUNCTION(method_exists)
&& memcmp(lcname->val, ZEND_INVOKE_FUNC_NAME, sizeof(ZEND_INVOKE_FUNC_NAME)-1) == 0) ? 1 : 0);
STR_FREE(lcname);
- STR_FREE(func->common.function_name);
+ STR_RELEASE(func->common.function_name);
efree(func);
return;
}
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index bd678c6d8b..50aff60f1a 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -6864,12 +6864,16 @@ zend_bool zend_is_auto_global(zend_string *name TSRMLS_DC) /* {{{ */
int zend_register_auto_global(zend_string *name, zend_bool jit, zend_auto_global_callback auto_global_callback TSRMLS_DC) /* {{{ */
{
zend_auto_global auto_global;
+ int retval;
auto_global.name = zend_new_interned_string(name TSRMLS_CC);
auto_global.auto_global_callback = auto_global_callback;
auto_global.jit = jit;
- return zend_hash_add_mem(CG(auto_globals), name, &auto_global, sizeof(zend_auto_global)) != NULL ? SUCCESS : FAILURE;
+ retval = zend_hash_add_mem(CG(auto_globals), name, &auto_global, sizeof(zend_auto_global)) != NULL ? SUCCESS : FAILURE;
+
+ STR_RELEASE(auto_global.name);
+ return retval;
}
/* }}} */
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index 822ec902a3..e4090081a6 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -697,6 +697,7 @@ static inline void zend_assign_to_object(zval *retval, zval *object_ptr, zval *p
value = &tmp;
} else if (value_type == IS_CONST) {
ZVAL_DUP(&tmp, value);
+ value = &tmp;
} else if (Z_REFCOUNTED_P(value)) {
Z_ADDREF_P(value);
}
@@ -1107,6 +1108,7 @@ fetch_from_array:
} else if (EXPECTED(Z_TYPE_P(container) == IS_STRING)) {
if (type != BP_VAR_UNSET && UNEXPECTED(Z_STRLEN_P(container) == 0)) {
convert_to_array:
+ zval_dtor(container);
array_init(container);
goto fetch_from_array;
}
diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c
index 2150ad5773..5dba067023 100644
--- a/Zend/zend_object_handlers.c
+++ b/Zend/zend_object_handlers.c
@@ -1476,7 +1476,6 @@ found:
zend_std_call_getter(object, member, &rv TSRMLS_CC);
(*guard) &= ~IN_GET;
if (Z_TYPE(rv) != IS_UNDEF) {
- if (Z_REFCOUNTED(rv)) Z_ADDREF(rv);
result = i_zend_is_true(&rv TSRMLS_CC);
zval_ptr_dtor(&rv);
} else {
diff --git a/Zend/zend_string.c b/Zend/zend_string.c
index d95d0e9e15..aafd8da5bb 100644
--- a/Zend/zend_string.c
+++ b/Zend/zend_string.c
@@ -78,6 +78,8 @@ void zend_interned_strings_dtor(TSRMLS_D)
zend_hash_destroy(&CG(interned_strings));
//??? free(CG(interned_strings).arData);
//??? free(CG(interned_strings).arHash);
+#else
+ free(CG(empty_string));
#endif
}