]> granicus.if.org Git - php/commitdiff
Fix some ZTS issues and leaks
authorNikita Popov <nikic@php.net>
Thu, 10 Apr 2014 11:50:25 +0000 (13:50 +0200)
committerNikita Popov <nikic@php.net>
Thu, 10 Apr 2014 11:50:25 +0000 (13:50 +0200)
Zend/zend_builtin_functions.c
Zend/zend_compile.c
Zend/zend_execute.c
Zend/zend_object_handlers.c
Zend/zend_string.c

index b75343936c3e5079baed98ebfc2f383a314e34e9..0cafa71f97193f0189e5e349a89a940a2ae036e5 100644 (file)
@@ -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;
                        }
index bd678c6d8bc176430439b46db7a0fdac8b304c06..50aff60f1a03ee528a89da52a84d456ded8b796a 100644 (file)
@@ -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;
 }
 /* }}} */
 
index 822ec902a3cc49007aa06c4a00aa6f09e4907bcb..e4090081a6d506f2c81abe46b73623cc5775bf30 100644 (file)
@@ -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;
                }
index 2150ad57731e2177a4fe7ae802a2d11ed6ea9db1..5dba0670235ab0f71171451a891178f376f46325 100644 (file)
@@ -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 {
index d95d0e9e15c0b9c4a6a516ab39ad5147950aa561..aafd8da5bbe0b73cc2cb2a6bb0912a81cbbc730d 100644 (file)
@@ -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
 }