From: Ilia Alshanetsky Date: Fri, 24 Jan 2003 17:10:40 +0000 (+0000) Subject: MFH (memory leak in quota functions). X-Git-Tag: PHP_4_3_before_13561_fix~29 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=98536a9d8b13e1373566e8f37d9781e123c58290;p=php MFH (memory leak in quota functions). --- diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c index cdba20fca5..545b7f1f0d 100644 --- a/ext/imap/php_imap.c +++ b/ext/imap/php_imap.c @@ -339,7 +339,11 @@ void mail_free_messagelist(MESSAGELIST **msglist, MESSAGELIST **tail) void mail_getquota(MAILSTREAM *stream, char *qroot, QUOTALIST *qlist) { zval *t_map; + zval *return_value; TSRMLS_FETCH(); + + return_value = *IMAPG(quota_return); + /* put parsing code here */ for(; qlist; qlist = qlist->next) { MAKE_STD_ZVAL(t_map); @@ -352,13 +356,13 @@ void mail_getquota(MAILSTREAM *stream, char *qroot, QUOTALIST *qlist) if (strncmp(qlist->name, "STORAGE", 7) == 0) { /* this is to add backwards compatibility */ - add_assoc_long_ex(IMAPG(quota_return), "usage", sizeof("usage"), qlist->usage); - add_assoc_long_ex(IMAPG(quota_return), "limit", sizeof("limit"), qlist->limit); + add_assoc_long_ex(return_value, "usage", sizeof("usage"), qlist->usage); + add_assoc_long_ex(return_value, "limit", sizeof("limit"), qlist->limit); } add_assoc_long_ex(t_map, "usage", sizeof("usage"), qlist->usage); add_assoc_long_ex(t_map, "limit", sizeof("limit"), qlist->limit); - add_assoc_zval_ex(IMAPG(quota_return), qlist->name, strlen(qlist->name)+1, t_map); + add_assoc_zval_ex(return_value, qlist->name, strlen(qlist->name)+1, t_map); } } /* }}} */ @@ -862,22 +866,16 @@ PHP_FUNCTION(imap_get_quota) convert_to_string_ex(qroot); - MAKE_STD_ZVAL(IMAPG(quota_return)); - if (array_init(IMAPG(quota_return)) == FAILURE) { - php_error(E_WARNING, "%s(): Unable to allocate array memory", get_active_function_name(TSRMLS_C)); - FREE_ZVAL(IMAPG(quota_return)); - RETURN_FALSE; - } + array_init(return_value); + IMAPG(quota_return) = &return_value; /* set the callback for the GET_QUOTA function */ mail_parameters(NIL, SET_QUOTA, (void *) mail_getquota); if(!imap_getquota(imap_le_struct->imap_stream, Z_STRVAL_PP(qroot))) { - php_error(E_WARNING, "%s(): c-client imap_getquota failed", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "c-client imap_getquota failed"); + zval_dtor(return_value); RETURN_FALSE; } - - *return_value = *IMAPG(quota_return); - FREE_ZVAL(IMAPG(quota_return)); } /* }}} */ @@ -896,22 +894,16 @@ PHP_FUNCTION(imap_get_quotaroot) convert_to_string_ex(mbox); - MAKE_STD_ZVAL(IMAPG(quota_return)); - if (array_init(IMAPG(quota_return)) == FAILURE) { - php_error(E_WARNING, "%s(): Unable to allocate array memory", get_active_function_name(TSRMLS_C)); - FREE_ZVAL(IMAPG(quota_return)); - RETURN_FALSE; - } + array_init(return_value); + IMAPG(quota_return) = &return_value; /* set the callback for the GET_QUOTAROOT function */ mail_parameters(NIL, SET_QUOTA, (void *) mail_getquota); if(!imap_getquotaroot(imap_le_struct->imap_stream, Z_STRVAL_PP(mbox))) { - php_error(E_WARNING, "%s(): c-client imap_getquotaroot failed", get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "c-client imap_getquotaroot failed"); + zval_dtor(return_value); RETURN_FALSE; } - - *return_value = *IMAPG(quota_return); - FREE_ZVAL(IMAPG(quota_return)); } /* }}} */ diff --git a/ext/imap/php_imap.h b/ext/imap/php_imap.h index a54ea06c62..b0815db895 100644 --- a/ext/imap/php_imap.h +++ b/ext/imap/php_imap.h @@ -200,7 +200,7 @@ ZEND_BEGIN_MODULE_GLOBALS(imap) unsigned long status_uidnext; unsigned long status_uidvalidity; #if defined(HAVE_IMAP2000) || defined(HAVE_IMAP2001) - zval *quota_return; + zval **quota_return; #endif ZEND_END_MODULE_GLOBALS(imap)