cvs: php4 /win32 sendmail.c

From: Date: Sun, 02 Jun 2002 22:10:25 +0000
Subject: cvs: php4 /win32 sendmail.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-12203@lists.php.net to get a copy of this message
mfischer Sun Jun 2 18:10:25 2002 EDT Modified files: /php4/win32 sendmail.c Log: - Try to fix most of the buffer overflows and dynamically allocate memory where applicable. Index: php4/win32/sendmail.c diff -u php4/win32/sendmail.c:1.35 php4/win32/sendmail.c:1.36 --- php4/win32/sendmail.c:1.35 Sun Jun 2 13:13:48 2002 +++ php4/win32/sendmail.c Sun Jun 2 18:10:25 2002 @@ -17,7 +17,7 @@ * */ -/* $Id: sendmail.c,v 1.35 2002/06/02 17:13:48 mfischer Exp $ */ +/* $Id: sendmail.c,v 1.36 2002/06/02 22:10:25 mfischer Exp $ */ #include "php.h" /*php specific */ #include <stdio.h> @@ -319,7 +319,7 @@ return (res); } - sprintf(Buffer, "MAIL FROM:<%s>\r\n", RPath); + snprintf(Buffer, MAIL_BUFFER_SIZE, "MAIL FROM:<%s>\r\n", RPath); if ((res = Post(Buffer)) != SUCCESS) return (res); if ((res = Ack(&server_response)) != SUCCESS) { @@ -333,7 +333,7 @@ token = strtok(tempMailTo, ","); while(token != NULL) { - sprintf(Buffer, "RCPT TO:<%s>\r\n", token); + snprintf(Buffer, MAIL_BUFFER_SIZE, "RCPT TO:<%s>\r\n", token); if ((res = Post(Buffer)) != SUCCESS) return (res); if ((res = Ack(&server_response)) != SUCCESS) { @@ -496,7 +496,13 @@ return (SUCCESS); } - +int addToHeader(char **header_buffer, const char *specifier, char *string) { + if (NULL == (*header_buffer = erealloc(*header_buffer, strlen(*header_buffer) + strlen(specifier) + strlen(string) + 1))) { + return 0; + } + sprintf(*header_buffer + strlen(*header_buffer), specifier, string); + return 1; +} /********************************************************************* // Name: PostHeader @@ -520,7 +526,7 @@ struct tm *tm = localtime(&tNow); int zoneh = abs(_timezone); int zonem, res; - char *p; + char *header_buffer; char *headers_lc = NULL; size_t i; @@ -532,13 +538,16 @@ headers_lc[i] = tolower(headers_lc[i]); } } - - p = Buffer; + + if (NULL == (header_buffer = ecalloc(1, MAIL_BUFFER_SIZE))) { + efree(headers_lc); + return OUT_OF_MEMORY; + } zoneh /= (60 * 60); zonem = (abs(_timezone) / 60) - (zoneh * 60); if(!xheaders || !strstr(headers_lc, "date:")){ - p += sprintf(p, "Date: %s, %02d %s %04d %02d:%02d:%02d %s%02d%02d\r\n", + sprintf(header_buffer, "Date: %s, %02d %s %04d %02d:%02d:%02d %s%02d%02d\r\n", days[tm->tm_wday], tm->tm_mday, months[tm->tm_mon], @@ -551,24 +560,36 @@ zonem); } - if(!headers_lc || !strstr(headers_lc, "from:")){ - p += sprintf(p, "From: %s\r\n", RPath); - } - p += sprintf(p, "Subject: %s\r\n", Subject); - p += sprintf(p, "To: %s\r\n", mailTo); + if (!headers_lc || !strstr(headers_lc, "from:")) { + if (!addToHeader(&header_buffer, "From: %s\r\n", RPath)) { + goto PostHeader_outofmem; + } + } + if (!addToHeader(&header_buffer, "Subject: %s\r\n", Subject)) { + goto PostHeader_outofmem; + } + if (!addToHeader(&header_buffer, "To: %s\r\n", mailTo)) { + goto PostHeader_outofmem; + } if (mailCc && *mailCc) { - p += sprintf(p, "Cc: %s\r\n", mailCc); + if (!addToHeader(&header_buffer, "Cc: %s\r\n", mailCc)) { + goto PostHeader_outofmem; + } } if(xheaders){ - p += sprintf(p, "%s\r\n", xheaders); - } - - if ((res = Post(Buffer)) != SUCCESS) { + if (!addToHeader(&header_buffer, "%s", xheaders)) { + goto PostHeader_outofmem; + } + } + + if ((res = Post(header_buffer)) != SUCCESS) { + efree(header_buffer); if (headers_lc) { efree(headers_lc); } return (res); - } + } + efree(header_buffer); if ((res = Post("\r\n")) != SUCCESS) { if (headers_lc) { @@ -577,7 +598,11 @@ return (res); } - return (SUCCESS); + return (SUCCESS); + +PostHeader_outofmem: + efree(headers_lc); + return OUT_OF_MEMORY; }

« previous php.cvs (#12203) next »