From 4904889568e6024d24ea52b07b8ec86dea5d1e6d Mon Sep 17 00:00:00 2001 From: Antony Dovgal Date: Sat, 2 Feb 2008 22:29:41 +0000 Subject: [PATCH] MFH: fix leak appearing when calling non-static protected or private methods as static --- Zend/zend_API.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/Zend/zend_API.c b/Zend/zend_API.c index fe921a0ddc..05ab18d5f5 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -2314,6 +2314,10 @@ static int zend_is_callable_check_func(int check_flags, zval ***zobj_ptr_ptr, ze zend_function *fptr; HashTable *ftable; + if (error) { + *error = NULL; + } + *ce_ptr = NULL; *fptr_ptr = NULL; @@ -2431,12 +2435,22 @@ static int zend_is_callable_check_func(int check_flags, zval ***zobj_ptr_ptr, ze if (retval && (check_flags & IS_CALLABLE_CHECK_NO_ACCESS) == 0) { if (fptr->op_array.fn_flags & ZEND_ACC_PRIVATE) { if (!zend_check_private(fptr, *zobj_ptr_ptr ? Z_OBJCE_PP(*zobj_ptr_ptr) : EG(scope), lmname, mlen TSRMLS_CC)) { - if (error) zend_spprintf(error, 0, "cannot access private method %s::%s()", (*ce_ptr)->name, fptr->common.function_name); + if (error) { + if (*error) { + efree(*error); + } + zend_spprintf(error, 0, "cannot access private method %s::%s()", (*ce_ptr)->name, fptr->common.function_name); + } retval = 0; } } else if ((fptr->common.fn_flags & ZEND_ACC_PROTECTED)) { if (!zend_check_protected(fptr->common.scope, EG(scope))) { - if (error) zend_spprintf(error, 0, "cannot access protected method %s::%s()", (*ce_ptr)->name, fptr->common.function_name); + if (error) { + if (*error) { + efree(*error); + } + zend_spprintf(error, 0, "cannot access protected method %s::%s()", (*ce_ptr)->name, fptr->common.function_name); + } retval = 0; } } -- 2.50.1