diff options
Diffstat (limited to 'ext/imap/php_imap.c')
| -rw-r--r-- | ext/imap/php_imap.c | 38 | 
1 files changed, 16 insertions, 22 deletions
| diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c index 4bd3812104..73fce1b8c7 100644 --- a/ext/imap/php_imap.c +++ b/ext/imap/php_imap.c @@ -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; | 
