]> granicus.if.org Git - php/commitdiff
MFH (memory leak in quota functions).
authorIlia Alshanetsky <iliaa@php.net>
Fri, 24 Jan 2003 17:10:40 +0000 (17:10 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Fri, 24 Jan 2003 17:10:40 +0000 (17:10 +0000)
ext/imap/php_imap.c
ext/imap/php_imap.h

index cdba20fca52ff7acec9152f8687c9dbce11fe370..545b7f1f0d0d90aa38e0c3e766fd5b25155b4bb5 100644 (file)
@@ -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));
 }
 /* }}} */
 
index a54ea06c62a11272b896e4ac21783b4f2a8d9c90..b0815db895bad741b18071e47a67e20c38e68f1b 100644 (file)
@@ -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)