]> granicus.if.org Git - php/commitdiff
MFH: Fixed various possible memory leaks.
authorIlia Alshanetsky <iliaa@php.net>
Wed, 12 May 2004 20:17:21 +0000 (20:17 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Wed, 12 May 2004 20:17:21 +0000 (20:17 +0000)
ext/imap/php_imap.c

index 4bd38121040d6cda98bd217830844b99d6f61fc9..73fce1b8c7d0240eae3f04654b636a2df8564ed2 100644 (file)
@@ -1314,7 +1314,7 @@ PHP_FUNCTION(imap_list_full)
        }
        
        array_init(return_value);
-       delim = emalloc(2 * sizeof(char));
+       delim = safe_emalloc(2, sizeof(char), 0);
        cur=IMAPG(imap_folder_objects);
        while (cur != NIL) {
                MAKE_STD_ZVAL(mboxob);
@@ -1635,6 +1635,7 @@ PHP_FUNCTION(imap_lsub_full)
        }
        
        array_init(return_value);
+       delim = safe_emalloc(2, sizeof(char), 0);
        cur=IMAPG(imap_sfolder_objects);
        while (cur != NIL) {
                MAKE_STD_ZVAL(mboxob);
@@ -3190,6 +3191,9 @@ int _php_imap_mail(char *to, char *subject, char *message, char *headers, char *
                bufferLen += strlen(cc) + 6;
        }
 
+#define PHP_IMAP_CLEAN if (bufferTo) efree(bufferTo); if (bufferCc) efree(bufferCc); if (bufferBcc) efree(bufferBcc); if (bufferHeader) efree(bufferHeader);
+#define PHP_IMAP_BAD_DEST PHP_IMAP_CLEAN; efree(tempMailTo); return (BAD_MSG_DESTINATION);
+
        bufferHeader = (char *)emalloc(bufferLen);
        memset(bufferHeader, 0, bufferLen);
        if (to && *to) {
@@ -3202,9 +3206,9 @@ int _php_imap_mail(char *to, char *subject, char *message, char *headers, char *
                addr = NULL;
                rfc822_parse_adrlist(&addr, tempMailTo, NULL);
                while (addr) {
-                       if (strcmp(addr->host, ERRHOST) == 0)
-                               return (BAD_MSG_DESTINATION);
-                       else {
+                       if (strcmp(addr->host, ERRHOST) == 0) {
+                               PHP_IMAP_BAD_DEST;
+                       else {
                                offset += sprintf(bufferTo + offset, "%s@%s,", addr->mailbox, addr->host);
                        }
                        addr = addr->next;
@@ -3225,9 +3229,9 @@ int _php_imap_mail(char *to, char *subject, char *message, char *headers, char *
                addr = NULL;
                rfc822_parse_adrlist(&addr, tempMailTo, NULL);
                while (addr) {
-                       if (strcmp(addr->host, ERRHOST) == 0)
-                               return (BAD_MSG_DESTINATION);
-                       else {
+                       if (strcmp(addr->host, ERRHOST) == 0) {
+                               PHP_IMAP_BAD_DEST;
+                       else {
                                offset += sprintf(bufferCc + offset, "%s@%s,", addr->mailbox, addr->host);
                        }
                        addr = addr->next;
@@ -3245,9 +3249,9 @@ int _php_imap_mail(char *to, char *subject, char *message, char *headers, char *
                addr = NULL;
                rfc822_parse_adrlist(&addr, tempMailTo, NULL);
                while (addr) {
-                       if (strcmp(addr->host, ERRHOST) == 0)
-                               return (BAD_MSG_DESTINATION);
-                       else {
+                       if (strcmp(addr->host, ERRHOST) == 0) {
+                               PHP_IMAP_BAD_DEST;
+                       else {
                                offset += sprintf(bufferBcc + offset, "%s@%s,", addr->mailbox, addr->host);
                        }
                        addr = addr->next;
@@ -3269,20 +3273,10 @@ int _php_imap_mail(char *to, char *subject, char *message, char *headers, char *
                } else {
                        php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), GetSMErrorText(tsm_err));
                }
+               PHP_IMAP_CLEAN;
                return 0;
        }
-       if (bufferTo) {
-               efree(bufferTo);
-       }
-       if (bufferCc) {
-               efree(bufferCc);
-       }
-       if (bufferBcc) {
-               efree(bufferBcc);
-       }
-       if (bufferHeader) {
-               efree(bufferHeader);
-       }
+       PHP_IMAP_CLEAN;
 #else
        if (!INI_STR("sendmail_path")) {
                return 0;