From: Markus Fischer Date: Tue, 14 May 2002 14:17:04 +0000 (+0000) Subject: - MFH fix for Cc: crash X-Git-Tag: php-4.2.3RC1~137 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=974913cf23ed279faa8e78e8b909c5b0f4a2c84d;p=php - MFH fix for Cc: crash --- diff --git a/win32/sendmail.c b/win32/sendmail.c index d215c5472e..4ccebfe12d 100644 --- a/win32/sendmail.c +++ b/win32/sendmail.c @@ -69,26 +69,27 @@ char *get_header(char *h, char *headers); /* Error messages */ static char *ErrorMessages[] = { - {"Success"}, - {"Bad arguments from form"}, + {"Success"}, /* 0 */ + {"Bad arguments from form"}, /* 1 */ {"Unable to open temporary mailfile for read"}, {"Failed to Start Sockets"}, {"Failed to Resolve Host"}, - {"Failed to obtain socket handle"}, - {"Failed to Connect"}, + {"Failed to obtain socket handle"}, /* 5 */ + {"Failed to connect to mailserver, verify your \"SMTP\" setting in php.ini"}, {"Failed to Send"}, {"Failed to Receive"}, {"Server Error"}, - {"Failed to resolve the host IP name"}, + {"Failed to resolve the host IP name"}, /* 10 */ {"Out of memory"}, {"Unknown error"}, {"Bad Message Contents"}, {"Bad Message Subject"}, - {"Bad Message destination"}, + {"Bad Message destination"}, /* 15 */ {"Bad Message Return Path"}, {"Bad Mail Host"}, {"Bad Message File"}, - {"PHP Internal error: php.ini sendmail from variable not set!"} + {"\"sendmail_from\" NOT set in php.ini"}, + {"Mailserver rejected our \"sendmail_from\" setting"} /* 20 */ }; @@ -127,7 +128,8 @@ int TSendMail(char *host, int *error, if (INI_STR("sendmail_from")){ RPath = estrdup(INI_STR("sendmail_from")); } else { - return 19; + *error = W32_SM_SENDMAIL_FROM_NOT_SET; + return FAILURE; } /* attempt to connect with mail host */ @@ -179,10 +181,11 @@ void TSMClose() char *GetSMErrorText(int index) { - if ((index > MAX_ERROR_INDEX) || (index < MIN_ERROR_INDEX)) - return (ErrorMessages[UNKNOWN_ERROR]); - else + if (MIN_ERROR_INDEX <= index && index < MAX_ERROR_INDEX) { return (ErrorMessages[index]); + } else { + return (ErrorMessages[UNKNOWN_ERROR]); + } } @@ -235,7 +238,7 @@ int SendText(char *RPath, char *Subject, char *mailTo, char *data, char *headers if ((res = Post(Buffer)) != SUCCESS) return (res); if ((res = Ack()) != SUCCESS) - return (res); + return W32_SM_SENDMAIL_FROM_MALFORMED; tempMailTo = estrdup(mailTo); @@ -255,8 +258,11 @@ int SendText(char *RPath, char *Subject, char *mailTo, char *data, char *headers /* Send mail to all Cc rcpt's */ efree(tempMailTo); if (headers && (pos1 = strstr(headers, "Cc:"))) { - pos2 = strstr(pos1, "\r\n"); - tempMailTo = estrndup(pos1, pos2-pos1); + if (NULL == (pos2 = strstr(pos1, "\r\n"))) { + tempMailTo = estrndup(pos1, strlen(pos1)); + } else { + tempMailTo = estrndup(pos1, pos2-pos1); + } token = strtok(tempMailTo, ","); while(token != NULL) diff --git a/win32/sendmail.h b/win32/sendmail.h index 4815fe60b1..82155b41d0 100644 --- a/win32/sendmail.h +++ b/win32/sendmail.h @@ -4,29 +4,31 @@ #define HOST_NAME_LEN 256 #define MAX_APPNAME_LENGHT 100 -#define MAX_ERROR_INDEX 17 -#define MIN_ERROR_INDEX 0 -#define MAIL_BUFFER_SIZE (1024*4) /* 4k buffer */ +#define MAIL_BUFFER_SIZE (1024*4) /* 4k buffer */ /* Return values */ -#define SUCCESS 0 -#define FAILED_TO_PARSE_ARGUMENTS 1 -#define FAILED_TO_OPEN_MAILFILE 2 -#define FAILED_TO_START_SOCKETS 3 -#define FAILED_TO_RESOLVE_HOST 4 -#define FAILED_TO_OBTAIN_SOCKET_HANDLE 5 -#define FAILED_TO_CONNECT 6 -#define FAILED_TO_SEND 7 -#define FAILED_TO_RECEIVE 8 -#define SMTP_SERVER_ERROR 9 -#define FAILED_TO_GET_HOSTNAME 10 -#define OUT_OF_MEMORY 11 -#define UNKNOWN_ERROR 12 -#define BAD_MSG_CONTENTS 13 -#define BAD_MSG_SUBJECT 14 -#define BAD_MSG_DESTINATION 15 -#define BAD_MSG_RPATH 16 -#define BAD_MAIL_HOST 17 -#define BAD_MSG_FILE 18 +#define MIN_ERROR_INDEX 0 /* Always 0 like SUCCESS */ +#define SUCCESS 0 +#define FAILED_TO_PARSE_ARGUMENTS 1 +#define FAILED_TO_OPEN_MAILFILE 2 +#define FAILED_TO_START_SOCKETS 3 +#define FAILED_TO_RESOLVE_HOST 4 +#define FAILED_TO_OBTAIN_SOCKET_HANDLE 5 +#define FAILED_TO_CONNECT 6 +#define FAILED_TO_SEND 7 +#define FAILED_TO_RECEIVE 8 +#define SMTP_SERVER_ERROR 9 +#define FAILED_TO_GET_HOSTNAME 10 +#define OUT_OF_MEMORY 11 +#define UNKNOWN_ERROR 12 +#define BAD_MSG_CONTENTS 13 +#define BAD_MSG_SUBJECT 14 +#define BAD_MSG_DESTINATION 15 +#define BAD_MSG_RPATH 16 +#define BAD_MAIL_HOST 17 +#define BAD_MSG_FILE 18 +#define W32_SM_SENDMAIL_FROM_NOT_SET 19 +#define W32_SM_SENDMAIL_FROM_MALFORMED 20 +#define MAX_ERROR_INDEX 21 /* Always last error message + 1 */ int TSendMail(char *smtpaddr, int *returnerror,