changeset 773:2add5c5f88f8

Fix some memory leaks
author Ben Schmidt
date Fri, 12 Nov 2010 00:53:36 +1100
parents 179d5a0ed686
children 62f9b36df5a5
files ChangeLog src/mlmmj-send.c
diffstat 2 files changed, 17 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Nov 12 00:01:07 2010 +1100
+++ b/ChangeLog	Fri Nov 12 00:53:36 2010 +1100
@@ -1,3 +1,4 @@
+ o Fixed small memory leaks when SMTP errors occur
  o Improved error logging when requeuing
  o Fix php-admin to work when topdir contains a symlink (e.g. on Mac)
  o Better techniques for locating support files in php-admin -- existing
--- a/src/mlmmj-send.c	Fri Nov 12 00:01:07 2010 +1100
+++ b/src/mlmmj-send.c	Fri Nov 12 00:53:36 2010 +1100
@@ -248,7 +248,7 @@
 	      size_t bodylen)
 {
 	int retval = 0;
-	char *reply, *tohdr;
+	char *reply, *reply2, *tohdr;
 
 	if(strchr(to, '@') == NULL) {
 		errno = 0;
@@ -268,7 +268,8 @@
 				reply);
 		myfree(reply);
 		write_rset(sockfd);
-		checkwait_smtpreply(sockfd, MLMMJ_RSET);
+		reply2 = checkwait_smtpreply(sockfd, MLMMJ_RSET);
+		if (reply2 != NULL) myfree(reply2);
 		return MLMMJ_FROM;
 	}
 	retval = write_rcpt_to(sockfd, to);
@@ -280,7 +281,8 @@
 	reply = checkwait_smtpreply(sockfd, MLMMJ_RCPTTO);
 	if(reply) {
 		write_rset(sockfd);
-		checkwait_smtpreply(sockfd, MLMMJ_RSET);
+		reply2 = checkwait_smtpreply(sockfd, MLMMJ_RSET);
+		if (reply2 != NULL) myfree(reply2);
 		if(mlmmjbounce && ((reply[0] == '4') || (reply[0] == '5'))
 				&& (reply[1] == '5')) {
 			myfree(reply);
@@ -304,7 +306,8 @@
 		log_error(LOG_ARGS, "Error with DATA. Reply = [%s]", reply);
 		myfree(reply);
 		write_rset(sockfd);
-		checkwait_smtpreply(sockfd, MLMMJ_RSET);
+		reply2 = checkwait_smtpreply(sockfd, MLMMJ_RSET);
+		if (reply2 != NULL) myfree(reply2);
 		return MLMMJ_DATA;
 	}
 
@@ -362,7 +365,8 @@
 				"avail. Reply = [%s]", reply);
 		myfree(reply);
 		write_rset(sockfd);
-		checkwait_smtpreply(sockfd, MLMMJ_RSET);
+		reply2 = checkwait_smtpreply(sockfd, MLMMJ_RSET);
+		if (reply2 != NULL) myfree(reply2);
 		return MLMMJ_DOT;
 	}
 
@@ -428,7 +432,7 @@
 		   size_t bodylen, const char *verpextra)
 {
 	int retval, i;
-	char *reply;
+	char *reply, *reply2;
 
 	retval = write_mail_from(sockfd, from, verpextra);
 	if(retval) {
@@ -441,7 +445,8 @@
 				reply);
 		myfree(reply);
 		write_rset(sockfd);
-		checkwait_smtpreply(sockfd, MLMMJ_RSET);
+		reply2 = checkwait_smtpreply(sockfd, MLMMJ_RSET);
+		if (reply2 != NULL) myfree(reply2);
 		return MLMMJ_FROM;
 	}
 	for(i = 0; i < addrs->count; i++) {
@@ -482,7 +487,8 @@
 		log_error(LOG_ARGS, "Error with DATA. Reply = [%s]", reply);
 		myfree(reply);
 		write_rset(sockfd);
-		checkwait_smtpreply(sockfd, MLMMJ_RSET);
+		reply2 = checkwait_smtpreply(sockfd, MLMMJ_RSET);
+		if (reply2 != NULL) myfree(reply2);
 		return MLMMJ_DATA;
 	}
 
@@ -519,7 +525,8 @@
 				"avail. Reply = [%s]", reply);
 		myfree(reply);
 		write_rset(sockfd);
-		checkwait_smtpreply(sockfd, MLMMJ_RSET);
+		reply2 = checkwait_smtpreply(sockfd, MLMMJ_RSET);
+		if (reply2 != NULL) myfree(reply2);
 		return MLMMJ_DOT;
 	}